f78ea97ef0613fcf64b23fbc53f2d6aba8e3b657
[mono.git] / mcs / mcs / ChangeLog
1 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
2
3         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
4         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5         bug #354970.
6
7 2008-01-22  Marek Safar  <marek.safar@gmail.com>
8
9         A fix for bug #355148
10         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
11         
12 2008-01-22  Miguel de Icaza  <miguel@novell.com>
13
14         * expression.cs (CreateExpressionTree): Add support for or and
15         logical or, and indent following the coding conventions.
16
17         * typemanager.cs (LinqExpression): renamed from
18         ExpressionTreeManager, for a shorter name.
19
20         Use TypeManager.CoreLookupType to lookup types from our core
21         assemblies and turn those into "Type" variables.
22
23         Consumers that previously used "Namespace" and "Type" from this
24         class should instead use the TypeExpression which is a type that
25         is fully resolved (without involving the regular C# resolution
26         rules). 
27
28         This typically looks like this:
29
30         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
31         new MemberAccess (texpr, name, type_arguments, loc)
32
33         This avoids the problem in: #355178
34
35 2008-01-21  Marek Safar  <marek.safar@gmail.com>
36
37         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
38         feature in parser only as we do in other cases.
39         
40 2008-01-21  Marek Safar  <marek.safar@gmail.com>
41
42         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
43         typemanager.cs: A refactoring of params arguments to reuse existing
44         expressions (params -> array initializer) to emit params argument instead
45         of specialized handling.
46         It was required by expression tree implementation and it has other benefits
47         as well, we now apply same optimization for params arguments as we do for
48         array initializers.
49         
50 2008-01-18  Marek Safar  <marek.safar@gmail.com>
51
52         A fix for bug #353526
53         * generic.cs: A type inference of params arguments may not required any
54         temporary array creation.
55         
56 2008-01-18  Marek Safar  <marek.safar@gmail.com>
57
58         A fix for bug #353534
59         * generic.cs, ecore.cs, expression.cs: A method group type inference is
60         supported for delegates only.
61         
62 2008-01-18  Marek Safar  <marek.safar@gmail.com>
63
64         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
65         type for more than 1 candidates.
66         
67 2008-01-18  Marek Safar  <marek.safar@gmail.com>
68
69         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
70         expressions.
71         
72 2008-01-16  Marek Safar  <marek.safar@gmail.com>
73
74         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
75         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
76         operator) expressions. 
77                 
78 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
79
80         * statement.cs: Avoid declaring an IL variable for this_variable since it is
81         not accessed from the generated IL.
82
83 2008-01-14  Marek Safar  <marek.safar@gmail.com>
84
85         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
86         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
87         statement.cs: The first expression tree implementation drop, mostly
88         infrastructure work.
89
90 2008-01-14  Marek Safar  <marek.safar@gmail.com>
91
92         * ecore.cs (IsNestedChild): Refactored.
93
94 2008-01-11  Marek Safar  <marek.safar@gmail.com>
95
96         * lambda.cs: Don't use a cast on unknown expression statement.
97
98 2008-01-10  Geoff Norton  <gnorton@novell.com>
99
100         * cs-tokenizer.cs: One more token to distinguish between method and lambda
101         arguments
102
103 2008-01-09  Marek Safar  <marek.safar@gmail.com>
104
105         * doc.cs: Report better /doc crash details.
106         
107 2008-01-09  Marek Safar  <marek.safar@gmail.com>
108
109         A fix for bug #352536
110         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
111
112 2008-01-08  Marek Safar  <marek.safar@gmail.com>
113
114         A fix for bug #352287
115         * ecore.cs, expression.cs: Do `this' access checking in all member access
116         expressions.
117         
118 2008-01-08  Marek Safar  <marek.safar@gmail.com>
119
120         * rootcontext.cs, driver.cs: Switch to linq mode by default.
121         
122         * report.cs: Reset message stacks.
123         
124 2008-01-08  Marek Safar  <marek.safar@gmail.com>
125
126         * generic.cs (InferInPhases): Correctly calculate params position.
127         
128 2008-01-08  Marek Safar  <marek.safar@gmail.com>
129
130         * cs-tokenizer.cs: No need to parse full string when parsing lambda
131         arguments.
132
133 2008-01-07  Marek Safar  <marek.safar@gmail.com>
134
135         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
136         
137         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
138         
139         * driver.cs: Updated --help option.
140         
141 2008-01-07  Marek Safar  <marek.safar@gmail.com>
142
143         * generic.cs (InferParamsTypeArguments): Removed.
144         (InferInPhases): Add params type inference.
145         (LowerBoundInference): Fixed scoring mechanism.
146         
147         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
148         
149 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
150
151         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
152         byte array for unsigned "baked" assemblies.
153
154 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
155
156         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
157         array for assemblies that are not strongnamed.
158
159 2008-01-04  Marek Safar  <marek.safar@gmail.com>
160
161         A fix for bug #351481
162         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
163         declaring type for nested generic types.
164         
165 2008-01-04  Marek Safar  <marek.safar@gmail.com>
166
167         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
168         instead of ToString.
169         
170 2008-01-03  Marek Safar  <marek.safar@gmail.com>
171
172         A fix for bug #351047
173         * expression.cs (Binary.ResolveOperator): Allow equality operators between
174         null and structs only when equality and inequality operators are defined
175         either as an user-operators or predefined operators.
176         
177 2008-01-03  Marek Safar  <marek.safar@gmail.com>
178
179         A fix for bug #351047
180         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
181         
182 2008-01-03  Marek Safar  <marek.safar@gmail.com>
183
184         A fix for bug #351257
185         * cs-tokenizer.cs: Advance line number for '\r' correctly.
186         
187 2008-01-03  Marek Safar  <marek.safar@gmail.com>
188
189         A fix for bug #351157
190         * class.cs (Using): Fixed yet another broken cloning.
191         
192         (Block): Put back more sensible default value for statements.
193         
194 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
195
196         * codegen.cs: Allow AssemblyVersion with only major version component.
197         Fixes bug #351055.
198
199 2007-12-29  Marek Safar  <marek.safar@gmail.com>
200
201         A fix for bug #324654
202         * class.cs: Use FullName property as member name.
203
204 2007-12-28  Marek Safar  <marek.safar@gmail.com>
205
206         A fix for bug #342117
207         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
208         constructor constraint.
209
210 2007-12-28  Marek Safar  <marek.safar@gmail.com>
211
212         A fix for bug #338273
213         * class.cs (ProbertyBase): Access modifier checks are required for overrides
214         only.
215
216 2007-12-28  Marek Safar  <marek.safar@gmail.com>
217
218         A fix for bug #350839
219         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
220
221 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
222
223         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
224         GHOP:
225         
226         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
227
228         * statement.cs: Changed some Hashtables to use HybridDictionaries
229         instead. It was observed that some HashTables only contained a few
230         items in the vast majority of cases. Since HybridDictionary is
231         more efficient on small sets (<10 elements), "known_variables"
232         from class ExplicitBlock as well as "labels" and "constants " from
233         class Block were changed to HybridDictionaries. 
234
235         Atsai results: (56216kb->54987kb)
236
237         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
238
239
240 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
241
242         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
243         GHOP:
244         
245         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
246         
247         * expression.cs: foreach loop to for loop, saved on allocation of
248         enumerator (59333kb->59141kb)
249
250         * statement.cs. Changed foreach loops to for loops, saved on
251         allocation of enumerator (59141kb->59006kb)
252
253         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
254         when constructed with no specified capacity. This was causing a
255         few ArrayLists to allocate more memory than they would potentially
256         need in the Block class and MemberCache class. Setting the
257         ArrayLists to construct with a capacity of 1 saves some
258         memory. (56216kb->55585kb)
259
260 2007-12-27  Marek Safar  <marek.safar@gmail.com>
261
262         A fix for bug #347189 (2nd issue)
263         * expression.cs (MemberAccess): Nested type can be found in base non-generic
264         type.
265
266 2007-12-27  Miguel de Icaza  <miguel@novell.com>
267         
268         * report.cs: Do not use colors if stdout and stderr are not a
269         terminal.
270
271 2007-12-27  Marek Safar  <marek.safar@gmail.com>
272
273         A fix for bug #346998
274         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
275         overloads.
276
277 2007-12-27  Marek Safar  <marek.safar@gmail.com>
278
279         A fix for bug #343465
280         * class.cs: Explicit method name for nested types uses dots only.
281
282 2007-12-27  Marek Safar  <marek.safar@gmail.com>
283
284         A fix for bug #343707
285         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
286
287 2007-12-27  Marek Safar  <marek.safar@gmail.com>
288
289         * ecore.cs: Report type inference errors only when arguments count matches
290         parameter count.
291         
292         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
293         
294         * expression.cs, report.cs: New warning.
295         
296         * typemanager.cs: Catch anonymous method type too.
297
298 2007-12-23  Marek Safar  <marek.safar@gmail.com>
299
300         A fix for bug #346379
301         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
302
303 2007-12-23  Marek Safar  <marek.safar@gmail.com>
304
305         A fix for bug #347359
306         * expression.cs (Invocation): Don't resolve already resolved expression.
307
308 2007-12-23  Marek Safar  <marek.safar@gmail.com>
309
310         A fix for bug #347189
311         * class.cs (FixedField): Use non-dependent code only in the define phase.
312
313 2007-12-23  Marek Safar  <marek.safar@gmail.com>
314
315         A fix for bug #348076
316         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
317
318 2007-12-22  Marek Safar  <marek.safar@gmail.com>
319
320         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
321         discovered extension methods.
322
323 2007-12-22  Marek Safar  <marek.safar@gmail.com>
324
325         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
326         method.
327
328 2007-12-21  Miguel de Icaza  <miguel@novell.com>
329
330         * report.cs (ErrorMessage): Add support for using colors on
331         terminals that support it. 
332
333 2007-12-21  Marek Safar  <marek.safar@gmail.com>
334
335         * ecore.cs: Use information about expanded params for error reporting.
336
337 2007-12-21  Marek Safar  <marek.safar@gmail.com>
338
339         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
340         and logic for params overloads.
341         
342 2007-12-15  Miguel de Icaza  <miguel@novell.com>
343
344         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
345         as this is also created from the parser.  Fixes #349034
346
347 2007-12-12  Miguel de Icaza  <miguel@novell.com>
348
349         * statement.cs (Throw.CloneTo): it is valid to have empty
350         expressions for throw. 
351
352 2007-12-03  Marek Safar  <marek.safar@gmail.com>
353
354         * cs-parser.jay: Set delegate constraint parsing region correctly.
355
356 2007-12-03  Marek Safar  <marek.safar@gmail.com>
357
358         A fix for bug #345467
359         * typemanager.cs (IsEqual): Compare generic parameters position only.
360         
361 2007-11-28  Marek Safar  <marek.safar@gmail.com>
362
363         * expression.cs (BaseAccess): Type arguments can be null.
364
365 2007-11-27  Raja R Harinath  <harinath@gmail.com>
366
367         * statement.cs (Block.Resolve): Ensure flow-branching tree is
368         consistent even when an error has occured.
369         (Switch.Resolve): Likewise.
370
371 2007-11-22  Marek Safar  <marek.safar@gmail.com>
372
373         A fix for bug #334505
374         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
375         overrides.
376         
377 2007-11-22  Marek Safar  <marek.safar@gmail.com>
378
379         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
380         refactorings required to resolve extension methods correctly when mixing
381         generics and non-generics members.
382         
383 2007-11-20  Marek Safar  <marek.safar@gmail.com>
384
385         A fix for bug #342584
386         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
387         conversion.
388         
389 2007-11-19  Marek Safar  <marek.safar@gmail.com>
390
391         A fix for bug #342512
392         * delegate.cs: Use delegate argument expression when is available. Don't
393         emit virtual call when class is sealed.
394         
395 2007-11-16  Marek Safar  <marek.safar@gmail.com>
396
397         A fix for bug #325423
398         * assign.cs (FieldInitializer): Use resolved expression for emit.
399         
400         * class.cs: Print less confusing error message.
401         
402 2007-11-16  Marek Safar  <marek.safar@gmail.com>
403
404         * cs-tokenizer.cs: Removed GMCS ifdefs.
405         
406         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
407         mcs.
408         
409         * cs-parser.jay: Disabled nullable check.
410         
411         * generic-mcs: Copied more generic stuff.
412                 
413 2007-11-16  Marek Safar  <marek.safar@gmail.com>
414
415         * gcs-parser.jay: Merged to cs-parser.jay.
416         
417         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
418         * *.csproj, *.sources: Updated to use only jay parser file.
419
420 2007-11-16  Marek Safar  <marek.safar@gmail.com>
421
422         * gcs-parser.jay: Added nullable and default expression feature checks.
423         
424 2007-11-16  Marek Safar  <marek.safar@gmail.com>
425
426         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
427         it fixes many TODOs and hidden bugs.
428         
429         * expression: Removed duplicate error check.
430
431 2007-11-15  Marek Safar  <marek.safar@gmail.com>
432
433         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
434         implicitly type local variable only when it is used in a declaration.
435
436 2007-11-15  Marek Safar  <marek.safar@gmail.com>
437
438         * attribute.cs: Use CS0612 for empty strings.
439
440 2007-11-14  Marek Safar  <marek.safar@gmail.com>
441
442         * lambda.cs, statement.cs: Contextual return may act as a statement.
443
444 2007-11-14  Marek Safar  <marek.safar@gmail.com>
445
446         A fix for a regression cause by #324222
447         * class.cs: Don't report unused even when it implements an interface.
448         
449 2007-11-13  Marek Safar  <marek.safar@gmail.com>
450
451         A fix for bug #341205
452         * ecore.cs, expression.cs: Method group expression cannot do static
453         method access with an instance reference check before overloading takes
454         a place.
455         
456 2007-11-13  Marek Safar  <marek.safar@gmail.com>
457
458         A fix for bug #325359
459         * class.cs: Use predictable name for automatically generated property.
460         
461 2007-11-12  Marek Safar  <marek.safar@gmail.com>
462
463         A fix for bug #324996
464         * expression.cs (Is): Handle case where D is nullable and T is not
465         correctly.
466         
467         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
468         
469 2007-11-12  Marek Safar  <marek.safar@gmail.com>
470
471         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
472         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
473         Flush small error reporting changes.
474         
475 2007-11-09  Marek Safar  <marek.safar@gmail.com>
476
477         A fix for bug #324996
478         * expression.cs: Rewrote Is expression implementation to work with
479         generics, nullable types, anonymous method. A const result expression 
480         uses existing infrastructure instead of custom not fully-featured one.
481         
482 2007-11-08  Marek Safar  <marek.safar@gmail.com>
483
484         A fix for bug #340202
485         * class.cs: Consider generics for volatile field.
486
487 2007-11-08  Marek Safar  <marek.safar@gmail.com>
488
489         A fix for bug #335594
490         * expression.cs: Use conversion rules when handling string addition.
491         
492 2007-11-07  Marek Safar  <marek.safar@gmail.com>
493
494         A fix for bug #336651
495         * expression.cs: Fixed a crash when probing is on.
496         
497 2007-11-07  Marek Safar  <marek.safar@gmail.com>
498
499         A fix for bug #324242
500         * covert.cs: Added a conversion from any nullable-type with an 
501         underlying enum-type to the type System.Enum.
502         
503 2007-11-07  Marek Safar  <marek.safar@gmail.com>
504
505         A fix for bug #324222
506         * class.cs: Report all non-used event fields.
507         
508 2007-11-07  Marek Safar  <marek.safar@gmail.com>
509
510         A fix for bug #325161
511         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
512         qualifier for generic types.
513         
514 2007-11-07  Marek Safar  <marek.safar@gmail.com>
515
516         A fix for bug #322971
517         * expression.cs, ecore.cs: Added intermediate result value check for
518         indexers. 
519         
520 2007-11-07  Marek Safar  <marek.safar@gmail.com>
521
522         A fix for bug #324754
523         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
524         when it was requested.
525
526 2007-11-07  Marek Safar  <marek.safar@gmail.com>
527
528         A fix for bug #325101
529         * expression.cs: Do type not value comparison for `is' expression.
530
531 2007-11-07  Marek Safar  <marek.safar@gmail.com>
532
533         A fix for bug #320236
534         * convert.cs: Don't apply user conversion on underlying target type.
535
536 2007-11-06  Marek Safar  <marek.safar@gmail.com>
537
538         * expression.cs: Don't use unresolved expression for error reporting.
539  
540 2007-11-06  Marek Safar  <marek.safar@gmail.com>
541
542         A fix for bugs #337712, #324490
543         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
544         overloading resolution too.
545         
546         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
547         the process consistent and more robust.
548         
549         * expression.cs, linq.cs, report.cs: Update.
550
551 2007-11-02  Marek Safar  <marek.safar@gmail.com>
552
553         A fix for bug #332909
554         * attribute.cs: Resolve attributes in correct context using error
555         handling procedure.
556         
557         * rootcontext.cs: Define Obsolete attribute members as core members.
558         
559 2007-11-02  Marek Safar  <marek.safar@gmail.com>
560
561         * statement.cs: Removed unused methods.
562         
563 2007-10-31  Wade Berrier  <wberrier@novell.com>
564
565         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
566         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
567         during 'make dist')
568
569 2007-10-31  Marek Safar  <marek.safar@gmail.com>
570
571         A fix for bug #338102
572         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
573         methods registered as non-generics.
574         
575 2007-10-31  Marek Safar  <marek.safar@gmail.com>
576
577         A fix for bugs #337712, #324490
578         * delegate.cs: Delegate covariance and contravariance is not allowed for
579         value types.
580         
581 2007-10-31  Marek Safar  <marek.safar@gmail.com>
582
583         A fix for bug #337719 
584         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
585         `from' keyword.
586         
587 2007-10-30  Marek Safar  <marek.safar@gmail.com>
588  
589         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
590
591 2007-10-29  Marek Safar  <marek.safar@gmail.com>
592  
593         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
594         query expressions.
595
596 2007-10-29  Raja R Harinath  <rharinath@novell.com>
597
598         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
599
600 2007-10-29  Marek Safar  <marek.safar@gmail.com>
601  
602         A fix for bug #334652
603         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
604         extension methods when we have not found the best candidate in normal
605         container.
606
607 2007-10-27  Marek Safar  <marek.safar@gmail.com>
608
609         * AssemblyInfo.cs: Keep up-to-date.
610
611 2007-10-27  Marek Safar  <marek.safar@gmail.com>
612
613         * Makefile: Fixed generics compiler name.
614         
615 2007-10-27  Marek Safar  <marek.safar@gmail.com>
616
617         * lambda.test: removed, lambda parsing is done differently.
618         
619         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
620
621 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
622
623         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
624
625 2007-10-27  Marek Safar  <marek.safar@gmail.com>
626
627         * Makefile, *.sources : All C# compilers are in mcs folder.
628         
629         * *.cs: Use existing 2_1 define for smcs.
630
631 2007-10-26  Marek Safar  <marek.safar@gmail.com>
632
633         A fix for bug #335847
634         * assign.cs, expression.cs: Couple of changes to avoid creating a
635         temporary variable for each object initializer assignment statement. It
636         simplifies struct initialization too, otherwise two temporary variables
637         would be required.
638         Implemented optimization of redundant default element initializers.
639         
640 2007-10-25  Marek Safar  <marek.safar@gmail.com>
641
642         A fix for bug #336766
643         * expression.cs (Class.CheckBase): Use generic name when method is
644         generic.
645         
646 2007-10-25  Marek Safar  <marek.safar@gmail.com>
647
648         A fix for bug #334737
649         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
650         variable and not variable argument for prepared copies.
651
652 2007-10-24  Marek Safar  <marek.safar@gmail.com>
653
654         A fix for bug #325110
655         * class.cs, expression.cs, attribute.cs: Use open generic method when
656         checking conditional attribute.
657         
658 2007-10-24  Marek Safar  <marek.safar@gmail.com>
659
660         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
661         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
662         FeatureIsNotAvailable.
663
664 2007-10-24  Marek Safar  <marek.safar@gmail.com>
665
666         ** C# 3.0 Partial methods
667         
668         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
669         methods support. Because of member cache issue with generics only
670         non-generics partial methods are fully supported.
671         
672 2007-10-23  Marek Safar  <marek.safar@gmail.com>
673         
674         * class.cs, decl.cs: Rewrote member overloads check to cope with 
675         generics and to use member cache for member checking. It also improves
676         performance and fixes remaining overloads issues.
677         
678 2007-10-20  Marek Safar  <marek.safar@gmail.com>
679         
680         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
681         roottypes.cs, typemanager.cs:
682                 
683         A member cache creation logic changed to add members immediately and
684         not rely on fallback. The member cache is now only prefered way
685         how to access and find type declaration members. It saves 5 MB of memory
686         during MWF compilation and makes code ready for more optimizations and
687         clean-ups, it's also a pre-requirement for partial methods.
688         
689 2007-10-18  Raja R Harinath  <harinath@gmail.com>
690
691         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
692         handling for generic parameters.
693
694 2007-10-15  Marek Safar  <marek.safar@gmail.com>
695         
696         * class.cs (FixedField): Removed redundant volatile check.
697         
698 2007-10-15  Marek Safar  <marek.safar@gmail.com>
699         
700         * class.cs, decl.cs: Fixed overload members verification to do only one
701         check per possible collision.
702         
703 2007-10-13  Marek Safar  <marek.safar@gmail.com>
704         
705         A fix for bug #325478
706         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
707         and create only one disposable flags container.
708         
709 2007-10-12  Marek Safar  <marek.safar@gmail.com>
710         
711         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
712         * statement.cs (Fixed): Fixed variables cloning.
713         
714 2007-10-12  Marek Safar  <marek.safar@gmail.com>
715         
716         A fix for bug #333342
717         * class.cs (EventField): Don't mark value type event as synchronized. 
718         
719 2007-10-12  Marek Safar  <marek.safar@gmail.com>
720         
721         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
722         inference to identify best candidate method correctly.
723         (ProperyExpr): A range variable is read only and cannot be modified.
724         
725 2007-10-11  Marek Safar  <marek.safar@gmail.com>
726         
727         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
728         logic to identify best candidate method correctly.
729         
730 2007-10-11  Marek Safar  <marek.safar@gmail.com>
731         
732         * location.cs (Equals, GetHashCode): Removed.
733         
734 2007-10-11  Marek Safar  <marek.safar@gmail.com>
735         
736         * report.cs: Implemented message recorder. It is used mainly for lambda
737         expressions to capture otherwise swallowed error messages.
738         
739         * anonymous.cs, lambda.cs.cs: Do full parameters check.
740
741         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
742         and not at the top.
743         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
744                 
745         * expression.cs (MemberAccess): Always report lookup failure.
746         
747         * location.cs: Implemented Equals, GetHashCode.
748         
749         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
750         
751 2007-10-10  Jb Evain  <jbevain@novell.com>
752
753         * codegen.cs: re-enable assembly version check.
754
755 2007-10-09  Marek Safar  <marek.safar@gmail.com>
756         
757         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
758         checks.
759         
760         * namespace.cs (UsingAlias): Do correct version check.
761         
762 2007-10-08  Marek Safar  <marek.safar@gmail.com>
763         
764         * expresison.cs, ecore.cs: Issue extension method error message when
765         appropriate.
766         
767         * rootcontext.cs: Added ISO_2 compiler mode option.
768
769 2007-10-08  Marek Safar  <marek.safar@gmail.com>
770         
771         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
772          message.
773         
774 2007-10-08  Marek Safar  <marek.safar@gmail.com>
775         
776         * attribute.cs (GetString, GetBoolean): Work with both literal and
777         constant.
778         
779         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
780         Moved method overload specific methods to MethodGroupExpr.
781         
782         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
783         it should be less memory consuming.
784         
785 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
786
787         * codegen.cs: remove the assembly version check until the buildbot is
788         fixed.
789
790 2007-10-07  Jb Evain  <jbevain@novell.com>
791
792         * attribute.cs (Attribute.GetString): if the value
793         expression is a StringConstant, return its string value.
794
795 2007-10-07  Jb Evain  <jbevain@novell.com>
796
797         * typemanager.cs: add `assembly_version_attribute_type`.
798         * codegen.cs: on attribute emission, check that the
799         AssemblyVersionAttribute doesn't overflow.
800
801 2007-10-05  Marek Safar  <marek.safar@gmail.com>
802         
803         A fix for bug #324677
804         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
805         parent container of a scope container with currently resolved one. 
806         
807 2007-10-05  Marek Safar  <marek.safar@gmail.com>
808         
809         A fix for bug #325534
810         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
811         only.
812         
813 2007-10-05  Marek Safar  <marek.safar@gmail.com>
814         
815         A fix for bug #327504
816         * class.cs (Operator.Define): Refactored implicit and explicit user
817         operator conversion rules.
818         
819 2007-10-05  Marek Safar  <marek.safar@gmail.com>
820         
821         A fix for bug #327520
822         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
823         
824 2007-10-04  Marek Safar  <marek.safar@gmail.com>
825         
826         A fix for bug #328022
827         * class.cs (MethodData.Define): Use correct method to check whether
828         a method implementents an accessor.
829         
830 2007-10-04  Marek Safar  <marek.safar@gmail.com>
831         
832         A fix for bug #330069
833         * statement.cs (Fixed.Resolve): Read the first array element only when
834         an array is instantiated. 
835         
836 2007-10-04  Marek Safar  <marek.safar@gmail.com>
837         
838         * expression.cs, assign.cs, generics.cs: Print correct operator when
839         compound assignment is used.
840         
841 2007-10-04  Marek Safar  <marek.safar@gmail.com>
842         
843         A fix for bug #325841
844         * expression.cs (ArrayAccess): Use full argument cloning only for
845         string compound concatenation.
846         
847 2007-10-03  Marek Safar  <marek.safar@gmail.com>
848         
849         A fix for bug #328774
850         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
851         assignment.
852         (PropertyExpr.EmitAssign): Fixed string concatenation compound
853         assignment.
854
855 2007-10-03  Raja R Harinath  <rharinath@novell.com>
856
857         Fix #328490
858         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
859         Event accessibility checks here.  Remove some bogus code that
860         accidently made GenericMethods work.
861         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
862
863 2007-09-25  Marek Safar  <marek.safar@gmail.com>
864         
865         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
866         
867         * statement.cs (Block): Refactored AddVariable to allow error handling
868         customization.
869         
870         * generic.cs: New stub.
871         
872 2007-09-23  Marek Safar  <marek.safar@gmail.com>
873         
874         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
875         flag.
876         
877 2007-09-17  Marek Safar  <marek.safar@gmail.com>
878
879         * class.cs: Use partial container to record whether any partial part
880         contains static field initializer and therefore default contructor has
881         to be defined.
882         
883 2007-09-14  Marek Safar  <marek.safar@gmail.com>
884
885         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
886         mono-list when only one of two partial parts has defined accessibility
887         modifier.
888         
889 2007-09-14  Marek Safar  <marek.safar@gmail.com>
890
891         A fix for bug #82845
892         
893         * class.cs (TypeContainer): Set correct resolve context for all field
894         initializers.
895         
896 2007-09-13  Marek Safar  <marek.safar@gmail.com>
897
898         * assign.cs: Fixed a crash when field is resolved twice with an error.
899         
900         * codegen.cs: Changed InFieldInitializer to be flag.
901         
902         * anonymous.cs, ecore.cs, expression.cs: Update after
903         IsInFieldInitializer rename.
904         
905         * const.cs: Removed unused parameter.
906         
907         * class.cs: Changed the way how we resolve and emit field initializers.
908         The field initilizers have to have access to contructor block to emit
909         compiler generated code.
910
911 2007-09-13  Marek Safar  <marek.safar@gmail.com>
912
913         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
914         generics use TypeContainer instead.
915         
916 2007-09-12  Marek Safar  <marek.safar@gmail.com>
917         
918         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
919
920         * lambda.cs (ResolveParameters): Use more powerful
921         InflateGenericArgument.
922         
923         * parameters.cs: Better exception message.
924                 
925 2007-09-10  Marek Safar  <marek.safar@gmail.com>
926
927         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
928         correct expression block type. 
929         
930         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
931         
932         * expression.cs (Invocation): Extracted method group resolve to
933         DoResolveOverload.
934         
935 2007-09-07  Marek Safar  <marek.safar@gmail.com>
936
937         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
938         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
939         
940         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
941         generic extension methods.
942
943 2007-09-06  Marek Safar  <marek.safar@gmail.com>
944
945         A fix for bug #82676 (Do I get it right now?)
946         * convert.cs (Binary.ResolveOperator): An interface is converted to the
947         object before a standard conversion is applied.
948         
949 2007-09-06  Marek Safar  <marek.safar@gmail.com>
950
951         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
952         #82676.
953         
954 2007-09-05  Marek Safar  <marek.safar@gmail.com>
955
956         A fix for bug #82676
957         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
958         non-generic interface types.
959         
960 2007-09-05  Marek Safar  <marek.safar@gmail.com>
961
962         A fix for bug #82690
963         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
964         
965 2007-09-05  Marek Safar  <marek.safar@gmail.com>
966
967         A fix for bug #82571
968         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
969         modifier for container based methods.
970         
971 2007-09-05  Marek Safar  <marek.safar@gmail.com>
972
973         A fix for bug #82676
974         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
975         any interface-type T means to any of interface type T.
976
977 2007-09-04  Marek Safar  <marek.safar@gmail.com>
978
979         * namespace.cs: We have 2 versions of System.Core assembly.
980
981 2007-09-04  Marek Safar  <marek.safar@gmail.com>
982
983         A fix for bug #82652
984         * class.cs (Class.GetClassBases): Compare types and not expressions.
985
986 2007-09-04  Marek Safar  <marek.safar@gmail.com>
987
988         A fix for bug #82620
989         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
990         actually never worked before.
991         (IndexerAccess): Emit prepared arguments before they are modified.
992         
993 2007-09-04  Marek Safar  <marek.safar@gmail.com>
994
995         A fix for bug #82563
996         * assign.cs: Revert wrong fix.
997         
998         * expression.cs (VariableReference.EmitAssign): Handle ref reference
999         correctly.
1000         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
1001         Instead of ldelema/stdind we have to use temporary variables to handle
1002         cases like String.Concat (params string[]).
1003         
1004 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1005
1006         * class.cs: EmitAttributes to Emit rename.
1007         
1008         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
1009         null.
1010         (MemberCore.HasClsCompliantAttribute): Don't depend on 
1011         GetClsCompliantAttributeValue execution.
1012         
1013 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1014
1015         * anonymous.cs: Use shorter type prefix.
1016         
1017         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
1018         when exist.
1019         
1020         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
1021         variables when probing is on.
1022         
1023         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
1024         unresolved variables.
1025         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
1026         handle transparent identifiers.
1027         
1028 2007-08-26  Marek Safar  <marek.safar@gmail.com>
1029
1030         * attribute.cs (IsClsCompliant): Add nullable types test.
1031         
1032 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
1033
1034         * doc.cs : catch other types of exception than XmlException to
1035           report CS1570. Fixed bug #82565.
1036
1037 2007-08-23  Marek Safar  <marek.safar@gmail.com>
1038
1039         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
1040         The number of delegate parameters has to match.
1041         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
1042         arrays.
1043
1044 2007-08-21  Marek Safar  <marek.safar@gmail.com>
1045
1046         * anonymous.cs (AnonymousMethod): Generate private anonymous method
1047         to fix problem with private arguments.
1048
1049 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1050
1051         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
1052         
1053         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
1054         
1055         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
1056         empty. Add cloning suport.
1057         
1058         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
1059
1060 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1061
1062         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
1063         to create EmptyCast. It handles EmptyConstantCast specialization for
1064         constants.
1065         
1066 2007-08-18  Marek Safar  <marek.safar@gmail.com>
1067
1068         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
1069         (EmitArrayArgument): One routine for array arguments.
1070         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
1071         
1072 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1073
1074         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
1075
1076 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1077
1078         * anonymous.cs: MemberLookupFinal update.
1079
1080         * class.cs (ConstructorInitializer): Is expression based.
1081         
1082         * delegate.cs: MethodGroupExpr update.
1083         
1084         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
1085         messages.
1086         (Error_MemberLookupFailed): Customizable error override.
1087         (MethodGroupExpr): Keep queried type for later usage.
1088         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
1089         resolve.
1090         
1091         * expression.cs: Error_MemberLookupFailed refactoring.
1092         (New.DoResolve): Resolve as much as possible.
1093         (ElementInitializer.Error_MemberLookupFailed): Object initializer
1094         customization for invalid member types.
1095
1096         * statement.cs: MethodGroupExpr update.
1097         
1098 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1099
1100         * modifier.cs (Check): Check all modifiers and not only accessibility
1101         ones.
1102
1103 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1104
1105         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
1106         type and not an expression.
1107
1108 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1109
1110         * statement.cs (Catch.Clone): Type and variable can be null.
1111
1112 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1113
1114         A fix for bug #81979
1115         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
1116         I am really not sure whether this is the best fix.
1117         
1118         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
1119         only once.
1120         
1121 2007-08-14  Marek Safar  <marek.safar@gmail.com>
1122
1123         ** C# 3.0 Object and collection initializers (major re-write)
1124         
1125         * assign.cs (DoResolve): Initializers are not assign related.
1126         
1127         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
1128         used during collection or object initialization.
1129         
1130         * expression.cs (Error_InvalidArguments): Add initializers specific
1131         messages. More will come later because it requires some general
1132         refactoring.
1133         (New.DoResolve): Better error handling for unsafe types.
1134         (EmptyExpressionStatement): New class.
1135         (ElementInitializer): An object initializer expression.
1136         (CollectionElementInitializer): A collection initializer expression.
1137         (CollectionOrObjectInitializers): A block of object or collection
1138         initializers.
1139         (NewInitialize): New expression with element/object initializers.
1140         
1141         * statement.cs: Reverted object/collection initializer hacks.
1142         
1143         * typemanager.cs (CSharpName): Filter __arglist type.
1144         
1145 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1146
1147         ** C# 3.0 Anonymous Types (update to the latest standard)
1148         
1149         * expression.cs (Binary.ResolveOperator): Threat all null based types
1150         same.
1151         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
1152         (AnonymousTypeParameter): Updated.
1153         
1154         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
1155         (AnonymousTypeClass): New anonymous type container.
1156         
1157         * class.cs (AddField): Return operation result.
1158         
1159         * generic.cs: Another empty TypeArguments overload.
1160         
1161         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
1162         are stored at top of normal hierarchy.
1163         
1164         * typemanager.cs (CSharpName): Filter anonymous types.
1165         
1166 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1167
1168         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
1169         as single Concat call. How could we miss that :-(
1170         
1171 2007-08-08  Marek Safar  <marek.safar@gmail.com>
1172
1173         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
1174         
1175 2007-08-07  Miguel de Icaza  <miguel@novell.com>
1176
1177         * expression.cs: Fix the previous commit, the creation of the
1178         arguments array list needs also to be conditional on the arguments
1179         not being null.
1180
1181         * class.cs: Add a little bit of help to help narrow down problems.
1182
1183         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
1184         not try to copy in that case. 
1185
1186         * driver.cs: When building SMCS, include a new different set of
1187         default assemblies here.   Do this here so we can control whether
1188         to include the default assemblies with /noconfig.
1189
1190 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1191
1192         A fix for bug #81979
1193         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
1194         only.
1195
1196 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1197
1198         A fix for bug #82300
1199
1200         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
1201         we are in probing scope.
1202
1203 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1204
1205         A fix for bug #82301
1206
1207         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
1208         (Statement.CloneTo): Clone and not map children blocks.
1209
1210 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1211
1212         A fix for bug #82299
1213
1214         * expression.cs (LocalVariableReference.CloneTo): Remap local info
1215         variable too.
1216         
1217         * statement.cs (Statement.CloneTo): Clone variables before statements
1218         to allow remaping of local variables.
1219
1220 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1221
1222         A fix for bug #82296
1223
1224         * anonymous.cs,
1225         * report.cs: Log crash details for future clone problems.
1226         
1227         * statement.cs (Return.Clone): Don't clone non-existent expression.
1228
1229 2007-08-03  Raja R Harinath  <harinath@gmail.com>
1230
1231         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
1232         (Class.AddBasesForPart): Move CS0537 check here from ...
1233         * cs-parser.jay (class_declaration): ... here.  Move calling of
1234         'AddBasesForPart' to ...
1235         (class_bases): ... here.
1236         (struct_declaration, interface_declaration): Update to changes.
1237
1238 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1239
1240         A fix for bug #81923
1241
1242         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
1243         conversion is allowed.
1244
1245 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1246
1247         A fix for bug #81564
1248
1249         * ecore.cs (EventExpr): Add IsBase handling.
1250
1251         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
1252         too.    
1253         
1254 2007-08-02  Raja R Harinath  <harinath@gmail.com>
1255
1256         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
1257         * cs-parser.jay: Some whitespace cleanups.
1258         (current_delegate): New.
1259         (type_name): New.
1260         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
1261         a dummy code block, and use 'type_name' instead of 'member_name'.
1262         (interface_declaration, class_declaration): Likewise.
1263         (delegate_declaration): Likewise.  Rearrange slightly and use
1264         'current_delegate'.
1265         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
1266         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
1267
1268 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1269
1270         A fix for bug #82039
1271
1272         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
1273         available.
1274
1275         * typemanager.cs (CSharpName): Split to string overload.
1276
1277 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1278
1279         * expression.cs,
1280         * report.cs: Updated warning CS0472.
1281
1282 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1283
1284         A fix for bug #82181
1285         * cs-parser.jay,
1286         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
1287
1288 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1289
1290         A fix for bug #82277
1291         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
1292
1293 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1294
1295         ** C# 3.0 Type Inference (major bits are working)
1296         
1297         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
1298         (.ImplicitStandardConversionExists): Uses compatible.
1299         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
1300         (.InferReturnType): New method.
1301         (.Compatible): Refactored.
1302         (.ResolveParameters): Uses factory to create resolved parameters.
1303         (.CompatibleMethod): Add probing mode support.
1304         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
1305         clearly distinguish between 2 different operations.
1306         (LambdaMethod): Moved to lambda.cs.
1307         (AnonymousMethod): Removed unused fields and methods.
1308         (AnonymousDelegate): Simplified.
1309         
1310         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
1311         
1312         * convert. cs (ImplicitConversionStandard): Compatible works differently.
1313         
1314         * delegate.cs (Delegate): New mehods to reduce code duplication.
1315         (.GetConstructor): New method.
1316         (.GetInvokeMethod): New method.
1317         (DelegateCreation): Updated.
1318         
1319         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
1320         does not exist.
1321         (OverloadResolve): Made probing little bit faster.
1322         
1323         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
1324         when probing is on.
1325         
1326         * generic.cs (TypeInferenceContext): Dummy implementation.
1327         
1328         * iterators.cs: Updated after Resolve/Define rename.
1329         
1330         * lambda.cs (LambdaExpression)
1331         (.ResolveParameters): Handles both type of arguments and type inference too.
1332         
1333         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
1334         (InflateTypes): Updated.
1335         
1336         * support.cs (InflateTypes): Changed signature and updated.
1337         
1338         * typemanager.cs (LookupMemberCache): Better dynamic type check.
1339         (MemberLookup_FindMembers): More MS tricks.
1340         (GetParameterData): Ditto.
1341         (GetDelegateParameters): Uses quick path for dynamic types.
1342         
1343 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1344
1345         * class.cs (MethodData.Define): EmitContext is required for generic stuff
1346         only.
1347
1348 2007-07-31  Marek Safar  <marek.safar@gmail.com>
1349
1350         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
1351         syntax.
1352         
1353 2007-07-26  Jb Evain  <jbevain@novell.com>
1354
1355         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
1356         which takes a boolean 'report_errors', similar to the GetMethod.
1357         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
1358         in .net 2.1, do not report errors here.
1359
1360         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
1361         System.Runtime.CompilerServices.RequiredAttributeAttribute and
1362         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
1363         in .net 2.1.
1364
1365         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
1366         of the type InternalsVisibleToAttribute before the first call
1367         to CoreLookupType which is allowed to fail (third boolean parameter
1368         to true). Because, during the resolution for a type that is not
1369         immediately found, we try to check if the type is not defined in
1370         a friend assembly, and to do so, we need the
1371         InternalVisibleToAttribute.
1372
1373 2007-07-23  Miguel de Icaza  <miguel@novell.com>
1374
1375         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
1376         feature that allows structs to be compared against null and inline
1377         the result as true or false.
1378
1379         Notice that the same code is not permitted inside a generic block
1380         of code that would do:
1381
1382         class Foo<T> where T : struct {
1383             bool Eval (T x)
1384             {
1385                  return x == null;
1386             }
1387         }
1388
1389         It is only allowed if the type of T is not bound (no where
1390         clause).   In my opinion, this CSC 2 behavior is broken but people
1391         seem to be using it (IronRuby does, a few bug reports on bugzilla
1392         have it and some people have complained about it).
1393
1394         All of the users that depend on this behavior have code that is
1395         very likely broken. 
1396         
1397         * report.cs (Warning, Error): make these take object arguments,
1398         not strings, as that allows us to take advantage of Format.
1399
1400 2007-07-20  William Holmes  <billholmes54@gmail.com>
1401
1402         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
1403           Left member variable for the Count.
1404         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
1405           MemberName.CountTypeArguments to avoid a NRE. 
1406
1407         This code is contributed under the MIT X11 license
1408
1409 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1410
1411         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
1412
1413 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1414
1415         * doc.cs : generic method arguments are written as ``x while generic
1416           type arguments are `x. Combined with the previous change, fixed bug
1417           #79706.
1418
1419 2007-07-18  Raja R Harinath  <rharinath@novell.com>
1420
1421         Fix #82120
1422         * expression.cs (Binary.ResolveOperator): When converting
1423         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
1424
1425 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1426
1427         * doc.cs : when T: or whatever x: is specified, it does not really
1428           check the doc comment's syntax correctness. Fixed bug #82006.
1429
1430 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1431
1432         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
1433         LambdaExpression better.
1434         
1435         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
1436         
1437         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
1438         
1439         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
1440         as it can be generated.
1441         
1442         * expression.cs (Invocation.Error_InvalidArguments): Show correct
1443         modifiers.
1444         
1445         * lambda.cs (LambdaExpression): Refactored to share same code with
1446         AnonymousMethodExpression.
1447         
1448 2007-07-17  Marek Safar  <marek.safar@gmail.com>
1449
1450         * anonymous.cs (MakeName): Include host name for easier debugging.
1451         (LambdaMethod): New class for lambda spcecific stuff.
1452         
1453         * attribute.cs: Set EmitContext return type.
1454
1455         * class.cs: Set EmitContext return type.
1456         
1457         * codegen.cs (EmitContext): Return type cannot be null to stop messing
1458         with null/void meaning.
1459         
1460         * iterators.cs (ContainerType): Implemented.
1461         
1462         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
1463         
1464         * statement.cs (Return): Updated to lambda expressions.
1465         (Block.CloneTo): Parent can be null.
1466                 
1467 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1468
1469         A fix for bug #81917
1470         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
1471         
1472         * class.cs (FixedField): Check whether field is in unsafe scope.
1473
1474         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
1475         (FieldExpr.Emit): Fixed buffers cannot be volatile.
1476
1477         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
1478         FieldExpr.
1479         
1480         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
1481                 
1482 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1483
1484         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
1485         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
1486         from Report class.
1487
1488 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1489
1490         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
1491         
1492 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1493
1494         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
1495         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
1496         
1497         * codegen.cs(EmitContext): Add ProbingMode flag.
1498         
1499         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
1500         
1501         * driver.cs: For now set both warning values.
1502         
1503         * ecore.cs (SimpleName): Name is readonly.
1504         (MethodGroup.OverloadResolve): One quick path for probing.
1505         
1506         * expression.cs (Unary): Set Oper r/o.
1507         (Binary): Set Oper r/o.
1508         (ParameterReference): Set few instance variables as r/o.
1509         (ParameterReference.DoResolveBase): Don't capture aruments when 
1510         the probing is on.
1511         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
1512         (Arglist): arguments are private.
1513         (SizeOf): type is private and r/o.
1514         (MemberAccess): arguments are private.
1515
1516         * report.cs: Enhanced reporting on/off capabilities.
1517         
1518         * lambda.cs: Uses ec.IsInProbingMode.
1519         (ContextualReturn): Derives from return.
1520         
1521         * rootcontext.cs: For now set both warning values.
1522         
1523         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
1524         copy if one exists.
1525         (Return.Resolve): Don't die immediately.
1526         (Block.Resolve): Speed-up probing.
1527         (Block.CloneTo): Clone only child blocks.
1528
1529 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
1530
1531         * iterators.cs: reverted Miguel's latest change (r81925) as it
1532         breaks the build in System.
1533
1534 2007-07-13  Miguel de Icaza  <miguel@novell.com>
1535
1536         * iterators.cs (Yield.CheckContext): Check for the iterator type
1537         also here as we can call into Yield even in codepaths that are not
1538         directly checked by
1539         (MethodOrOperator is the only path that was checked).
1540
1541         In addition to the standard check, use a more specific check for
1542         constructors to report a more verbose error. 
1543
1544 2007-07-12  Miguel de Icaza  <miguel@novell.com>
1545
1546         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
1547         report the warning and continue 
1548
1549         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
1550         values on the stack on the call to Emit.   Use EmitStatement if
1551         possible, or using Emit + Pop if not possible.   Fixes #82064
1552
1553 2007-07-12  Raja R Harinath  <rharinath@novell.com>
1554
1555         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
1556         avoid try...finally in some cases.
1557
1558 2007-07-10  Marek Safar  <marek.safar@gmail.com>
1559
1560         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
1561         
1562         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
1563         instead of method. Re-use standard error handling.
1564         (ConstructorInitializer.Emit): Simplified.
1565         
1566         * delegate.cs: Updated after Invocation.EmitCall change.
1567         
1568         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
1569         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
1570         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
1571         method and don't permanently changing input arguments.
1572         (MethodGroupExpr): Introduced resolved best_candidate, when method group
1573         is resolved it has one of the candidates is the best one which is later
1574         used to emit. Removed a few unused method.
1575         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
1576
1577         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
1578         (Binary.ResolveOperator): Ditto.
1579         (ConditionalLogicalOperator.DoResolve): Ditto.
1580         (Invocation): Uses method group.
1581         (Invocation.DoResolve): Simplified.
1582         (Invocation.EmitCall): Removed useless is_static.
1583         (Invocation.Emit): Delegate to method group.
1584         (Invocation.EmitStatement): Simplified.
1585         (New): Uses method group.
1586         (MemberAccess.DoResolve): Don't destroy original expression.
1587         
1588         * statement.cs (ForEach.Resolve): Use null for no method arguments.
1589         
1590 2007-07-04  Marek Safar  <marek.safar@gmail.com>
1591
1592         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
1593         
1594         * anonymous.cs,
1595         * lambda.cs: Add custom error message type.
1596
1597 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1598
1599         * lambda.cs: Simplified little bit.
1600         
1601         * parameter.cs: Introduced ImplicitLambdaParameter.
1602         (Parameters.CreateFullyResolved): New factory instead of ctor.
1603         
1604         * anonymous.cs,
1605         * class.cs,
1606         * delegate.cs: Updated parameter creation.
1607         
1608 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1609
1610         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
1611         arguments.
1612         
1613         * generic.cs: Synchronized with gmcs.
1614         
1615 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1616
1617         * class.cs (Indexer): Check return type as soon as possible.
1618         
1619         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
1620         members too.
1621         
1622         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
1623         
1624         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
1625         
1626         * parameter.cs (Parameter): Use expression type when it is available.
1627         
1628         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
1629         method modifier for the first parameter only.
1630
1631 2007-06-24  Marek Safar  <marek.safar@gmail.com>
1632
1633         A fix for bug #81938
1634         * typemanager.cs (ChangeType): Fixed couple of char conversions.
1635         
1636         * constant.cs: Tide up an exception message.
1637
1638 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1639
1640         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
1641         an uninitialized variable is used.
1642         
1643         * expression.cs (LocalVariableReference.DoResolve): Ditto.
1644
1645 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1646
1647         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
1648         not found error handling.
1649
1650         * expression.cs (ArrayCreation): Removed redundant fields and little bit
1651         simplified.
1652         (ArrayCreation.ResolveArrayElement): To be ready to customization.
1653         (ArrayCreation.DoResolve): Simplified.
1654         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
1655         its own resolve process.
1656         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
1657
1658 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1659
1660         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
1661         more error details.
1662         
1663 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1664
1665         * cs-tokenizer.cs: Removed var related stuff.
1666         
1667         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
1668         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
1669         a type and a keyword at same time.
1670         
1671         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
1672         matches to "var".
1673         
1674         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
1675         implicitly typed arrays, more changes will follow.
1676         
1677         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
1678         
1679 2007-06-19  Marek Safar  <marek.safar@gmail.com>
1680
1681         * ecore.cs (VarExpr): Removed Handled field.
1682         
1683         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
1684         build-in assign functionality.
1685         (ForEach.Resolve): Removed all implicitly typed local variable code and
1686         simplified.
1687         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
1688         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
1689
1690 2007-06-18  Marek Safar  <marek.safar@gmail.com>
1691
1692         * assign.cs: Removed implicitly typed local variable check.
1693         
1694         * expression.cs (LocalVariableReference.DoResolve): Add check for self
1695         referencing implicitly typed local variable.
1696         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
1697         variable here.
1698         
1699         * statement.cs (Fixed): Removed unsupported implicitly typed local
1700         variable code.
1701
1702 2007-06-15  Marek Safar  <marek.safar@gmail.com>
1703
1704         * decl.cs (MemberName): Moved all Unbound stuff to parser.
1705
1706 2007-06-14  Marek Safar  <marek.safar@gmail.com>
1707
1708         A fix for bugs #81855 and #76274
1709         * attribute.cs (AttachTo): Always set owner for global attributes to
1710         prefined owner.
1711         
1712         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
1713         usefull too.
1714         
1715         * cs-parser.jay: Assembly and module attributes must precede all other
1716         elements except using clauses and extern alias declarations.
1717
1718 2007-06-13  Marek Safar  <marek.safar@gmail.com>
1719
1720         A fix for bug #81748
1721         * cs-tokenizer.cs,
1722         * expression.cs: More checks for non ISO-1 features.
1723
1724 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1725
1726         A fix for bug #81807
1727         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
1728         present inside switch statement and it is required by nullable check.
1729
1730 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1731
1732         A fix for bug #81840
1733         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
1734         when type matching fails.
1735         
1736         * namespace.cs: Tiny error message change.
1737
1738 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1739
1740         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
1741         reporting. Added automatic property check.
1742         
1743         * class.cs: Updated after CheckAbstractAndExtern relocation.
1744         (AEventPropertyAccessor.GetSignatureForError): Customized.
1745         
1746 2007-06-11  Marek Safar  <marek.safar@gmail.com>
1747
1748         * class.cs (DefineBaseTypes): Base type can be undefined.
1749         
1750         * ecore.cs (TypeLookup): Minor refactoring.
1751         (DoResolveAsTypeStep): Removed redundant check.
1752
1753         * namespace.cs (Lookup): Removed redundant check.
1754                 
1755         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
1756         ResolveAsTypeTerminal step.
1757         (BootstrapCorlib_*): Simplified.
1758         (PopulateCoreType): Core types can be now external.
1759
1760 2007-06-07  Marek Safar  <marek.safar@gmail.com>
1761
1762         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
1763          verification only.
1764          (InferTypeArguments): Infers anonymous expression type arguments.
1765          (Compatible): Split to Compatible and InferTypeArguments. 
1766         
1767         * lambda.cs: Updated.
1768
1769 2007-06-08  Marek Safar  <marek.safar@gmail.com>
1770
1771         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
1772
1773 2007-06-07  Raja R Harinath  <harinath@gmail.com>
1774
1775         Fix #80477, cs0135-2.cs, cs0135-3.cs
1776         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
1777         names to the "known" variables list.
1778         (Block.CheckInvariantMeaningInBlock): Handle the fact the
1779         parameter names are also "known".
1780         (Block.CheckError136): Remove.
1781         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
1782         null.
1783
1784 2007-06-07  Marek Safar  <marek.safar@gmail.com>
1785
1786         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
1787
1788 2007-06-06  Marek Safar  <marek.safar@gmail.com>
1789
1790         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
1791         internal error not an user error.
1792          
1793         * expression.cs (IsApplicable): Refactored to make debugging easier.
1794
1795         * support.cs: More tricks for non-mono runtimes.
1796         
1797         * typemanager.cs (CoreLookupType): Made public.
1798         (InitSystemCore): All linq specific stuff moved to linq.cs
1799
1800 2007-06-05  Marek Safar  <marek.safar@gmail.com>
1801
1802         * typemanager.cs (CSharpSignature): One more missing build-in types
1803         replacement.
1804         More tricks for non-mono runtime.
1805
1806 2007-06-05  Raja R Harinath  <harinath@gmail.com>
1807
1808         * statement.cs (Block.CheckError136_InParents): Remove.
1809         (Block.AddVariable): Use GetParameterInfo instead.
1810         (ToplevelBlock.ProcessArguments): Likewise.
1811
1812 2007-06-04  Raja R Harinath  <rharinath@novell.com>
1813
1814         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
1815         information too.
1816         (ToplevelBlock.GetParameterInfo): Split out of ...
1817         (ToplevelBlock.GetParameterRefernce): ... this.
1818         (ToplevelBlock.ParameterMap): Remove.
1819         * expression.cs (ParameterReference): Update to use
1820         ToplevelParameterInfo.
1821
1822         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
1823         regression.
1824
1825         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
1826         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
1827
1828         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
1829         (ToplevelBlock.ProcessParameters) ... here.
1830         (ToplevelBlock..ctor): Invoke it.
1831
1832         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
1833         new parameters.
1834
1835         * statement.cs (IKnownVariable): New interface.
1836         (LocalInfo): Implement it.
1837         (ToplevelParameterInfo): New class.
1838         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
1839         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
1840         GetKnownVariableInfo.
1841
1842 2007-06-03  Raja R Harinath  <harinath@gmail.com>
1843
1844         Partly speed up CS0136 error checks.
1845         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
1846         'recurse' parameter.
1847         (Block.DoCheckError136): Only check errors in parameters.  Move
1848         local variable checks ...
1849         (Block.AddVariable): ... here, and ...
1850         (ToplevelBlock.ResolveMeta): ... here.
1851
1852 2007-06-02  Raja R Harinath  <harinath@gmail.com>
1853
1854         * statement.cs (Block.IsChildOf): Remove.
1855
1856         * statement.cs (Statement.Clone): Move special case code ...
1857         (Block.CloneTo): ... here.
1858
1859 2007-05-29  Raja R Harinath  <rharinath@novell.com>
1860
1861         * statement.cs (ToplevelBlock.container): Remove field.  It's
1862         redundant with 'Parent'.
1863         (ToplevelBlock.ContainerBlock): Remove accessor.
1864         (ToplevelBlock..ctor): Update to changes.  Register anonymous
1865         child with parent here, ...
1866         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
1867         current_block.
1868         (start_anonymous): Don't save current_block.
1869         (top_current_block): Remove.
1870
1871         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
1872         (Block.Resolve): Update to changes.
1873         (Block..ctor): Move setting of "correct" 'Toplevel'
1874         and 'Explicit' fields to ...
1875         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
1876
1877 2007-05-27  Raja R Harinath  <harinath@gmail.com>
1878
1879         Kill Block.Implicit
1880         * statement.cs (Block.Implicit): Remove.
1881         (Block): Update to changes.
1882         * flowanalysis.cs: Likewise.
1883
1884         Mildly speed up CheckInvariantMeaningInBlock
1885         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
1886         Recursively call AddKnownVariable to all enclosing blocks.
1887         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
1888         Remove recursive calls.
1889         (Block): Update to changes.
1890
1891         New ExplicitBlock invariants
1892         * statement.cs (Block.Explicit): New field.  It points to the
1893         immediately enclosing non-implicit block.
1894         (Block..ctor): Maintain the invariant.
1895         * cs-parser.jay: Take advantage of invariant.
1896
1897         Introduce ExplicitBlock
1898         * statement.cs (ExplicitBlock): New.
1899         (ToplevelBlock): Derive from it.
1900         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
1901         sense of flag.
1902         (Block.Implicit): Update to changes.
1903         * cs-parser.jay: Update to changes.
1904
1905         Remove unused field
1906         * codegen.cs (EmitContext.IsLastStatement): Remove.
1907         * statement.cs (Block.DoEmit): Update to changes.
1908
1909 2007-05-25  Raja R Harinath  <rharinath@novell.com>
1910
1911         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
1912         modifying current_block directly.
1913
1914 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
1915         
1916         * class.cs: Implemented automatic properties (C# 3.0)
1917           Thanks to Marek for the help.
1918
1919 2007-05-23  Raja R Harinath  <rharinath@novell.com>
1920
1921         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
1922         variable as assigned, note also that all its components are
1923         assigned too.
1924         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
1925
1926 2007-05-19  Marek Safar  <marek.safar@gmail.com>
1927
1928         * anonymous.cs, class.cs: Emit Compiler generated attribute when
1929         member is marked as compiler generated.
1930         
1931         * decl.cs (MemberCore): Refactored ModFlags into property.
1932
1933         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
1934         (Check): Check only accessibility modifiers.
1935
1936 2007-05-18  Raja R Harinath  <rharinath@novell.com>
1937
1938         Track all assignable slots in one bit array
1939         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
1940         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
1941         logic from VariableMap constructor here.  Use the same 'offset'
1942         variable that's later used for computing offsets of local
1943         variables.
1944         * flowanalysis.cs (UsageVector.parameters): Remove.
1945         (UsageVector): Update to changes.
1946         (VariableMap): Remove.
1947
1948         Avoid creating ParameterMap in every block
1949         * statement.cs (Block.ParameterMap): Move ...
1950         (ToplevelBlock.ParameterMap): ... here.
1951         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
1952         only once.
1953         * flowanalysis.cs (FlowBranching.param_map): Remove.
1954         (FlowBranching.UsageVector): Update to changes.
1955         (FlowBranchingToplevel.CheckOutParameters): Likewise.
1956
1957         * statement.cs (Block.CloneTo): Clone Toplevel field too.
1958
1959         * expression.cs (ParameterReference): Distinguish between block
1960         where parameter was referenced and declared.
1961
1962 2007-05-18  Marek Safar  <marek.safar@gmail.com>
1963
1964         * flowanalysis.cs, statement.cs: Put back improved error handling.
1965
1966 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
1967         
1968         * assign.cs:
1969         * expression.cs:
1970           Imporved object and collection initialization (C# 3.0).
1971
1972 2007-05-15  Marek Safar  <marek.safar@gmail.com>
1973
1974         A fix for bug #81380
1975         * expression.cs (Is.DoResolve): Only value types have constant `is'
1976         behaviour.
1977
1978 2007-05-15  Raja R Harinath  <rharinath@novell.com>
1979
1980         * statement.cs (ToplevelBlock.child): Remove.
1981
1982 2007-05-15  Raja R Harinath  <harinath@gmail.com>
1983
1984         Rationalize ResolveMeta: refactoring
1985         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
1986         out constant handling code into ...
1987         (Block.DoResolveConstants): ... this.
1988
1989         Rationalize ResolveMeta: kill local_map
1990         * statement.cs (Block.local_map, Block.LocalMap): Remove.
1991         (Block.AssignableSlots): New.
1992         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
1993         for locals -- move code from VariableMap here.  Avoid unnecessary
1994         allocations.
1995         * flowanalysis.cs (FlowBranching.local_map): Remove.
1996         (FlowBranching..ctor): Use Block.AssignableSlots.
1997         (VariableMap): Remove unused constructors.
1998
1999 2007-05-11  Raja R Harinath  <rharinath@novell.com>
2000
2001         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
2002
2003 2007-05-11  Marek Safar  <marek.safar@gmail.com>
2004
2005         * typemanager.cs (IsFriendAssembly): Should not be called for building
2006         assembly.
2007
2008 2007-05-09  Marek Safar  <marek.safar@gmail.com>
2009
2010         * literal.cs (NullConstant): Print null in all cases.
2011         
2012         * expression.cs (Binary.ResolveOperator): Implemented delegate
2013          comparison based on C# 2.0 changes.
2014
2015 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
2016
2017         This code is contributed under the MIT X11 license
2018         
2019         The following enables support for several C# 3.0 language features:
2020         
2021         * cs-tokenizer.cs: Added support for the "var" keyword.
2022         
2023         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
2024           Added VarExpr class to facilitate type inferencing.
2025         
2026         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
2027           to support anonymous types.
2028         
2029         * assign.cs: Added support for type inferencing and initialization.
2030         
2031         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
2032         
2033         * expression.cs: Added implicit array support to ArrayCreation.
2034           Added 5 types and 1 interface:
2035           
2036           IInitializable                Implementing classes can inject initializing
2037                                         statements after object instantiation.
2038           
2039           Initializer                   Stores data for object initialization.
2040           
2041           AnonymousType                 An expression for anonymous types.
2042           
2043           AnonymousTypeParameter        Stores data about an anonymous type's field.
2044           
2045           NewInitialize                 An expression for object initialization.
2046           
2047           CollectionInitialize          An expression for collection initialization.
2048         
2049         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
2050           statements.
2051
2052 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2053
2054         A fix for bug #81500
2055         * cs-tokenizer.cs: Add special handling for coalescing operator.
2056
2057 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2058
2059         A fix for bug #81529
2060         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
2061         its value from base class until it is redefined.
2062
2063 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2064
2065         Fix regression in cs0631-3.cs
2066         * cs-parser.jay (operator_declarator): Add opt_attributes to error
2067         fallback.  Make error fallback catch more cases.
2068
2069 2007-05-01  Miguel de Icaza  <miguel@novell.com>
2070
2071         * cs-parser.jay: Allow parameters in operator declarations to have
2072         attributes. 
2073
2074 2007-04-27  Miguel de Icaza  <miguel@novell.com>
2075
2076         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
2077         exists. 
2078
2079         * lambda.cs (ContextualReturn.Resolve): An expression is valid
2080         inside the ContextualReturn, it does not have to be an
2081         ExpressionStatement. 
2082
2083 2007-04-24  Miguel de Icaza  <miguel@novell.com>
2084
2085         * lambda.cs (ContextualReturn.Resolve): if the return type is not
2086         set, set it.
2087
2088 2007-04-23  Miguel de Icaza  <miguel@novell.com>
2089
2090         * anonymous.cs (AnonymousContainer): split the virtual Resolve
2091         method in two methods: ResolveNoDefine and Resolve.
2092
2093         ResolveNoDefine will stop just after ResolveTopBlock has been
2094         called.   
2095
2096         Resolve will then continue by creating a method and issuing the
2097         call to method.Define ().
2098
2099         (AnonymousMethod): Split and implement the new Resolve and
2100         ResolveNoDefine as well.
2101
2102         * lambda.cs (LambdaExpression): Split the anonymous method
2103         resolution code into a separate routine (CoreCompatibilityTest)
2104         from DoCompatibleTest.
2105
2106         (LambdaExpression.TryBuild): New method, this method tries to
2107         build the LambdaExpression with the given set of types to be used
2108         as the types for the various parameters of the lambda expression. 
2109
2110         If the compilation succeed with the given types, the infered type
2111         of the Anonymous method is returned, otherwise null is returned.
2112
2113 2007-04-23  Marek Safar  <marek.safar@gmail.com>
2114
2115         A fix for bug #81414
2116         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
2117
2118 2007-04-22  Miguel de Icaza  <miguel@novell.com>
2119
2120         * cs-tokenizer.cs: Change various identifiers here from the
2121         camelCasing to the recommended Linux-like style for instance
2122         variables from the Coding Guidelines. 
2123
2124 2007-04-19  Martin Baulig  <martin@ximian.com>
2125
2126         * convert.cs
2127         (Convert.ImplicitReferenceConversionCore): Allow conversions from
2128         System.Enum to System.ValueType.
2129
2130 2007-04-13  Martin Baulig  <martin@ximian.com>
2131
2132         Rewrote implicit reference conversions.  We need to distinguish
2133         between implicit reference conversions (13.1.4) and implicit
2134         boxing conversions (13.1.5).
2135
2136         According to the spec, there's an an implicit conversion
2137         "From a one-dimensional array-type S[] to IList<T> and base
2138         interfaces of this interface, provided there is an implicit
2139         reference conversion from S to T."  Note that this does not
2140         include boxing conversions.
2141
2142         * convert.cs
2143         (Convert.ImplicitTypeParameterBoxingConversion): New method.
2144         (Convert.ImplicitReferenceConversion): Split into
2145         ImplicitReferenceConversionCore() and
2146         ImplicitBoxingConversionExist().
2147         (Convert.ImplicitReferenceConversionExists): Use the new
2148         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
2149
2150 2007-04-12  Martin Baulig  <martin@ximian.com>
2151
2152         * convert.cs (Convert.ImplicitReferenceConversion): Move the
2153         `TypeManager.null_type' checks up to the top of the method.
2154
2155 2007-04-11  Marek Safar  <marek.safar@gmail.com>
2156
2157         A fix for bug #81350
2158         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
2159         extension methods.
2160
2161 2007-04-11  Martin Baulig  <martin@ximian.com>
2162
2163         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
2164         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
2165         to make this work for generic classes; fixes #79561.
2166
2167 2007-04-11  Martin Baulig  <martin@ximian.com>
2168
2169         * expression.cs (As): Add support for nullable types; fixes #79371.
2170
2171 2007-04-11  Martin Baulig  <martin@ximian.com>
2172
2173         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
2174         `type.FullName' is null; fixes #80243.
2175
2176 2007-04-11  Martin Baulig  <martin@ximian.com>
2177
2178         * expression.cs (Invocation.IsApplicable): Don't modify the method
2179         if type inference succeeded, but the method was not applicable.
2180         Fixes #81250.
2181
2182 2007-04-10  Marek Safar  <marek.safar@gmail.com>
2183
2184         A fix for bug #81324
2185         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
2186         internal and external namespaces containers.
2187
2188 2007-04-10  Martin Baulig  <martin@ximian.com>
2189
2190         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
2191         TypeManager.DropGenericMethodArguments() so we also call
2192         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
2193
2194 2007-04-10  Martin Baulig  <martin@ximian.com>
2195
2196         * iterators.cs (Iterator.CreateIterator): Don't crash if
2197         `method.ReturnType' is null.  This happens if something went wrong
2198         while resolving that typ (we already reported an error in this case).
2199
2200 2007-04-10  Martin Baulig  <martin@ximian.com>
2201
2202         * expression.cs (New.DoResolve): Don't call CheckComImport() on
2203         generic interfaces; report the CS0144 directly.
2204
2205 2007-04-10  Martin Baulig  <martin@ximian.com>
2206
2207         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
2208         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
2209
2210 2007-04-10  Martin Baulig  <martin@ximian.com>
2211
2212         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
2213
2214 2007-04-09  Raja R Harinath  <rharinath@novell.com>
2215
2216         A better fix
2217         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
2218         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
2219
2220         Fix #81338
2221         * statement.cs (For.Resolve): If resolution fails, use
2222         KillFlowBranching.
2223
2224 2007-04-08  Marek Safar  <marek.safar@gmail.com>
2225
2226         * anonymous.cs (MakeName): Make faster and zero-based.
2227         (VerifyExplicitParameterCompatibility): Back to mode where generic
2228         parameter is ignored.
2229         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
2230
2231         * class.cs (EmitType): Method can emit another new method.
2232
2233         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
2234
2235         * driver.cs: Updated.
2236
2237         * lambda.cs: Reuse predefined empty parameters.
2238
2239         * parameter.cs: Updated
2240
2241         * support.cs: Implemented InflateTypes.
2242
2243         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
2244         (InitSystemCore): Introduced to isolate 3.0 dependencies.
2245
2246 2007-04-03  Martin Baulig  <martin@ximian.com>
2247
2248         Fix #80632.
2249
2250         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
2251         version of TypeManager.IsOverride() which also works with generic
2252         types.  
2253
2254 2007-04-03  Martin Baulig  <martin@ximian.com>
2255
2256         Fix #81044.
2257
2258         * convert.cs
2259         (Convert.ExplicitReferenceConversion): We need to cast when
2260         converting from IList<T> to S[].
2261
2262 2007-04-01  Marek Safar  <marek.safar@gmail.com>
2263
2264         * decl.cs (FindExtensionMethods): Consider all candidates with same name
2265         at this level.
2266         
2267         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
2268
2269 2007-03-31  Marek Safar  <marek.safar@gmail.com>
2270
2271         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
2272         argument and return type inferring.
2273
2274         * codegen.cs (InferReturnType): Flag whether return can be inferred.
2275         (ReturnType): Turned to property.
2276
2277         * statement.cs (Return): Implemented return type inferring.
2278
2279         * support.cs (ReflectionParameters): Use local types if possible.
2280
2281 2007-03-30  Raja R Harinath  <rharinath@novell.com>
2282
2283         * flowanalysis.cs (FlowBranching.Reachability): Remove.
2284         (FlowBranching.UsageVector): Update to changes.
2285
2286         Prepare to kill 'Reachability'
2287         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
2288         argument of constructor.
2289
2290 2007-03-29  Raja R Harinath  <rharinath@novell.com>
2291
2292         Prepare to kill 'Reachability'
2293         * flowanalysis.cs (UsageVector.is_unreachable): New.
2294         (UsageVector): Update to maintain 'is_unreachable' in parallel to
2295         'reachability', and verify they're consistent.
2296
2297         Fix #81121
2298         * expression.cs (New.EmitStatement): Handle type parameters here too.
2299
2300 2007-03-29  Martin Baulig  <martin@ximian.com>
2301
2302         Fix #79148.
2303
2304         * anonymous.cs
2305         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
2306         CompilerGeneratedClass.
2307         (ScopeInfo.EmitScopeInstance): Make this protected.
2308         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
2309         `ec.CurrentAnonymousMethod.Scope == Scope'.
2310
2311         * statement.cs (Block.ScopeInfo): Make this a property.
2312
2313 2007-03-27  Raja R Harinath  <harinath@gmail.com>
2314
2315         Prepare to kill 'Reachability'
2316         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
2317         (FlowBranching.UsageVector.Reachability): Remove property.
2318         (FlowBranching.UsageVector.IsUnreachable): New property.
2319         (FlowBranching.UsageVector.ResetBarrier): New.
2320         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
2321         * codegen.cs, statement.cs: Update to changes.
2322
2323 2007-03-27  Martin Baulig  <martin@ximian.com>
2324
2325         Fix #81209.
2326
2327         * decl.cs
2328         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
2329         generic types.
2330
2331 2007-03-26  Raja R Harinath  <rharinath@novell.com>
2332
2333         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
2334         instead of TriState.  Remove all mention of TriState.
2335
2336         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
2337         replaced by a boolean.  Add boolean 'is_unreachable' field, check
2338         and maintain invariants.
2339
2340 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2341
2342         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
2343
2344 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2345
2346         * expression.cs: Stop using obsolete 2.0 opcodes.
2347
2348 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2349
2350         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
2351         one of the latests Martin's fixes.
2352
2353 2007-03-23  Miguel de Icaza  <miguel@novell.com>
2354
2355         * expression.cs: On BigEndian systems, swap the bytes, temporary
2356         solution until we get a new bitconverter class.
2357
2358 2007-03-23  Martin Baulig  <martin@ximian.com>
2359
2360         Fix #81158.
2361
2362         * decl.cs (MemberCache.AddMembers): Add generic methods both as
2363         "Method" and "Method`1".  Normally, a cache lookup is done on the
2364         "Method" form (ie. without the generic arity), but this one makes
2365         lookups on the full form work as well.
2366
2367 2007-03-22  Raja R Harinath  <rharinath@novell.com>
2368
2369         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
2370         unused properties.
2371
2372 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
2373         * class.cs: 
2374         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
2375         ordered_member_list, to TypeBuilder to store members to be defined
2376         in the order they were parsed in.
2377         - ordered_explicit_member_list contains all properties indexers
2378           and methods that are defined as explicit implementation of an
2379           interface or base class.
2380         - ordered_member_list contains all properties indexers and methods
2381           that are not defined as explicit implementation of an interface
2382           or base class.
2383
2384         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
2385         functionality in these removed classes has been replaced with 
2386         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
2387         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
2388
2389         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
2390         to CheckForDuplications inside GetMethod and SetMethod Define Method
2391         to handle method property and indexer name conflicts.
2392
2393         Fixes #79434
2394
2395         All code is contributed under the MIT/X11 license.
2396
2397 2007-03-20  Martin Baulig  <martin@ximian.com>
2398
2399         * class.cs (TypeContainer.Interfaces): Removed; they're now
2400         included in `TypeContainer.Types'.
2401
2402 2007-03-20  Martin Baulig  <martin@ximian.com>
2403
2404         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
2405
2406         * class.cs (TypeContainer.CreateType): New public method.  This is
2407         now called before DefineType() to create the TypeBuilders.
2408         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
2409         has already been created by CreateType().
2410         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
2411         don't resolve our base classes here; this has been moved into
2412         DefineBaseTypes().  We're now called from CreateType().
2413         (TypeContainer.DefineBaseTypes): New private method; resolve our
2414         base classes here.  We're now called from DefineType().
2415
2416         * rootcontext.cs
2417         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
2418         our types first to create all the TypeBuilders.  After that, call
2419         TypeContainer.DefineType() on all the types which'll resolve their
2420         base classes and setup the resolve order.
2421
2422 2007-03-20  Martin Baulig  <martin@ximian.com>
2423
2424         * class.cs (TypeContainer.Enums): Removed; they're now included in
2425         `TypeContainer.Types'.  
2426
2427 2007-03-20  Martin Baulig  <martin@ximian.com>
2428
2429         * class.cs
2430         (TypeContainer.DefineType): Don't call ResolveMembers() here.
2431         (TypeContainer.DoResolveMembers): Call DefineType() on our
2432         `compiler_generated' classes; moved here from DefineNestedTypes().
2433
2434         * rootcontext.cs
2435         (RootContext.ResolveTree): Call ResolveMembers() on all
2436         TypeContainer's in the `type_container_resolve_order'.
2437
2438 2007-03-19  Marek Safar  <marek.safar@gmail.com>
2439
2440         * class.cs: Use corlib to handle InternalMethodImplAttribute.
2441
2442 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2443
2444         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
2445         implementation flags.
2446
2447 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2448
2449         * class.cs: More optimizations for type parameters.
2450
2451 2007-03-15  Marek Safar  <marek.safar@gmail.com>
2452
2453         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
2454
2455         * ecore.cs, parameter.cs: More common code for both corlibs.
2456
2457         * typemanager.cs (IsGenericMethod): Simplified.
2458
2459 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2460
2461         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2462         'returns'.
2463         * statement.cs, iterators.cs, lambda.cs: Update to changes.
2464
2465         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
2466         unconditionally.  Simplify explanation.
2467         (Try.Resolve, Using.Resolve): Likewise.
2468
2469 2007-03-15  Martin Baulig  <martin@ximian.com>
2470
2471         Fix #80731.
2472
2473         * decl.cs (DeclSpace): If we're a partial class, use our
2474         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
2475
2476 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2477
2478         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2479         'throws'.
2480         (FlowBranching.UsageVector): Update to changes.
2481         (FlowBranching.MergeSiblings): Likewise.
2482         * statement.cs: Likewise.
2483
2484 2007-03-15  Martin Baulig  <martin@ximian.com>
2485
2486         Fix #79302.
2487
2488         * decl.cs
2489         (MemberCache): Added a special .ctor for type parameters.
2490
2491         * typemanager.cs
2492         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
2493         `MemberCache'.  
2494
2495 2007-03-09  Martin Baulig  <martin@ximian.com>
2496
2497         * enum.cs (Enum): Make this a TypeContainer.
2498         (EnumMember): Derive from `Const'.
2499
2500         * const.cs
2501         (Const.DoResolveValue): New protected virtual method; move most of
2502         the functionality of ResolveValue() here so we can override it in
2503         `EnumMember'.
2504         (Const.CreateConstantReference): Make this virtual.
2505
2506         * class.cs (Kind): Add `Kind.Enum'.
2507         (TypeContainer.Emit): Don't emit the enums here; they're already
2508         in the `RootContext.typecontainer_resolve_order'.
2509
2510         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
2511         here; they're already in the `typecontainer_resolve_order'.
2512
2513         * ecore.cs (EnumConstant.ConvertImplicitly): Add
2514         TypeManager.DropGenericTypeArguments().
2515
2516         * typemanager.cs
2517         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
2518         (TypeManager.IsEnumType): Likewise.
2519         (TypeManager.EnumToUnderlying): Likewise.
2520         (TypeManager.IsEqual): Add support for enums.
2521
2522 2007-03-12  Raja R Harinath  <rharinath@novell.com>
2523
2524         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
2525         DefaultParameterValueAttribute to be undefined, say if System.dll
2526         is not referenced.
2527
2528 2007-03-11  Marek Safar  <marek.safar@gmail.com>
2529
2530         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
2531         any mscorlib.
2532
2533 2007-03-10  Marek Safar  <marek.safar@gmail.com>
2534
2535         * class.cs, parameter.cs: Unified parameters verification.
2536
2537 2007-03-08  Martin Baulig  <martin@ximian.com>
2538
2539         * cs-parser.jay (constructor_header): Pass the location to the
2540         newly created TopLevelBlock.
2541
2542 2007-03-07  Martin Baulig  <martin@ximian.com>
2543
2544         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
2545
2546 2007-03-06  Miguel de Icaza  <miguel@novell.com>
2547
2548         * convert.cs (ExplicitReferenceConversionExists): Sync this method
2549         with the changes from David, fixes the build.
2550
2551 2007-03-05  David Mitchell  <dmitchell@logos.com>
2552
2553         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
2554         and its base interfaces to a one-dimensional array type S[],
2555         provided there is an implicit or explicit reference conversion
2556         from S to T.
2557
2558 2007-03-03  Marek Safar  <marek.safar@gmail.com>
2559
2560         * cs-tokenizer.cs: Implemented basic linq grammar.
2561
2562         * driver.cs: Set linq lang version on demand.
2563
2564 2007-02-26  Marek Safar  <marek.safar@gmail.com>
2565
2566         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
2567
2568 2007-02-25  Marek Safar  <marek.safar@gmail.com>
2569
2570         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
2571         (Fixes #80455)
2572
2573         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
2574         here.
2575         Check property and event extern attributes.
2576
2577         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
2578         charset.
2579
2580 2007-02-24  Marek Safar  <marek.safar@gmail.com>
2581
2582         A fix for bug #80407
2583         * ecore.cs: Don't report ambiguity error when methods have same parent.
2584
2585 2007-02-23  Marek Safar  <marek.safar@gmail.com>
2586
2587         A fix for bug #80878
2588         * class.cs, cs-parser.jay: Event property can host anonymous methods.
2589
2590 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2591
2592         * attribute.cs: Enable ExtensionAttribute presence test.
2593
2594 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2595
2596         * class.cs: Warn about missing GetHashCode only when Equals is override.
2597
2598         * decl.cs: Check accessibility of type arguments.
2599
2600         * typemanager.cs: Correctly report nullable array.
2601
2602 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2603
2604         * class.cs, report.cs: Capture more details when things go wrong.
2605
2606 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2607
2608         A fix for bug #80650
2609         * cs-parser.jay: Anonymous container starts at constructor declaration
2610         and not at block beginning because it has to be usable in constructor
2611         initializer.
2612
2613         * statement.cs: Use context location and not block one for error reporting.
2614
2615 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2616
2617         A fix for bug #78712
2618         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
2619         too.
2620
2621 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2622
2623         A fix for bug #80493 by Atsushi Enomoto
2624         * cs-parser.jay: Ignore invalid attribute target.
2625
2626 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2627  
2628         * cs-tokenizer.cs: Ignore '\0' as white space character.
2629
2630 2007-02-17  Miguel de Icaza  <miguel@novell.com>
2631
2632         * cs-parser.jay: Add support for lambda expressions to the mcs
2633         compiler as well.
2634
2635         * lambda.cs: Only clone when we are probing, not on the final call
2636         (Compatible is the final call). 
2637
2638         * statement.cs (CloneContext): Introduce class to provide block
2639         remapping during clone.
2640
2641         All statements Clone themselves now.
2642
2643         (Clone): special handling for blocks, when we clone a block, we
2644         register the block inside this routine, as children of the block
2645         might trigger a lookup. 
2646         
2647         * expression.cs: Add support for CloneContext in all expressions. 
2648         
2649 2007-02-17  Marek Safar  <marek.safar@gmail.com>
2650  
2651         A fix for bug #80493
2652         * statement.cs: Report ambiguous warning when interfaces are not related.
2653
2654 2007-02-15  Marek Safar  <marek.safar@gmail.com>
2655
2656         C# 3.0 extension methods.
2657
2658         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
2659         cannot be used directly.
2660
2661         * class.cs (Class.Emit): Emit extension attribute if any class method
2662         is extension method.
2663         (Method.Define): Add basic extension method validation conditions.
2664         (Method.Emit): Emit extension attribute for method.
2665
2666         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
2667         extension method exists. Currently we follow same approach as Microsoft
2668         does, emit even if a method or a class are private but this can change
2669         later.
2670
2671         * cs-parser.jay: Add handling of `this' keyword in method parameters
2672         context.
2673
2674         * decl.cs (DeclSpace.IsStaticClass): New property.
2675         (MemberCache.FindExtensionMethods): Looks for extension methods with
2676         defined name and extension type.
2677
2678         * doc.cs: Updated after OverloadResolve changes.
2679
2680         * driver.cs: Add new soft reference to System.Core.dll.
2681
2682         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
2683         (ExtensionMethodGroupExpr): Represents group of extension methods.
2684
2685         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
2686         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
2687         to MethodGroupExpr and made non-static for easier customization.
2688         (Invocation.DoResolve): Add extension method lookup when no standard
2689         method was found.
2690         (MemberAccess.DoResolve): Try extension methods if no member exists.
2691
2692         * modifiers.cs: Add METHOD_EXTENSION modifier.
2693
2694         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
2695         as well as candidate extension type.
2696         (ComputeNamespaces): When assembly constains extension methods registers
2697         them.
2698         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
2699         extension method lookup.
2700         (Namespace.LookupExtensionMethod): Looks for extension method in this
2701         namespace.
2702         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
2703         find a method which matches name and extensionType.
2704
2705         * parameter.cs (Parameter): Add This modifer.
2706         (HasExtensionMethodModifier): New property.
2707         (Resolve): Add extension parameter check.
2708         (ModFlags): turned to property to exclude this modifier as it is not real
2709         parameter modifier.
2710         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
2711
2712         * support.cs (ParameterData): Add ExtensionMethodType.
2713         (ReflectionParameters): Implemented ExtensionMethodType interface property.
2714
2715         * typemanager.cs: Add type and ctor extension attribute type.
2716
2717 2007-02-15  Miguel de Icaza  <miguel@novell.com>
2718
2719         * report.cs (DisableErrors, EnableErrors): used to prevent error
2720         output when we are "trying" to compile various methods with
2721         different types. 
2722
2723         * ecore.cs (Expression): Add Clone method that calls the virtual
2724         CloneTo method.  The current CloneTo method in Expression throws
2725         an exception so we can track down all the places where this must
2726         be implemented (not using abstract, because that would be a lot of
2727         up-front-work before we can start testing the implementation
2728         idea). 
2729
2730         Important: we only need Clone capabilities for expressions created
2731         by the parser, as the expressions we will be cloning are
2732         expressions in the pre-resolved state.   This vastly simplifies
2733         the work required. 
2734         
2735         (SimpleName): Add CloneTo that does nothing.
2736         (EmptyCast): Add CloneTo.
2737         
2738         * expression.cs (Binary): Implement CloneTo.
2739         (Invocation.IsApplicable): Store the current ec in
2740         EmitContext.TempEc and restore it on return.  This is used so we
2741         do not have to sprinkle hundres of methods with an extra
2742         EmitContext, we know that the only user is the lambda expression
2743         ImplicitConversionExists code. 
2744         
2745         (Argument): Add Cloning capabilities.
2746         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
2747         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
2748         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
2749         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
2750         IndexerAccess): Add Clone capability.
2751
2752         (LocalVariableReference, This): TODO: needs cloned Block mapping.
2753
2754         (Argument): Add cloning capability.
2755
2756         * assign.cs (Assign): Implement CloneTo.
2757
2758         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
2759         
2760         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
2761         version by calling Convert with the EmitContext (that we are
2762         currently storing in ec, this is not great, but will do for now,
2763         to avoid passing EmitContext parameters to hundreds of functions
2764         that do not need them now).
2765
2766         (SetExpression): Remove, it is not needed.
2767         
2768         (ContextualReturn): Implement CloneTo.
2769
2770         * statement.cs (Statement): Implement cloning infrastructure,
2771         similar to expressions.
2772
2773         (Block): Partial implementation of Clone for statements.
2774
2775         (Return): Implement clone.
2776         
2777         * constant.cs (Constant.CloneTo): New method, does nothing.
2778
2779         * codegen.cs (TempEc): Add a static EmitContext as a temporary
2780         solution, until we decide how to exactly do this.  
2781         
2782 2007-02-14  Marek Safar  <marek.safar@gmail.com>
2783  
2784         A fix for bug #80493
2785         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
2786         a property is override we need to use second accessor.
2787
2788 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2789  
2790         A fix for bug #80418
2791         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
2792         methods.
2793
2794 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2795
2796         Another fix for bug #80749
2797         * pending.cs: Abstract class has priority over interfaces.
2798
2799 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2800
2801         Another fix for bug #80749
2802         * pending.cs: Abstract class has priority over interfaces.
2803
2804 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2805
2806         Another fix for bug #80749
2807         * pending.cs: Abstract class has priority over interfaces.
2808
2809 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2810
2811         Another fix for bug #80749
2812         * pending.cs: Abstract class has priority over interfaces.
2813
2814 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2815
2816         * class.cs Better error message.
2817
2818         * driver.cs: Add shorter versions of -optimize option.
2819
2820 2007-02-13  Martin Baulig  <martin@ximian.com>
2821
2822         * class.cs (Constructor.Emit): Check the return value of
2823         ec.ResolveTopBlock() and return on error.
2824
2825 2007-02-13  Raja R Harinath  <rharinath@novell.com>
2826
2827         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
2828         message to fix error message regression.
2829
2830 2007-02-12  Marek Safar  <marek.safar@gmail.com>
2831
2832         * delegate.cs: Delegate creation expression cannot be of Nullable type.
2833
2834 2007-02-12  Marek Safar  <marek.safar@gmail.com>
2835
2836         A fix for bug #80749
2837         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
2838         its parent container.
2839
2840         * class.cs (DefineFieldInitializers): Each initializer can has different
2841         resolve context.
2842
2843         * const.cs: Updated.
2844
2845 2007-02-11  Miguel de Icaza  <miguel@novell.com>
2846
2847         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
2848         now all the heavy lifting to check that embedded statements or
2849         expressions have the right form is done in the ContextualReturn.
2850
2851         (ContextualReturn): New class.  
2852
2853         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
2854         method that can be invoked to report 201, so we do not replicate
2855         this everywhere.
2856
2857         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
2858         
2859         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
2860         treating tabs as spaces. 
2861
2862 2007-02-09  Marek Safar  <marek.safar@gmail.com>
2863
2864         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
2865         * assign.cs: Use full implicit conversion for right side check.
2866
2867 2007-02-09  Marek Safar  <marek.safar@gmail.com>
2868
2869         * statement.cs (Switch): Switch over boolean type is not standardized.
2870
2871 2007-02-08  Marek Safar  <marek.safar@gmail.com>
2872
2873         A fix for bug #80755
2874         * decl.cs (FindBaseEvent): Don't use method cache for events.
2875
2876 2007-02-07  Marek Safar  <marek.safar@gmail.com>
2877
2878         * cs-parser.jay: Better syntax error handling.
2879
2880         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
2881         instead of underlying type value.
2882
2883 2007-02-06  Marek Safar  <marek.safar@gmail.com>
2884
2885         * driver.cs: Check define identifier before is registered.
2886
2887         * namespace.cs: Use existing error message.
2888
2889         * report.cs: New warning.
2890
2891 2007-02-06  Marek Safar  <marek.safar@gmail.com>
2892
2893         A fix for bug #80742
2894         * expression.cs: Delegate Invoke method can be called directly.
2895
2896 2007-02-06  Marek Safar  <marek.safar@gmail.com>
2897
2898         A fix for bug #80676
2899         * class.cs (IsEntryPoint): The Main method can have params modifier.
2900
2901 2007-02-04  Miguel de Icaza  <miguel@novell.com>
2902
2903         * parameter.cs (Parameter, Parameters): Add Clone method.
2904
2905         * anonymous.cs (Compatible): Turn method into virtual method, so
2906         LambdaExpression can implement a different behavior.
2907
2908         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
2909         out the basic checking here, so it can be used by
2910         LambdaExpressions.
2911         
2912         * lambda.cs: Introduce "Compatible" function that will do the
2913         heavy lifting.
2914
2915 2007-02-02  Marek Safar  <marek.safar@gmail.com>
2916
2917         * attribute.cs: Unified one error message.
2918
2919         * class.cs (Class): Use type attributes and not properties to test static
2920         class.
2921         (IsEntryPoint): Don's pass local variable.
2922
2923         * convert.cs: Removed duplicate check.
2924
2925         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
2926
2927         * driver.cs: Don't crash when soft reference does not exist.
2928
2929         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
2930         (UsingEntry): Removed redundant allocation.
2931
2932         * parameter.cs: Add fast path for type parameters.
2933
2934         * support.cs: Don't allocate attribute when it's not used.
2935
2936 2007-01-30  Miguel de Icaza  <miguel@novell.com>
2937
2938         * anonymous.cs
2939         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
2940         this into a virtual method, so we can override it in LambdaExpression.
2941
2942         * driver.cs: Improve diagnostics in case of failure. 
2943
2944         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
2945         write a function that is slightly more complex and that parses:
2946
2947         type identifier [, type identifier]* )
2948
2949         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
2950         this expression:
2951
2952                 (canEmpty ? i >= 0 : i > 0)
2953
2954 2007-01-30  Raja R Harinath  <rharinath@novell.com>
2955
2956         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
2957         exception on possibly valid code.
2958
2959 2007-01-29  Raja R Harinath  <rharinath@novell.com>
2960
2961         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
2962         Push/PopPosition.
2963         (parse_opt_type_arguments): Remove.  It's almost the same as
2964         parse_less_than.
2965         (parse_namespace_or_typename): Use parse_less_than.
2966
2967 2007-01-28  Miguel de Icaza  <miguel@novell.com>
2968
2969         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
2970         this bug took a few hours to find, because the state saved and
2971         restored by PushPosition and PopPosition was ignoring the state of
2972         parse_generic_less_than.
2973
2974         I can also now remove the handling of OP_LT and OP_GT, this solves
2975         the big mistery.
2976         
2977         * cs-tokenizer.cs: store the location for the ARROW token, we use
2978         that in the parser.
2979
2980         (PushPosition, PopPosition): save/restore also `current_token',
2981         restore `parse_generic_less_than' (was missing).
2982
2983         (parse_opt_type_arguments): use parse_type, not
2984         parse_namespace_or_typename to parse types.
2985
2986         * lambda.cs: Empty new file, will eventually have the lambda
2987         expression implementation.
2988
2989         * lambda.test: used to test the internal tokenizer. 
2990
2991         * report.cs (FeatureIsNotISO1): Rename from
2992         FeatureIsNotStandardized, because it was about the language level
2993         (1 vs 2) it was not about standarization.
2994
2995         (FeatureRequiresLINQ): New.
2996
2997         * support.cs (SeekableStreamReader): Only require that the reader
2998         is a TextReader, not a StreamReader, so we can plug StringReader. 
2999
3000         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
3001         given position in the input stream the following tokens can be
3002         parsed as a type followed by an identifier.
3003
3004         (is_punct): after a '(' if parse_type_and_parameter returns true,
3005         then return a special token OPEN_PARENS_LAMBDA which is used to
3006         avoid reduce/reduce errors in the grammar for the
3007         lambda_expression rules.
3008
3009         (parse_type): implement a type parser inside the
3010         tokenizer, the parser only returns true or false depending on
3011         whether the input at a given position can be parsed as a type.
3012
3013         (peek_token): new method used during type parsing.
3014
3015 2007-01-28  Raja R Harinath  <rharinath@novell.com>
3016
3017         Fix #80531
3018         * anonymous.cs (ScopeInfo.InflateParameters): New.
3019         (AnonymousContainer.Resolve): Use it to redirect types of
3020         delegate parameters.
3021
3022 2007-01-27  Raja R Harinath  <rharinath@novell.com>
3023
3024         Fix #80530
3025         * expression.cs (Error_InvalidArguments): Don't use two different
3026         messages for CS1503.  Use ExtraInformation and
3027         SymbolRelatedToPreviousError instead.
3028
3029         Fix #80358
3030         * decl.cs (DeclSpace.initialize_type_params): Don't access
3031         'type_params' of a partial class directly.
3032
3033 2007-01-26  Miguel de Icaza  <miguel@novell.com>
3034
3035         * constant.cs: Removed a handful of out-of-range checks that were
3036         not necessary. 
3037
3038 2007-01-25  Marek Safar  <marek.safar@gmail.com>
3039
3040         * expression.cs (CheckUselessComparison): Add additional check for char
3041         constants.
3042
3043         * namespace.cs: Fixed typo.
3044
3045 2007-01-23  Miguel de Icaza  <miguel@novell.com>
3046
3047         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
3048         gone, instead we inline the test, preventing the needless casts to
3049         longs, ulongs and doubles for the parameters, avoiding calls to
3050         methods that overchecked stuff, and instead inlined things
3051         nicely. 
3052
3053 2007-01-20  Marek Safar  <marek.safar@gmail.com>
3054
3055         * cs-parser.jay: Better parameter error handling.
3056
3057 2007-01-17  Marek Safar  <marek.safar@gmail.com>
3058
3059         A fix for bug #80368, #80522
3060         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
3061         whether array initializer contains constants only.
3062         (ArrayCreation.Emit): Use better formula to decide when
3063         are array initializers for static initialization.
3064         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
3065         have to emit even constants otherwise they are pre-initialized.
3066
3067 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
3068             Raja R Harinath  <rharinath@novell.com>
3069
3070         Fix emit order of 'get' vs. 'set'.
3071         * support.cs (Accessors): New.
3072         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
3073         Note the order in which accessors are declared in the source.
3074         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
3075         Refactored from Property.Define and Indexer.Define.
3076         (PropertyBase.DefineAccessors): New helper that calls the above in
3077         appropriate order as noted by the parser.
3078         (Property.Define, Indexer.Define): Update to changes.
3079         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
3080
3081 2007-01-17  Raja R Harinath  <rharinath@novell.com>
3082
3083         Fix cs0029-6.cs and gcs0029-2.cs (regression)
3084         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
3085         there's an implicit conversion from the current type to the target
3086         type before converting the underlying constant.
3087
3088 2007-01-16  Marek Safar  <marek.safar@gmail.com>
3089
3090         * const.cs (ResolveValue): Updated after constant conversion was made more
3091         generic.
3092
3093         * constant.cs (GetAttributableValue): constant to object conversion is
3094         used for attributes only.
3095         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
3096         constant conversions.
3097         (LongConstant.ConvertImplicitly): Ditto.
3098
3099         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
3100         (ImplicitConversionStandard): Handle constant conversion as extra step.
3101         It solves the issue when constant conversion was called indirectly like
3102         inside array initializer and constant folding was skipped.
3103
3104         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
3105         this change.
3106
3107         * statement.cs(ImplicitConversionStandard): Updated after constant
3108         conversion was made more generic.
3109
3110 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
3111
3112         * expression.cs (As.DoResolve): Use GenericConstraints instead of
3113         Constraints, solves the problem where the compiler incorrectly
3114         reported that a type parameter was not constrained to a class (Bug
3115         80518)
3116
3117 2007-01-14  Marek Habersack  <grendello@gmail.com>
3118
3119         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
3120
3121 2007-01-14  Marek Safar  <marek.safar@gmail.com>
3122
3123         A fix for bug #80368
3124         * assign.cs (FieldInitializer): New class implements field
3125         initializer statement.
3126
3127         * attribute.cs: Update after FieldMember rename.
3128
3129         * class.cs (PropertyBasedMember): New common class for property based
3130         types.
3131         (InterfaceMemberBase): New base class for all members which can be used as
3132         an interface members.
3133         (MethodCore): Moved really common code to InterfaceMemberBase.
3134         (Method.Define): Equal and GetHasCode detection is relevant for methods
3135         only.
3136         (MethodData.Define): Don't assume that public event implements an
3137         interface automatically.
3138         (MethodData.DefineMethodBuilder): Issue an error even if only extern
3139         modifier is used.
3140         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
3141         (FieldMember): Merged with FieldBase.
3142         (EventProperty.AEventPropertyAccessor): New specialization to check whether
3143         event extern modifier can be used.
3144         (EventField.EventFieldAccessor): Moved event field specific code here.
3145         (Event.AllowedModifiers): Even event can be extern.
3146         (Event.FindOutBaseMethod): New override specific to events.
3147         (Indexer.parameters): Reintroduce parameters because base class holds
3148         only properties common data.
3149         (Indexer.CheckForDuplications): Indexers are threated as methods so we
3150         need do extra parameters check.
3151
3152         * const.cs: Update after FieldMember rename.
3153
3154         * decl.cs (MemberCache.FindBaseEvent): New method.
3155
3156         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
3157         to reflect that indexer is now derived from PropertyBased.
3158
3159         * ecore.cs (GetMemberType): Made public.
3160         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
3161         obsolete event.
3162
3163         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
3164         
3165         * typemanager.cs (CSharpSignature): Correctly print event accessors.
3166         (RegisterEvent): Removed.
3167         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
3168         (GetPrivateFieldOfEvent): Renamed to GetEventField.
3169
3170 2007-01-11  Raja R Harinath  <rharinath@novell.com>
3171
3172         Fix #80249
3173         * statement.cs (CollectionForeach.TryType): Prefer generic
3174         GetEnumerator over non-generic variant.  Fix code to follow comments.
3175
3176 2007-01-09  Raja R Harinath  <rharinath@novell.com>
3177
3178         Fix #80446
3179         * support.cs (ReflectionParameter): Don't use an invalid index on
3180         the generic parameter data.
3181
3182 2007-01-08  Miguel de Icaza  <miguel@novell.com>
3183
3184         * driver.cs: Just add a tiny bit of infrastructure.
3185
3186 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3187
3188         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
3189         where field type is struct from current assembly.
3190         
3191         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
3192         it is possible.
3193
3194 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3195
3196         A fix for bug #80381
3197         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
3198         the core types.
3199
3200         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
3201         messages.
3202         (Namespace.LookupType): Always use core types from corlib when speficied.
3203
3204         * report.cs: A new warning.
3205
3206         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
3207         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
3208         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
3209
3210         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
3211         (InitCoreTypes): Set expression type of object_type and value_type
3212         immediately after lookup.
3213
3214 2007-01-01  Miguel de Icaza  <miguel@novell.com>
3215
3216         * cs-tokenizer.cs: Accept Pc class characters (Connector
3217         Punctuation) as valid identifiers.  Fixes #78259
3218
3219         * expression.cs (Invocation.DoResolve): Moved the check for the
3220         use of `this' for doing method calls to the Invocation resolution
3221         step, after overload resolution has taken place instead of doing
3222         the check at the low-level `This.DoResolve' level.
3223
3224         The `This.DoResolve'(appens before overload resolution, so it has
3225         no way of knowing if the method that will be called will be
3226         instace or static, triggering an erroneous report for cs0188 (Bug
3227         78113).
3228
3229         We now do the check for instance method invocations after we know
3230         what method will be called.
3231
3232         (This.CheckThisUsage): Move the actual use of this structure
3233         checking into its own method and expose it. 
3234
3235         * Everywhere that called Error_ValueCannotBeConverted: pass a new
3236         EmitContext.
3237
3238         Exceptions: Null.ConvertImplicitly,
3239         Constant.ImplicitConversionRequired as there are too many call
3240         sites for passing the ec. 
3241
3242         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
3243         EmitContext, if the value is null, then we do not try to provide
3244         the extra information from the error (If a userdefined conversion
3245         exists, as UserDefinedConversion requires a non null-EmitContext).
3246
3247         Fixes: #80347
3248
3249 2006-12-30  Raja R Harinath  <rharinath@novell.com>
3250
3251         * flowanalysis.cs (MyBitVector): Document some invariants.
3252         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
3253         introduced below, and add a couple of others, 
3254
3255 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3256
3257         * attribute.cs (GetMethodObsoleteAttribute): Uses new
3258         GetPropertyFromAccessor and GetEventFromAccessor.
3259         
3260         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
3261         overrides non-obsolete one.
3262         (Indexer.Define): Error message has been moved to the parser.
3263
3264         * cs-parser.jay: Better syntax errors handling.
3265
3266         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
3267         when an invocation has no arguments.
3268
3269         * ecore.cs: Removed not used caching.
3270
3271         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
3272         implementation.
3273
3274         * report.cs: Add a new warning.
3275
3276         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
3277
3278         * typemanager.cs (enumeration_type): Removed.
3279         (CSharpSignature): Reuses IsSpecialMethod.
3280         (IsEqual): Hack for MS BCL.
3281         (GetPropertyFromAccessor): New method.
3282         (GetEventFromAccessor): New method.
3283         (IsSpecialMethod): Fixed to handle more cases.
3284
3285 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3286
3287         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
3288         Made white spaces array static.
3289
3290         * ecore.cs (RemoveGenericArity): Optimized.
3291
3292         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
3293         10 times faster).
3294         (MyBitVector.initialize_vector): Simplified.
3295
3296 2006-12-22  Miguel de Icaza  <miguel@novell.com>
3297
3298         * ecore.cs: Am not entirely happy with this hack, but it seems to
3299         address the issue in 80257 (a small test case for
3300         CreativeDocs.NET). 
3301
3302         I set the MethodGroupExpr.Type to an internal compiler type
3303         (itself in this case) to force the resolution to take place.   Why
3304         it does not take place with a null is beyond me.
3305
3306 2006-12-20  Marek Safar  <marek.safar@gmail.com>
3307
3308         A fix for bug #80288
3309         * expression.cs (ResolveOperator): Consider user defined conversion for
3310         logical and operator too.
3311         (EmitBranchable): Optimization for logical and when full constant folding
3312         could not be applied but one operand is constant.
3313
3314 2006-12-19  Marek Safar  <marek.safar@gmail.com>
3315
3316         * class.cs (GetClassBases): Write 5 times every day, will never use
3317         FullName for error reporting.
3318
3319         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
3320
3321 2006-12-19  Martin Baulig  <martin@ximian.com>
3322
3323         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
3324         the symbol file info here.
3325
3326 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3327
3328         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
3329         of `elseif' is taking then following sections are not taking.
3330         Fixes an issue reported on mono mailing list.
3331
3332 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3333
3334         A fix for bug #80300
3335         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
3336         a caller is not taking.
3337
3338 2006-12-18  Raja R Harinath  <rharinath@novell.com>
3339
3340         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
3341         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
3342         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
3343         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
3344         * class.cs: Update to changes.
3345
3346 2006-12-17  Marek Safar  <marek.safar@gmail.com>
3347
3348         A fix for bug #79934
3349         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
3350         partial container.
3351
3352         * class.cs (ResolveMembers): Register an iterator in current container and
3353         not in shared one.
3354
3355 2006-12-16  Raja R Harinath  <rharinath@novell.com>
3356
3357         Fix test-543.cs
3358         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
3359         satisfy a params annotated parameter.
3360
3361 2006-12-16  Marek Safar  <marek.safar@gmail.com>
3362
3363         A fix for bug #77014
3364         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
3365         paramters correctly and not rely on hacks in Parameters class.
3366         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
3367         at any possition.
3368         (Invocation.VerifyArgumentsCompat): Ditto.
3369         (Invocation.EmitArguments): Changed to correctly emit params arguments at
3370         any possition.
3371
3372         * parameter.cs (HasParams): Don't assume that params is the last one.
3373
3374         * support.cs (ReflectionParameters.ctor): Look for params attribute
3375         correctly.
3376         (ReflectionParameters.ParameterType): Removed hack when we returned last
3377         parameter for out of range parameters.
3378         (ParameterName, ParameterModifier): Ditto.
3379
3380 2006-12-14  Marek Safar  <marek.safar@gmail.com>
3381
3382         A fix for bug #79987
3383         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
3384         when assembly is not CLS compliant but type is. I have no idea why is this
3385         allowed.
3386
3387         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
3388
3389 2006-12-13  Miguel de Icaza  <miguel@novell.com>
3390
3391         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
3392         in struct constructors, they are basically no-ops.
3393
3394 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3395
3396         * cs-tokenizer.cs (Position): Save preprocessor status too.
3397
3398 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3399
3400         A fix for bug #77794
3401         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
3402
3403 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3404
3405         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
3406         Fixes #69299.
3407         (pp_expr): Report error for an invalid expression.
3408         (handle_preprocessing_directive): Simplified; add more error checking.
3409
3410 2006-12-11  Marek Safar  <marek.safar@gmail.com>
3411
3412         A fix for bug #74939
3413         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
3414         directives handling.
3415
3416 2006-12-10  Marek Safar  <marek.safar@gmail.com>
3417
3418         A fix for bugs #80093, and #75984
3419         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
3420         logic, it seems to me as it worked before "by coincidence".
3421         (xtoken): Simplified to use reworked handle_preprocessing_directive.
3422         (cleanup): Enabled endif check.
3423
3424 2006-12-09  Marek Safar  <marek.safar@gmail.com>
3425
3426         A fix for bug #80162
3427         * statement.cs (CollectionForeach.TryType): Generics and non-generics
3428         enumerators are never ambiguous.
3429
3430 2006-12-08  Raja R Harinath  <rharinath@novell.com>
3431
3432         Fix #80060
3433         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
3434
3435 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3436
3437         A fix for bug #80144
3438         * class.cs (EventProperty.Define): Explicit implementation means
3439         that an even is used.
3440
3441 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3442
3443         Fixes the operators implementation (part II)
3444
3445         * cfold.cs (DoConstantNumericPromotions): Renamed to
3446         DoBinaryNumericPromotions and simplified.
3447         (BinaryFold): Couple of conversion fixes; simplified.
3448
3449         * constant.cs, ecore.cs, literal.cs
3450         (ToType): Renamed to ConvertImplicitly.
3451         (Reduce): Renamed to ConvertExplicitly.
3452
3453         * class.cs, convert.cs: Updated.
3454
3455         * expression.cs: TryReduce doesn't throw an exception.
3456
3457 2006-12-01  Marek Safar  <marek.safar@gmail.com>
3458
3459         A fix for bug #80108
3460         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
3461         compatible.
3462
3463 2006-11-30  Marek Safar  <marek.safar@gmail.com>
3464
3465         Fixes unary operators implementation (part I)
3466         Also fixes #80026
3467
3468         * cfold.cs (Error_CompileTimeOverflow): Made internal
3469
3470         * const.cs (IConstant): Changed to use reference to constant and
3471         not constant itself.
3472         Updated IConstant implementations.
3473
3474         * constant.cs (CreateConstant): New factory method.
3475         Updated IConstant implementation.
3476
3477         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
3478
3479         * ecore.cs: Updated to use CreateConstantReference.
3480
3481         * enum.cs: Reflects IConstant changes.
3482
3483         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
3484
3485         * literal.cs (NullConstant): Change to be independently usable.
3486
3487 2006-11-29  Martin Baulig  <martin@ximian.com>
3488
3489         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
3490         we need to emit the scope initializer before calling the base .ctor.
3491
3492         * anonymous.cs: Merged back from the new anonymous methods branch.
3493         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
3494
3495         * expression.cs (ParameterReference.DoResolveBase): Create a
3496         "normal" ScopeInfo when capturing parameters rather than using the
3497         root scope; this makes things work with anonymous methods having
3498         parameters.
3499
3500         * statement.cs
3501         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
3502
3503 2006-11-22  Marek Safar  <marek.safar@gmail.com>
3504
3505         A fix for bug #79987
3506         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
3507         check to a base class.
3508         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
3509         only when assembly has missing attribute.
3510         * report.cs: Update.
3511
3512 2006-11-21  Marek Safar  <marek.safar@gmail.com>
3513
3514         * cs-tokenizer.cs: Merged with gmcs version.
3515
3516 2006-11-20  Marek Safar  <marek.safar@gmail.com>
3517
3518         * cs-tokenizer.cs,
3519         * cs-parser.jay: Better error message when partial keyword is misplaced.
3520
3521 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
3522
3523         A fix for bug #79810
3524         report.cs: CS1058 only applies to 2.0 profile (gmcs).
3525         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
3526         a RuntimeWrappedException by default.
3527
3528 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3529
3530         A fix for bug #79843
3531         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
3532         implementation.
3533         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
3534
3535 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3536
3537         * driver.cs, namespace.cs: Uses faster IndexOf version.
3538
3539 2006-11-17  Marek Safar  <marek.safar@gmail.com>
3540
3541         A fix for bug #79941
3542         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
3543         operators.
3544         (Operator.Define): Implicit/Explicit operator of same type is duplicate
3545         even if internal name is different.
3546         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
3547         (UserDefinedConversion): Simplified as the operators cannot be internal.
3548         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
3549         conversions.
3550         (MethodLookup): Replaced EmitContext with parentType.
3551         * expression.cs: Updated.
3552
3553 2006-11-09  Raja R Harinath  <rharinath@novell.com>
3554
3555         * driver.cs (BadAssembly): Handle all the ugliness of
3556         DefineDynamicAssembly.
3557
3558 2006-11-08  Raja R Harinath  <rharinath@novell.com>
3559
3560         Address parts of #58244 -- most of what's left is in the runtime
3561         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
3562         CS1509 error checks, and handle them for all assembly loads, not
3563         just the first invocation.
3564         (LoadModule): Likewise.  Move handling of 'adder_method' ...
3565         * codegen.cs (AssemblyClass.AddModule): ... here.
3566
3567 2006-11-02  Marek Safar  <marek.safar@gmail.com>
3568
3569         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
3570         IEnumerable<T> is ambiguous.
3571
3572 2006-10-31  Marek Safar  <marek.safar@gmail.com>
3573
3574         A fix for bug #67689
3575         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
3576         GetEnumerator is ambiguous.
3577
3578         * report.cs: Add new warning.
3579
3580 2006-10-29  Marek Safar  <marek.safar@gmail.com>
3581
3582         A fix for bug #78602
3583         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3584         to protected member can be nested type.
3585
3586 2006-10-28  Marek Safar  <marek.safar@gmail.com>
3587
3588         A fix for bug #78965
3589         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3590         to protected member must derive from current type.
3591
3592 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3593
3594         assign.cs: Reuses error method.
3595
3596         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
3597         instead of type for constants.
3598         (Expression.Error_ValueAssignment): Common error method.
3599
3600         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
3601         for any assignment.
3602
3603 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3604
3605         A fix for bug #79081
3606         * expression.cs (MemberAccess.DoResolve): Check nested type
3607         accessibility.
3608
3609 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
3610
3611         * doc.cs : nested delegates were not handled. Fixed bug #79754.
3612
3613 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3614
3615         A fix for bug #76591
3616         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
3617
3618 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3619
3620         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
3621         type forwarder of the same type multiple times.
3622
3623 2006-10-26  Raja R Harinath  <rharinath@novell.com>
3624
3625         Fix #78820
3626         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
3627         instance as an rvalue, even when we later resolve as an lvalue.
3628
3629 2006-10-25  Martin Baulig  <martin@ximian.com>
3630
3631         * anonymous.cs: Fix #79673.
3632
3633 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
3634
3635         A fix for bug #79666
3636         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
3637         ignored when is optimized (= default value) as its value is already set.
3638
3639 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3640
3641         A fix for bug #79724
3642         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
3643         TypeContainer for type lookup.
3644
3645 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3646
3647         A fix for bug #79231
3648         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
3649         * expression.cs (OverloadResolve): Always convert type name for
3650         an error message.
3651         (ResolveNamespaceOrType): Don't confuse a nested type with any 
3652         other member.
3653
3654 2006-10-18  Martin Baulig <martin@ximian.com>
3655
3656         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
3657
3658 2006-10-17  Miguel de Icaza  <miguel@novell.com>
3659
3660         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
3661         an int32, but requesting an int64 from the conversion
3662
3663 2006-10-12  Martin Baulig  <martin@ximian.com>
3664
3665         * anonymous.cs
3666         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
3667         
3668 2006-10-12  Martin Baulig  <martin@ximian.com>
3669
3670         * statement.cs
3671         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
3672
3673 2006-10-11  Miguel de Icaza  <miguel@novell.com>
3674
3675         * convert.cs: Remove broken code: I was doing the "Existance"
3676         tests for Implicit conversions.
3677
3678 2006-10-10  Miguel de Icaza  <miguel@novell.com>
3679
3680         * convert.cs: Added one missing case in
3681         ImplicitStandardConversionExists uint64 to intptr.
3682
3683         Fixes #59800
3684         
3685         * typemanager.cs (uintptr_type): another core known type.   
3686
3687         * ecore.cs (OperatorCast): routine used to do cast operations that
3688         depend on op_Explicit.  We could change some of the Decimal
3689         conversions to use this.
3690
3691         This one has a probe mechanism that checks both types for an op_
3692         which it coudl be used to eliminate two classes: CastToDecimal
3693         and CastFromDecimal.
3694
3695         * convert.cs: Implement the conversions documented in #59800
3696         
3697 2006-10-10  Martin Baulig  <martin@ximian.com>
3698
3699         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
3700         before RootScope.ResolveMembers().
3701
3702         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
3703         `CurrentType' if appropriate.
3704
3705 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
3706
3707         A fix for bug #78568
3708         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
3709         when contains binary operators.
3710         * cs-parser.jay: Updated.
3711
3712 2006-10-09  Martin Baulig  <martin@ximian.com>
3713
3714         * delegate.cs
3715         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
3716         moved that into Define() and also do the other type parameter
3717         checks there.  Fixes #79094.  Added gtest-292.cs.
3718
3719         * expression.cs
3720         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
3721         since that doesn't include type parameters; don't use `Ldelema'
3722         for type parameters.  Fixes #78980.  Added gtest-293.cs.
3723
3724 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
3725
3726         A fix for #77796
3727         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
3728         conversion is allowed.
3729
3730 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3731
3732         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
3733         error reporting when no error occurs.
3734
3735 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3736
3737         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
3738         does not exist.
3739
3740 2006-10-06  Raja R Harinath  <rharinath@novell.com>
3741
3742         Fix #79584
3743         * class.cs (DefineTypeBuilder): Check circular dependencies before
3744         setting the parent of the TypeBuilder.
3745         (CheckRecursiveDefinition): Don't use 'BaseType', since
3746         it may not be valid until after DefineTypeBuilder.  Use
3747         'base_type' instead.
3748
3749 2006-10-04  Martin Baulig  <martin@ximian.com>
3750
3751         Merged the Anonymous Methods patch.
3752
3753         * anonymous.cs, iterators.cs: The new anonymous methods code.
3754
3755         * statement.cs (Variable): New public abstract class.
3756         (LocalInfo.Variable): New public property.
3757         (LocalInfo.ResolveVariable): New public method.
3758         (Block.Flags): Add `IsIterator'.
3759         (Block.AddVariable): Improved the CS0136 check.
3760         (Block.AnonymousChildren): New public property.
3761         (Block.AddAnonymousChild): New public method.
3762         (ToplevelBlock): Update to use the new anonymous method framework.
3763         (ToplevelBlock.ctor): `container' is now a `Block' and not a
3764         `ToplevelBlock'; this is required to correctly implement the
3765         CS0136 check.
3766         (Fixed, Using): Use `TemporaryVariable' instead of directly
3767         creating the `LocalBuilder'.
3768
3769         * parameter.cs (Parameter.ResolveVariable): New public method.
3770         (Parameters.ResolveVariable): Likewise.
3771
3772         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
3773
3774         * class.cs (TypeContainer): Replaced the `iterators' list and
3775         corresponding methods with a list of `CompilerGeneratedClass'es.
3776         (TypeContainer.ResolveMembers): New public method.
3777         (Method): `IIteratorContainer' has been replaced by
3778         `IAnonymousHost'.
3779
3780         * expression.cs (VariableReference): New public abstract base
3781         class for `LocalVariableReference', `ParameterReference' and
3782         `This'.
3783
3784         * codegen.cs (EmitContext): Removed `capture_context',
3785         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
3786         (EmitContext.EmitThis): Removed.
3787
3788         * cs-parser.jay: Replace `iterator_container' with
3789         `anonymous_host'.       
3790
3791 2006-10-04  Martin Baulig  <martin@ximian.com>
3792
3793         * generic.cs (GenericMethod): Don't make this abstract.
3794         (Constraints.Clone): Added dummy implementation.
3795
3796 2006-10-04  Raja R Harinath  <harinath@gmail.com>
3797
3798         Fix #79577
3799         * namespace.cs (LookForAnyGenericType): Avoid nullref on
3800         'declspaces'.  Avoid allocating arrays willy-nilly.
3801
3802         Fix #79553
3803         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
3804         cases out of the switch.
3805
3806 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
3807
3808         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
3809         message when non-generic type is used with the type arguments.
3810         * expression.cs: Updated.
3811
3812 2006-09-28  Raja R Harinath  <rharinath@novell.com>
3813
3814         Fix #79013
3815         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
3816         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
3817         Change semantics slightly.  Don't insist on having only one
3818         temporary EmptyExpression -- just throttle the creation of new ones.
3819
3820         Fix #79451
3821         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
3822         non-interfaces too.  If no methods are found, don't try to create
3823         a MethodGroupExpr.
3824
3825 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
3826
3827         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
3828         generic type.
3829
3830         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
3831         us produce better error message.
3832
3833 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
3834
3835         * expression.cs (Binary.ResolveOperator): Warn about a side effect
3836         of the `|' operator.
3837
3838         * report.cs: A new warning added.
3839
3840 2006-09-27  Martin Baulig  <martin@ximian.com>
3841
3842         * generic.cs (GenericMethod): Don't make this abstract.
3843
3844 2006-09-27  Martin Baulig  <martin@ximian.com>
3845
3846         * report.cs
3847         (InternalErrorException): Added overloaded ctor taking a params array.
3848
3849 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
3850
3851         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
3852         Fixed the cases when same error was reported twice.
3853
3854         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
3855         now report symbol information.
3856
3857 2006-09-25  Martin Baulig  <martin@ximian.com>
3858
3859         * class.cs: Completely unified with the gmcs version.
3860
3861 2006-09-25  Martin Baulig  <martin@ximian.com>
3862
3863         * typemanager.cs (TypeManager.IsNullableType): New public function.
3864         (TypeManager.IsNullableTypeOf): Likewise.
3865         (TypeManager.IsNullableValueType): Likewise.
3866
3867         * class.cs (MethodCore): Added the `GenericMethod' argument from
3868         gmcs and also unified all classes derived from `MethodCore' with gmcs.
3869
3870 2006-09-24  Raja R Harinath  <harinath@gmail.com>
3871
3872         * convert.cs: Unify with gmcs version.
3873
3874 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
3875
3876         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
3877         verify them as well.
3878
3879         * report.cs: New warning.
3880
3881 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
3882
3883         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
3884         for anonymous block with out argument.
3885
3886 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
3887
3888         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
3889         not used private events only.
3890
3891 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
3892
3893         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
3894
3895         * const.cs (Const.Define): Check for constant type.
3896         (Const.IsConstantTypeValid): Looks for valid constant types.
3897
3898         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
3899
3900         * ecore.cs (EmptyConstantCast): New common class for all constant based
3901         EmptyCast(s).
3902
3903         * expression.cs (Is.DoResolve): Handle null constant especially.
3904         (New.DoResolve): Check for new void().
3905         (MemberAccess.DoResolve): Cope with all kind of nulls.
3906
3907         * literal.cs (NullConstant): Uses EmptyConstantCast.
3908         (NullDefault): Based on EmptyConstantCast.
3909         (NullLiteral): Uses EmptyConstantCast.
3910
3911         * statement.cs (Block.ResolveMeta): Check for constant type.
3912
3913 2006-09-22  Martin Baulig  <martin@ximian.com>
3914
3915         * delegate.cs, attribute.cs: Merged with the gmcs versions.
3916
3917 2006-09-22  Raja R Harinath  <rharinath@novell.com>
3918
3919         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
3920         not the null type.
3921
3922         Fix part of #79451
3923         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
3924         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
3925         code slightly.
3926
3927 2006-09-22  Martin Baulig  <martin@ximian.com>
3928
3929         * ecore.cs: Merged with the gmcs version.
3930
3931         * generic.cs (ConstructedType): New dummy class.
3932         (TypeArguments): Don't make this abstract.
3933
3934         * typemanager.cs
3935         (TypeManager.IsGenericTypeDefinition): New method.
3936         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
3937
3938 2006-09-22  Raja R Harinath  <rharinath@novell.com>
3939
3940         * expression.cs (ComposedCast): Check for arrays of TypedReference
3941         before creating the type, not after.
3942
3943 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
3944
3945         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
3946         after ToType change.
3947
3948         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
3949         when constant must be implicitly convertible.
3950
3951         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
3952
3953         * ecore.cs (NullCast): Derives from NullConstant.
3954
3955         * expression.cs (Is.DoResolve): Removed useless variables.
3956         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
3957         (New.Constantify): Add enum support.
3958         (MemberAccess.DoResolve): Add warning when accessing null constant or
3959         variable.
3960
3961         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
3962         property.
3963
3964         * literal.cs (NullConstant): New abstract class with common
3965         functionality for all null specializations.
3966         (NullDefault): Represents default(X) when result can be
3967         reduced to null.
3968         (NullLiteral): Updated.
3969
3970         * report.cs: Add new warning.
3971
3972 2006-09-21  Martin Baulig  <martin@ximian.com>
3973
3974         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
3975
3976 2006-09-21  Martin Baulig  <martin@ximian.com>
3977
3978         * generic.cs (GenericConstraints): New dummy class.
3979         (Constraints): Likewise.
3980         (TypeParameter): Likewise.
3981         (TypeParameterName): Likewise.
3982         (GenericMethod): Likewise.
3983
3984         * typemanager.cs (TypeManager.GetGenericArguments): New method.
3985
3986         * decl.cs: Merged with the gmcs version.
3987
3988 2006-09-21  Raja R Harinath  <rharinath@novell.com>
3989
3990         * generic.cs (TypeParameter): Implement IMemberContainer.
3991         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
3992
3993         * rootcontext.cs: Unify with gmcs version.
3994
3995         * report.cs: Unify with gmcs version.
3996         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
3997         from gmcs/generics.cs.
3998         * generics.cs (TypeParameter): New dummy class.
3999
4000         * support.cs: Unify with gmcs version.
4001
4002 2006-09-20  Raja R Harinath  <rharinath@novell.com>
4003
4004         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
4005         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
4006
4007         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
4008         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
4009         * mcs.exe.sources: Add generic.cs.
4010
4011         * codegen.cs: Unify with gmcs version.
4012
4013         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
4014         (EmitContext): Add GenericDeclContainer implementation.
4015         * decl.cs (MemberCore, DeclSpace): Likewise.
4016         * namespace.cs: Remove #ifdef GMCS_SOURCE.
4017
4018         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
4019         MCS TypeManager has a corresponding dummy method.
4020
4021 2006-09-19  Martin Baulig  <martin@ximian.com>
4022
4023         * expression.cs: Completely merged with the gmcs version.
4024
4025 2006-09-19  Martin Baulig  <martin@ximian.com>
4026
4027         * expression.cs (Invocation): Merged with the gmcs version.
4028         (ArrayAccess.GetStoreOpcode): Likewise.
4029
4030 2006-09-19  Martin Baulig  <martin@ximian.com>
4031
4032         * typemanager.cs
4033         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
4034         (TypeManager.IsGenericMethodDefinition): Likewise.
4035
4036 2006-09-19  Martin Baulig  <martin@ximian.com>
4037
4038         * typemanager.cs
4039         (TypeManager.IsEqual): Moved the gmcs implementation here.
4040         (TypeManager.DropGenericTypeArguments): Likewise.
4041         (TypeManager.DropGenericMethodArguments): Likewise.
4042         (TypeManager.GetTypeArguments): Moved here from gmcs.
4043         (TypeManager.HasGenericArguments): Likewise.
4044
4045 2006-09-19  Martin Baulig  <martin@ximian.com>
4046
4047         * expression.cs (Binary): Merged with the gmcs version.
4048
4049 2006-09-19  Martin Baulig  <martin@ximian.com>
4050
4051         * expression.cs (Probe, As, Is): Merged with the gmcs version.
4052
4053 2006-09-19  Martin Baulig  <martin@ximian.com>
4054
4055         * typemanager.cs: Merged with the gmcs version.
4056
4057 2006-09-16  Raja R Harinath  <rharinath@novell.com>
4058
4059         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
4060         * driver.cs: Likewise.
4061
4062 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
4063
4064         A fix for #79401
4065         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
4066         only if parent type is class.
4067         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
4068         update.
4069
4070 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
4071
4072         * cs-parser.jay,
4073         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
4074         keywords are used.
4075         * typemanager.cs(CSharpName): Converts NullType to null.
4076
4077 2006-09-15  Martin Baulig  <martin@ximian.com>
4078
4079         * typemanager.cs
4080         (TypeManager.GetMethodName): Added mcs implementation.
4081         (TypeManager.IsEqual): Likewise.
4082
4083         * ecore.cs
4084         (SimpleName.RemoveGenericArity): Added dummy implementation.
4085
4086         * pending.cs: Merged with the gmcs version.     
4087
4088 2006-09-15  Martin Baulig  <martin@ximian.com>
4089
4090         * statement.cs: Merge with the gmcs version.
4091
4092 2006-09-15  Martin Baulig  <martin@ximian.com>
4093
4094         * statement.cs (Switch): Merge with the gmcs implementation
4095         (without nullables), which is newer.
4096
4097 2006-09-15  Martin Baulig  <martin@ximian.com>
4098
4099         * statement.cs (Block.Variables): Make this public.
4100         (ToplevelBlock.Parameters): Make this a property.
4101         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
4102
4103 2006-09-15  Martin Baulig  <martin@ximian.com>
4104
4105         * namespace.cs: Merge with the gmcs version.
4106
4107 2006-09-15  Martin Baulig  <martin@ximian.com>
4108
4109         * decl.cs (MemberName): Minor code cleanups.
4110
4111 2006-09-15  Martin Baulig  <martin@ximian.com>
4112
4113         * parameter.cs: Merge with the gmcs version.
4114
4115 2006-09-15  Martin Baulig  <martin@ximian.com>
4116
4117         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
4118         and an error in mcs.
4119
4120 2006-09-15  Martin Baulig  <martin@ximian.com>
4121
4122         * flowanalysis.cs: Merged from GMCS; added the generics code into
4123         a `GMCS_SOURCE' conditional so we can share this file.
4124
4125 2006-09-08  Martin Baulig  <martin@ximian.com>
4126
4127         * typemanager.cs (TypeManager.interlocked_type): New public field.
4128         (TypeManager.int_interlocked_compare-exchange): New public field.
4129         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
4130         enumerator types here and call InitGenericCoreTypes().
4131         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
4132         after calling InitEnumUnderlyingTypes().
4133
4134         * rootcontext.cs
4135         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
4136         `classes_second_stage'. 
4137
4138 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
4139
4140         * assign.cs, ecore.cs, expression.cs: Share error message text.
4141         * class.cs (FieldMember.Define): Check for varible of static type.
4142         * driver.cs (LoadAssembly): Uses error output for errors.
4143         * statement.cs: Updated.
4144
4145 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
4146
4147         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
4148         type instance.
4149
4150 2006-09-07  Martin Baulig  <martin@ximian.com>
4151
4152         * driver.cs
4153         (MainDriver): Revert r62663 from Marek; see #70506 for details.
4154
4155 2006-08-29  Miguel de Icaza  <miguel@novell.com>
4156
4157         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4158         
4159 2006-08-17  Miguel de Icaza  <miguel@novell.com>
4160
4161         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
4162         #52019 and #79064, the use of the \uXXXX sequence in source code
4163         to represent unicode characters.
4164
4165 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
4166
4167         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
4168         support.
4169         * class.cs, ecore.cs, statement.cs: Merged to one error message.
4170
4171 2006-08-13  Miguel de Icaza  <miguel@novell.com>
4172
4173         * assign.cs: Catch attempts to assign to a method groups in += and
4174         report as 1656
4175
4176 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
4177
4178         A fix for #79056
4179         * cs-parser.jay: Don't destroy current array type by typeof of array's.
4180
4181 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
4182
4183         * class.cs (Method.Define): Issue a warning when generic method looks like
4184         an entry point.
4185         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
4186         as well.
4187
4188 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
4189  
4190         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
4191         looking for ctor.
4192         * decl.cs (MemberCache.FindMembers): When container is interface we need to
4193         search all base interfaces as a member can be ambiguous.
4194         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
4195         Constructor member type filter. 
4196         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
4197         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
4198         reporting for returned memberinfos.
4199         * report.cs: Updated.
4200         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
4201         version to work on all runtimes.
4202         (TypeManager.RealMemberLookup): Removed members filtering.
4203
4204 2006-08-08  Raja R Harinath  <rharinath@novell.com>
4205
4206         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
4207         (PropertyExpr.EmitAssign): Likewise.
4208         * expression.cs (Indirection.EmitAssign): Likewise.
4209         (LocalVariableReference.EmitAssign): Likewise.
4210         (ParameterReference.EmitAssign): Likewise.
4211         (Invocation.EmitArguments): Likewise.
4212         (ArrayAccess.EmitAssign): Likewise.
4213         (IndexerAccess.EmitAssign): Likewise.
4214         (This.EmitAssign): Likewise.
4215         (ConditionalLogicalOperator.Emit): Likewise.
4216
4217         Fix #79026
4218         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
4219         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
4220         leave it in after returning it.
4221         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
4222
4223 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
4224
4225         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
4226         message.
4227
4228 2006-08-03  Raja R Harinath  <rharinath@novell.com>
4229
4230         Fix cs0146-3.cs and cs0146-4.cs.
4231         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
4232         enclosing types don't depend on the current type.
4233
4234 2006-08-02  Raja R Harinath  <rharinath@novell.com>
4235
4236         Fix #77963
4237         * class.cs (TypeContainer.DoDefineMembers): Use
4238         FindBaseMemberWithSameName on Parent, since we're interested in
4239         whether we hide inherited members or not.
4240         (FindBaseMemberWithSameName): Make slightly more robust.
4241
4242         Fix the non-generic testcase from #77396
4243         * decl.cs (DeclSpace.DeclContainer): Remove override.
4244
4245         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
4246         declspaces for doppelgangers too.
4247         (UsingEntry): Implement IResolveContext.
4248         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
4249         'this' as the resolve context.
4250         (LocalAliasEntry): Likewise.
4251
4252         Implement parts of #77403
4253         * roottypes.cs (RootDeclSpace): New.  Used to represent the
4254         toplevel declaration space.  Each namespace declaration introduces
4255         a "partial" root declaretion space.
4256         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
4257         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
4258         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
4259         from 'current_namespace.SlaveDeclSpace'.
4260         (namespace_declaration): Likewise.
4261         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
4262         check.  It can't happen now.
4263         * decl.cs (DeclSpace.LookupType): Likewise.
4264         * driver.cs (MainDriver): Sanity check.
4265
4266 2006-08-01  Raja R Harinath  <rharinath@novell.com>
4267
4268         * decl.cs (DeclSpace.FindNestedType): Remove.
4269         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
4270         LookupTypeContainer to get the container of the nested type.
4271         * class.cs (TypeContainer.FindNestedType): Make non-override.
4272
4273 2006-07-31  Raja R Harinath  <rharinath@novell.com>
4274
4275         * decl.cs (DeclSpace.PartialContainer): Move field from ...
4276         * class.cs (TypeContainer.PartialContainer): ... here.
4277         (TypeContainer.AddBasesForPart): New helper.
4278         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
4279         instead.
4280         * cs-parser.jay (current_class): Convert to DeclSpace.
4281         (struct_declaration, interface_declaration, class_declaration):
4282         Use AddBasesForPart instead of .Bases directly.
4283         * const.cs, iterators.cs: Update to changes.
4284
4285 2006-07-28  Raja R Harinath  <rharinath@novell.com>
4286
4287         * class.cs (TypeContainer.AddMemberType): Rename from
4288         AddToTypeContainer.
4289         (TypeContainer.AddMember): Rename from AddToMemberContainer.
4290         (AddTypeContainer): New.  Combine AddClassOrStruct and
4291         AddInterface.
4292         (AddPartial): Update.  Add 'is_partial' argument.
4293         * roottypes.cs: Update to changes.
4294         * cs-parser.jay (push_current_class): New helper for handling
4295         current_container and current_class.
4296         (struct_declaration, interface_declaration, class_declaration):
4297         Use it.
4298
4299 2006-07-26  Raja R Harinath  <rharinath@novell.com>
4300
4301         * roottypes.cs: Rename from tree.cs.
4302
4303         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
4304         * tree.cs (Tree, ITreeDump): Remove types.
4305         * rootcontext.cs (tree, Tree): Remove fields.
4306         (root, ToplevelTypes): New.
4307         * *.cs: Update to rename.
4308
4309         * tree.cs (Tree.RecordDecl): Remove.
4310         (RootTypes.AddToTypeContainer): Record the toplevel type in its
4311         namespace here.
4312         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
4313
4314 2006-07-23  Raja R Harinath  <harinath@gmail.com>
4315
4316         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
4317         DoFlowAnalysis and OmitStructFlowAnalysis here.
4318         (ec.With): Rename from WithUnsafe and generalize.
4319         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
4320         (ec.WithFlowAnalyis): New.
4321         * ecore.cs, expression.cs, statement.cs: Update.
4322
4323 2006-07-22  Raja R Harinath  <harinath@gmail.com>
4324
4325         * statement.cs (Block.ResolveMeta): Simplify slightly.
4326
4327         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
4328         multiple boolean fields.  Convert InUnsafe, constant_check_state,
4329         check_state to flags.
4330         (CheckState, ConstantCheckState): Update.
4331         (InUnsafe): New read-only property.
4332         (FlagsHandle): Rename from CheckStateHandle and convert to handle
4333         arbitrary flags.
4334         (WithUnsafe): New helper similar to WithCheckState.
4335         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
4336         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
4337
4338 2006-07-21  Raja R Harinath  <rharinath@novell.com>
4339
4340         Make comparisons use the same IL irrespective of whether they're
4341         in a 'checked' or 'unchecked' context: one of the issues in #78899
4342         * codegen.cs (EmitContext.CheckState): Make read-only property.
4343         (EmitContext.ConstantCheckState): Likewise.
4344         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
4345         helper that implement a save/restore stack for CheckState
4346         values.  This is the only way to change check-state.
4347         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
4348         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
4349         (CheckedExpr.EmitBranchable): New forwarding method.
4350         (UnCheckedExpr): Likewise.
4351         * statement.cs (Block.ResolveMeta): Use WithCheckState.
4352         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
4353         (Checked.Resolve, checked.DoEmit): Likewise.
4354
4355 2006-07-20  Miguel de Icaza  <miguel@novell.com>
4356
4357         * anonymous.cs: Cache the resolved anonymous delegate, and return
4358         this so that the ResolveTopBlock is only triggered once, not
4359         twice.
4360
4361         Currently we trigger ResolvetopBlock twice due to a first pass of
4362         argument check compatibility, and a second pass that does the
4363         actual resolution.   
4364         
4365 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4366
4367         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
4368         modifiers.
4369         * rootcontext.cs (Reset): Add helper_classes.
4370
4371 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4372
4373         A fix for #78860
4374         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
4375         correctly.
4376
4377 2006-07-13  Miguel de Icaza  <miguel@novell.com>
4378
4379         * statement.cs (Lock): Handle expressions of type
4380         TypeManager.null_type specially.  Fixes #78770
4381
4382 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4383
4384         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
4385         to an event.
4386
4387 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4388
4389         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
4390         for accessors as well.
4391         * ecore.cs (EventExpr): Add AccessorTable.
4392
4393 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
4394
4395         A fix for #78738
4396         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
4397         for CS0122 where appropriate.
4398         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
4399         level attributes.
4400         (Filter): Assembly can be null in the case of top level attributes.
4401
4402 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
4403
4404         A fix for #78690
4405
4406         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
4407         is done at global level.
4408
4409 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4410
4411         A fix for #77002, Implemented TypeForwarder support.
4412
4413         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
4414         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
4415         * typemanager.cs (): Add type_forwarder_attr_type.
4416
4417 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4418
4419         * report.cs: Add CS0469 warning.
4420
4421 2006-06-21  Martin Baulig  <martin@ximian.com>
4422
4423         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
4424         the `try'-block, so we also report CS0016 etc. there.
4425
4426 2006-06-21  Martin Baulig  <martin@ximian.com>
4427
4428         * delegate.cs
4429         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
4430
4431 2006-06-21  Martin Baulig  <martin@ximian.com>
4432
4433         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
4434         also report CS1686 for parameters.
4435
4436 2006-06-21  Martin Baulig  <martin@ximian.com>
4437
4438         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
4439         instead of an error if the value is not implicitly convertible to
4440         the switch types; fixes #77964.
4441
4442 2006-06-21  Raja R Harinath  <rharinath@novell.com>
4443
4444         Fix #78673
4445         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
4446         FieldBuilder is null.
4447
4448         Fix #78662
4449         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
4450         'left' and 'right' before error-checking.
4451
4452 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
4453
4454         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
4455         Fixed bug #78601.
4456         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
4457         (FieldExpr.DoResolve): likewise.
4458         (PropertyExpr.InstanceResolve): likewise.
4459         (EventExpr.InstanceResolve): likewise. 
4460
4461 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
4462
4463         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
4464         attribute applicable tests for attribute argument.
4465
4466 2006-06-02  Raja R Harinath  <rharinath@novell.com>
4467
4468         Fix #78079
4469         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
4470         (Binary.OverloadResolve_PredefinedIntegral): New.
4471         (Binary.OverloadResolve_PredefinedFloating): New.
4472         (Binary.OverloadResolve_PredefinedString): New.
4473         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
4474         Follow the standard more closely, and treat numeric promotions in
4475         terms of overload resolution.
4476         (Binary.CheckShiftArguments): Simplify.
4477
4478 2006-06-01  Raja R Harinath  <rharinath@novell.com>
4479
4480         * flowanalysis.cs (MyBitVector): Simplify representation.
4481         (MyBitVector.Clone): Avoid allocating BitArray.
4482         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
4483         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
4484         (*): Update.  Change all references to MyBitVector.And and
4485         MyBitVector.Or to &= and |=.
4486
4487 2006-05-29  Raja R Harinath  <rharinath@novell.com>
4488
4489         Fix cs0231-[34].cs.
4490         * cs-parser.jay (formal_parameter_list): Extend the pattern below
4491         to param arguments too.
4492
4493 2006-05-26  Miguel de Icaza  <miguel@novell.com>
4494
4495         * cs-parser.jay: Catch another parsing form for arglist being
4496         followed by other arguments.  Fixes #78313.
4497
4498 2006-05-24  Raja R Harinath  <rharinath@novell.com>
4499
4500         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
4501         checking of out parameters to ...
4502         (FlowBranchingToplevel.Merge): ... here.
4503         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
4504         set, propagate the origin upward, and only complain if there was
4505         no other error.
4506         (FlowBranchingException.AddContinueOrigin): Likewise.
4507         (FlowBranchingException.AddReturnOrigin): Likewise.
4508         (FlowBranchingException.AddGotoOrigin): Likewise.       
4509
4510 2006-05-23  Raja R Harinath  <rharinath@novell.com>
4511
4512         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
4513         unreachable, skip it.
4514         (FlowBranchingException.Merge): Always propagate jumps, even if
4515         the finally block renders subsequent code unreachable.
4516
4517 2006-05-18  Raja R Harinath  <rharinath@novell.com>
4518
4519         Fix #77601
4520         * statement.cs (Goto.Resolve): Move responsibility for resolving
4521         'goto' to FlowBranching.AddGotoOrigin.
4522         (Goto.SetResolvedTarget): New.  Callback to set the
4523         LabeledStatement that's the target of the goto.
4524         (Goto.DoEmit): Use Leave instead of Br when crossing an
4525         unwind-protect boundary.
4526         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
4527         LookupLabel and adjust to new semantics.
4528         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
4529         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
4530         Goto.SetResolvedTarget to update target.
4531         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
4532         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
4533         AddBreakOrigin & co.  Delay propagation until ...
4534         (FlowBranchingException.Merge): ... this.
4535
4536         * statement.cs (Block.Resolve): Always depend on flow-branching to
4537         determine unreachability.  Kill workaround that originally emitted
4538         only one statement after an "unreachable" label (see infloop in
4539         test-515.cs).
4540
4541         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
4542         This is still "wrong", but anything better would probably need a
4543         multi-pass algorithm.
4544         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
4545         usage vector.  Force current usage vector to be reachable, to
4546         optimistically signify backward jumps.
4547         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
4548         detected.
4549         (FlowBranchingLabeled.Merge): New.  If no backward jump was
4550         detected, return the original salted-away usage vector instead,
4551         updated with appropriate changes.  Print unreachable warning if
4552         necessary.
4553         * statement.cs (Block.Resolve): Don't print unreachable warning on
4554         a labeled statement.
4555
4556 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
4557
4558         * driver.cs: Pass filename without path to AssemblyBuilder's 
4559         AddResourceFile. Fixes bug #78407.
4560
4561 2006-05-17  Raja R Harinath  <rharinath@novell.com>
4562
4563         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
4564         * flowanalysis.cs (FlowBranchingLabeled): ... here.
4565         (FlowBranching.MergeChild): Overwrite
4566         reachability information from Labeled branchings too.
4567
4568 2006-05-16  Raja R Harinath  <rharinath@novell.com>
4569
4570         * statement.cs (Goto.Resolve): Merge jump origins here ...
4571         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
4572
4573         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
4574         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
4575         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
4576         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
4577         here, ...
4578         * statement.cs (Goto.Resolve): ... not here.
4579         (Goto.Emit): Remove CS1632 check.
4580
4581 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
4582
4583         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
4584         error message.
4585
4586 2006-05-11  Raja R Harinath  <rharinath@novell.com>
4587
4588         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
4589         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
4590         (FlowBranchingException.Label): Likewise.
4591
4592         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
4593         given value.
4594         (MyBitVector.Or): Use it to avoid losing information (Count).
4595         (FlowBranching.MergeOrigins): Likewise.
4596
4597         * flowanalysis.cs (UsageVector.IsDirty): Remove.
4598         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
4599         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
4600         (UsageVector.ToString): Simplify.
4601         (UsageVector.MergeSiblings): Move here from ...
4602         (FlowBranching.Merge): ... here.
4603         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
4604         not a MyBitVector.
4605
4606 2006-05-10  Raja R Harinath  <rharinath@novell.com>
4607
4608         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
4609         null bitvector is treated as all-true.
4610
4611         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
4612         (MyBitVector): Rationalize invariants.  'vector != null' implies
4613         that we have our own copy of the bitvector.  Otherwise,
4614         'InheritsFrom == null' implies all inherited bits are true.
4615
4616 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
4617
4618         * statement.cs (LocalInfo): Add IsConstant.
4619         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
4620         local variable for constants.
4621
4622 2006-05-09  Raja R Harinath  <rharinath@novell.com>
4623
4624         * flowanalysis.cs (MyBitVector.Empty): New.
4625         (MyBitVector): Don't allow InheritedFrom to be null.
4626         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
4627         (UsageVector, FlowBranching): Update to changes.
4628
4629         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
4630         recursion.  The 'Parent == null' condition isn't sufficient for
4631         anonymous methods.
4632         (FlowBranching.AddBreakOrigin): Likewise.
4633         (FlowBranching.AddContinueOrigin): Likewise.
4634         (FlowBranching.AddReturnOrigin): Likewise.
4635         (FlowBranching.StealFinallyClauses): Likewise.
4636         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
4637         (FlowBranching.CheckOutParameters): Likewise.
4638         (FlowBranchingToplevel): Terminate all the above recursions here.
4639         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
4640         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
4641
4642         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
4643         toplevel block.
4644         (FlowBranchingToplevel): New.  Empty for now.
4645         (FlowBranching.MergeTopBlock): Update.
4646         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
4647         branching for the anonymous delegate.
4648         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
4649
4650         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
4651         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
4652         information at the start of the merge.  Reorganize.
4653
4654 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4655
4656         * class.cs (MethodData.Define): Method cannot implement interface accessor.
4657
4658 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4659
4660         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
4661         to newly introduced ctor.
4662
4663         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
4664         message to one place.
4665         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
4666         global namespace.
4667
4668 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4669
4670         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
4671
4672         * ecore.cs (Expression.ResolveAsConstant): Updated.
4673
4674         * statement.cs (ResolveMeta): Updated.
4675
4676 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4677
4678         * cs-parser.jay: __arglist cannot be used in initializer.
4679
4680 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4681
4682         A fix for #77879
4683         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
4684         private types.
4685
4686 2006-05-05  Raja R Harinath  <rharinath@novell.com>
4687
4688         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
4689         (LabeledStatement): Add 'name' parameter.
4690         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
4691         (Block.AddLabel): Update to changes.
4692         * cs-parser.jay (labeled_statement): Likewise.
4693
4694         * flowanalysis.cs (BranchingType.Labeled): New.
4695         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
4696         (FlowBranchingLabeled): New.  Does nothing for now, but will
4697         eventually handle 'goto' flows.
4698         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
4699         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
4700         that's terminated ...
4701         (Block.Resolve): ... here.
4702
4703         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
4704         (UsageVector.MergeFinallyOrigins): Likewise.
4705         (FlowBranching.InTryOrCatch): Likewise.
4706         (FlowBranching.AddFinallyVector): Likewise.
4707         (FlowBranchingException): Update to changes.
4708
4709         Fix #78290
4710         * statement.cs (Return.Resolve): Move error checking to ...
4711         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
4712         (FlowBranchingException): Handle return origins like break and
4713         continue origins.
4714         (FlowBranching.UsageVector.CheckOutParameters): Remove.
4715
4716 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4717
4718         A fix for #76122
4719         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
4720         filter.
4721
4722 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4723
4724         A fix for #77543
4725         * class.cs (MethodData.Define): Do public accessor check only when method
4726         implements an interface.
4727
4728 2006-05-04  Raja R Harinath  <rharinath@novell.com>
4729
4730         Remove special handling of 'break'
4731         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
4732         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
4733         (UsageVector.Break): Remove.
4734         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
4735         reachability.
4736         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
4737
4738         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
4739         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
4740
4741 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
4742
4743         A fix for #75726
4744         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
4745         be the interface member.
4746
4747 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
4748
4749         A fix for #60069
4750         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
4751         for emitting small (int) values.
4752
4753 2006-05-03  Raja R Harinath  <rharinath@novell.com>
4754
4755         Fix #59427
4756         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
4757         control-flow passes through the 'finally' after merging-in all the
4758         control-flows from 'try' and the 'catch' clauses.
4759
4760         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
4761         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
4762         always true at the only non-recursive entry point.
4763         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
4764         FlowBranchingBreakable.
4765         (FlowBranchingLoop): Remove.
4766         * statement.cs (Return.DoResolve): Update to changes.
4767
4768         Fix #76471, #76665
4769         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
4770         (FlowBranching.CreateBranching): Handle it: create a
4771         FlowBranchingContinuable.
4772         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
4773         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
4774         except that it handles the 'continue' command.
4775         (FlowBranching.UsageVector.MergeOrigins): Rename from
4776         MergeBreakOrigins.
4777         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
4778         except that it overrides AddContinueOrigin.
4779         (FlowBranchingException): Override AddContinueOrigin, similar to
4780         AddBreakOrigin.
4781         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
4782         Create a new branching around the embedded statement.
4783         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
4784         control flow after the embedded statement.
4785         (Continue.Resolve): Move all error checking to AddContinueOrigin.
4786
4787         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
4788         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
4789         FlowBranchingBreakable.
4790         (FlowBranchingSwitch): Remove.
4791
4792         Fix test-503.cs
4793         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
4794         error reporting to ...
4795         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
4796         Rename from 'AddBreakVector'.  Add new location argument.  Return
4797         a bool indicating whether the 'break' crosses an unwind-protect.
4798         (FlowBranchingException.AddBreakOrigin): Add.
4799         (FlowBranchingException.Merge): Propagate 'break's to surrounding
4800         flowbranching after updating with the effects of the 'finally'
4801         clause.
4802         (FlowBranchingBreakable): New common base class for
4803         FlowBranchingLoop and FlowBranchingSwitch.
4804
4805         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
4806         embedded statement.
4807         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
4808
4809 2006-05-02  Raja R Harinath  <rharinath@novell.com>
4810
4811         * statement.cs (Do.Resolve): If the loop is infinite, set the
4812         barrier.
4813         (While.Resolve, For.Resolve): Set a barrier after the embedded
4814         statement.  There's no direct control flow that goes from the end
4815         of the embedded statement to the end of the loop.
4816         * flowanalysis.cs (FlowBranching.Infinite): Remove.
4817         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
4818         above ensure that the reachability is correctly computed.
4819
4820         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
4821         (UsageVector.MergeBreakOrigins): If the current path is
4822         unreachable, treat it as if all parameters/locals are initialized.
4823         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
4824         infinite loops before merging-in break origins.
4825
4826         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
4827         (Reachability.Reachable): Split part into ...
4828         (Reachability.Unreachable): ... this.  Simplify.
4829         (Reachability.IsUnreachable): Use 'Unreachable' instead.
4830
4831         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
4832         (Reachability.SetThrowsSometimes): Likewise.
4833         (FlowBranchingBlock.MergeTopBlock): Don't compare against
4834         TriState.Always, use corresponding property.
4835         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
4836         (Block.Resolve): Likewise.  Remove some redundant checks.
4837
4838 2006-05-02  Raja R Harinath  <harinath@gmail.com>
4839
4840         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
4841         (Reachability.Meet): Don't bother checking AlwaysThrows --
4842         barrier is always set.
4843         (FlowBranchingBlock.Merge): Likewise.
4844
4845 2006-05-01  Raja R Harinath  <harinath@gmail.com>
4846
4847         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
4848         checks for unreachable.
4849
4850 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
4851
4852         A fix for #77980
4853         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
4854
4855         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
4856         whether field is really assigned.
4857
4858 2006-04-30  Raja R Harinath  <harinath@gmail.com>
4859
4860         * flowanalysis.cs (Reachability): Make 4-argument constructor
4861         private.
4862         (Reachability.Meet): Rename from 'And'.  Remove static variant.
4863         (Reachability.Always): Rename from the highly misleading
4864         'Reachability.Never'.
4865         (FlowBranching.Merge): Update to changes.  Mark an impossible
4866         situation with a 'throw'.
4867         (*): Update to changes.
4868
4869 2006-04-29  Raja R Harinath  <harinath@gmail.com>
4870
4871         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
4872         Remove 'Undefined'.
4873         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
4874         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
4875         (*): Update to changes.
4876         * statement.cs: Update to changes.
4877
4878 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
4879
4880         A fix for #78049
4881         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
4882
4883 2006-04-28  Raja R Harinath  <harinath@gmail.com>
4884
4885         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
4886         dummy UsageVector.
4887
4888         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
4889         argument to two arguments: an usage-vector and a bool.  Move call
4890         to FlowBranching.Merge () ...
4891         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
4892
4893         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
4894         handling of loop and switch reachability to ...
4895         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
4896
4897 2006-04-27  Raja R Harinath  <harinath@gmail.com>
4898
4899         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
4900         handling to FlowBranchingLoop.InLoop.
4901         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
4902
4903 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
4904
4905         A fix for #78115
4906         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
4907         anonymous method is allowed from AnonymousContainer here.
4908
4909         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
4910
4911 2006-04-24  Raja R Harinath  <rharinath@novell.com>
4912
4913         Fix #78156
4914         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
4915
4916 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
4917
4918         A fix for #49011.
4919         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
4920         (DoubleConstant.Reduce): Ditto.
4921
4922 2006-04-23  Raja R Harinath  <rharinath@novell.com>
4923
4924         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
4925         Remove 'lvalue_right_side' argument.  Move parts to ...
4926         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
4927         (LocalVariable.DoResolveLValue): ... these.
4928
4929 2006-04-21  Raja R Harinath  <rharinath@novell.com>
4930
4931         Fix cs1655.cs
4932         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
4933         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
4934         (LocalVariableReference.DoResolveBase): Use it to implement new
4935         CS1655 check.
4936         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
4937         (Argument.Resolve): Simplify.  Move CS1510 check ...
4938         * ecore.cs (Expression.ResolveLValue): ... here.
4939         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
4940         (PropertyExpr.DoResolveLValue): Likewise.
4941         (FieldExpr.Report_AssignToReadonly): Likewise.
4942         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
4943         LValueMemberAccess or LValueMemberOutAccess on instance depending
4944         on it.
4945         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
4946         DoResolve as appropriate.
4947
4948 2006-04-20  Raja R Harinath  <rharinath@novell.com>
4949
4950         Fix #75800
4951         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
4952         implicit conversions on 'out' and 'ref' arguments.
4953
4954         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
4955         improve clarity.  Remove dead code.
4956
4957         Fix #66031
4958         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
4959         (Catch.Resolve): Resolve VarBlock if it exists.
4960
4961 2006-04-19  Miguel de Icaza  <miguel@novell.com>
4962
4963         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
4964         twice, this was some residual code, the enumerator was emitted
4965         properly in the two branche of if later.
4966
4967 2006-04-19  Raja R Harinath  <rharinath@novell.com>
4968
4969         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
4970         cast is never an lvalue.
4971         (Cast.DoResolve, Cast.ResolveRest): Combine.
4972         (Argument.Emit): Simplify slightly.  Move 'Expr is
4973         IMemoryLocation' check ...
4974         (Argument.Resolve): ... here.
4975         (Argument.Error_LValueRequired): Remove.  Inline into only user.
4976
4977         Simplifications.  Fix cs0191-2.cs
4978         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
4979         CS1649 and CS1651 to ...
4980         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
4981         the actual selection of the error code and message to a lookup
4982         table.  Add a dummy return value to simplify callsites.
4983         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
4984         readonly fields of other instances of the same type.  Move CS0197
4985         warning from ...
4986         * expression.cs (Argument.Resolve): ... here.  Simplify code.
4987         Ensure that ec.InRefOutArgumentResolving is only set during LValue
4988         resolution of an out or ref argument.  The code simplification
4989         above uses this invariant.
4990
4991 2006-04-18  Raja R Harinath  <rharinath@novell.com>
4992
4993         Possibly fix #77752.  Fix cs1690-[4-7].cs.
4994         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
4995         CheckMarshallByRefAccess.  Drop parameter.
4996         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
4997         warning.
4998         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
4999         InstanceExpression.
5000         * report.cs (AllWarnings): Add CS1690.
5001         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
5002         for ref access too.
5003         (LocalVariableReference.DoResolveBase): Update.
5004
5005 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5006
5007         * class.cs (MethodOrOperator): Moved common parts from method class.
5008         detect obsolete attributes.
5009         (Method.Define): Simplified as it reuses code from base.
5010         (Constructor.ValidAttributeTargets): Fixed issue found during
5011         refactoring.
5012         (Destructor.ValidAttributeTargets): Fixed issue found during
5013         refactoring.
5014         (Operator): Finished refactoring set off by #78020. Operator class is now
5015         ordinary method class.
5016
5017         * anonymous.cs: Updated.
5018
5019         * decl.cs (DeclSpace): Add IsGeneric
5020
5021 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5022
5023         * class.cs (Constructor.Emit): Don't emit the attributes twice.
5024
5025 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5026
5027         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
5028         detect obsolete attributes.
5029         (Method.CreateEmitContext): Moved to MethodOrOperator.
5030
5031 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5032
5033         A fix for #78048.
5034         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
5035         customized exception to make crash detection easier.
5036         (MethodOrOperator): Started to work on new base class for methods and
5037         operators.
5038         (Method): Derives from MethodOrOperator.
5039         (Constructor.Emit): Emits its own attributes.
5040         (AbstractPropertyEventMethod.Emit): Ditto.
5041         (Operator): Derives from MethodOrOperator, will refactor fully in extra
5042         patch.
5043         (Operator.Emit): It's temporary more tricky than should be.
5044         
5045         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
5046
5047         * report.cs (InternalErrorException): Add ctor with inner exception.
5048
5049 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
5050
5051         A fix for #76744.
5052         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
5053         only not visible.
5054
5055 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
5056
5057         A fix for #77916.
5058         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
5059         array.
5060
5061 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5062
5063         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
5064         attribute is present and Guid not.
5065         (Interface.ApplyAttributeBuilder): Ditto.
5066
5067         * attribute.cs: Add error message.
5068
5069 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5070
5071         A fix for #78020.
5072
5073         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
5074         sources (it's composite) so hold them in extra array as they are used in
5075         Emit phase only. It worked in the previous versions by mistake.
5076         (Attribute.Emit): Emit attribute for more owners when exist.
5077
5078         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
5079         it has now different behaviour.
5080
5081 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
5082
5083         * constant.cs (Constant.IsDefaultInitializer): New method.
5084
5085         * class.cs: Updated.
5086
5087         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
5088         re-initialize default values. It saves KBs almost for every assembly.
5089         Thanks Zoltan for the idea.
5090         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
5091         (ArrayCreation.DoResolve): Resolve only once.
5092         (ArrayCreation.Emit): Emit static initializer only when it is faster.
5093         (ArrayCreation.GetAttributableValue): Cope with optimized values.
5094
5095 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
5096
5097         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
5098         From #77961.
5099
5100 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5101
5102         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
5103         in an embedded statement too.
5104
5105 2006-04-01  Raja R Harinath  <rharinath@novell.com>
5106
5107         Fix #77958
5108         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
5109
5110 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5111
5112         A fix for #77966.
5113
5114         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
5115         was not specified.
5116
5117         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
5118
5119 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
5120
5121         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
5122         phase.
5123
5124         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
5125         LocalTemporary change.
5126
5127         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
5128         TypeContainer.
5129         (ClassOrStruct.DefineFieldInitializers): Implemented static field
5130         initializers optimization.
5131         (ClassOrStruct.TypeAttr): Moved from modifiers.
5132         (Constructor.CheckBase): Don't crash when static ctor has parameters.
5133         (FieldBase.ResolveInitializer): Resolves initializer.
5134         (FieldBase.HasDefaultInitializer): New property.
5135
5136         * cs-parser.jay: Removed message.
5137
5138         * expression.cs (CompilerGeneratedThis): New specialization.
5139
5140         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
5141
5142 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
5143
5144         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
5145
5146 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5147
5148         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
5149         be now EnumConstants only.
5150
5151 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5152
5153         * attribute.cs, driver.cs: Reset more caches.
5154
5155 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5156
5157         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
5158
5159 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5160
5161         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
5162         for easier reuse. Updated all overrides.
5163         (IntegralConstant): New base class for all integral constants.
5164         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
5165         of the constant range, report custom error.
5166         (UIntConstant.Reduce): Fixed uint conversion.
5167
5168         * ecore.cs, literal.cs: Reduce updates.
5169
5170 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5171
5172         A fix for #75813.
5173
5174         * class.cs (Constructor.Define): Removed extra if for default ctors.
5175         A patch from Atsushi Enomoto.
5176
5177 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5178
5179         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
5180         GetAttributableValue.
5181
5182         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
5183         when required.
5184
5185         * convert.cs (ImplicitConversionRequired): Error message moved to
5186         DoubleLiteral.
5187
5188         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
5189         automatic implicit conversion of an output value.
5190         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
5191
5192         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
5193         conversion.
5194         (TypeOf.GetAttributableValue): Add extra handling for object type.
5195
5196         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
5197         special error message.
5198
5199 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
5200
5201         * class.cs (Constructor.Emit): Don't crash when struct ctor is
5202         InternalCall.
5203         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
5204         compatible with MS runtime.
5205
5206 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
5207
5208         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
5209         attribute arguments here.
5210
5211         * class.cs (Indexer.Define): The check was moved to attribute class.
5212
5213 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
5214
5215         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
5216         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
5217         easier.
5218
5219 2006-03-22  Raja R Harinath  <rharinath@novell.com>
5220
5221         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
5222         mcs to keep code differences small.
5223         * attribute.cs (Attribute.GetParameterDefaultValue): New.
5224         * typemanager.cs (parameter_default_value_attribute_type): New.
5225         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
5226         CS1908 check.
5227
5228 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5229
5230         * expression.cs (StringConcat.Append): Reverted back to no warning state.
5231
5232 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5233
5234         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
5235
5236         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
5237         the blocks too.
5238
5239 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
5240
5241         * doc-bootstrap.cs : fix build.
5242
5243 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5244
5245         * expression.cs (StringConcat.Append): Issue a warning when empty string
5246         is going to append.
5247
5248 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5249
5250         * assign.cs (CompoundAssign.ResolveSource): Removed.
5251
5252         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
5253         clean up.
5254
5255         * class.cs (TypeContainer.FindMethods): Removed.
5256         (TypeContainer.CheckMemberUsage): Made static.
5257
5258         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
5259
5260         * constant.cs (CheckRange): Removed unused type argument.
5261         (CheckUnsigned): Removed unused type argument.
5262
5263         * cs-parser.jay: Updated after MemberAccess clean up.
5264         Uses Length for empty string test.
5265
5266         * cs-tokenizer.cs: Uses Length for empty string test.
5267         (IsCastToken): Made static.
5268         (is_hex): Made static.
5269         (real_type_suffix): Made static.
5270
5271         * decl.cs (SetupCache): Made static.
5272         (OnGenerateDocComment): Removed unused ds argument.
5273
5274         * delegate.cs (VerifyDelegate): Removed unused argument.
5275
5276         * doc.cs: Uses Length for empty string test.
5277
5278         * driver.cs: Uses Length for empty string test.
5279
5280         * enum.cs (IsValidEnumType): Made static
5281
5282         * expression.cs (EnumLiftUp): Removed unused argument.
5283         (ResolveMethodGroup): Ditto.
5284         (BetterConversion): Ditto.
5285         (GetVarargsTypes): Ditto.
5286         (UpdateIndices): Ditto.
5287         (ValidateInitializers): Ditto.
5288         (MemberAccess.ctor): Ditto.
5289         (GetIndexersForType): Ditto.
5290
5291         * flowanalysis.cs: (MergeFinally): Removed unused argument.
5292
5293         * iterators.cs: Updated after MemberAccess clean up.
5294
5295         * location.cs: Uses Length for empty string test.
5296
5297         * namespace.cs: Uses Length for empty string test.
5298
5299          * report.cs (CheckWarningCode): Made static.
5300
5301         * statement.cs (LabeledStatement): Removed unused argument.
5302
5303         * typemanager.cs (FilterNone): Removed.
5304
5305 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5306
5307         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
5308         obsolete.
5309
5310         * class.cs: Updated.
5311
5312 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5313
5314         * cs-parser.jay.cs: __arglist is not allowed for delegates.
5315
5316 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5317
5318         A fix for #77822.
5319
5320         * expression.cs (VerifyArgumentsCompat): Reverted to double error
5321         reporting, it's more tricky than I thought.
5322
5323 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5324
5325         A fix for #77816.
5326
5327         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
5328         host container.
5329         (AnonymousMethod.ImplicitStandardConversionExists): New method.
5330         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
5331         Add more error reporting; Fixed issue with params.
5332
5333         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
5334
5335         * cs-parser.jay: AnonymousMethod requires host container.
5336
5337         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
5338
5339 2006-03-18  Raja R Harinath  <harinath@gmail.com>
5340
5341         * class.cs: Change 'TypeContainer ds' constructor argument to
5342         'DeclSpace parent'.  Some classes were missed below due to
5343         different naming convention.
5344
5345         * class.cs (MemberCore.Parent): Delete.  This makes the
5346         ParentContainer changes below enforceable by the compiler.
5347
5348         Treat pointers to enclosing declaration space as 'DeclSpace', not
5349         'TypeContainer'.
5350         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
5351         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
5352
5353         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
5354         of TypeContainer.
5355         (Block.AddThisVariable): Likewise.
5356         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
5357         (AbstractPropertyEventMethod.Emit): Likewise.
5358         (AbstractPropertyEventMethod.EmitMethod): Likewise.
5359         (GetMethod.Define, SetMethod.Define): Likewise.
5360         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
5361         (DelegateMethod.EmitMethod): Likewise.
5362
5363         Fix regression test-partial-13.cs.
5364         Rationalize use of PartialContainer.  Ensure that the partial
5365         class semantics can be tied to type-correctness, i.e., any
5366         violation will cause a compile error.
5367         * class.cs, const.cs: Access all fields that belong to class
5368         TypeContainer via ParentContainer.  Arguments of EmitContexts and
5369         Resolve()-like functions still use 'Parent'.
5370
5371         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
5372         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
5373         (PropertyMethod.CheckModifiers): Remove unused argument.
5374         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
5375         DeclSpace.
5376
5377 2006-03-17  Raja R Harinath  <harinath@gmail.com>
5378
5379         Make semantics of PartialContainer simpler.
5380         * decl.cs (DeclSpace.IsPartial): Remove.
5381         * class.cs (TypeContainer.IsPartial): Likewise.
5382         (TypeContainer..ctor): Set PartialContainer to point to self.
5383         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
5384         (TypeContainer.FindNestedType): Likewise.
5385         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
5386
5387 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
5388
5389         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
5390
5391 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5392
5393         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
5394         classes.
5395
5396 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5397
5398         * class.cs (Operator.Define): An error for base conversion was not
5399         reported correctly.
5400
5401 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
5402
5403         * iterator.cs : yield break is allowed in try statement which has
5404           catch clauses. Fixed bug #77767.
5405
5406 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
5407
5408         A fix for #77593, #77574.
5409
5410         * class.cs (MethodCore.CheckBase): Another if for operator.
5411
5412 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
5413
5414         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
5415         were not resolved
5416
5417         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
5418         (DelegateCreation.ImplicitStandardConversionExists): New method for just
5419         conversion test.
5420         
5421         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
5422         not needed.
5423
5424         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
5425         Updated after another emitcontext usage was clean up. It should help us to
5426         synchronize with gmcs easier.
5427
5428 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
5429
5430         A fix for #77353.
5431
5432         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
5433         (Event.Define): ditto
5434         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
5435
5436         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
5437         Removed redundant code and set NewSlot for Invoke method too.
5438
5439         * parameter.cs (Parameters.ctor): Add custom, type ctor.
5440         (Parameters.MergeGenerated): New method. Use this method when you merge
5441         compiler generated argument with user arguments.
5442
5443 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
5444
5445         * attribute.cs (ResolveAsTypeTerminal): Removed.
5446
5447         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
5448         specialization for predefined types; 30% speed up.
5449         Finally placed obsolete check to right place.
5450         (Expression.ResolveType): Removed.
5451
5452         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
5453         Updated after ResolveType was removed.
5454
5455         * expression.cs (Cast.ctor): Check void cast.
5456         (Binary.ResolveAsTypeTerminal): Is never type.
5457         (Conditional.ResolveAsTypeTerminal): Is never type.
5458
5459         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
5460
5461 2006-03-01  Raja R Harinath  <rharinath@novell.com>
5462
5463         Fix #77679.
5464         * expression.cs (ParameterReference.DoResolveBase): Change return
5465         type to bool.
5466         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
5467         Update.
5468
5469         Fix #77628.
5470         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
5471
5472         Fix #77642.
5473         * typemanager.cs (GetFullNameSignature): Don't nullref on
5474         protected accessors.
5475
5476 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
5477
5478         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
5479         these two separated members to simplify the code.
5480         (Attribute.Resolve): Refactored to use new fields and methods.
5481         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
5482         implemented obsolete attribute checking.
5483         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
5484         implemented obsolete checking again. It look line never ending quest ;-)
5485         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
5486
5487         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
5488
5489         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
5490
5491         *class.cs (Property.Define): Add RegisterProperty call.
5492
5493         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
5494         argument groups (only 2).
5495
5496         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
5497         encoding expression to arguments.
5498         (Expression.ExprClassToResolveFlags): Just turned to property.
5499
5500         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
5501         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
5502         optimized as well as implemented support for zero-length attributes.
5503
5504         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
5505         Add caching of PropertyInfo's.
5506
5507 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5508
5509         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
5510         error multiple times.
5511
5512 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5513
5514         New partial class implementation.
5515         A fix for #77027, #77029, #77403
5516
5517         * attribute.cs (Attributable): Made attributes protected.
5518
5519         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
5520         the replacements of ClassPart and PartialContainer.
5521         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
5522         (TypeContainer.AddInterface): Ditto.
5523         (TypeContainer.AddPartial): The main method for partial classes. It checks
5524         for errors and merges ModFlags and attributes. At the end class is added to
5525         partial_parts list.
5526         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
5527         required here.
5528         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
5529         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
5530         from the rest of partial classes.
5531         (TypeContainer.GetClassBases): Simplified.
5532         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
5533         DefineType.
5534         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
5535         (TypeContainer.HasExplicitLayout): Uses Flags now.
5536         (PartialContainer): Removed.
5537         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
5538         (StaticClass): Was merged with Class.
5539         (Class.GetClassBases): class and static class bases are verified here.
5540         (Class.TypeAttr): Added static attributes when class is static.
5541         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
5542         (MemberBase): In some cases we need to call parent container for partial
5543         class. It should be eliminated but it's not easy now.
5544
5545         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
5546
5547         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
5548         partial classed to accumulate class comments.
5549         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
5550
5551         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
5552
5553         * driver.cs (MainDriver): Tree.GetDecl was removed.
5554
5555         * modifiers.cs (Modifiers): Add partial modifier.
5556
5557         * tree.cs (Tree.decl): Removed.
5558         (RootTypes): Started to use this class more often for root types
5559         specializations.
5560
5561 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5562
5563         A fix for #77615
5564
5565         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
5566         external interface does not have an attribute.
5567
5568 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5569
5570         Another prerequisites for new partial classs implementation.
5571         
5572         * attribute.cs (Attribute.Equal): Implemented.
5573         (Attribute.Emit): Changed as attributes can be applied more than twice.
5574         (Attributes.Emit): Check for duplicate attributes here.
5575
5576         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
5577         as a parameter, clean-up.
5578
5579 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5580
5581         A fix for #77485
5582
5583         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
5584         contains obsolete attribute check which can in some cases look for base
5585         type of current class which is not initialized yet.
5586         (TypeContainer.BaseType): Replacement of ptype.
5587
5588         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
5589
5590 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5591
5592         First of prerequisites for new partial classs implemention.
5593         
5594         * attribute.cs (Attributable): Extended by ResolveContext;
5595         Attributes finally have correct context for resolving in all cases.
5596         (AttachTo): Attribute owner is assigned here.
5597
5598         * codegen.cs (IResolveContext): Introduce new interface to hold
5599         all information needed in resolving phase.
5600         (EmitContext): Implements IResolveContext; more clean-up needed here.
5601         
5602         * decl.cs (MemberCore): Implemented IResolveContext.
5603
5604         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
5605         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
5606         parameter.cs, statement.cs, tree.cs, typemanager.cs:
5607         Refactored to use new IResolveContext instead of EmitContext; cleanup
5608
5609 2006-02-06  Miguel de Icaza  <miguel@novell.com>
5610
5611         * codegen.cs (EmitScopeInitFromBlock): check here the
5612         capture_context, there is no need to make two calls to the
5613         EmitContext. 
5614
5615         * anonymous.cs: Add some debugging messages that might help me
5616         track other instances of this problem in the future (the
5617         regression of test 467).
5618
5619         * cs-parser.jay: track the variable block, as we need to initalize
5620         any captured variables declared in this block for the "catch"
5621         portion of the "Try" statement.
5622
5623         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
5624         scope initialization for captured variables. 
5625
5626         Also, move the emit for the variables after the block location has
5627         been marked.
5628
5629 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
5630
5631         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
5632
5633 2006-02-02  Miguel de Icaza  <miguel@novell.com>
5634
5635         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
5636         commit yesterday, the initialization for the roots is necessary.
5637         What is not necessary is the scope activation.
5638
5639 2006-02-02  Raja R Harinath  <rharinath@novell.com>
5640
5641         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
5642         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
5643         CS0206 checks.
5644         (Argument.Resolve): Remove CS0206 checks.
5645
5646 2006-02-01  Miguel de Icaza  <miguel@novell.com>
5647
5648         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
5649         scopes for all the roots, the scopes will now be emitted when the
5650         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
5651
5652         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
5653         code.  This reduces a lot of existing cruft.
5654         
5655         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
5656         that the ScopeInfo is generated as we enter the scope, not at the
5657         time of use, which is what we used to do before.
5658
5659         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
5660         every time a Block is about to be emitted if we have a
5661         CaptureContext. 
5662
5663 2006-02-01  Raja R Harinath  <rharinath@novell.com>
5664
5665         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
5666         (Reset): Update.
5667         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
5668
5669         * typemanager.cs (cons_param_array_attribute): Make private.
5670         (Reset): Set it to null.
5671         (InitCoreHelpers): Don't initialize it.
5672         (ConsParamArrayAttribute): New.  Initialize it as needed.
5673         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
5674
5675 2006-01-31  Miguel de Icaza  <miguel@novell.com>
5676
5677         * expression.cs: There might be errors reported during the
5678         selection of applicable methods.  If there are errors, do not
5679         continue execution as it will lead the compiler to crash.
5680
5681 2006-01-30  Miguel de Icaza  <miguel@novell.com>
5682
5683         * expression.cs: Member access is not allowed on anonymous
5684         methods.  Fixes #77402.
5685
5686 2006-01-30  Raja R Harinath  <rharinath@novell.com>
5687
5688         Fix #77401
5689         * cs-parser.jay (VariableDeclaration): Don't set
5690         current_array_type to null.
5691         (field_declaration, event_declaration, declaration_statement):
5692         Set it to null here.
5693
5694 2006-01-28  Raja R Harinath  <harinath@gmail.com>
5695
5696         * typemanager.cs (GenericParameterPosition): New.
5697         * doc.cs: Use it.
5698
5699 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
5700
5701         * doc.cs : To process "include" elements, first we should create
5702           another list than XmlNodeList, because it could result in node
5703           removal, which could result in that the XmlNodeList gives up
5704           yielding next node.
5705
5706           (Also made code identical to gmcs again.)
5707
5708 2006-01-25  Miguel de Icaza  <miguel@novell.com>
5709
5710         * ecore.cs: Introduce an error report that we were not catching
5711         before, if not silent, we must report the error.  Gonzalo ran into
5712         it.
5713
5714 2006-01-23  Miguel de Icaza  <miguel@novell.com>
5715
5716         A fix for bug: #76957
5717         
5718         * iterators.cs (MoveNextMethod.CreateMethodHost): call
5719         ComputeMethodHost before creating the method, this is a new
5720         requirement. 
5721
5722         * anonymous.cs (AnonymousContainer): Now we track all the scopes
5723         that this method references (RegisterScope).  The actual scope
5724         where the method is hosted is computed with the ComputeMethodHost
5725         before we create the method.
5726
5727         Moved the Deepest routine here.
5728
5729         (AnonymousContainer.ComputeMethodHost): New routine used to
5730         compute the proper ScopeInfo that will host the anonymous method.
5731
5732         (ScopeInfo): Deal with multiple roots.  The problem was that we
5733         did not have a unique root where all ScopeInfos could be hanged
5734         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
5735         of roots.  
5736
5737         Remove AdjustMethodScope which is now computed at the end.  Remove
5738         LinkScope which did a partial link, instead link all ScopeInfos
5739         before code generation from the new "LinkScopes" routine. 
5740
5741         Simplify all the Add* routines as they no longer need to maintain
5742         the tree, they just need to record that they are using variables
5743         from a ScopeInfo.
5744
5745         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
5746         routines to produce the forest of ScopeInfo trees.
5747
5748         * class.cs (TypeContainer.AppendMethod): This is just like
5749         AddMethod, but ensures that an interface implementation method
5750         (IEnumerable.XXX) is not inserted at the beginning of the queue of
5751         methods, but at the end.
5752
5753         We use this functionality to ensure that the generated MoveNext
5754         method in the iterator class is resolved/emitted before the
5755         enumerator methods created.   
5756
5757         This is required because the MoveNext method computes the right
5758         ScopeInfo for the method.  And the other methods will eventually
5759         need to resolve and fetch information computed from the anonymous
5760         method. 
5761
5762 2006-01-21  Raja R Harinath  <harinath@gmail.com>
5763             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
5764
5765         Fix rest of #76995.
5766         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
5767         the 'aliases' hash.
5768         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
5769         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
5770
5771 2006-01-18  Raja R Harinath  <rharinath@novell.com>
5772
5773         Fix #76656, cs0231-2.cs.
5774         * cs-parser.jay (formal_parameter_list): Make error case catch
5775         more issues.
5776         (parenthesized_expression_0): Add CS1026 check.
5777         (invocation_expression): Remove unused { $$ = lexer.Location }.
5778
5779 2006-01-17  Raja R Harinath  <rharinath@novell.com>
5780
5781         Fix #76824.
5782         * cs-parser.jay (statement_expression): Don't list out the
5783         individual statement-expressions.  Convert syntax error into
5784         CS0201 check.
5785
5786 2006-01-16  Raja R Harinath  <rharinath@novell.com>
5787
5788         Fix #76874.
5789         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
5790         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
5791         CheckIntermediateModification.
5792         (FieldExpr.DoResolve): Add new two-argument version that
5793         allows us to resolve the InstanceExpression as an lvalue.
5794         The one-argument variant is now just a wrapper.
5795         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
5796         Resolve the lhs as an lvalue if the it has a value type.
5797         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
5798         from Assign.DoResolve.
5799         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
5800         resolved as an lvalue.
5801         (PropertyExpr.DoResolve): Update.
5802         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
5803         has a value type.  Move CS1612 check here from
5804         CheckIntermediateModification.
5805         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
5806         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
5807         'right_side' of a ResolveLValue on an 'out' argument.
5808         (EmptyExpression.LValueMemberAccess): New.  Used as the
5809         'right_side' of a propagated ResolveLValue on a value type.
5810         (LocalVariableReference.DoResolveBase): Recognize
5811         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
5812         Add CS1654 check.
5813         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
5814         EmptyExpression.Null.
5815
5816 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
5817
5818         * typemanager.cs : added IsGenericParameter(). In mcs it always
5819           return false.
5820         * doc.cs : for generic parameters, use GenericParameterPosition,
5821           not FullName.
5822
5823 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
5824
5825         * expression.cs: Fix Console.WriteLine ((this = x).foo);
5826
5827 2006-01-12  Miguel de Icaza  <miguel@novell.com>
5828
5829         This fixes the problem where we used ldfld instead of ldflda to
5830         load the "THIS" pointer on captured parameters, when THIS is a
5831         value type.  See bug #77205.
5832         
5833         * iterators.cs (CapturedThisReference.Emit): Pass false to
5834         EmitThis (we do not need the address).
5835
5836         * codegen.cs (EmitThis): it needs to know whether we need the
5837         address of `this' or not.  This is used by value types.  
5838
5839         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
5840         every other call passes false.
5841
5842 2006-01-12  Raja R Harinath  <rharinath@novell.com>
5843
5844         Fix #77221.
5845         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
5846         GetOverride.
5847         * expression.cs (Invocation.OverloadResolve): Update.
5848         (Invocation.DoResolve): Avoid double resolution of invocation.
5849
5850 2006-01-11  Raja R Harinath  <rharinath@novell.com>
5851
5852         Fix #77180.
5853         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
5854         unary negation of floating point types as 0-expr; negation cannot
5855         overflow in floating point types.
5856
5857         Fix #77204.
5858         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
5859         on operands of 'void' type.
5860
5861         Fix #77200.
5862         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
5863         and ExclusiveOr for boolean constants too.
5864
5865 2006-01-09  Raja R Harinath  <rharinath@novell.com>
5866
5867         Fix #75636.
5868         * expression.cs (Invocation.OverloadResolve): Replace reflected
5869         override methods with their base virtual methods, rather than
5870         skipping over them.
5871         * typemanager.cs (TypeManager.GetOverride): New.
5872
5873 2006-01-05  Jb Evain  <jbevain@gmail.com>
5874
5875         * class.cs (Property.Define, Indexer.Define): do not tag the
5876         properties as SpecialName | RTSpecialName.
5877
5878 2006-01-04  Miguel de Icaza  <miguel@novell.com>
5879
5880         * class.cs (MethodCore.IsDuplicateImplementation): This method was
5881         doing a low-level comparission of parameter types.  It was lacking
5882         a check for __argslist. 
5883
5884 2005-12-30  Miguel de Icaza  <miguel@novell.com>
5885
5886         * expression.cs (ParameterReference.DoResolveBase): Allow
5887         reference parameters if they are local to this block. 
5888
5889         This allows the ref and out parameters of a delegate to be used in
5890         an anonymous method, for example:
5891
5892         delegate void set (out int x);
5893
5894         set s = delegate (out int x){
5895                 x = 0;
5896         };
5897
5898         This is used by functionality introduced late in the C# language.
5899         
5900         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
5901         method that take ref and out parameters. 
5902
5903         Fixes #77119 which was a late change in the spec.
5904
5905 2005-12-23  Miguel de Icaza  <miguel@novell.com>
5906
5907         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
5908         parent if its the same scope.  Fixes #77060.
5909
5910 2005-12-21  Miguel de Icaza  <miguel@novell.com>
5911
5912         * driver.cs: Report the case of no source files and no -out:
5913         argument provided.
5914
5915 2005-12-20  Raja R Harinath  <rharinath@novell.com>
5916
5917         Fix #77035.
5918         * expression.cs (ComposedCast.GetSignatureForError): Define.
5919
5920 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
5921
5922         Fix #76995
5923
5924         * namespace.cs (NamespaceEntry): Add extern_aliases as a
5925         ListDictionary, to contain the ExternAliasEntry entries (in
5926         addition to the NamespaceEntry.aliases hashtable). This field is
5927         shared between the original entry and its doppelganger (bodyless 
5928         copy of it).
5929         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
5930         extern_aliases field.
5931         (NamespaceEntry.Lookup): Move the IsImplicit check after the
5932         lookup in extern_aliases.
5933
5934 2005-12-16  Raja R Harinath  <rharinath@novell.com>
5935
5936         Fix #77006.
5937         * class.cs (TypeContainer.Mark_HasEquals): New.
5938         (TypeContainer.Mark_HasGetHashCode): New.
5939         (ClassPart): Override them.
5940         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
5941
5942         Fix #77008.
5943         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
5944         'parent' argument to the base constructor.
5945
5946         Remove all mention of TypeContainer from decl.cs.
5947         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
5948         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
5949         (DeclSpace.DeclSpace): Likewise.
5950         (DeclSpace.DefineMembers): Remove unused argument.
5951         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
5952         debugging check -- we don't care if the debug code throws an
5953         InvalidCastException instead of an InternalErrorException.
5954         * class.cs (TypeContainer.DefineMembers): Update to changes.
5955         (TypeContainer.DoDefineMembers): Likewise.
5956         (TypeContainer.GetMethods): Likewise.
5957         (PropertyMember.Define): Likewise.
5958         (MemberBase.Parent): New property that forwards to
5959         MemberCore.Parent, but ensures that we get a TypeContainer.
5960         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
5961         (RootContext.PopulateTypes): Likewise.  Remove special case code
5962         for !RootContext.StdLib: DefineMembers is idempotent.
5963
5964 2005-12-14  Miguel de Icaza  <miguel@novell.com>
5965
5966         * convert.cs (ExplicitConversionCore): Check the return value from
5967         ExplicitConversionCore which can return null on failure.  Fixes #76914
5968
5969 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
5970
5971         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
5972
5973 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
5974
5975         * doc.cs : The search for referenced namespace was insufficient to
5976           get global one as it used to do. Fixed bug #76965.
5977
5978 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
5979
5980         * doc.cs : check name in cref in the last phase that whether it is
5981           namespace or not.
5982
5983 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
5984
5985         * cs-tokenizer.cs : reverted the latest change: it somehow broke
5986           Mono.C5.
5987
5988 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
5989
5990         * doc.cs : so it turned out that we cannot skip override check for 
5991           interface members. Fixed bug #76954.
5992
5993 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
5994
5995         * cs-tokenizer.cs : fixed bug #75984:
5996           - #warning and #error should not be handled when the source line
5997             is disabled.
5998           - #line is not checked strictly when the source line is disabled.
5999           - #define and #undef is on the other hand checked strictly at any
6000             state.
6001
6002 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
6003
6004         * cs-tokenizer.cs : missing Location (actually, filename) in one of
6005           CS1027 report.
6006
6007 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6008
6009         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
6010
6011         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
6012         event initializers.
6013         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
6014         (FieldBase.Initializer): Initializer is now optional.
6015         (EventField.Define): Only event field can have initializer.
6016
6017         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
6018
6019         * const.cs (Const): Reuse initializer.
6020
6021         * cs-parser.jay: Updated after FieldBase changes.
6022         Added current_array_type to simplify array initializers.
6023
6024         * ecore.cs (NullCast.IsDefaultValue): Implemented.
6025
6026         * expression.cs, iterators.cs: Updated.
6027
6028         * namespace.cs (NamespaceEntry): Made UsingFound private.
6029
6030 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6031
6032         * parameterCollection.cs: Obsolete, removed.
6033         * parser.cs: Obsolete, removed.
6034
6035 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6036
6037         Fix #76849.
6038         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
6039
6040         * enum.cs (Enum.Define): Set obsolete context here.
6041
6042 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6043
6044         * doc.cs :
6045           - FindDocumentedMember() now expects 1) paramList as null
6046             when "we don't have to check the number of parameters" and
6047             2) Type.EmptyTypes when "there is no arguments".
6048           - Introduced FoundMember struct to hold the exact type which was
6049             used to find the documented member (the above change broke
6050             test-xml-044; it might be better just to use DeclaringType than
6051             what MS does, like this change does, but it depends on usage.)
6052
6053 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6054
6055         * doc.cs : documented member might be from DeclaringType for nested
6056           types. Fixed bug #76782.
6057
6058 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
6059
6060         * anonymous.cs: Have the param code handle leaving copies on the
6061         stack etc. Allows anonymous params to take part in the assignment
6062         code (++, +=, etc). Fixes bug #76550
6063
6064         * expression.cs: Handle the prepare_for_load/leave_copy by passing
6065         it down to the anon code.
6066
6067         * iterators.cs: Use dummy var here
6068
6069         * codegen.cs: Handle new vars
6070
6071 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6072
6073         Fix #76849.
6074         * class.cs (MethodData.Define): Set proper Obsolete context.
6075
6076         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
6077         obsolete context.
6078         (FieldExpr.DoResolve): Ditto.
6079
6080 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6081
6082         Fix #76849.
6083         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
6084         parent is not obsolete.
6085
6086 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
6087
6088         * doc.cs : (FindDocumentedMember) find parameterless members first
6089           and get CS0419 in the early stage. Fixed first case of bug #76727.
6090
6091 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
6092
6093         Fix #76859.
6094         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
6095         no error was reported.
6096
6097         *expression.cs (Binary.DoResolve): left can be null.
6098
6099 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
6100
6101         Fix #76783.
6102         * class.cs (MethodData.Emit): Parameters should be labeled first.
6103
6104 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
6105
6106         Fix #76761.
6107         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
6108
6109 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
6110
6111         * attribute.cs (AreParametersCompliant): Moved to Parameter.
6112
6113         * class.cs (MethodCore): Parameter clean up.
6114         (IMethodData): Added ParameterInfo.
6115         (MethodData): Parameter clean up.
6116         (Indexer.Define): Parameter clean up.
6117
6118         * anonymous.cs,
6119         * codegen.cs,
6120         * cs-parser.jay,
6121         * decl.cs,
6122         * doc.cs,
6123         * ecore.cs,
6124         * flowanalysis.cs,
6125         * iterators.cs,
6126         * pending.cs,
6127         * statement.cs,
6128         * typemanager.cs: Parameter clean up.
6129
6130         * delegate.cs (Define): Get rid of duplicated code.
6131
6132         * expression.cs (ParameterReference): Removed useless parameters
6133         and simplified.
6134         (Invocation): Ditto.
6135
6136         * parameter.cs (ParamsParameter): New class, params specialization.
6137         (ArglistParameter): Attemp to separate arglist.
6138         (Parameter): Refactored to be reusable and faster.
6139         (Parameter.Modifier): Made understandable.
6140         (Parameters): Changed to be used as a class for `this' assembly
6141         parameters. Refactored to use new specialized classes.
6142
6143         * support.cs (ParameterData): Added Types property.
6144         (InternalParameters): Deleted.
6145
6146 2005-08-20  Martin Baulig  <martin@ximian.com>
6147
6148         Merging this patch from GMCS to fix #75867.
6149
6150         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6151         scope if we don't already have it.
6152
6153 2005-11-17  Martin Baulig  <martin@ximian.com>
6154
6155         * anonymous.cs
6156         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
6157         inherit the scope from our parent.  Fixes #76653.
6158
6159 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6160
6161         * doc.cs : the previous patch does not actually fix the bug.
6162           PropertyInfo override check is now implemented and really fixed it.
6163         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
6164
6165 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6166
6167         * doc.cs : apply "override filter" also to properties.
6168           Fixed bug #76730.
6169
6170 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6171
6172         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
6173           no need to check overrides. For classes, omit those results from 
6174           interfaces since they must exist in the class. Fixed bug #76726.
6175
6176 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6177
6178         * typemanager.cs : (GetFullNameSignature) differentiate indexers
6179           with different parameters. Fixed the second problem in #76685.
6180
6181 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6182
6183         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
6184           get expected 'protected' access in CheckValidFamilyAccess()).
6185           Fixed bug #76692.
6186
6187 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6188
6189         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
6190           Fixed bug #76705.  CS1569 was incorrectly commented out.
6191
6192 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6193
6194         * doc.cs : use Invocation.IsOverride() to do real override check.
6195         * expression.cs : made Invocation.IsOverride() internal.
6196
6197 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6198
6199         * doc.cs : use TypeManager.FindMembers() instead of (possible)
6200           TypeBuilder.FindMembers() and filter overriden base members out.
6201           Fixed bug #76990.
6202
6203 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6204
6205         * doc.cs : ref/out parameters are represented as '@' (instead of
6206           '&' in type FullName). Fixed bug #76630 (additionally crefs).
6207
6208 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6209
6210         * doc.cs : when there was no '.' in cref to methods in doc comment,
6211           then parameters were missing in the output. Fixed bug #76691.
6212
6213 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6214
6215         * driver.cs : don't output docs when there is an error.
6216           Fixed bug #76693.
6217
6218 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6219
6220         * doc.cs :
6221           Now it should detect indexers. Fixed primary concern in bug #76685.
6222           Fixed CS0419 message to not show the identical member signature in
6223           the message.
6224
6225 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6226
6227         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
6228           instead of Type.FindMembers() since it does not handle events.
6229           Fixed bug #71604.
6230
6231 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
6232
6233         * codegen.cs: Fixed typo (speficied -> specified).
6234
6235 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6236
6237         Fix #76369.
6238         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
6239
6240 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6241
6242         * attribute.cs: Changed error message.
6243
6244         * cs-tokenizer.cs: One more check.
6245
6246 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6247
6248         * statement.cs (Block.Resolve): Ignore empty statement.
6249
6250 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6251
6252         * report.cs: Made error/warning methods more strict to avoid
6253         their misuse.
6254
6255         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
6256         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
6257         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
6258         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
6259
6260 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
6261
6262         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
6263         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
6264
6265         * class.cs (TypeContainer.IsComImport): New property.
6266         (Constructor.Define): Create proper ctor for ComImport types.
6267
6268         * expression.cs (New.CheckComImport): Fixed.
6269
6270 2005-11-07  Miguel de Icaza  <miguel@novell.com>
6271
6272         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
6273         that a parameter has been captured does not mean that we do not
6274         have to do the rest of the processing.  This fixes the second part
6275         of #76592.  If there was another anonymous method capturing
6276         values in the past, the Scope would never be set for the second
6277         method that captured the same parameter.
6278
6279         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
6280         properly manipulate the stack.   Second part of fix for #76592.
6281
6282         * expression.cs (New): Add support for invoking "new" on
6283         interfaces that have been flagged with the ComImport attribute and
6284         the CoClass.  Fixes #76637 
6285
6286         * statement.cs (Try.DoEmit): When a variable is captured, do not
6287         try to emit the vi.LocalBuilder variable as it has been captured.
6288         Create a temporary variable and store the results on the
6289         FieldBuilder.  Fixes #76642
6290
6291 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
6292
6293         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
6294
6295         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
6296
6297         * expression.cs (Binary.DoResolve): Added && optimalization.
6298     
6299         * typemanager.cs (AddUserType): Removed useless argument.
6300
6301 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
6302
6303         * statement.cs (Block.variables): Uses ListDictionary.
6304
6305 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6306
6307         Fix #75969.
6308         * class.cs (PartialContainer.EmitType): Customized to emit
6309         security attributes.
6310         (ClassPart.ApplyAttributeBuilder): Transform security attribute
6311         for partial classes.
6312
6313 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6314
6315         Fix #76599.
6316         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
6317         access has to be fixed.
6318         
6319         * typemanager.cs (IsUnmanagedType): Wrong common field type.
6320
6321 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
6322
6323         Fix #76590.
6324         * ecore.cs (NullCast.Reduce): Implemented.
6325
6326         * expression.cs (ArrayCreation.CheckIndices): Correcly check
6327         constant type.
6328         
6329         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
6330         properly.
6331         (Foreach.Resolve): Catch null properly.
6332
6333 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6334  
6335         * cs-tokenizer.cs: Warning text fix.
6336
6337         * driver.cs: AllWarningNumbers exposed on public interface.
6338
6339         * report.cs (): Reviewed warning numbers.
6340         (IsValidWarning): Use binary search.
6341
6342 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6343  
6344         * driver.cs: Implemeted resource visibility.
6345         (Resources): New class for code sharing between /res: and
6346         /linkres:
6347  
6348 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
6349
6350         Fix #76568.
6351         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
6352         folding.
6353         
6354         * convert (Convert.ImplicitReferenceConversion): NullCast holds
6355         contants only.
6356         
6357         * ecore.cs (NullCast): Child is contant only.
6358         
6359         * literal.cs (NullLiteral.Reduce): null can be converted to any
6360         reference type.
6361
6362 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
6363
6364         * driver.cs: Use Encoding.Default as default code page instead
6365           of ISO-28591.
6366
6367 2005-10-27  Raja R Harinath  <rharinath@novell.com>
6368
6369         Fix #76085.
6370         * expression.cs (Invocation.Error_InvalidArguments): Handle
6371         __arglist parameters.
6372         (Invocation.VerifyArgumentsCompat): Likewise.
6373         * support.cs (ReflectionParameters.GetSignatureForError): Print
6374         __arglist parameters.
6375         (InternalParamters.GetSignatureForError): Likewise.
6376         * parameter.cs (Parameters.GetSignatureForError): Likewise.
6377
6378 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
6379
6380         * attribute.cs (GetPropertyValue): Made public.
6381
6382         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
6383         Resolve.
6384         Add new property WrapNonExceptionThrows to handle 2.0 assembly
6385         attribute.
6386         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
6387         is not defined.
6388         
6389         * driver.cs: Reflect method name change.
6390         
6391         * statement.cs (Try.Resolve): Warn when try has both general
6392         exception handlers.
6393         
6394         * typemanager.cs: runtime_compatibility_attr_type new predefined
6395         type.
6396
6397 2005-10-26  Raja R Harinath  <harinath@gmail.com>
6398
6399         Fix #76419.
6400         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
6401         treat it as an empty parameter list.
6402
6403 2005-10-26  Raja R Harinath  <rharinath@novell.com>
6404
6405         Fix #76271.     
6406         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
6407         ResolveAsTypeStep silent.
6408         * statement.cs (Block.AddConstant): Mark block as used.
6409         (Block.ResolveMeta): Avoid piling on error messages
6410         if a constant initializer resolution fails.
6411
6412 2005-10-25  Raja R Harinath  <rharinath@novell.com>
6413
6414         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
6415         Remove.
6416         (NamespaceEntry.VerifyAllUsing): New.
6417         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
6418         behaviour.  Delegates actual resolution of alias to ...
6419         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
6420         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
6421         Update.
6422         * driver.cs (Driver.MainDriver): Update.
6423         
6424         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
6425         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
6426         property.
6427         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
6428         Remove.
6429         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
6430         RootNamespace.DefineNamespacesForAll.
6431
6432 2005-10-24  Raja R Harinath  <harinath@gmail.com>
6433
6434         * typemanager.cs (assemblies, external_aliases, modules)
6435         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
6436         (ComputeNamespaces, GetRootNamespace): Remove extra staging
6437         overhead.  Move resposibility ...
6438         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
6439         * driver.cs, attribute.cs, codegen.cs: Update to changes.
6440
6441 2005-10-23  Raja R Harinath  <harinath@gmail.com>
6442
6443         * namespace.cs (RootNamespace.all_namespaces): Renamed from
6444         cached_namespaces.  Improve usage.
6445         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
6446         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
6447         Move from GlobalRootNamespace and simplify.
6448         (RootNamespace.Global): Make instance variable.
6449         (RootNamespace.RootNamespace): Add "alias name" parameter.
6450         (GlobalRootNamespace): Simplify drastically.
6451         (Namespace.Lookup): Don't use GetNamespace.
6452         * typemanager.cs (GetRootNamespace): Rename from
6453         ComputeNamespaceForAlias.
6454         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
6455
6456 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6457
6458         * anonymous.cs (AnonymousContainer): Don't crash when container
6459         doesn't exist.
6460
6461 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6462
6463         * expression.cs (Binary.DoResolve): Warn when comparing same
6464         values.
6465
6466 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6467
6468         Fix #76486.
6469         * expression.cs (Binary.DoResolve): It looks like there are no
6470         convetsion rules in enum context.
6471
6472 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
6473
6474         Add support for extern alias qualifiers.
6475         * typemanager.cs: Move some LookupTypeReflection code
6476         to namespace.cs, to have cleaner code. Added some methods
6477         to help us keep track of the extern aliased references.
6478         * driver.cs: Add suport for extern alias assemblies on command
6479         line and check for their warnings/errors. Also keep track of the
6480         extern aliased assemblies.
6481         * namespace.cs: Move the global functionality of Namespace
6482         to GlobalRootNamespace/RootNamespace. Now the global namespace
6483         is GlobalRootNamespace.Globa. Also the code moved from 
6484         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
6485         Finally added LocalAliasEntry (AliasEntry before) and
6486         ExternAliasEntry, to handle alias statements.
6487         * cs-parser.jay: Add support in the grammar for extern alias
6488         statement.
6489         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
6490         Update callings to Namespace (now in GlobalRootNamespace).
6491
6492 2005-10-18  Raja R Harinath  <rharinath@novell.com>
6493
6494         Fix #76371.
6495         * class.cs (TypeContainer.DefineType): Move updating of
6496         topological sort earlier in the code.
6497         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
6498
6499 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
6500
6501         Fix #76273.
6502         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
6503         
6504         * constant.cs (Constant.TryReduce): Moved from Cast class.
6505         (Reduce): Made little bit more OO and fixed missing conversions.
6506         
6507         * ecore.cs (Reduce): Implemented.
6508         (Binary.EnumLiftUp): New method to upgrade values to enum values.
6509         
6510         * literal.cs (Reduce): Implemented.
6511         
6512         * class.cs: Reverted Miguel's wrong commit.
6513
6514 2005-10-14  Miguel de Icaza  <miguel@novell.com>
6515
6516         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
6517
6518 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
6519
6520         * cs-parser.jay, expression.cs : CS0214 was missing error location
6521           for constants. Fixed bug #76404.
6522
6523 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
6524
6525         Fix #76370.
6526         * convert.cs (ExplicitConversionCore): Fixed object->enum
6527         conversion.
6528
6529 2005-10-10  Raja R Harinath  <rharinath@novell.com>
6530
6531         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
6532         InstanceExpression.
6533         (PropertyExpr.EmitCall): Likewise.
6534         * expression.cs (Invocation.EmitArguments): Handle case where
6535         arguments == null.
6536         (Invocation.EmitCall): Avoid allocating temporary variable if
6537         there are no arguments.
6538
6539 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6540
6541         Fix #76323.
6542         * convert.cs (ImplicitConversionStandard): Move conversion of
6543         void* to arbitrary pointer types ...
6544         (ExplicitConversionStandard): .. here.
6545         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
6546         error to always print typenames.
6547
6548 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6549
6550         * convert.cs (GetConversionOperator): Rename from
6551         GetConversionOperators.  Move operator selection code from ...
6552         (UserDefinedConversion): ... here.
6553
6554 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
6555
6556         * convert.cs (ExplicitConversionCore): Removed duplicate enum
6557         conversion.
6558
6559 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
6560
6561         * assign.cs (Assign.DoResolve): Error method changed.
6562
6563         * cfold.cs (DoConstantNumericPromotions): Error method changed.
6564         
6565         * const.cs (ResolveValue): Reset in_transit immediately.
6566         
6567         * constant.cs: Error method changed.
6568         
6569         * convert.cs: Removed useless location parameter.
6570         (ExplicitNumericConversion): Don't do double enum check.
6571         (ExplicitConversionCore): Renamed from ExplicitConversion.
6572         (ExplicitUnsafe): Extracted from ExplicitConversion.
6573         (ExplicitConversion): Uses for error reporting.
6574         
6575         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
6576         error messages.
6577         (ResolveBoolean): Uses common error method.
6578         (CastToDecimal): Get rid of ec.
6579         (CastFromDecimal): Optimized.
6580         (ConvCast): Get rid of ec.
6581         
6582         * enum.cs (ResolveValue): Reset in_transit immediately.
6583         (Emit): Return after first error.
6584         
6585         * expression.cs: Convert changes.
6586         
6587         * literal.cs: Error method changed.
6588         
6589         * statement.cs: Error method changed.
6590
6591 2005-10-03  Raja R Harinath  <rharinath@novell.com>
6592
6593         * support.cs (SeekableStreamReader.Position): Don't error out when
6594         the requested position is just beyond the end of the current
6595         buffered data.
6596
6597 2005-09-28  Raja R Harinath  <rharinath@novell.com>
6598
6599         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
6600         try to keep in sync with the byte count of the underlying Stream.
6601         However, this limits us to a window size of 2048 characters: i.e.,
6602         the maximum lookahead of our lexer/parser can be 2048 characters.
6603
6604 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
6605
6606         Fix #76255.
6607         * driver.cs: Fix compilation files with full root path.
6608
6609 2005-09-25  Miguel de Icaza  <miguel@novell.com>
6610
6611         * report.cs (SymbolRelatedToPreviousError): Format the output so
6612         it does not use an open parenthesis that is never closed. 
6613
6614         * driver.cs: Follow coding guidelines
6615
6616 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6617
6618         Fix #72930.
6619         * const.cs (Const.ResolveValue): Check for assigning non-null
6620         value to reference type.
6621
6622 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6623
6624         * anonymous.cs: Implemented ExprClassName.
6625         
6626         * assign.cs (Assign.DoResolve): Don't chrash when type is not
6627         delegate.
6628         
6629         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
6630         check.
6631         
6632         * class.cs (StaticClass.DefineContainerMembers): Report protected
6633         members as error.
6634         
6635         * codegen.cs: if(ed) PRODUCTION.
6636         
6637         * convert.cs (Error_CannotImplicitConversion): Better error
6638         distinction.
6639         
6640         * cs-parser.jay: More error checks.
6641         
6642         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
6643         
6644         * driver.cs (CSCParseOption): Enabled wrong option check.
6645         
6646         * ecore.cs (Expression.ExprClassName): Turned to property.
6647         (MemberExpr.CheckIntermediateModification): For checking boxed
6648         value types     modification.
6649         
6650         * statement.cs (Fixed.Resolve): Expression type must be
6651         convertible to fixed type.
6652         (CollectionForeach.GetEnumeratorFilter,TryType):
6653         Small refactoring for easier error checking.
6654
6655 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
6656
6657         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
6658         attributes.
6659         
6660         * class.cs (GeneratedBaseInitializer): New class for customization
6661         compiler generated initializers.
6662         (MemberBase.DoDefine): Check Obsolete attribute here.
6663         (FieldMember.DoDefine): Ditto.
6664         
6665         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
6666         constants.
6667         
6668         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
6669         (MemberCore.GetObsoleteAttribute): Removed argument.
6670         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
6671         (MemberCore.CheckObsoleteType): New helper.
6672         
6673         * delegate.cs,
6674         * enum.cs,
6675         * statement.cs: Updates after MemberCore changes.
6676         
6677         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
6678         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
6679         
6680         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
6681         obsolete attribute for compiler construct.
6682         (As.DoResolve): Cache result.
6683         
6684         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
6685
6686 2005-09-26  Raja R Harinath  <rharinath@novell.com>
6687
6688         Fix #76133.
6689         * expression.cs (This.VerifyFixed): In a value type T, the type of
6690         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
6691         value type R, 'this' is treated as a value parameter.
6692
6693 2005-09-22  Miguel de Icaza  <miguel@novell.com>
6694
6695         * statement.cs (Lock): Use the TemporaryVariable class instead of
6696         manually using local variables as those do not work when variables
6697         are captured.
6698
6699         * ecore.cs: Moved the TemporaryVariable class from being a nested
6700         class inside Foreach to be a public class that can be employed in
6701         other places. 
6702
6703 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
6704
6705         * cs-parser.jay: interface_accessors replaced by
6706         accessor_declarations.
6707
6708         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
6709         location.
6710         
6711         * statement.cs (GotoCase.Resolve): Convert null constant to
6712         null case.
6713         (SwitchLabel.ResolveAndReduce): Ditto.
6714         (SwitchLabel.NullStringCase): Custom null stamp.
6715         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
6716         
6717         typemanager.cs (CSharpSignature): Don't skip first argument
6718         for full names.
6719
6720 2005-09-18  Miguel de Icaza  <miguel@novell.com>
6721
6722         * driver.cs: Set InEmacs based on the environment variable EMACS. 
6723
6724         * location.cs (InEmacs): in this mode, do not report column
6725         location as it confuses Emacs.
6726
6727 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
6728
6729         * cfold.cs, constant.cs, convert.cs, ecore.cs,
6730         expression.cs, iterators.cs, literal.cs: Store constants and
6731         literals location.
6732         
6733         * class.cs (MemberBase.ShortName): Pass location.
6734         
6735         * cs-parser.jay: Some location fixes.
6736         
6737         * ecore.cs (Expression.Location): Made virtual.
6738
6739 2005-09-05  Miguel de Icaza  <miguel@novell.com>
6740
6741         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
6742         if the underlying types are the same, otherwise we need to produce
6743         code that will do the proper cast.
6744
6745         This was exposed by Marek's constant rewrite which produced
6746         invalid code for the call site:
6747
6748         enum X : long { a }
6749         void Method (X v) {}
6750
6751         Method ((X) 5)
6752
6753         This fixes test-49.cs
6754
6755 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
6756
6757         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
6758           Type/Object should be allowed as well. Fixed bug #75968.
6759
6760 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
6761
6762         * expression.cs : (Binary.DoResolve): when one is enum constant and
6763           another is constant 0, then return enum one *as enum type*.
6764           Fixed bug 74846.
6765
6766 2005-09-02  Raja R Harinath  <rharinath@novell.com>
6767
6768         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
6769         internal.
6770
6771         Fix #75941.
6772         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
6773         flow-branching for LocalVariableReferences in case we were invoked
6774         from a MemberAccess.
6775         * expression.cs (LocalVariableReference.VerifyAssigned): New.
6776         Carved out of ...
6777         (LocalVariableReference.DoResolveBase): ... this.
6778         (MemberAccess.Resolve): Do the check that was disabled during
6779         SimpleNameResolve.
6780
6781 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
6782
6783         * class.cs :
6784           (PartialContainer.Create): check abstract/sealed/static strictly
6785           but abstract/sealed can exist only at one side. Fixed bug #75883.
6786
6787 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
6788
6789         Fix #75945.
6790         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
6791         specified, don't default to UnmanagedType.I4.
6792
6793 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
6794
6795         * expression.cs : conditional operator should check possibly
6796           incorrect assign expression. Fixed bug #75946.
6797
6798 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
6799
6800         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
6801           Reverting the change. gmcs is much complex than mcs on this matter.
6802
6803 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
6804
6805         * cs-tokenizer.cs : To read another token ahead of the actual 
6806           consumption, use new SavedToken and cache token instead of moving
6807           back the stream with SeekableStreamReader (it seemed problematic).
6808         * cs-parser.jay,
6809           driver.cs : Thus use StreamReader directly.
6810         * support.cs : Thus removed SeekableStreamReader.
6811
6812 2005-08-30  Raja R Harinath  <rharinath@novell.com>
6813
6814         Fix #75934.
6815         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
6816         (ScopeInfo.EmitScopeType): Use it to construct field names from
6817         names of captured locals.
6818
6819         Fix #75929.
6820         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
6821         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
6822         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
6823         (ExplicitConversion): Remove enum cases already handled by
6824         implicit conversion.  Move implicit conversion check to the beginning.
6825         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
6826         * expression.cs (ArrayCreation.EmitDynamicInitializers):
6827         Don't treat System.Enum as a struct.
6828
6829 2005-08-30  Jb Evain  <jbevain@gmail.com>
6830
6831         * attribute.cs: handles as expression in parameters.
6832
6833 2005-08-30  Raja R Harinath  <rharinath@novell.com>
6834
6835         Fix #75802.
6836         * class.cs (TypeContainer.VerifyClsName): Don't use a
6837         PartialContainer when verifying CLS compliance.
6838         (AbstractPropertyEventMethod): Set Parent here, ...
6839         (PropertyMethod): ... not here.
6840
6841 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
6842
6843         * attribute.cs : escaped attribute name should not be allowed to be
6844           resolved (e.g. @class as classAttribute). Fixed bug #75930.
6845
6846 2005-08-29  Raja R Harinath  <rharinath@novell.com>
6847
6848         Fix #75927.
6849         * convert.cs (ImplicitStandardConversionExists): Allow zero also
6850         when converting a long constant to unsigned long.
6851         * expression.cs (Invocation.OverloadResolve): Add sanity check to
6852         detect where IsApplicable and VerifyArgumentsCompat disagree.
6853
6854 2005-08-29  Raja R Harinath  <rharinath@novell.com>
6855         and Carlos Alberto Cortez  <carlos@unixmexico.org>
6856
6857         Fix #75848.
6858         * class.cs (TypeContainer.CanElideInitializer): New helper.
6859         (TypeContainer.EmitFieldInitializers): Use it to determine if we
6860         can safely emitting the initializer of a field.
6861
6862 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6863
6864         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
6865           allowed inside a switch (without loop). Fixed bug #75433.
6866
6867 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
6868
6869         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
6870         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
6871
6872 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6873
6874         * driver.cs : kinda reverting the default encoding changes (not exact 
6875           revert since I noticed that "codepage:reset" might not work fine).
6876
6877 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6878
6879         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
6880           Location. Now getter and setter store location correctly.
6881           (errors/cs0111-12.cs now reports the expected location.)
6882
6883 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6884
6885         * driver.cs : Use default encoding on the environment.
6886           Removed (now that) extra parameter for SeekableStreamReader.
6887         * support.cs : (SeekableStreamReader) third .ctor() argument for
6888           StreamReader is not required (always true). preamble size could
6889           be acquired in simpler and safe way.
6890
6891 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6892
6893         * cs-parser.jay: report CS0642 at warning level 3
6894           and report CS0642 for an if else statement also
6895           fixes bug #74745. Patch by John Luke (and a bit
6896           modified by me).
6897           Removed extra CS0642 warning check for "while",
6898           "for" and "fixed".
6899         * statement.cs: In Block.Resolve(), CS0642 check
6900           is reimplemented to check a sequence of an empty
6901           statement and a block.
6902
6903           Both fix bug #66777.
6904
6905 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
6906
6907         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
6908         detection until I fix it.
6909         
6910         * cs-tokenizer.cs: Changed error message.
6911         
6912         * cs-parser.jay: Fixed 2 error locations.
6913         
6914         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
6915         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
6916         properties.
6917         
6918         * enum.cs (GetSignatureForError): Fixed.
6919         
6920         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
6921         method detection.
6922         
6923         * class.cs,
6924         * typemanager.cs (RegisterProperty): Removed.
6925         
6926         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
6927
6928 2005-08-24  Raja R Harinath  <rharinath@novell.com>
6929
6930         Fix #75874.
6931         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
6932         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
6933
6934 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
6935
6936         * expression.cs : tiny fix is required for not warning positive ulong.
6937           See test-441.cs.
6938
6939 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
6940
6941         * expression.cs : add CS0652 check for constant and integral
6942           expression. Fixed bug #53974.
6943
6944 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
6945
6946         * expression.cs : in DoNumericPromotions(), check if there is implicit
6947           conversion overload for string (to check CS0034). Fixed bug #52492.
6948
6949 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
6950
6951         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
6952
6953 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
6954
6955         * ecore.cs : report location when it is *not* Null.
6956
6957 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
6958
6959         * codegen.cs,
6960           ecore.cs,
6961           flowanalysis.cs,
6962           expression.cs:
6963           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
6964           correctly. Fixed bug #75721.
6965
6966 2005-08-23  Raja R Harinath  <rharinath@novell.com>
6967
6968         * support.cs (SeekableStreamReader.Position): Avoid an expensive
6969         loop that performs 'min (pos, char_count)'.
6970
6971         Fix #75862.
6972         * expression.cs (Unary.ResolveOperator): Don't discard implicit
6973         converted value in Operator.OnesComplement.
6974
6975 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
6976
6977         * anonymous.cs: If the anon method is pulled into a helper class,
6978         it needs to be `internal' not `private'. Fixes runtime behavior on
6979         msft. bug #75704
6980
6981 2005-08-20  Martin Baulig  <martin@ximian.com>
6982
6983         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6984         scope if we don't already have it.
6985
6986         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
6987         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
6988         fixes #75867.
6989
6990 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
6991
6992         Fix #75803
6993         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
6994         is a partial class.
6995
6996 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
6997
6998         The big constants rewrite
6999         Fix #75746, #75685 and more
7000         As a side effect saved 1MB for MWF ;-)
7001         
7002         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
7003         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
7004         enum based for corlib compilation.
7005         
7006         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
7007         subtractions.
7008         
7009         * class.cs (FixedField.Define): Use ResolveAsConstant.
7010         
7011         * const.cs (IConstant): Interface constants and enums.
7012         (Const.ResolveValue): New method for constant resolvning.
7013         (ExternalConstant): Constants from imported assemblies.
7014         
7015         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
7016         conversion; like enums.
7017         (Constant.ToType): Converts this constant to different type.
7018         (Constant.Increment): Adds 1.
7019         
7020         * convert.cs (ImplicitConversionRequired): Simplified.
7021         
7022         * cs-parser.jay: Create EnumMember directly.
7023         
7024         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
7025         
7026         * doc.cs (GenerateEnumDocComment): Removed.
7027         
7028         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
7029         (ConvertIntLiteral): Removed.
7030         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
7031         
7032         * enum.cs (EnumMember): Implement IConstant.
7033         (Enum.IsValidEnumConstant): Removed.
7034         (Enum.GetNextDefaultValue): Removed.
7035         (Enum.FindMembers): Updated.
7036         (Enum.GenerateDocComment): Iterate enum members.
7037         
7038         * expression.cs (Cast.TryReduce): Handle enums correctly.
7039         (New.Constantify): Made public.
7040         (MemberAccess.DoResolve): Removed contant specific if(s).
7041         
7042         * literal.cs (NullLiteral): Implement new abstract methods.
7043         
7044         * statement.cs (GotoCase.Resolve): Use new constant methods.
7045         (SwitchLabel.ResolveAndReduce): Use new constant methods.
7046         
7047         * typemanager.cs (LookupEnum): Removed.
7048         (IsEnumType): Fixed to work with corlib.
7049         (RegisterConstant): Removed.
7050         (LookupConstant): Removed.
7051         (GetConstant): Changed to work with IConstant.
7052
7053 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
7054
7055         * location.cs : Fixed overflown (>255) column number.
7056
7057 2005-08-03  Raja R Harinath  <rharinath@novell.com>
7058
7059         First cut of the qualified-alias-member feature.
7060         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
7061         token.
7062         * cs-parser.jay (DOUBLE_COLON): New token.
7063         (namespace_or_type_name): Add rule for recognizing
7064         qualified-alias-members.
7065         (primary_expression): Likewise.
7066         (element_access): Allow QualifiedAliasMember as a possible
7067         type-bearing expression.
7068         (local_variable_type, local_variable_pointer_type): Likewise.
7069         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
7070         aliases in the current and enclosing namespace declarations.
7071         (NamespaceEntry.UsingAlias): Add CS0440 warning.
7072         * decl.cs (MemberName.is_double_colon): New.
7073         (MemberName.MemberName): Add new constructor for alias-member.
7074         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
7075         * expression.cs (QualifiedAliasMember): New expression type.
7076
7077 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7078
7079         * location.cs : it borked when no argument was specified.
7080
7081 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7082
7083         * location.cs : tiny ToString() format fix.
7084
7085 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7086
7087         * statement.cs : oops, it was missing.
7088
7089 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7090
7091         A set of fixes for precise line/column location.
7092
7093         * location.cs :
7094           "token" field now holds a file/line "delta", a line number offset 
7095           from the segment, and a column number. See also:
7096           http://lists.ximian.com/pipermail/mono-devel-list/2004-
7097           December/009508.html
7098           Removed static IsNull. Use instance IsNull property instead.
7099         * cs-tokenizer.cs :
7100           For some tokens it stores Location. For Identifier it stores
7101           LocatedToken which is a pair of string name and location.
7102           Column numbers are adjusted only at getChar().
7103         * report.cs :
7104           Use Location.ToString() for reporting (it now contains column).
7105         * cs-parser.jay :
7106           Largely modified to use LocatedToken instead of
7107           string (IDENTIFIER), and to acquire Location from some tokens.
7108         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
7109           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
7110           codegen.cs :
7111           Now MemberName holds Location. DeclSpace.ctor() receives Location
7112           as a parameter. Removed extra parameters to all derived classes.
7113           Replaced Location.IsNull() with instance property.
7114         * assign.cs, expression.cs :
7115           Added .ctor() overload that omits Location.
7116         * attribute.cs :
7117           Added "nameEscaped" flag that indicates the identifier was escaped
7118           in the source file. This fixes bug #57047.
7119
7120 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
7121
7122         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
7123         New method, looking for lo-case imported cls type.
7124
7125         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
7126         here.
7127
7128         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
7129
7130         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
7131
7132         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
7133         all_imported_types.
7134         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
7135
7136         Optimized to save 3.5 MB for SWF compilation.
7137
7138 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7139
7140         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
7141         (PartialContainer.Create): Moved logic AddToContainer.
7142         (PartialContainer.MarkForDuplicationCheck): Shares name.
7143         
7144         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
7145         place.
7146         
7147         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
7148         initialization.
7149         (Namespace.GetSignatureForError): New method.
7150         
7151         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
7152         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
7153
7154 2005-08-01  Raja R Harinath  <rharinath@novell.com>
7155
7156         Fix #75669.
7157         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
7158         member lookup rather than qualifier_type, since qualifier_type can
7159         be null.
7160
7161 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7162
7163         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
7164         enum member.
7165
7166 2005-07-31  Miguel de Icaza  <miguel@novell.com>
7167
7168         * statement.cs: Copy the local exception into the exception
7169         captured local.  Fixes 75674
7170
7171 2005-07-31  Raja R Harinath  <harinath@gmail.com>
7172
7173         Fix #75658.
7174         * expression.cs (Invocation.OverloadResolve): Don't report error
7175         CS1501 if error CS1502 has been reported.
7176         (New.DoResolve): Delegate CS1501 reporting to
7177         Invocation.OverloadResolve.
7178
7179         Fix #75656.
7180         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
7181         invariant-meaning-in-block property in an enclosing block if
7182         necessary.
7183
7184 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
7185
7186         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
7187         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
7188         (Switch.CheckSwitch): Just save 50kb for SWF.
7189
7190 2005-07-27  Martin Baulig  <martin@ximian.com>
7191
7192         * anonymous.cs (CaptureContext.AddField): Added
7193         `AnonymousContainer am' argument; compute its toplevel scope if
7194         it's not already computed.  Fixes #75649.
7195
7196 2005-07-26  Raja R Harinath  <rharinath@novell.com>
7197
7198         Fix #75628.
7199         * class.cs (Constructor.Emit): Reset block to null if the block
7200         resolve fails.
7201
7202 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7203
7204         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
7205
7206 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7207
7208         * class.cs (MethodData.Define): Check whether accessor implementing
7209         interface is public.
7210
7211         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
7212
7213 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
7214
7215         Fix #57245
7216         * namespace.cs (LookupType): Moved same type check to...
7217         
7218         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
7219         with the same name.
7220
7221 2005-07-21  Raja R Harinath  <rharinath@novell.com>
7222
7223         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
7224         already found a typebuilder.
7225         * class.cs (MethodCore.IsDuplicateImplementation): Compare
7226         MemberNames, not strings.
7227
7228         * const.cs (Error_ExpressionMustBeConst): 
7229         Rename from Error_EpressionMustBeConst.
7230         * const.cs, class.cs, statement.cd: Update.
7231
7232 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
7233
7234         Fix #65573
7235
7236         * const.cs (Const.LookupConstantValue): Report missing contant expression
7237         everytime.
7238         (Error_EpressionMustBeConstant): Only one error method.
7239
7240         * class.cs, statement.c: Updated.
7241
7242 2005-07-20  Raja R Harinath  <rharinath@novell.com>
7243
7244         * statement.cs (Block.Flags): Add back HasVarargs.
7245         (Block.flags): Make protected.
7246         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
7247
7248         * typemanager.cs (types, typecontainers, user_types): Remove.
7249         (UserTypes, TypeContainers): Likewise.
7250         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
7251         (CleanUp, Reset): Update.
7252         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
7253         (GetNestedType): Use Type.GetNestedType.
7254         (CoreLookupType): Take two arguments, the namespace and the
7255         basename of the type.  Update to use the Namespace.Lookup
7256         mechanism.
7257         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
7258         (RealMemberLookup): Use IsNestedChildOf instead of playing with
7259         string concatenation and substring matches.
7260         * class.cs, enum.cs, delegate.cs: Update to changes.
7261
7262 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
7263
7264         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
7265         Expression and made virtual.
7266
7267         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
7268         (ImplicitStandardConversionExists): Fixed `byte' typo ?
7269
7270         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
7271
7272         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
7273         error message.
7274
7275         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
7276         change.
7277
7278 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
7279
7280         Fix #57707
7281         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
7282         AssemblyCultureAttribute is not used on executable.
7283
7284         * rootcontext.cs,
7285         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
7286
7287 2005-07-16  Raja R Harinath  <rharinath@novell.com>
7288
7289         Fix #60638.
7290         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
7291         New.  Reports CS0252/CS0253.
7292         Mostly taken from preliminary patch by Duncak Mak.
7293         (Binary.DoResolveOperator): Store results of operator lookup.
7294         Use them to detect if we need to warn about unintended reference
7295         comparisons.
7296
7297 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7298
7299         Fix #72969.
7300         * namespace.cs (Namespace.Lookup): Add back location parameter.
7301         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
7302         * delegate.cs, ecore.cs, expression.cs: Update to changes.
7303
7304         * codegen.cs (EmitContext.DeclSpace): Make readonly.
7305         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
7306         (Namespace.LookupType): ... this.
7307         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
7308         of namespaces.
7309         * typemanager.cs (LookupTypeReflection): Remove buggy code that
7310         purported to handle pointers.
7311         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
7312         CoreLookupType.
7313
7314 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
7315
7316         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
7317         type as namespace.
7318
7319 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7320
7321         * namespace.cs (Namespace.Lookup): Drop location parameter.
7322         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
7323         (NamespaceEntry.Lookup): ... this.
7324         (NamespaceEntry.Error_AmbiguousTypeReference):
7325         Move here from DeclSpace.
7326         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
7327         names ...
7328         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
7329         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
7330         Move to NamespaceEntry.
7331         * delegate.cs, expression.cs: Update to changes.
7332
7333 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
7334
7335         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
7336         CheckAttributeType and refactored.
7337         (Attribute.ResolvePossibleAttributeType): Changed to reuse
7338         ResolveAsTypeTerminal error handling.
7339         (ResolveAsTypeTerminal): Introduced because of global attributes extra
7340         handling.
7341         (GetSignatureForError): Print errors in same way.
7342
7343         * class.cs,
7344         * codegen.cs: Reflect attribute GetSignatureForError change.
7345
7346         * ecore.cs,
7347         * expression.cs: Add silent parameter to ResolveAsTypeStep.
7348
7349         * namespace.cs (UsingEntry): Refactored to make fields private.
7350
7351         * assign.cs,
7352         statement.cs: Error_UnexpectedKind has extra parameter.
7353
7354 2005-07-14  Raja R Harinath  <rharinath@novell.com>
7355
7356         * ecore.cs (IAlias): Remove.
7357         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
7358         that implement the interface.
7359         * namespace.cs (Namespace): Likewise.
7360         (Namespace.declspaces): Renamed from 'defined_names'.
7361         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
7362         DeclSpace instead of an IAlias.
7363         * tree.cs (Tree.AddDecl): Update.
7364
7365 2005-07-12  Raja R Harinath  <rharinath@novell.com>
7366
7367         * statement.cs (Block.Flags); Remove HasVarargs.
7368         (Block.HasVarargs): Move to ToplevelBlock.
7369         (Block.ThisVariable, Block.AddThisVariable): Likewise.
7370         (Block.Variables): Make protected.  Initialize variable hashtable
7371         if necessary.
7372         (Block.AddVariable): Update.
7373         (Block.Resolve): Update to changes.
7374         (ToplevelBlock.HasVarargs): New boolean.
7375         (ToplevelBlock.ThisVariable): Move here from Block.
7376         (ToplevelBlock.AddThisVariable): Likewise.
7377         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
7378         * expression.cs (This.ResolveBase): Update to changes.
7379         (ArglistAccess.DoResolve): Likewise.
7380
7381 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7382
7383         Fix #75321
7384         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
7385
7386         * class.cs (TypeContainer.VerifyMembers): Distinguish between
7387         not used and not used & assigned.
7388         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
7389
7390 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7391
7392         Fix #75053
7393         * expression.cs (Is.DoResolve): null is never provided type.
7394
7395 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
7396
7397         Fix #52496
7398         * cs-parser.jay: Less strict event error rule to catch more errors.
7399
7400 2005-07-08  Martin Baulig  <martin@ximian.com>
7401
7402         Fix test-iter-10.cs - distinguish whether we `yield' in a property
7403         gettter (allowed) or setter (not allowed).
7404
7405         * class.cs (Accessor): Implement IIteratorContainer.
7406         (Accessor.Yields): New public field.
7407         (PropertyBase.PropertyMethod.Define): Handle iterators on a
7408         per-accessor basis.
7409
7410         * cs-parser.jay
7411         (get_accessor_declaration, set_accessor_declaration): Set the
7412         `yields' flag on the accessor, not the property.
7413         (property_declaration): Do the iterators check on a per-accessor
7414         basis and not for the whole property.
7415
7416 2005-07-08  Martin Baulig  <martin@ximian.com>
7417
7418         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
7419         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
7420
7421 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
7422
7423         Fix #74975
7424         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
7425         (ExtractSecurityPermissionSet): Cope with self referencing security
7426         attributes properly.
7427
7428         * driver.cs (SetOutputFile): Made public property OutputFile.
7429
7430 2005-07-07  Raja R Harinath  <rharinath@novell.com>
7431
7432         Fix #75486.
7433         * class.cs (TypeContainer.first_nonstatic_field): Rename from
7434         has_nonstatic_fields.  Make into a FieldBase pointer.
7435         (TypeContainer.AddField): Add CS0282 check.
7436         (TypeContainer.EmitType): Update.
7437
7438 2005-07-06  Miguel de Icaza  <miguel@novell.com>
7439
7440         * cs-tokenizer.cs (consume_identifier): Do not create strings to
7441         compare if they start with __.
7442
7443 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7444
7445         * statement.cs (Switch.SwitchGoverningType): Only look at
7446         UserCasts that don't need implicit standard conversions to one of
7447         the allowed switch types (Fixes test-322.cs).
7448         (LocalInfo.Resolve): Re-enable sanity-test.
7449
7450 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
7451
7452         * cs-tokenizer.cs (consume_identifier): Detect double undescores
7453         
7454         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
7455         
7456         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
7457
7458 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7459
7460         Fix #75472.
7461         * ecore.cs (SimpleName.GetSignatureForError): Add.
7462         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
7463         (MemberAccess.GetSignatureForError): Add.
7464
7465 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
7466  
7467         The big error and warning messages review.
7468         
7469         * anonymous.cs,
7470         * assign.cs,
7471         * attribute.cs,
7472         * class.cs,
7473         * codegen.cs,
7474         * convert.cs,
7475         * cs-parser.jay,
7476         * cs-tokenizer.cs,
7477         * decl.cs,
7478         * delegate.cs,
7479         * doc.cs,
7480         * driver.cs,
7481         * ecore.cs,
7482         * enum.cs,
7483         * expression.cs,
7484         * flowanalysis.cs,
7485         * iterators.cs,
7486         * literal.cs,
7487         * location.cs,
7488         * modifiers.cs,
7489         * namespace.cs,
7490         * parameter.cs,
7491         * pending.cs,
7492         * report.cs,
7493         * rootcontext.cs,
7494         * statement.cs,
7495         * support.cs,
7496         * tree.cs,
7497         * typemanager.cs: Updated.
7498         
7499         * class.cs: (MethodCore.SetYields): Moved here to share.
7500         (PropertyMethod.Define): Moved iterator setup here.
7501         
7502         * iterators.cs: Add orig_method to have full access to parent
7503         container.
7504
7505 2005-07-05  Raja R Harinath  <rharinath@novell.com>
7506
7507         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
7508         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
7509         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
7510         variable of struct type.
7511         * expression.cs (Unary.ResolveOperator): Update to change.
7512         (Indirection.VerifyFixed): Likewise.
7513         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
7514         (ParameterReference.VerifyFixed): Value parameters are fixed.
7515         (This.VerifyFixed): Treat 'this' as a value parameter.
7516         * statement.cs (LocalInfo.IsFixed): Remove.
7517
7518 2005-07-01  Martin Baulig  <martin@ximian.com>
7519
7520         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
7521         `ec.EmitThis ()' to get the correct scope.
7522
7523 2005-07-01  Martin Baulig  <martin@ximian.com>
7524
7525         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
7526         instance is a ParameterReference; fixes #75299.
7527
7528 2005-07-01  Martin Baulig  <martin@ximian.com>
7529
7530         Reverted Marek's latest patch (r46725):
7531         - it contains structural changes which are neither mentioned in
7532           the ChangeLog nor explained anywhere; for example the additional
7533           argument of EmitContext's and Iterator's .ctor's and the
7534           TypeContainer.DefineMembers() change.
7535         - structural changes like this should go in in seperate patches
7536           and not be hidden in a huge patch which just seems to affect
7537           warnings and errors.
7538           a big and hard to understand patch.
7539         - it breaks iterators and causes regressions, for instance in
7540           test-iter-03.cs.      
7541
7542 2005-06-30  Raja R Harinath  <rharinath@novell.com>
7543
7544         Fix #75412.
7545         * expression.cs (Indexers.map): Remove.
7546         (Indexers.Append): Filter out inaccessible setters and getters.
7547         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
7548
7549         Fix #75283.
7550         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
7551         Refactored from ...
7552         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
7553         (FieldExpr.Emit, PropertyExpr.Emit): Update.
7554         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
7555         * expression.cs (Invocation.EmitCall): Add CS0120 check.
7556
7557 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
7558
7559         Fix #75322
7560         * class.cs (FieldBase.GetInitializerExpression): One more field
7561         for backup.
7562
7563 2005-06-28  Miguel de Icaza  <miguel@novell.com>
7564
7565         * pending.cs: Do not define a proxy if the base method is virtual,
7566         it will be picked up by the runtime (bug 75270).
7567
7568 2005-06-08  Martin Baulig  <martin@ximian.com>
7569
7570         The big Iterators rewrite :-)
7571
7572         * iterators.cs: Rewrite this to use the anonymous methods framework.
7573
7574         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
7575         before the TypeContainers; see 2test-21.cs.
7576
7577         * class.cs
7578         (TypeContainer.DefineType): Don't create a new EmitContext if we
7579         already have one (this only happens if we're an Iterator).
7580         (TypeContainer.Define): Also call Define() on all our iterators.
7581         (Method.CreateEmitContext): Added support for iterators.
7582
7583         * anonymous.cs
7584         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
7585         (AnonymousContainer.CreateMethodHost): Moved here from
7586         AnonymousMethod and made abstract.
7587         (AnonymousContainer.CreateScopeType): New abstract method.
7588         (AnonymousContainer.IsIterator): New public property.
7589         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
7590         get the ScopeTypeBuilder rather than manually defining it here. 
7591         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
7592         iterators here.
7593
7594         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
7595         before RootContext.DefineTypes().
7596
7597         * codegen.cs (EmitContext.RemapToProxy): Removed.
7598         (EmitContext.CurrentAnonymousMethod): Changed type from
7599         AnonymousMethod -> AnonymousContainer.
7600         (EmitContext.ResolveTopBlock): Protect from being called twice.
7601         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
7602         (EmitContext.EmitThis): Removed the iterators hacks; use the
7603         anonymous methods framework for that.
7604
7605         * statement.cs
7606         (ToplevelBlock.Container): Make this a property, not a field.
7607         (ToplevelBlock.ReParent): New public method; move the
7608         ToplevelBlock into a new container.
7609         (Foreach.TemporaryVariable): Simplify.
7610
7611 2005-06-05  Martin Baulig  <martin@ximian.com>
7612
7613         * statement.cs (LocalInfo.CompilerGenerated): New flag.
7614         (Block.AddTemporaryVariable): New public method; creates a new
7615         `LocalInfo' for a temporary variable.
7616         (Block.EmitMeta): Create the LocalBuilders for all the temporary
7617         variables here.
7618         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
7619         non-iterator variables.
7620
7621 2005-06-05  Martin Baulig  <martin@ximian.com>
7622
7623         * statement.cs (Foreach.TemporaryVariable): Create the
7624         LocalBuilder in the Emit phase and not in Resolve since in some
7625         situations, we don't have an ILGenerator during Resolve; see
7626         2test-19.cs for an example.
7627
7628 2005-06-04  Martin Baulig  <martin@ximian.com>
7629
7630         **** Merged r45395 from GCS ****
7631
7632         The big Foreach rewrite - Part II.
7633
7634         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
7635         with `PropertyInfo ienumerator_getcurrent'.
7636
7637         * codegen.cs (VariableStorage): Removed.
7638
7639         * statement.cs
7640         (Foreach): Derive from Statement, not ExceptionStatement.
7641         (Foreach.CollectionForeach): New nested class.  Moved all the code
7642         dealing with collection foreach here.
7643         (Foreach.ForeachHelperMethods): Removed.
7644         (Foreach.TemporaryVariable): Implement IMemoryLocation.
7645
7646 2005-05-23  Martin Baulig  <martin@ximian.com>
7647
7648         * statement.cs (Try.DoResolve): Don't create a `finally' if we
7649         don't need to.  Fix #75014.
7650
7651 2005-05-20  Martin Baulig  <martin@ximian.com>
7652
7653         Merged r44808 from GMCS.
7654
7655         * class.cs (TypeContainer.CircularDepException): Removed.
7656         (TypeContainer.DefineType): Removed the `InTransit' stuff.
7657         (TypeContainer.CheckRecursiveDefinition): Check for circular class
7658         (CS0146) and interface (CS0529) dependencies here.
7659
7660 2005-06-21  Raja R Harinath  <rharinath@novell.com>
7661
7662         * expression.cs (Invocation.EmitCall): Fix initialization
7663         'this_call' to reflect current behaviour.  Fix indentation.
7664
7665         * convert.cs (FindMostEncompassedType): Add two trivial special
7666         cases (number_of_types == 0 || number_of_types == 1).
7667         (FindMostEncompasingType): Likewise.
7668
7669 2005-06-17  Raja R Harinath  <rharinath@novell.com>
7670
7671         Some cleanups preparing for the fix of #75283.
7672         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
7673         error testing.
7674         (EventExpr.InstanceResolve): Likewise.
7675         (EventExpr.DoResolve): Remove redundant checks.
7676
7677 2005-06-10  Duncan Mak  <duncan@novell.com>
7678
7679         * cs-tokenizer.cs (process_directives): New flag for controlling
7680         the processing of preprocessor directives.
7681         (x_token): After seeing a '#', return Token.NONE instead of going
7682         to handle_preprocessing_directive() when not processing
7683         directives. This avoids unnecessary processing during the token peek in
7684         is_punct().
7685
7686         This fixes #74939.
7687
7688         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
7689         the existing error reporting methods instead of Report.Error.
7690
7691         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
7692         after Raja's rewrite.
7693
7694 2005-06-08  Miguel de Icaza  <miguel@novell.com>
7695
7696         * class.cs: Small fix.
7697
7698 2005-06-08  Raja R Harinath  <rharinath@novell.com>
7699
7700         Fix #75160.
7701         * class.cs (GetPartialBases): Fix return value check of
7702         part.GetClassBases.
7703
7704 2005-06-07  Raja R Harinath  <rharinath@novell.com>
7705
7706         Ensure that partial classes are registered in their enclosing
7707         namespace.  Initial part of fix of #75160.
7708         * tree.cs (Tree.RecordDecl): Add new namespace argument.
7709         Register declspace with namespace here, not in
7710         DeclSpace.RecordDecl.
7711         * cs-parser.jay: Pass namespace to RecordDecl.
7712         * class.cs (PartialContainer.Create): Likewise.
7713         (ClassPart.DefineType): New sanity-check.  Throws an exception if
7714         called.
7715         * decl.cs (Declspace.RecordDecl): Remove.
7716         * namespace.cs (NamespaceEntry.DefineName): Remove.
7717
7718 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
7719
7720         * rootcontext.cs: Reset TargetExt as well.
7721
7722 2005-06-03  Raja R Harinath  <rharinath@novell.com>
7723
7724         * ecore.cs (Expression.Resolve): Emit CS0654 error when
7725         -langversion:ISO-1.
7726
7727 2005-06-02  Raja R Harinath  <rharinath@novell.com>
7728
7729         Fix #75080, cs0119.cs.
7730         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
7731         of ...
7732         (Expression.Resolve): ... this.  Use it.  Remove bogus code
7733         allowing ExprClass.Type and ExprClass.Namespace for
7734         ResolveFlags.VariableOrValue.
7735         (Expression.Resolve) [1-argument variant]: Change default resolve
7736         flags based on language version.
7737         (Expression.Error_UnexpectedKind): Use a simple string array
7738         rather than an ArrayList.
7739         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
7740         not ExprClass.Type.
7741         (TypeOfVoid.DoResolve): Likewise.
7742         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
7743         flags argument -- it always has the same value.
7744
7745 2005-05-31  Raja R Harinath  <rharinath@novell.com>
7746
7747         Fix #75081.
7748         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
7749         Use it in the error message.
7750         * assign.cs, expression.cs, statement.cs: Update.
7751
7752 2005-05-30  Raja R Harinath  <rharinath@novell.com>
7753
7754         Fix #75088.
7755         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
7756         the "almostMatchedMember" case too.
7757         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
7758         that failed the accessibility checks to 'almost_match'.
7759
7760 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
7761
7762         * attribute.cs: Use internal MethodBuilder methods to set
7763         ExactSpelling and SetLastError on PInvoke methods, instead
7764         of passing them via charset.  Fixes #75060.
7765
7766 2005-05-27  Raja R Harinath  <rharinath@novell.com>
7767
7768         * parameter.cs (Parameter): Remove TODO comment.
7769         (Parameter.DefineParameter): Remove Location parameter.
7770         (Parameters.LabelParameters): Likewise.
7771         * class.cs (Constructor.Emit): Update to change.
7772         (MethodData.Emit): Likewise.
7773         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
7774         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
7775
7776 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
7777
7778         * parameter.cs,
7779           Removed Parameters.Location and added Parameter.Location instead.
7780           Removed Location parameter from Emit() and GetSignature().
7781         * anonymous.cs,
7782           class.cs,
7783           cs-parser.jay,
7784           delegate.cs,
7785           iterators.cs,
7786           statement.cs :
7787           Modified all related calls.
7788
7789 2005-05-26  Raja R Harinath  <rharinath@novell.com>
7790
7791         Improve user-defined conversion handling.
7792         * convert.cs (GetConversionOperators): Rewrite.  Return only the
7793         applicable operators.
7794         (AddConversionOperators): New.  Helper for GetConversionOperators.
7795         (FindMostEncompassedType, FindMostEncompassingType): Verify that
7796         there is only one most encompassed/encompassing type.
7797         (FindMostSpecificSource, FindMostSpecificTarget): Remove
7798         "applicable operator" handling.
7799         (UserConversion): Move cache here from GetConversionOperators.
7800         Directly cache the chosen operator, rather than the whole
7801         MethodGroup.
7802         (ExplicitNumericConversion): Fix buggy implementation of Decimal
7803         case.  Allow conversion of decimal to sbyte and byte too.
7804         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
7805         New static methods.  Used to avoid allocating EmptyExpressions in
7806         convert.cs.
7807
7808 2005-05-24  Duncan Mak  <duncan@novell.com>
7809
7810         * ecore.cs (CastFromDecimal): New class for casting a decimal to
7811         another class, used in Convert.ExplicitNumericConversion.
7812         (CastToDecimal): New class, similar to above, but casts to
7813         System.Decimal, used in Convert.ImplicitNumericConversion and also
7814         in explicit convesion from double/float to decimal.
7815
7816         * convert.cs (ImplicitNumericConversion): Handle implicit
7817         conversions to System.Decimal.
7818         (ExplicitNumericConversion): handle explicit conversions to
7819         System.Decimal.
7820
7821         This fixes #68711.
7822         
7823 2005-05-20  Miguel de Icaza  <miguel@novell.com>
7824
7825         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
7826         know the type at this stage, just break through.   Fixes #75008 
7827
7828 2005-05-19  Martin Baulig  <martin@ximian.com>
7829
7830         * delegate.cs
7831         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
7832         to disable error reporting.
7833
7834         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
7835         here since we don't want to report an error; see the new test-336.cs.
7836
7837 2005-05-19  Raja R Harinath  <rharinath@novell.com>
7838
7839         * statement.cs (ToplevelBlock.GetParameterReference)
7840         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
7841         Move here from class Block.
7842         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
7843         * expression.cs (ParameterReference.DoResolveBase): Likewise.
7844
7845 2005-05-18  Martin Baulig  <martin@ximian.com>
7846
7847         Fix #74978.
7848
7849         * flowanalysis.cs
7850         (FlowBranching.Reachability): Add non-static public And() and Or()
7851         methods.
7852         (FlowBranchingSwitch): New class; do the `break_origins' thing
7853         like in FlowBranchingLoop.
7854         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
7855         reachability, not just locals and parameters.
7856         (FlowBranching.MergeChild): Remove some of the hacks for loop and
7857         switch; MergeBreakOrigins() now takes care of that.
7858
7859 2005-05-18  Martin Baulig  <martin@ximian.com>
7860
7861         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7862         a loop and may leave it, reset the barrier; fixes #74974.
7863
7864 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
7865         
7866         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
7867         is back.
7868         
7869         * cs-parser.jay: Catch more lexical errors.
7870         
7871         * report.cs: Add one more Error method.
7872         
7873         * rootcontext.cs,
7874         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
7875
7876 2005-05-17  Martin Baulig  <martin@ximian.com>
7877
7878         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
7879         #70970. 
7880
7881 2005-05-16  Raja R Harinath  <rharinath@novell.com>
7882
7883         Fix test-382.cs.  Emit values of decimal constants.
7884         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
7885         Carved out of ...
7886         (TypeContainer.AddField): ... this.
7887         (TypeContainer.EmitFieldInitializers): Allow the list of fields
7888         with initializers to include 'Const's.
7889         (ClassPart.RegisterFieldForInitialization): Forward to
7890         PartialContainer.
7891         * const.cs (Const.Const): Pass initializer to base class.
7892         (Const.Define): In case of decimal constants, register them for
7893         initialization in a static constructor.
7894
7895 2005-05-14  Martin Baulig  <martin@ximian.com>
7896
7897         * statement.cs (Block.Resolve): Correctly handle unreachable code;
7898         do not call ResolveUnreachable() on unreachable statements in
7899         here, see the comment in the source code.
7900
7901 2005-05-13  Raja R Harinath  <rharinath@novell.com>
7902
7903         Fix #74934.
7904         * expression.cs (BinaryResolveOperator): If one of the operands of
7905         an equality comparison is 'null' and the other is a pointer type,
7906         convert the null to a NullPointer.
7907         * convert.cs (ImplicitReferenceConversion): If the expression is a
7908         NullLiteral and the target type is a pointer type, return a
7909         NullPointer instead.
7910         (ImplicitConversionStandard): Likewise.
7911
7912 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
7913         
7914         * cs-parser.jay: Set readonly context based on special constructs.
7915         
7916         * expression.cs (LocalVariableReference.DoResolveBase): Improved
7917         readonly variable error handling.
7918         
7919         * rootcontext.cs (EmitCode): Don't verify members when error
7920         occurred.
7921         
7922         * statement.cs (LocalInfo): Add reaodnly context information.
7923         (SetReadOnlyContext, GetReadOnlyContext): New methods.
7924
7925 2005-05-13  Raja R Harinath  <rharinath@novell.com>
7926
7927         * statement.cs (Block.Resolve): Revert change below.  Modify fix
7928         for #74041 to initialize 'resolved' to false only for explicit
7929         blocks.  Fixes #74873.
7930
7931 2005-05-12  Raja R Harinath  <harinath@gmail.com>
7932
7933         Fix #74920.
7934         * typemanager.cs (unmanaged_enclosing_types): New.
7935         (IsUnmanagedType): Avoid infloops by using
7936         'unmanaged_enclosing_types' to talk with recursive invocations.
7937
7938 2005-05-13  Martin Baulig  <martin@ximian.com>
7939
7940         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
7941         instance variable, not a local.  Fix #74873.
7942         (Block.ResolveUnreachable): Set it to true here.
7943
7944 2005-05-11  Duncan Mak  <duncan@novell.com>
7945
7946         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
7947         continuing to process for 'arg'.
7948         (handle_preprocessing_directive): Check the argument of the #endif
7949         directive and report error CS1025 if there are any trailing
7950         characters.
7951
7952         According to the C# spec, having even whitespace after the #endif
7953         directive is illegal; however, because we call arg.TrimEnd ()
7954         beforehand, we have the same behavior as csc, allowing whitespace
7955         after the directive.
7956
7957         Fixes #74892.
7958
7959 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
7960
7961         Fix #74863.
7962         
7963         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
7964         (Constructor.GetObsoleteAttribute): Implemented correctly.
7965
7966 2005-05-10  Martin Baulig  <martin@ximian.com>
7967
7968         * support.cs (ReflectionParameters.ParameterModifier): Use
7969         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
7970         and `ParameterAttributes.In'.  Fixes #74884.
7971
7972 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
7973
7974         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
7975         
7976         * expression.cs (Argument.GetParameterModifier): Turned to property.
7977         (Invocation.Error_InvalidArguments): Add more descriptive errors.
7978         
7979         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
7980         its C# equivalent.
7981         
7982 2005-05-09  Raja R Harinath  <rharinath@novell.com>
7983
7984         Fix #74852.
7985         * decl.cs (MemberCache.AddMethods): Register override methods,
7986         rather than non-override methods.
7987         * typemanager.cs (RegisterOverride): New.
7988         (IsOverride): Update.
7989
7990 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
7991
7992         Fix #73105.
7993         
7994         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
7995         recursive declaration.
7996         
7997         * statement.cs (Block.ResolveMeta): Report any error in resolving.
7998         
7999 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
8000
8001         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
8002         
8003         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
8004
8005 2005-05-05  Raja R Harinath  <rharinath@novell.com>
8006
8007         Fix #74797.
8008         * decl.cs (DeclSpace.FamilyAccessible): 
8009         Use TypeManager.IsNestedFamilyAccessible.
8010
8011         Fix reopened #64812.
8012         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
8013         internal'.
8014
8015 2005-05-04  Raja R Harinath  <rharinath@novell.com>
8016             Abin Thomas  <projectmonokochi@rediffmail.com>
8017             Anoob V E  <projectmonokochi@rediffmail.com>
8018             Harilal P R  <projectmonokochi@rediffmail.com>
8019
8020         Fix #64812.
8021         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
8022         allow access to all static members.
8023
8024 2005-05-04  Martin Baulig  <martin@ximian.com>
8025
8026         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
8027
8028 2005-05-04  Martin Baulig  <martin@ximian.com>
8029
8030         Fix #74655.
8031
8032         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
8033         section at the end; make things work if `default' is not the last
8034         section.        
8035
8036 2005-05-04  Martin Baulig  <martin@ximian.com>
8037
8038         Fix #70400.
8039
8040         * statement.cs (Switch): Replaced the `got_default' field with a
8041         `default_section' one.
8042         (Switch.CheckSwitch): Set `default_section' here.
8043         (Switch.Resolve): If we're a constant switch and the constant is
8044         not found, use the default section.
8045
8046 2005-05-03  Martin Baulig  <martin@ximian.com>
8047
8048         * expression.cs (ArrayAccess.EmitGetLength): New public method.
8049
8050         * statement.cs (Foreach.ArrayForeach): New nested class.
8051         (Foreach.TemporaryVariable): New nested class.
8052         (Foreach.EmitArrayForeach): Removed; this is now in the new
8053         ArrayForeach class.
8054
8055 2005-05-03  Raja R Harinath  <rharinath@novell.com>
8056
8057         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
8058         more conservative.
8059         (VerifyPendingMethods): Revert change below.
8060
8061         * typemanager.cs (IsOverride, RegisterNonOverride): New.
8062         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
8063         that used to trigger warning -28.  Remove warning -28.
8064         * expression.cs (Invocation.OverloadResolve): Use
8065         TypeManager.IsOverride to distinguish override methods.
8066
8067         Fix #74773.
8068         * pending.cs (VerifyPendingMethods): If a base type implements the
8069         requested interface, don't bother checking individual methods of
8070         the base type.  As a side-effect, this prevents the creation of
8071         unnecessary proxies.
8072
8073 2005-05-02  Martin Baulig  <martin@ximian.com>
8074
8075         Fix #70182.
8076
8077         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
8078         Also `And' the locals if the old vector is null.
8079         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
8080         null; in this case we basically reset all the variables.        
8081
8082 2005-05-02  Martin Baulig  <martin@ximian.com>
8083
8084         Fix #74529.
8085
8086         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
8087         Added `FlowBranching branching' argument; always `and' the
8088         variables instead of `or'ing them unless we're an infinite loop.
8089
8090         * statement.cs (While.Resolve): Create a new sibling unless we're
8091         infinite.       
8092
8093 2005-05-02  Martin Baulig  <martin@ximian.com>
8094
8095         Fix #70140.
8096
8097         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
8098         arguments; use it instead of creating a new TopLevelBlock.
8099         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
8100         our ConstructorInitializer.
8101
8102         * statement.cs
8103         (TopLevelBlock.TopLevelBranching): New public property.
8104         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
8105         and create our `TopLevelBranching'.
8106
8107         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
8108         anonymous method host, use `block.TopLevelBranching' rather than
8109         creating a new branching.
8110
8111 2005-04-20  Miguel de Icaza  <miguel@novell.com>
8112
8113         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
8114         a ScopeInfo, if any of the current children is a child of the new
8115         entry, move those children there.
8116
8117 2005-04-30  Martin Baulig  <martin@ximian.com>
8118
8119         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
8120         at the beginning of a SwitchSection.  Fix #73335.
8121
8122 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
8123
8124         Fix #74378
8125         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
8126         
8127         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
8128         (FieldExpr.DoResolve): Obsolete members are ignored for field
8129         initializers.
8130         
8131 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
8132
8133         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
8134         of arrays detection.
8135
8136         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
8137         verification.
8138         (Field.VerifyClsCompliance): Volatile fields are not compliant.
8139
8140         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
8141         arrays report.
8142
8143 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
8144
8145         * cs-parser.jay: Use the prefered version of -unsafe in error
8146         message.
8147
8148 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
8149
8150         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
8151         circumstances.
8152
8153 2005-04-20  John Luke  <john.luke@gmail.com>
8154
8155         * driver.cs: fix typo in error message, --outout to --output
8156
8157 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
8158
8159         * codegen.cs (InRefOutArgumentResolving): New field.
8160         
8161         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
8162         fields outside contructor.
8163         
8164         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
8165         
8166 2005-04-19  Miguel de Icaza  <miguel@novell.com>
8167
8168         * anonymous.cs (CaptureContext.EmitParameterInstance): The
8169         parameter code was not completed ever, so it was not as up-to-date
8170         as local variables.  Must finish it.
8171
8172         The bug fix was to compare the Toplevel of the block, not the
8173         current block.  Thanks for Ben for pointing this out. 
8174
8175 2005-04-19  Raja R Harinath  <rharinath@novell.com>
8176
8177         * decl.cs (AddMethods): Use the declaring type of the problem
8178         method to determine if we want to squash a warning.
8179
8180 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
8181
8182         * attribute.cs: Removed debug output.
8183
8184         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
8185         
8186         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
8187         Report.Stderr.
8188         
8189 2005-04-18  Raja R Harinath  <rharinath@novell.com>
8190
8191         Fix #74481.
8192         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
8193         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
8194         all null comparisons against reference types.
8195
8196 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
8197
8198         Fix# 74565
8199         * class.cs (TypeContainer.CircularDepException) New nested
8200         exception class.
8201         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
8202         (TypeContainer.DefineType): Removed error, reset InTransit before
8203         exit.
8204         (Class.DefineType): Throw exception when is in Transit.
8205         Catch exception and report error.
8206         (Struct.DefineType): Throw exception when is in Transit.
8207         Catch exception and report error.
8208         (Interface.DefineType): Throw exception when is in Transit.
8209         Catch exception and report error.
8210
8211         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
8212         handle nested exception handlers.
8213
8214         * flowanalysis.cs (InTryWithCatch): New method, search for try with
8215         a catch.
8216
8217         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
8218         InFinally and InCatch storage.
8219
8220         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
8221         (Catch.Resolve): Set and Restore ec.InCatch.
8222         (Try.Resolve): Set and Restore ec.InFinally.
8223         (Try.HasCatch): True when try has catch.
8224
8225 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
8226
8227         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
8228           for the same event member, so exclude such cases from warning 419.
8229           Fixed bug #74633.
8230
8231 2005-04-16  Miguel de Icaza  <miguel@novell.com>
8232
8233         * expression.cs (Binary.ResolveOperator): Apply patch from John
8234         Luke to fix bug 59864: operators &, | and ^ on enumerations
8235         require that the same enum type on both sides.
8236
8237         * driver.cs: Add warnings to old flag usage, this is to assist
8238         people who produce Makefiles and hope that the Makefiles will be
8239         used on Windows.
8240
8241         * class.cs (TypeContainer.EmitType): Moved the definition of the
8242         special $PRIVATE$ field from the resolve phase to the Emit phase.
8243         During resolve we do not know if we are a struct with
8244         HasExplicitLayout, we know this only after the attributes for the
8245         type are emitted.
8246
8247         Set the FieldOffset to zero on the dummy field that we create for
8248         the class.   Fixes 74590.
8249
8250 2005-04-16  Raja R Harinath  <rharinath@novell.com>
8251
8252         Fix #73834.
8253         * ecore.cs (PropertyExpr.resolved): New.
8254         (DoResolve): Use it to handle a case of double resolution here.
8255         Handle a case of identical-name-and-type-name.
8256         * expression.cs (ArrayCreation.CheckIndices): Avoid double
8257         resolution by storing the results of expression resolution back
8258         into the "probes" array.
8259
8260 2005-04-15  Raja R Harinath  <rharinath@novell.com>
8261
8262         Fix cs0208-7.cs and cs0208-8.cs.
8263         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
8264         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
8265         error reporting to point out the reason a struct is not unmanaged.
8266
8267 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8268
8269         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
8270           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
8271
8272 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8273
8274         Fix #74528.
8275         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
8276         IdenticalNameAndTypeName here.
8277         (EventExpr.InstanceResolve): Likewise.
8278
8279 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
8280
8281         C# 2.0 DefaultCharSetAttribute implementation
8282         
8283         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
8284         which allows us to set GlobalNamespace for every resolve.
8285         (Attribute.ResolveArguments): Cut from Resolve.
8286         (Attribute.GetCharSetValue): Returns CharSet named argument.
8287         (Attribute.DefinePInvokeMethod): Gets default charset from
8288         module settings.
8289         (GlobalAttribute.ResolveAsTypeStep): Override.
8290         (GlobalAttribute.ResolveArguments): Override.
8291         
8292         * class.cs (TypeAttr): Is protected.
8293         
8294         * codegen.cs (ModuleClass.DefaultCharSet): New member.
8295         (ModuleClass.DefaultCharSetType): New memeber.
8296         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
8297         
8298         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
8299         charset from module.
8300         
8301         * delegate.cs (TypeAttr): Override.
8302         (Delegate.DefineType): Use this TypeAttr.
8303         
8304         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
8305         at very early stage (before types are defined) to resolve model
8306         module attributes. It will probably not work with corlib but it
8307         should be ok.
8308         
8309         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
8310         charset from module.
8311         
8312         * typemanager.cs (default_charset_type): New type.
8313
8314 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8315
8316         * decl.cs (MemberCache.AddMethods): Don't warn if
8317         System.Object.Finalize has buggy MethodAttributes.
8318
8319         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
8320         removed below.
8321
8322 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8323
8324         * doc.cs : detect ambiguous reference to overloaded members.
8325           Fixed bug #71603. MS 1.1 csc does not detect it.
8326
8327 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8328
8329         * doc.cs : delegates must not be referenced with parameters.
8330           Fixed bug #71605.
8331
8332 2005-04-12  Miguel de Icaza  <miguel@novell.com>
8333
8334         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
8335
8336 2005-04-10  Miguel de Icaza  <miguel@novell.com>
8337
8338         * driver.cs (MainDriver): Stop processing if the CLS stage found
8339         errors. 
8340
8341         (CompilerCallableEntryPoint.InvokeCompiler): Always
8342         reset after execution;   Take a TextWriter argument for the
8343         output.
8344
8345         * report.cs: Use the error stream instead of hardcoding stderr. 
8346
8347 2005-04-09  Miguel de Icaza  <miguel@novell.com>
8348
8349         * class.cs: Reduce code paths to test, too small of an
8350         optimization to make it worth the extra testing.  Always perform
8351         it. 
8352
8353 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8354
8355         Fix #74510.
8356         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
8357         operators that had errors reported on them.
8358
8359 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
8360
8361         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
8362         argument types.
8363         (Attribute.Resolve): Add named argument type checking.
8364         
8365         * class.cs (FixedField.Define): Use IsPrimitiveType
8366         
8367         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
8368         
8369         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
8370         unsafe parameter types.
8371         
8372         * statement.cs (Using.ResolveExpression): Add better error description.
8373         
8374         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
8375         
8376 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8377
8378         Fix #74484.
8379         * attribute.cs (Attribute.GetAttributeUsage): Resolve
8380         AttributeUsageAttribute in the emitcontext of the attribute class,
8381         not in the emitcontext of the attributable entity it was attached to.
8382         * cs-parser.jay: Use 'current_class', not 'current_container',
8383         when creating a GlobalAttribute.
8384
8385 2005-04-08  Alp Toker  <alp@atoker.com>
8386
8387         * pending.cs: The fix to #58413 failed to compile methods implementing
8388         interfaces with/without params modifiers and vice versa, even though
8389         params modifiers aren't part of the signature. Make the modifier check
8390         less strict as in csc.
8391
8392 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
8393             Anoob V E  <projectmonokochi@rediffmail.com>
8394             Harilal P R  <projectmonokochi@rediffmail.com>
8395
8396         Fix #58413.
8397         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
8398         modifiers of pending methods.
8399         (PendingImplementation.PendingImplementation): Initialize it.
8400         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
8401         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
8402         with ParameterData.  Add check for modifiers.
8403         * class.cs (MethodData.Define): Update to changes.
8404
8405 2005-04-07  Raja R Harinath  <rharinath@novell.com>
8406
8407         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
8408
8409 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
8410
8411         * class.cs (PropertyMethod.Define): Check private accessor in abstract
8412         property.
8413         
8414         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
8415         
8416         * rootcontext.cs,
8417         * typemanager.cs: Registered RequiredAttributeAttribute.
8418         
8419 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
8420
8421         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
8422         Warning CS0169 is back at level 3.
8423         (IMethodData.SetMemberIsUsed): New method.
8424         
8425         * decl.cs (IsUsed): New value; moved from FieldBase.Status
8426         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
8427         
8428         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
8429
8430         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
8431         contants.
8432         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
8433         is used.
8434         
8435         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
8436         is used.
8437         
8438         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
8439         to avoid the problems with nested types.
8440
8441 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
8442             Anoob V.E  <projectmonokochi@rediffmail.com>
8443             Harilal P.R  <projectmonokochi@rediffmail.com>
8444             Raja R Harinath  <rharinath@novell.com>
8445
8446         Fix #73820.
8447         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
8448         attribute.
8449         * typemanager (GetConstructor): Make public.
8450
8451 2005-04-05  John Luke  <john.luke@gmail.com>
8452             Raja R Harinath  <rharinath@novell.com>
8453
8454         Fix #62232.
8455         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
8456         struct too.  Return false quicker in a few cases.
8457         (VerifyUnManaged): Use it.
8458
8459 2005-04-05  Raja R Harinath  <rharinath@novell.com>
8460
8461         Fix #74041.
8462         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
8463         not 'unreachable_seen'.
8464
8465 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
8466
8467         * attribute.cs (Attribute.GetValue): Removed unused.
8468         
8469         * codegen.cs (CodeGen.TrimExt): Removed unused.
8470         
8471         * cs-parser.jay (output): Removed unused.
8472         
8473         * cs-tokenizer.cs (hex_digits): Removed unused.
8474         
8475         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
8476         
8477         * expression.cs (Indirection.LoadExprValue): Removed unused.
8478         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
8479         
8480         * iterators.cs (Iterator.param_types): Removed unused.
8481         
8482         * statement.cs (Goto.block): Removed unused.
8483         (ToplevelBlock.did): Removed unused.
8484         (Switch.ResolveConstantSwitch): Removed unused.
8485
8486 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
8487
8488         * rootcontext.cs: Allow mcs to bootstrap with the compilation
8489         resetting thingy.
8490
8491 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8492
8493         Fix #74232 and cs0208-3.cs.
8494         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
8495         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
8496         unmanaged type.  Don't use FieldBuilders when 't' is a
8497         TypeBuilder.  Use ModFlags and MemberType fields.
8498         * class.cs (MemberBase.member_type): Rename from MemberType.
8499         (MemberBase.MemberType): New property.  Determines member_type on
8500         demand.
8501         (MemberBase.DoDefine): Don't initialize MemberType here.
8502         (FieldMember.Define): Likewise.
8503
8504 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
8505
8506         Fix #74241
8507         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
8508         Attributes are emitted there.
8509         
8510 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8511
8512         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
8513         keyword in 'partial enum' too.
8514         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
8515         is not allowed).
8516         Report from Kamil Skalski <nazgul@omega.pl>.
8517
8518         Fix #74309.
8519         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
8520         have partial containers too.
8521
8522         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
8523         in block' checks to Block.CheckInvariantMeaningInBlock.
8524         * statement.cs (Block.GetKnownVariableInfo): Make private.
8525         (Block.IsVariableUsedInChildBlock): Remove.
8526         (Block.IsVariableUsedInBlock): Likewise.
8527         (Block.CheckInvariantMeaningInBlock): New.  Show location of
8528         conflicting declaration.
8529         (Block.AddVariable): Make error messages less long-winded and more
8530         specific.  Show location of conflicting declaration.
8531         * parameter.cs (Parameters.Location): New readonly property.
8532
8533 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8534
8535         Clean up semantics of invoking ResolveMemberAccess.
8536         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
8537         can have an instance, ensure that we pass in a non-TypeExpression
8538         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
8539         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
8540         argument.  Update to changes and simplify.
8541         (FieldExpr.Emitinstance): Remove CS0120 check.
8542         (PropertyExpr.EmitInstance): Likewise.
8543         * expression.cs (Argument.Resolve): Likewise.
8544         (Invocation.DoResolve): Update to changes in semantics of
8545         InstanceExpression.
8546
8547 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
8548
8549         Fix #74241
8550         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
8551         customization.
8552         
8553         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
8554
8555 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8556
8557         Fix difference in behaviour with commandline invocation.
8558         * driver.cs (Driver.Reset): New.
8559         (CompilerCallableEntryPoint): Call it.
8560
8561         * statement.cs (If.Resolve): Avoid spurious "uninitialized
8562         variable" warnings if the boolean expression failed to resolve.
8563
8564 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
8565
8566         * attribute.cs: Fix the union of several permissions when some of them
8567         are unrestricted (so the result isn't an unrestricted permission set).
8568         Fix #74036.
8569
8570 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8571
8572         * ecore.cs (MemberExpr): New class.  Convert from interface
8573         IMemberExpr.
8574         (MemberExpr.ResolveMemberAccess): Refactor and move here from
8575         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
8576         error checks.
8577         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
8578         (MethodGroupExpr.IsExplicitImpl): Remove.
8579         (Expression.GetFieldFromEvent): Remove.
8580         (SimpleName.MemberStaticCheck): Remove.
8581         (SimpleName.DoSimpleNameResolve): Update to changes.
8582         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
8583         (MemberAccess.IdenticalNameAndTypeName): Remove.
8584         (MemberAccess.error176): Move to MemberExpr.
8585         (MemberAccess.DoResolve): Update to changes.
8586         (BaseAccess.DoResolve): Likewise.
8587
8588 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
8589
8590         C# 2.0 Conditional attribute class implementation
8591         
8592         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
8593         Analyzes class whether it has attribute which has ConditionalAttribute
8594         and its condition is not defined.
8595         
8596         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
8597         (Class.IsExcluded): New method. Search for at least one defined
8598         condition in ConditionalAttribute of attribute class.
8599
8600 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8601
8602         * ecore.cs (PropertyExpr): Derive from Expression, not
8603         ExpressionStatement.
8604         (PropertyExpr.EmitStatement): Remove.
8605
8606 2005-03-29  Raja R Harinath  <rharinath@novell.com>
8607
8608         Fix #74060.
8609         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
8610         internal field "value__" of an enum be private.  The examples for
8611         "value__" that I found on MSDN all used FieldAttributes.Private.
8612
8613         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
8614         Don't mention IL method attribute names.
8615
8616         Fix #47991.  Remove a TODO.
8617         * statement.cs (Block.Toplevel): Make into a field.
8618         (Block.Parameters): Move into ToplevelBlock.
8619         (Block.known_variables): Rename from child_variable_names.
8620         (Block.Block): Remove variants that take Parameters.  Initialize
8621         'Toplevel' with the immediately surrounding toplevel block.
8622         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
8623         LocalInfo parameter.
8624         (Block.GetKnownVariableInfo): New.
8625         (Block.IsVariableNameUsedInChildBlock): Update.
8626         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
8627         the block, even though it may not be in scope.
8628         (Block.AddVariable): Remove Parameters parameter.  Use
8629         Toplevel.Parameters instead.
8630         (Block.AddConstant): Remove Parameters parameter.
8631         (Block.GetParameterReference): Update to use Toplevel.Parameters.
8632         (Block.IsParamaterReference): Likewise.
8633         (Block.IsLocalParameter): Likewise.  Simplify a lot.
8634         (ToplevelBlock.Parameters): New.  Moved from Block.
8635         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
8636         initialize Parameters to a non-null value.
8637         * cs-parser.jay: Update to changes.
8638         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
8639         simple names that mean different things in the same block.  Use
8640         Block.IsVariableNameUsedInBlock.
8641
8642 2005-03-28  Raja R Harinath  <rharinath@novell.com>
8643
8644         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
8645         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
8646         GetTypeHandle.  It is possible for a reflected type to derive from
8647         a TypeBuilder (e.g., int[] derives from the TypeBuilder
8648         System.Array during mscorlib compilation).
8649         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
8650         contain a method_hash, don't create one either.  Don't create a
8651         deep copy of the base cache's method_hash.
8652         (MemberCache.SetupCache): Rename back from DeepCopy.
8653         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
8654         already initialized.  If we see an override function, add its
8655         underlying base virtual function to the member_hash too.
8656
8657         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
8658
8659 2005-03-26  Raja R Harinath  <harinath@acm.org>
8660
8661         Fix #73038.
8662         * assign.cs (Assign.DoResolve): When the RHS of an assignment
8663         fails to resolve, ensure that the LHS is still resolved as an
8664         lvalue.
8665
8666 2005-03-25  Raja R Harinath  <harinath@acm.org>
8667
8668         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
8669         ec.ContainerType.
8670         (Enum.current_ec): Remove.
8671         (Enum.LookupEnumValue): Remove EmitContext argument.
8672         Just uses the one created during DefineType.
8673         (Enum.FindMembers): Update.
8674         * expression.cs (MemberAccess.DoResolve): Update.
8675
8676 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
8677
8678         * assign.cs (Assign.DoResolve): Check for CS1717 when
8679         source and target are same (uses Equals).
8680
8681         * expression.cs (LocalVariableReference, ParameterReference,
8682         This): Implemented Equals, GetHashCode.
8683
8684         * statement.cs (Block.GetParameterReference): Removed useless
8685         local variable.
8686
8687 2005-03-22  Raja R Harinath  <rharinath@novell.com>
8688
8689         Fix cs0128.cs
8690         * statement.cs (Block.AddVariable): Ensure that we skip implicit
8691         blocks before deciding whether the error is cs0136 or cs0128.
8692
8693         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
8694         (using_alias_directive, using_namespace_directive): Pass
8695         MemberName, not an expression to Namespace.UsingAlias and
8696         Namespace.Using.
8697         (MakeName): Use the MemberName of the namespace.
8698         * namespace.cs (Namespace.MemberName): New.
8699         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
8700         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
8701         Likewise.
8702         * decl.cs (MemberName.Name): Make readonly.
8703         (MemberName.FromDotted): New "constructor".
8704         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
8705         (MemberCore.Name): Compute from MemberName on demand.
8706         (MemberCore.SetMemberName): Provide a way to change the
8707         MemberName.
8708         (MemberCore.AddToContainer): Don't take a fullname parameter.
8709         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
8710         fully qualified name of the container to the member name.
8711         (TypeContainer.AddToTypeContainer): Use a fully qualified name
8712         only if the type is a member of the root container.
8713         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
8714         MemberName.Left rather than searching for an embedded ".".
8715         (PartialContainer.CreatePart): Update to changes in RootContext.
8716         (MemberBase.ShortName): Turn into a property.  Use
8717         MemberCore.SetMemberName.
8718         (MemberBase.ExplicitInterfaceName): Remove.
8719         (MemberBase.UpdateMemberName): Remove.
8720         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
8721         (PropertyBase.SetMemberName): New override.
8722         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
8723         (Tree.GetDecl): New.
8724         (Tree.AllDecls): Rename from Decls.
8725         * attribute.cs, enum.cs, report.cs: Update to changes.
8726         * driver.cs (MainDriver): Use MemberName.FromDotted on
8727         RootContext.MainClass.
8728
8729 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
8730
8731         * class.cs (FixedField.Define): Check for CS1664 and more sanity
8732         checks.
8733
8734         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
8735
8736 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
8737
8738         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
8739         property accessor modifiers.
8740
8741         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
8742         fixed buffer attribute (CS1716).
8743         (PropertyMethod.HasCustomAccessModifier): When property accessor
8744         has custom modifier.
8745
8746         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
8747         modifiers.
8748         (PropertyExpr.DoResolveLValue): Add CS0272.
8749
8750 2005-03-17  Miguel de Icaza  <miguel@novell.com>
8751
8752         * convert.cs: When converting to a pointer, use the proper Conv.U
8753         or Conv.I depending on the source data type.
8754
8755         * cs-tokenizer.cs: Make the size for large decimal constants,
8756         fixes #72957.
8757
8758 2005-03-17  Martin Baulig  <martin@ximian.com>
8759
8760         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
8761         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
8762
8763 2005-03-17  Martin Baulig  <martin@ximian.com>
8764
8765         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
8766         to bool so we can return an error condition.
8767         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
8768         returned an error.
8769
8770 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
8771
8772         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
8773         attributes.
8774
8775 2005-03-16  Raja R Harinath  <rharinath@novell.com>
8776
8777         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
8778         Refactor to avoid traversing the list of assemblies, and to avoid
8779         string concatenation.
8780         * typemanager.cs (guid_attr_type): Remove.
8781         (negative_hits, pointers, references): Remove hashes.
8782         (type_hash): New.
8783         (GetConstructedType): New.  Uses type_hash to handle constructed
8784         types (arrays, references, pointers).
8785         (GetReferenceType, GetPointerType): Use it.
8786         (GetNestedType): New.  Uses type_hash to handle nested types of
8787         reflected types.
8788         (LookupType, LookupTypeDirect): Remove.
8789         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
8790         'types' hash and LookupTypeReflection directly.
8791         (params_string, params_object): Use GetConstructedType.
8792         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
8793         top-level types.
8794         (Namespace.Lookup): Use cached_types.
8795         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
8796         provided by old TypeManager.LookupType.
8797         * rootcontext.cs (MakeFQN): Remove.
8798         * decl.cs (DeclSpace.MakeFQN): Likewise.
8799         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
8800         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
8801         TypeManager.GetConstructedType.
8802         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
8803
8804 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
8805
8806         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
8807         indexers.
8808
8809         * cs-parser.jay: Reports CS1527 for any namespace element.
8810
8811         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
8812         Added CS0407.
8813
8814         * expression.cs (ParameterReference.IsAssigned): Changed error to
8815         CS0269.
8816         (Error_WrongNumArguments): Moved CS0245 detection here.
8817
8818         * statement.cs (Return.Resolve): Add CS1622 report.
8819
8820 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
8821
8822         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
8823
8824 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
8825
8826         * attribute.cs expression.cs: Get rid of some allocations.
8827
8828 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
8829
8830         * doc.cs : just eliminate the latest change.
8831
8832 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
8833
8834         * doc.cs : commented out the latest change. It breaks xml-030.cs
8835
8836 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
8837
8838         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
8839           fail. So invoke CreateType() in FindDocumentedType().
8840
8841 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
8842
8843         * cs-tokenizer.cs : added IsKeyword().
8844         * doc.cs : Detect keyword incorrectly used as identifier.
8845           Allow identifiers prefixed by @.
8846
8847 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
8848
8849         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
8850         It caused exception in namespace resolving (again!).
8851         
8852         * class.cs (Class.ctor): Removed exit.
8853         (PropertyMethod.ctor): ditto.
8854         
8855         * codegen.cs (Codegen.Reset): Reset static data.
8856         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
8857         
8858         * cs-tokenizer.cs (Cleanup): Removed.
8859         
8860         * driver.cs (GetSystemDir): Rewrote to one line command.
8861         It caused problem with unloaded dynamic modules.
8862         (UnixParseOption): Removed Exit.
8863         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
8864         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
8865         Now can be mcs used as library.
8866         
8867         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
8868         empty location.
8869         
8870         * location.cs (Reset): Reset static data.
8871         
8872         * namespace.cs (Reset): Reset static data.
8873         
8874         * report.cs (Report.Reset): Reset static data.
8875         
8876         * rootcontext.cs (RootContext.Reset): Reset static data.
8877         
8878         * tree.cs (RootTypes.ctor): Use Location.Null
8879         
8880         * typemanager.cs (TypeManager.Reset): Reset static data.
8881         (CoreLookupType): Removed Exit.
8882         (TypeHandle.Reset): Reset static data.
8883         
8884 2005-03-10  Raja R Harinath  <rharinath@novell.com>
8885
8886         Fix #73516.
8887         * typemanager.cs (ComputeNamespaces): Import namespaces from
8888         referenced modules too.
8889
8890 2005-03-09  Raja R Harinath  <rharinath@novell.com>
8891
8892         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
8893         than '.'.
8894
8895 2005-03-09  Raja R Harinath  <rharinath@novell.com>
8896
8897         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
8898         enclosing DeclSpace.  This ensures that a name-lookup populates
8899         more caches and there are fewer 'TypeExpression's.  Carve out
8900         nested type lookup into ...
8901         (LookupNestedTypeInHierarchy): ... this.
8902
8903 2005-03-09  Raja R Harinath  <rharinath@novell.com>
8904
8905         Clean up a few partial-class semantics.  
8906         Fixes test-357.cs and cs1618-2.cs.
8907         * cs-parser.jay (struct_declaration): Use 'current_class' as
8908         parent of newly-created struct.  Remove call to Register ().
8909         Use 'pop_current_class' to complete handing the current struct.
8910         (interface_declaration): Likewise.
8911         (class_declaration): Likewise.
8912         (enum_declaration): Use 'current_class' as parent of newly created
8913         enum.
8914         (delegate_declaration): Likewise.
8915         (pop_current_class): New function.  This is used to handle closing
8916         up the 'current_class' and 'current_container', and pointing them
8917         to the enclosing class/container.
8918         (CSharpParser): Initialize 'current_class' too.
8919         * decl.cs (MemberCore): Add check for invariant: a partial
8920         container is not a parsed entity, and thus does not enclose any
8921         parsed members.
8922         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
8923         (DeclSpace.BaseTypeExpr): Use it.
8924         (DeclSpace.LookupType): Add check for invariant.
8925         * class.cs (TypeContainer): Add check for invariant: a nested
8926         class should have the same NamespaceEntry as its enclosing class.
8927         (TypeContainer.EmitFieldInitializers): Make virtual.
8928         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
8929         MemberCore.
8930         (TypeContainer.Register): Remove.
8931         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
8932         null.  Use TypeResolveEmitContext for resolving base types and
8933         interfaces.  Move initialization of Parts.TypeBuilder here from
8934         ...
8935         (TypeContainer.DefineNestedTypes): ... here.
8936         (PartialContainer): Take a Namespace not a NamespaceEntry.
8937         (PartialContainer.Create): Don't use Register.  Call the
8938         appropriate Add... function directly.
8939         (ClassPart): Take both the PartialContainer and the enclosing
8940         class as constructor arguments.
8941         (ClassPart.EmitFieldInitializers): Override.
8942         (ClassPart.PartFindNestedTypes): Remove.
8943         (FieldBase.GetInitializerExpression): Resolve the initializer
8944         expression in the emit context of the enclosing class.
8945         * tree.cs (RootTypes): Remove Register ().
8946         
8947 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
8948
8949         * cs-parser.jay: Removed CS0134.
8950         
8951         * driver.cs: Removed CS1901.
8952         
8953         * expression.cs (SizeOf.DoResolve): Don't report CS0233
8954         for predefined types.
8955
8956 2005-03-07  Duncan Mak  <duncan@novell.com>
8957
8958         * codegen.cs (Save):  Catch UnauthorizedAccessException as
8959         well. Fixes bug #73454.
8960
8961 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
8962
8963         * cs-tokenizer.cs (xtoken): Add CS1035.
8964         
8965         * class.cs (MethodData.Define): Add CS0683.
8966         (FieldMember.ctor): Add CS0681.
8967
8968 2005-03-07  Raja R Harinath  <rharinath@novell.com>
8969
8970         * ecore.cs (SimpleName.DoResolve): Rename from
8971         SimpleName.DoResolveAllowStatic.
8972         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
8973         Pass 'intermediate' flag to MemberStaticCheck.
8974         (SimpleName.MemberStaticCheck): Skip "static check" only in case
8975         of "intermediate" lookups via MemberAccess.
8976         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
8977         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
8978
8979 2005-03-07  Raja R Harinath  <rharinath@novell.com>
8980
8981         Fix #73394.
8982         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
8983         slipped in because of variable names that are identical to a
8984         builtin type's BCL equivalent ('string String;', 'int Int32;').
8985         (PropertyExpr.EmitInstance): Likewise.
8986
8987 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
8988
8989         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
8990         
8991         * report.cs (warning_ignore_table): Made public.
8992
8993 2005-03-04  Raja R Harinath  <rharinath@novell.com>
8994
8995         Fix #73282.
8996         * class.cs (MethodData.Emit): Pass 'container' to
8997         container.GetObsoleteAttribute instead of 'container.Parent'.
8998
8999 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
9000
9001         * cs-parser.jay: Add 1534 error test.
9002
9003         * iterators.cs (Yield.CheckContext): Add error 1629.
9004         (Iterator.ctor): Save unsafe modifier.
9005         (MoveNextMethod.DoEmit): Restore unsafe context.
9006
9007         * namespace.cs (UsingAlias): Better error message.
9008
9009 2005-03-03  Dan Winship  <danw@novell.com>
9010
9011         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
9012         the warning message [#73219]
9013
9014 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9015
9016         Fix compile with MCS 1.0.0.0.
9017         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
9018         w_restore to not depend on string constant folding.
9019
9020 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9021
9022         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
9023         CS0246 check to users who passed 'silent = false'.
9024         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
9025         check.
9026         (SimpleName.SimpleNameResolve): Update.
9027         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
9028         (MemberAccess.IdenticalNameAndTypeName): Update.
9029         * doc.cs (FindDocumentedTypeNonArray): Update.
9030
9031 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
9032
9033         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
9034         * parameters.cs (ComputeAndDefineParameters): Remove.
9035         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
9036         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
9037         Use GetParameterInfo.
9038
9039 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
9040
9041         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
9042
9043 2005-03-02  Raja R Harinath  <rharinath@novell.com>
9044
9045         Unify DeclSpace.LookupType and DeclSpace.FindType.
9046         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
9047         is in charge of defining nested types on demand.
9048         (DeclSpace.LookupType): Use it when the current_type is a
9049         TypeBuilder.  Use LookupTypeDirect for reflected types.
9050         (DeclSpace.FindType): Remove.
9051         (DeclSpace.LookupInterfaceOrClass): Likewise.
9052         (DeclSpace.DefineTypeAndParents): Likewise.
9053         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
9054         DeclSpace.LookupType.
9055         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
9056         * typemanager.cs (LookupType): Simplify.
9057         (AddUserType): Remove type from negative_hits.
9058         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
9059         * class.cs (TypeContainer.FindMembers): Move handling of nested
9060         types ...
9061         (TypeContainer.FindMembers_NestedTypes): ... here.
9062         (TypeContainer.FindNestedType): Implement override.
9063         (ClassPart.FindNestedType): Delegate to PartialContainer.
9064         (ClassPart.PartFindNestedType): Looks up the nested types of the
9065         part alone.
9066
9067 2005-03-02  Martin Baulig  <martin@ximian.com>
9068
9069         * class.cs (TypeContainer.DoDefineMembers): We also need a default
9070         static constructor in static classes.
9071
9072 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
9073
9074         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
9075         sizeParamIndex is not specified.
9076
9077 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
9078
9079         Fix #73117
9080         * report.cs (WarningMessage.IsEnabled): Missing null check.
9081
9082 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9083
9084         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
9085         in the fields and not in the properties.
9086
9087 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
9088
9089         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
9090         fields as well.
9091
9092 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9093
9094         * attribute.cs: Small refactoring (improved robustness).
9095         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
9096         (ValidateGuid): Removed.
9097         (Resolve): Removed referenced to above mentioned.
9098         (GetAttributeUsage): Made private and changed to work without
9099         class assistance.
9100         (GetIndexerAttributeValue): Don't crash.
9101         (GetConditionalAttributeValue): Ditto.
9102         (GetClsCompliantAttributeValue): Ditto.
9103         (ExtractSecurityPermissionSet): All attributes exceptions are
9104         error 648.
9105         (GetPropertyValue): New helper.
9106         (GetMethodImplOptions): New method.
9107         (DefinePInvokeMethod): Reuse common code. Implemented handling of
9108         some missing properties.
9109         
9110         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
9111         (Method.ApplyAttributeBuilder): Updated.
9112         
9113         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
9114         exception.
9115
9116 2005-02-28  Raja R Harinath  <rharinath@novell.com>
9117
9118         Fix #73052.
9119         * report.cs (Report.SymbolRelatedToPreviousError): Handle
9120         non-simple types (array, pointer, reference).
9121
9122 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9123
9124         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
9125
9126         * class.cs (MethodCore.IsDuplicateImplementation): Special error
9127         for operators.
9128         (Method.CheckBase): Catch wrong destructor here.
9129         (MethodData.Define): Add errors 550, 668.
9130
9131         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
9132
9133         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
9134
9135         * pending.cs (VerifyPendingMethods): Add error 551.
9136
9137         * typemanager.cs (CSharpName): Next error report helper.
9138
9139 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
9140
9141         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
9142         attributes. Removed useless attribute double check.
9143         It saves almost 2MBs for corlib.
9144
9145 2005-02-25  Raja R Harinath  <rharinath@novell.com>
9146
9147         Fix #72924.
9148         * statement.cs (ExpressionStatement.Resolve): Make robust to being
9149         called twice in case of error.
9150
9151 2005-02-23  Chris Toshok  <toshok@ximian.com>
9152
9153         Fix compiler portions of #72827.
9154         * statement.cs (Block.Emit): call Begin/EndScope on the
9155         EmitContext instead of the ILGenerator.
9156
9157         * codegen.cs (EmitContext.BeginScope): new method, call
9158         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
9159         we have one.)
9160         (EmitContext.BeginScope): same, but EndScope and CloseScope
9161
9162         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
9163         offset and call the superclass's OpenScope(int) with it.
9164         (SymbolWriter.CloseScope): get the current il
9165         offset and call superclass's CloseScope(int) with it.
9166
9167 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
9168
9169         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
9170         CS1677 for out and ref as well.
9171
9172         * class.cs (Method.Define): Add error CS1599 detection.
9173         
9174         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
9175         
9176         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
9177         
9178         * delegate.cs (Delegate.Define): Add error CS1599 detection.
9179         
9180         * support.cs.cs (ModifierDesc): New helper method.
9181
9182 2005-02-23  Raja R Harinath  <rharinath@novell.com>
9183             Abin Thomas  <projectmonokochi@rediffmail.com>
9184             Anoob V E  <projectmonokochi@rediffmail.com>
9185             Harilal P R  <projectmonokochi@rediffmail.com>
9186
9187         Fix #57851, #72718.
9188         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
9189         MemberLookup (used for error reporting) actually returns a result.
9190         Fix error report number (122, not 112).
9191
9192 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
9193             Anoob V E  <projectmonokochi@rediffmail.com>
9194             Harilal P R  <projectmonokochi@rediffmail.com>
9195
9196         Fix #71134.
9197         * pending.cs (PendingImplementation.GetAbstractMethods):
9198         Find NonPublic members too.
9199
9200 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
9201
9202         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
9203         Fixed error 217.
9204         
9205         * class.cs (MethodCore.CheckMethodAgainstBase):
9206         Add error 239 report.
9207
9208 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9209
9210         Fix #68955.
9211         * expression.cs (Invocation.IsApplicable): Make public.
9212         (Invocation.IsParamsMethodApplicable): Likewise.
9213         * delegate.cs (Delegate.VerifyApplicability): Don't use
9214         Invocation.VerifyArgumentCompat for parameter applicability
9215         testing.  Use Invocation.IsApplicable and
9216         Invocation.IsParamsMethodApplicable.
9217
9218 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9219
9220         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
9221         
9222         * class.cs (Operator.Define): Add error 217 report.
9223         
9224 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9225
9226         * namespace.cs (UsingEntry.Resolve): Undo change below.
9227
9228 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9229
9230         Fix #72756.
9231         * ecore.cs (Expression.MemberLookupFailed): Add argument to
9232         disable the error message when the extended MemberLookup also
9233         fails.
9234         (Expression.MemberLookupFinal): Update.
9235         (SimpleName.DoSimpleNameResolve): Update.
9236         * expression.cs (MemberAccess.ResolveNamespaceOrType):
9237         Don't use MemberLookupFinal.
9238         (New.DoResolve): Update.
9239         (BaseAccess.CommonResolve): Update.
9240
9241 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9242
9243         Fix #72732.
9244         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
9245         occured previously, don't resolve again.
9246
9247 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9248
9249         Fix #69949
9250         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
9251         argument. Call ResolveAttributeUsage for unresolved.
9252         when types doesn't match ctor arguments.
9253         
9254         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
9255         for nested attribute classes.
9256         (Class.attribute_usage): Removed.
9257         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
9258         for attribute class.
9259         
9260         * ecore.cs (IsAttribute): Removed.
9261         
9262         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
9263         
9264         * rootcontext.cs (RegisterAttribute): Removed, attributes are
9265         now normal types.
9266         (attribute_types): Removed.
9267         (EmitCode): Global attributes are emited as the latest.
9268
9269 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
9270
9271         * class.cs (EmitFieldInitializers): Don't emit field initializer
9272         for default values when optimilization is on.
9273         
9274         * constant.cs (Constant.IsDefaultValue): New property.
9275         
9276         * driver.cs: Add /optimize handling.
9277         
9278         * constant.cs,
9279         * ecore.cs,
9280         * literal.cs: Implement new IsDefaultValue property.
9281         
9282         * rootcontext.cs (Optimize): New field, holds /optimize option.
9283
9284 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9285
9286         Fix crasher in re-opened #72347.
9287         * namespace.cs (Namespace.Lookup): Return null if
9288         DeclSpace.DefineType returns null.
9289
9290         Fix #72678.
9291         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
9292
9293 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9294
9295         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
9296         now returns null if it cannot resolve to an lvalue.
9297         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
9298         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
9299         returned null.  Remove check for SimpleName.
9300         (EventExpr.DoResolveLValue): New.
9301         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
9302         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
9303         error from ...
9304         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
9305         avoid CS0131 error.
9306         (Unary.ResolveOperator): Move CS0211 check ...
9307         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
9308         CS0131 error.
9309         (Unary.DoResolveLValue): Simplify.
9310         (AddressOf.DoResolveLValue): New.
9311         (ArrayAccess.DoResolveLValue): New.
9312
9313 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
9314
9315         * attribute.cs (Attribute.Resolve): Add arguments casting for
9316         when types doesn't match ctor arguments.
9317
9318 2005-02-16  Raja R Harinath  <rharinath@novell.com>
9319
9320         Fix parts of #63202.
9321         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
9322         lookup of operator in base type.  Ensure that all checks happen
9323         when the operator resolves to an "op_..." method.
9324
9325 2005-02-15  Raja R Harinath  <rharinath@novell.com>
9326
9327         Fix #71992.
9328         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
9329         'ignore_cs0104' parameter.  Pass it to ...
9330         (NamespaceEntry.Lookup): ... this.
9331         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
9332         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
9333         (TypeLookupExpression.DoResolveAsTypeStep): Update.
9334         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
9335         Update.  Request that cs0104 errors be ignored.
9336         (ComposedCast.ResolveAsTypeStep): Update.
9337
9338 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9339
9340         Fix #59209.
9341         * expression.cs (Invocation.BetterFunction): Remove support for
9342         comparing virtual functions and their overrides.
9343         (Invocation.IsOverride): New.
9344         (Invocation.OverloadResolve): Don't consider 'override' functions
9345         during candidate selection.  Store them in a lookaside list.
9346         If the selected method is a 'virtual' function, use the list to
9347         find any overrides that are closer to the LHS type.
9348
9349 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
9350
9351         * expression.cs (New.DoResolve): Add complex core type reduction.
9352         (New.Constantify): Converts complex core type syntax like 'new int ()'
9353         to simple constant.
9354         
9355 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9356
9357         * decl.cs (EntryType.EntryType): New constructor to create an
9358         updated copy of a cache entry.
9359         (MemberCache.AddMethods): Use it.
9360         (MemberCache.ClearDeclaredOnly): Remove.
9361         (MemberCache.MemberCache): Update.
9362
9363 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9364
9365         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
9366         variable.  This one is represents the actual low-level declaration
9367         of the method, as opposed to the semantic level `IsStatic'.   
9368
9369         An anonymous method which is hosted into a static method might be
9370         actually an instance method.  IsStatic would reflect the
9371         container, while MethodIsStatic represents the actual code
9372         generated.
9373
9374         * expression.cs (ParameterReference): Use the new MethodIsStatic
9375         instead of IsStatic.
9376
9377         * anonymous.cs (AnonymousMethod.Compatible): Pass the
9378         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
9379         set on the current EmitContext. 
9380
9381         * expression.cs (Cast): Overload DoResolveLValue so we can pass
9382         resolve our casted expression as an LValue.  This triggers the
9383         proper LValue processing that is later required by Assign.
9384
9385         This fixes 72347.
9386
9387         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
9388
9389 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
9390
9391         C# 2.0 Fixed buffer implementation
9392
9393         * anonymous.cs: Update after RegisterHelperClass renaming.
9394
9395         * attribute.cs (AttributeTester.fixed_buffer_cache):
9396         Cache of external fixed buffers.
9397         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
9398         implementation if field is fixed buffer else null.
9399
9400         * class.cs
9401         (TypeContainer.AddField): Accept FieldMember instead of Field.
9402         (FieldBase.IsFieldClsCompliant): Extracted code from
9403         VerifyClsCompliance descendant customization.
9404         (FixedField): New class handles fixed buffer fields.
9405         (FixedFieldExternal): Keeps information about imported fixed
9406         buffer.
9407         (IFixedField): Make access to internal or external fixed buffer
9408         same.
9409
9410         * cs-parser.jay: Add fixed buffer parsing.
9411
9412         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
9413         buffer.
9414
9415         * expression.cs (Indirection): Extended implementation to accept
9416         fixed buffer field.
9417         (PointerArithmetic.Emit): Get element from fixed buffer as well.
9418         (ElementAccess.MakePointerAccess): Get type as parameter.
9419         (DoResolve): Add fixed buffer field expression conversion.
9420         (DoResolveLValue): Ditto.
9421         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
9422         (ArrayPtr): Derives from FixedBufferPtr.
9423         (ArrayPtr.Emit): Add extra emit for array elements.
9424
9425         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
9426
9427         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
9428         for compiler generated types.
9429         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
9430
9431         * statement.cs (Fixed): Refactored to be easier add fixed buffer
9432         and consume less memory.
9433         (Fixed.Resolve): Add fixed buffer case.
9434
9435         * typemanager.cs (compiler_generated_attr_ctor,
9436         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
9437         (HasElementType): Add our own implementation to work on every
9438         runtime.
9439
9440 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9441
9442         * anonymous.cs (CaptureContext): Track whether `this' has been
9443         referenced.   
9444
9445         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
9446         only captured `this' if it was implicitly done (instance
9447         methods/variables were used). 
9448
9449         * codegen.cs (EmitContext.CaptureThis): New method to flag that
9450         `this' must be captured.
9451
9452 2005-01-30  Miguel de Icaza  <miguel@novell.com>
9453  
9454         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
9455         is null it means that there has been no need to capture anything,
9456         so we just create a sibling.
9457
9458         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
9459
9460         Just a partial fix.  The other half is fairly elusive.
9461         
9462 2005-02-10  Raja R Harinath  <rharinath@novell.com>
9463
9464         Fix #52586, cs0121-4.cs.
9465         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
9466         and return a hashtable.
9467         (MemberCache.ClearDeclaredOnly): New.
9468         (MemberCache.MemberCache): Update to change.  Make a deep copy of
9469         the method_hash of a base type too.
9470         (MemberCache.AddMethods): Adapt to having a deep copy of the base
9471         type methods.  Overwrite entries with the same MethodHandle so
9472         that the ReflectedType is correct.  The process leaves in base
9473         virtual functions and their overrides as distinct entries.
9474         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
9475         matters since it was boxed in a ArrayList before.
9476         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
9477         modifier.
9478         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
9479         case of a virtual function and its override (choose the overload
9480         as better).
9481         (Invocation.OverloadResolve): Avoid 'override' members during
9482         'applicable_type' calculation.
9483
9484 2005-02-09  Raja R Harinath  <rharinath@novell.com>
9485
9486         Combine two near-redundant caches.
9487         * typemanager.cs (method_params): Rename from method_internal_params.
9488         (TypeManager.GetParameterData): New.  Replace
9489         Invocation.GetParameterData.
9490         (TypeManager.LookupParametersByBuilder): Remove.
9491         * expression.cs (Invocation.method_parameter_cache): Remove.
9492         (Invocation.GetParameterData): Remove.
9493         Update to changes.
9494         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
9495         Update to changes.
9496
9497 2005-02-08  Raja R Harinath  <rharinath@novell.com>
9498
9499         Fix #72015.
9500         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
9501         TypeManager.multicast_delegate_type is null, resolve it by looking
9502         up "System.MulticastDelegate".
9503         * rootcontext.cs (RootContext.ResolveCore): Simplify.
9504
9505 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
9506             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
9507             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
9508
9509         Fix cs0164.cs.
9510         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
9511         (LabeledStatement.AddReference): New.  Set 'referenced'.
9512         (Goto.Resolve): Use it.
9513
9514 2005-02-05  John Luke  <john.luke@gmail.com>
9515
9516         * driver.cs: remove duplicate -doc line in Usage ()
9517
9518 2005-02-04  Raja R Harinath  <rharinath@novell.com>
9519
9520         * location.cs (Location.AddFile): Fix CS2002 error report.
9521
9522 2005-02-02  Martin Baulig  <martin@ximian.com>
9523
9524         * delegate.cs (Delegate.DefineType): Report an internal error if
9525         TypeManager.multicast_delegate_type is null.  See bug #72015 for
9526         details.        
9527
9528 2005-02-02  Raja R Harinath  <rharinath@novell.com>
9529
9530         Fix a crasher in a variant of #31984.
9531         * const.cs (Constant.CheckBase): New override that defers the
9532         new-or-override check in case the base type hasn't been populated
9533         yet.
9534         (Constant.Define): Ensure the new-or-override check is performed.
9535
9536 2005-02-01  Duncan Mak  <duncan@ximian.com>
9537
9538         * const.cs (LookupConstantValue): Check that `ce' is not null
9539         before calling GetValue ().
9540
9541 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9542
9543         Fix test-334.cs (#69519).
9544         * cs-parser.jay (using_alias_directive): Pass in an expression to
9545         NamespaceEntry.UsingAlias.
9546         (using_namespace_directive): Pass in an expression to
9547         NamespaceEntry.Using.
9548         (namespace_name): Don't flatten to a string.
9549         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
9550         (NamespaceEntry.AliasEntry.Resolve): Lookup using
9551         ResolveAsTypeStep.
9552         (NamespaceEntry.UsingEntry): Likewise.
9553         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
9554         changes.
9555         (NamespaceEntry.LookupForUsing): Remove.
9556         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
9557         names.
9558         (NamespaceEntry.Lookup): Remove support for dotted names.
9559
9560 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9561
9562         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
9563         split into two.
9564         (NamespaceEntry.ImplicitParent): Compute on demand.
9565         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
9566         parallels the current.
9567         (NamespaceEntry.LookupForUsing): Use it.
9568         (NamespaceEntry.Lookup): If the current namespace-entry is
9569         implicit, don't search aliases and using tables.
9570
9571 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9572
9573         Fix #31984.
9574         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
9575         BaseCache here.
9576         (TypeContainer.BaseCache): Compute on demand.
9577         (TypeContainer.FindMembers): Define constants and types if they're
9578         not already created.
9579         (FieldMember.Define): Move resetting of ec.InUnsafe before error
9580         check.
9581         * const.cs (Constant.Define): Make idempotent.
9582
9583 2005-01-29  Miguel de Icaza  <miguel@novell.com>
9584
9585         * pending.cs: Produce better code (no nops produced by using Ldarg
9586         + value).
9587         
9588         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
9589         i - 1' it should be arg + 1.
9590
9591         Fixes bug #71819.
9592
9593 2005-01-28  Raja R Harinath  <rharinath@novell.com>
9594
9595         * attribute.cs (Attribute.CheckAttributeType): Make private
9596         non-virtual.
9597         (Attribute.ResolveType): Make virtual.
9598         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
9599         handling of RootContext.Tree.Types.
9600
9601 2005-01-27  Raja R Harinath  <rharinath@novell.com>
9602
9603         Update attribute-handling to use the SimpleName/MemberAccess
9604         mechanisms.
9605         * cs-parser.jay (attribute): Pass in an expression to the
9606         constructors of Attribute and GlobalAttribute.
9607         * attribute.cs (Attribute): Take an expression for the name.
9608         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
9609         passed in attribute name expression.
9610         (Attribute.CheckAttributeType): Use it.
9611         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
9612         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
9613         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
9614         argument to prevent error messages if the lookup fails.
9615
9616 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
9617
9618         * expression.cs (Indirection): Implemented IVariable interface
9619         to support indirection in AddressOf operator.
9620         (PointerArithmetic.Emit): Add optimalization for case where
9621         result can be precomputed.
9622
9623 2005-01-26  Martin Baulig  <martin@ximian.com>
9624
9625         * class.cs (TypeContainer.AttributeTargets): Return the correct
9626         AttributeTargets depending on our `Kind' instead of throwing an
9627         exception; fixes #71632.
9628
9629 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
9630
9631         Fix #71257
9632         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
9633         constant members.
9634
9635 2005-01-25  Raja R Harinath  <rharinath@novell.com>
9636
9637         Fix #71602.
9638         * expression.cs (MemberAccess.DoResolve): Don't complain with
9639         cs0572 when the LHS of a member access has identical name and type
9640         name.
9641
9642 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
9643
9644         Fix #71651, #71675
9645         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
9646         CreatePermission.
9647         Create custom PermissionSet only for PermissionSetAttribute.
9648
9649 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
9650
9651         Fix #71649
9652         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
9653         delegates in static class.
9654
9655 2005-01-24  Martin Baulig  <martin@ximian.com>
9656
9657         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9658         merging an implicit block, just use its reachability.
9659
9660         * statement.cs (Block.Resolve): Make the unreachable code check
9661         work wrt. implicit blocks; see test-337 from #63842.
9662
9663 2005-01-21  Alp Toker  <alp@atoker.com>
9664  
9665         * cs-parser.jay: destructor_declaration's container is PartialContainer
9666         not Class when partial types are used, so use Kind prop instead of
9667         'is'.
9668         
9669 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
9670
9671         * cs-parser.jay: Improve error reporting when an interface
9672         declares new types.
9673
9674 2005-01-20  Dick Porter  <dick@ximian.com>
9675
9676         * support.cs: SeekableStreamReader fix from Sandor Dobos
9677         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
9678         chars are read.  Fixes bug 70369.
9679
9680 2005-01-20  Raja R Harinath  <rharinath@novell.com>
9681
9682         * cs-parser.jay (catch_clause): Simplify current_block handling
9683         somewhat.
9684
9685 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
9686
9687         * convert.cs (ImplicitStandardConversionExists): Synchronize the
9688         code with ImplicitStandardConversion to handle the implicit
9689         conversion of method groups into valid delegate invocations. 
9690
9691         The problem is that in parameter handling we were using this code
9692         path.  Fixes bug #64698
9693
9694 2005-01-19  Raja R Harinath  <rharinath@novell.com>
9695
9696         * cs-parser.jay: Fix several infelicities.
9697         - Avoid assigning to the parser value stack.  Code like 
9698           '$3 = null' is unclean.  Synthesize a value for the code block
9699           instead. 
9700         - Avoid using oob_stack for storing location information.  Use ...
9701         (_mark_): ... this.  New (empty) rule.  Saves the current location
9702         in $$.
9703         (foreach_statement): Avoid using oob_stack for current_block
9704         handling.  Use technique used in for_statement and
9705         using_statement.  Synthesize a value for the code block to store
9706         additional intermediate information.
9707
9708 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
9709
9710         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
9711         of a different type is only allowed to private fields of a
9712         containing type, not on fields of a base class.
9713
9714         See test-174.cs and error cs0122-9.cs
9715
9716 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9717
9718         Fix test-335.cs (bug #58126).
9719         * cs-parser.jay (argument): Split out non-expression parts of the
9720         rule into 'non_simple_argument'.
9721         (invocation_expression): Support parenthesized invocations with
9722         multiple arguments, and with single non-simple arguments.
9723
9724 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9725
9726         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
9727         places.
9728
9729 2005-01-12  Raja R Harinath  <rharinath@novell.com>
9730
9731         Fix cs0038-1.cs, cs1640-6.cs.
9732         * ecore.cs (Expression.Resolve): Remove special-case for
9733         SimpleName in error-handling.
9734         (Expression.almostMatchedMembers): Relax access permission to
9735         protected.
9736         (Expression.MemberLookupFailed): Handle duplicates in
9737         almostMatchedMembers list.
9738         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
9739         * expression.cs (New.DoResolve): Report CS1540 for more cases.
9740         * typemanager.cs (GetFullNameSignature): Use the MethodBase
9741         overload if the passed in MemberInfo is a MethodBase.
9742
9743 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
9744
9745         Fix #70749
9746         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
9747         for non-CAS & merge permission sets properly.
9748
9749 2005-01-11  Raja R Harinath  <rharinath@novell.com>
9750
9751         Improve standard-compliance of simple name and member access 
9752         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
9753         * ecore.cs (FullNamedExpression): New abstract base class 
9754         for Namespaces and TypeExpressions.
9755         (ResolveFlags.SimpleName): Remove.
9756         (SimpleName): Remove support for dotted names.
9757         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
9758         DeclSpace.FindType and DeclSpace.LookupType.
9759         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
9760         (Expression.ExprClassName): Make member function.
9761         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
9762         a namespace.  Remove creation of dotted "SimpleName"s.
9763         (MemberAccess.DoResolve): Likewise.
9764         * decl.cs (DeclSpace.Cache): Make private.
9765         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
9766         (DeclSpace.FindType): Update.
9767         (DeclSpace.LookupType): Move here from RootContext.  Return a 
9768         FullNamedExpression.
9769         * namespace.cs (Namespace): Derive from FullNamedExpression
9770         so that it can be part of expression resolution.
9771         (Namespace.Lookup): Return an FullNamedExpression.
9772         (NamespaceEntry.LookupAlias): Lookup aliases only in current
9773         namespace.
9774         * rootcontext.cs (NamespaceLookup): Remove.
9775         (LookupType): Move to DeclSpace.
9776         * attribute.cs (CheckAttributeType): Update.
9777         * doc.cs (FindDocumentedType): Remove allowAlias argument.
9778         (FindDocumentedTypeNonArray): Likewise.
9779
9780 2005-01-11  Raja R Harinath  <rharinath@novell.com>
9781
9782         Fix cs0509.cs, cs1632.cs.
9783         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
9784         is the same as IsInterface.
9785         (TypeContainer.GetClassBases): Likewise.
9786         * statement.cs (LabeledStatement.ig): New field.
9787         (LabeledStatement.LabelTarget): Save ILGenerator which created the
9788         label.
9789         (LabeledStatement.DoEmit): Check that the label was created with
9790         the same ILGenerator.
9791
9792 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
9793
9794         Fix #71058
9795         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
9796         accessors to its properties.
9797
9798         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
9799         from accessors to property.
9800         
9801 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
9802
9803         Fix #70722
9804         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
9805         only for overrides.
9806         
9807 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
9808
9809         * attribute.cs: Check for null and empty strings.  
9810
9811         I have lost another battle to Paolo.
9812
9813 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
9814
9815         Fix #70942
9816         * class.cs (PropertyMethod): Set Parent field in ctors.
9817         (SetMethod.InternalParameters): Add unsafe switch hack.
9818         Override MarkForDuplicationCheck where it is appropriate.
9819
9820         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
9821         It says whether container allows members with the same name.
9822         Base default is no.
9823         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
9824         Removed is_method parameter.
9825
9826 2005-01-06  Duncan Mak  <duncan@ximian.com>
9827
9828         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
9829         because the previous change led to incorrect reporting of CS1032
9830         ("Cannot define/undefine preprocessor symbols after first token in
9831         file"). Instead of using `tokens_seen' as the only flag that
9832         triggers CS1040, introduce `comments_seen'. This new flag is used
9833         to signify having seen comments on the current line, so it is
9834         unset after a newline.
9835
9836 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
9837
9838         * doc.cs : When searching for a type, find nested type too.
9839           This fixes bug #71040.
9840
9841 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
9842
9843         * doc.cs :
9844           - Warn missing member comment on those classes which also does not
9845             have doc comments. Fixed bug #71041.
9846           - Don't warn missing doc comment on default constructor.
9847             Fixed bug #71042.
9848
9849 2005-01-06  Duncan Mak  <duncan@ximian.com>
9850
9851         * cs-tokenizer.cs (xtoken): After handling traditional C-style
9852         comments, set `tokens_seen' to true. This allows us to detect
9853         misplaced preprocessor directives (i.e. not at the beginning of
9854         the a line, nor after whitespaces). In that case, report error
9855         CS1040. This fixes bug #56460.
9856
9857         * cs-parser.jay (interface_member_declaration): Add checks for
9858         IsExplicitImpl, and report CS0541 error if an interface member is
9859         defined as an explicit interface declaration.
9860
9861 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
9862
9863         Fix #70817
9864         * class.cs (PropertyMethod): Set Parent field in ctors.
9865         (SetMethod.InternalParameters): Add unsafe switch hack.
9866         
9867         * decl.cs (MemberCore.Parent): Cannot be readonly.
9868
9869 2005-01-06  Raja R Harinath  <rharinath@novell.com>
9870
9871         * decl.cs (DeclSpace.ResolveType): Remove.
9872         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
9873         Merge in code from ...
9874         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
9875         * class.cs, enum.cs: Update to changes.
9876
9877 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
9878
9879         * anonymous.cs: Ensure that we init the scope of our parent if it
9880         has not been initialized yet.
9881
9882 2004-12-30  Duncan Mak  <duncan@ximian.com>
9883
9884         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
9885         if field.FieldBuilder is null. Fixes #70758.
9886
9887         * convert.cs: Fixed some typos and updated some of the comments.
9888         (ImplicitStandardConversionExists):
9889         (TryImplicitIntConversion): If `target_type' is an interface and
9890         the type of `ic' implements this interface, return true or a new
9891         BoxedCast instead of null. This fixes #70468.
9892
9893 2004-12-29  Duncan Mak  <duncan@ximian.com>
9894
9895         * expression.cs (Argument.Emit): Check that Expr is
9896         IMemoryLocation before casting to it, and report CS1510 otherwise.
9897
9898         This fixes #70402.
9899
9900 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
9901
9902         * statement.cs (Block.ThisVariable): remove the recursion here, to
9903         make the --profile more sane.
9904
9905 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
9906
9907         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
9908         assembly, by JB Evain.
9909
9910 2004-12-17  Raja R Harinath  <rharinath@novell.com>
9911
9912         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
9913           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
9914         "parent" refers to enclosing type/class.  "base" refers to superclass.
9915
9916 2004-12-17  Raja R Harinath  <rharinath@novell.com>
9917
9918         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
9919         Ensure that we only have GlobalAttributes.
9920         * attribute.cs (Attribute.Emit): Make non-virtual.
9921         (GlobalAttribute.Emit): Remove.
9922         (Attribute.Resolve): Make virtual.
9923         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
9924         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
9925         the argument. Don't create one.
9926         (Attribute.GetObsoleteAttribute): Likewise.
9927         (Attribute.GetClsCompliantAttributeValue): Likewise.
9928         * class.cs, decl.cs: Update to changes.
9929
9930 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
9931
9932         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
9933         
9934         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
9935         
9936         * statement.cs (Foreach.Resolve): Add error 186 report.
9937
9938 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
9939
9940         * expression.cs (Conditional.DoResolve): Add warning 429.
9941         
9942         * statement.cs (If.Resolve): Add warning 665.
9943
9944 2004-12-16  Raja R Harinath  <rharinath@novell.com>
9945
9946         New invariant: RootContext.Tree.Types.NamespaceEntry == null
9947         except when in the parser, and in GlobalAttribute.
9948         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
9949         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
9950         RootContext.Tree.Types.NamespaceEntry once work is done.
9951         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
9952         and resets RootContext.Tree.Types.NamespaceEntry.
9953
9954 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
9955
9956         * cs-parser.jay: Don't create a block for every variable.
9957
9958 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
9959
9960         * location.cs: Provide extra information.
9961
9962         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
9963         variables from the captured environment, it is the ldarg_0.
9964
9965 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
9966
9967         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
9968         find a conclusion.
9969         
9970         * class.cs: Changed warning level for 169 to avoid developer
9971         displeasure from warning flooding. It will be changed back when they
9972         fix most of current BCL warnings.
9973         
9974         * RootContext.cs: Pushed default WarningLevel to 3.
9975         
9976         * statement.cs: Removed unused variable.
9977
9978 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
9979
9980         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
9981         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
9982         Add error 502 report.
9983         (StaticClass.DefineType): Add error 441 report.
9984         (Class.AllowedModifiersProp): New virtual property as temporary
9985         extension to AllowedModifiers.
9986         (Class.DefineType): Add error 418 report. Moved ModFlags check here
9987         to share implementation with StaticClass and don't call virtual
9988         methods from ctor.
9989         
9990         * driver.cs (MainDriver): Add error 1558 test.
9991
9992         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
9993         report. Moved error 36 test here.
9994
9995         * statement.cs (Throw.Resolve): Add error 724 report.
9996
9997         * typemanager.cs: Add out_attribute_type core type.
9998         
9999 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
10000
10001         * class.cs (TypeContainer.VerifyClsCompliance): Add error
10002         3018 report.
10003         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
10004
10005         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
10006         3017 report.
10007         
10008         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
10009
10010         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
10011         Add error 3023 report.
10012         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
10013
10014         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
10015         implementation.
10016
10017 2004-12-12  John Luke  <john.luke@gmail.com>
10018
10019         * driver.cs (AddArgs): take -- into account when
10020         adding arguments, fixes bug 65710 
10021
10022 2004-12-12  Martin Baulig  <martin@ximian.com>
10023
10024         * expression.cs (Unary.TryReduceNegative): Added support for
10025         SByteConstant and ByteConstant.
10026         (Unary.Reduce): Check error values from TryReduceNegative().
10027
10028 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
10029
10030         * attributes.cs (Attribute.Resolve): Avoid multiple error report
10031         and report exception as error 182.
10032
10033 2004-12-10  Raja R Harinath  <rharinath@novell.com>
10034
10035         * driver.cs (Main): Fix message when there are warnings.
10036
10037 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
10038
10039         * delegate.cs: Fixed my fix from yesterday, sorry about that.
10040
10041 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
10042
10043         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
10044         Reduced number of warnings.
10045         
10046         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
10047
10048 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
10049
10050         * driver.cs: Removed message.
10051
10052         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
10053
10054 2004-12-08    <vargaz@freemail.hu>
10055
10056         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
10057
10058 2004-12-08  Martin Baulig  <martin@ximian.com>
10059
10060         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
10061         instead of a CS3002 for properties and indexer.
10062
10063 2004-12-08  Martin Baulig  <martin@ximian.com>
10064
10065         * decl.cs (MemberName.ToString): Make this work again.
10066
10067 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
10068
10069         * attribute.cs (Resolve): Add error 591 detection.
10070
10071         * class.cs (FieldMember.Define): Add error 1547 detection.
10072         (Indexer.Define): Add error 620 detection.
10073         (Operator.Define): Add error 590 detection.
10074
10075         * ecore.cs: Missing argument for error 79.
10076
10077         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
10078         detection.
10079
10080 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
10081
10082         Fix #70106
10083         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
10084         only.
10085
10086 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
10087
10088         * cs-parser.jay : handle doc comments on implicit/explicit operators.
10089           Some operator comments were suppressed.
10090         * doc.cs : Implicit/explicit operator name in doc comments are like
10091           "op_Explicit(type)~returnType", so added suffix handling.
10092
10093 2004-12-07  Martin Baulig  <martin@ximian.com>
10094
10095         * decl.cs
10096         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
10097         (MemberCore.GetClsCompliantAttributeValue): Likewise.
10098         (DeclSpace.ec): New protected field; store the EmitContext here.
10099         (DeclSpace.EmitContext): New public property; moved here from
10100         `TypeContainer'.
10101         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
10102         EmitContext.
10103
10104         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
10105         (Enum.Emit): Don't create a new EmitContext.
10106
10107         * delegate.cs (Delegate.DefineType): Always create the
10108         EmitContext.
10109
10110         * iterators.cs (Iterators.DefineIterator): Create a new
10111         EmitContext and store it in `ec'.
10112
10113 2004-08-24  Martin Baulig  <martin@ximian.com>
10114
10115         * typemanager.cs
10116         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10117         this for accessibility checks.
10118         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10119         IsNestedFamilyAccessible.
10120         (TypeManager.IsSubclassOf): New method, do what the name actually
10121         says.   
10122
10123 2004-12-06  Raja R Harinath  <rharinath@novell.com>
10124
10125         Fix crash on cs0657-17.cs.
10126         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10127         Use RootContext.Tree.Types, not 'new RootTypes ()'.
10128         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
10129         the case where the NamespaceEntry gets overwritten.
10130
10131 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
10132
10133         Fixed #69195, #56821
10134         * ecore.cs (ResolveBoolean): Tiny refactoring.
10135
10136         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
10137         of right expression resolving when left is false constant and
10138         operator is LogicalAnd OR true constant and operator is LogicalOr.
10139
10140         * statement.cs (ResolveUnreachable): Always reports warning.
10141
10142 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
10143
10144         * class.cs: Distinguish between 1721 and 1722 (just a little help
10145         for the programmer).
10146
10147 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
10148
10149         * delegate.cs: Only allow this on new versions of the language. 
10150
10151 2004-12-02  Duncan Mak  <duncan@ximian.com>
10152
10153         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
10154         Expression class.
10155         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
10156         here as a static method. Take an additional bool out parameter
10157         `must_do_cs1540_check' for signaling to InstanceResolve.
10158         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
10159         member field from PropertyExpr class and made it an argument of
10160         the method instead.
10161         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
10162         check for MarshalByRefObject, and report CS0122 instead of CS1540.
10163         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
10164         and `remove_accessor' as well as InstanceResolve: report CS0122
10165         where applicable.
10166
10167         Fixes #70129.
10168
10169 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10170
10171         Fix test-327.cs, test-328.cs, and put in early infrastructure
10172         for eventually fixing #52697.
10173         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
10174         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
10175         from other methods.
10176         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
10177         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
10178         (VerifyUsing, error246): Update.
10179         * rootcontext.cs (RootContext.NamespaceLookup): Just use
10180         'NamespaceEntry.LookupNamespaceOrType'.
10181
10182 2004-12-03  Martin Baulig  <martin@ximian.com>
10183
10184         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10185         method as our child, call AnonymousMethod.Compatible() on it.
10186
10187 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10188
10189         Disable XML documentation support in 'basic' profile.
10190         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
10191         Redirect XmlElement to System.Object.
10192         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
10193         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
10194         * mcs.exe.sources: Add doc-bootstrap.cs.
10195         * doc-bootstrap.cs: New file.  Contains empty stub implementation
10196         of doc.cs.
10197
10198 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
10199
10200         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
10201           comments are allowed.
10202
10203 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10204
10205         * delegate.cs: Add checks for subtypes in paramaters and return values
10206         in VerifyMethod () to add support for Covariance/Contravariance
10207         in delegates.
10208         
10209 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
10210
10211         * report.cs: Remove extra closing parenthesis.
10212
10213         * convert.cs (Error_CannotImplicitConversion): If the name of the
10214         types are the same, provide some extra information.
10215
10216         * class.cs (FieldBase): Use an unused bit field from the field to
10217         encode the `has_offset' property from the FieldMember.  This saves
10218         a couple of Ks on bootstrap compilation.
10219
10220         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10221         method as our child, return the AnonymousMethod resolved
10222         expression.
10223
10224         * expression.cs (New.DoResolve): Allow return values from
10225         NewDelegate to also include AnonymousMethods.
10226
10227         Fixes #70150.
10228
10229 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
10230
10231         Fix bug #70102
10232         * attribute.cs (Resolve): Improved implementation of params
10233         attribute arguments.
10234
10235         * support.cs (ParameterData): Add HasParams to be faster.
10236
10237 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
10238
10239         all things are for /doc support:
10240
10241         * doc.cs: new file that supports XML documentation generation.
10242         * mcs.exe.sources: added doc.cs.
10243         * driver.cs:
10244           Handle /doc command line option.
10245           Report error 2006 instead of 5 for missing file name for /doc.
10246           Generate XML documentation when required, after type resolution.
10247         * cs-tokenizer.cs:
10248           Added support for picking up documentation (/// and /** ... */),
10249           including a new XmlCommentState enumeration.
10250         * cs-parser.jay:
10251           Added lines to fill Documentation element for field, constant,
10252           property, indexer, method, constructor, destructor, operator, event
10253           and class, struct, interface, delegate, enum.
10254           Added lines to warn incorrect comment.
10255         * rootcontext.cs :
10256           Added Documentation field (passed only when /doc was specified).
10257         * decl.cs:
10258           Added DocComment, DocCommentHeader, GenerateDocComment() and
10259           OnGenerateDocComment() and some supporting private members for
10260           /doc feature to MemberCore.
10261         * class.cs:
10262           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
10263         * delegate.cs:
10264           Added overriden DocCommentHeader.
10265         * enum.cs:
10266           Added overriden DocCommentHeader and GenerateDocComment().
10267
10268 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
10269
10270         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
10271         unwrapping the enumeration values, chain to
10272         DoConstantNumericPromotions again, so we can promote things to the
10273         fundamental types (takes care of enums that are bytes, sbytes).
10274
10275         Fixes bug #62054.
10276
10277 2004-12-01  Raja R Harinath  <rharinath@novell.com>
10278
10279         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
10280         Fix long-standing bug in type-lookup.  Use FindType instead of
10281         LookupType when ec.ResolvingTypeTree.
10282         (Attribute.ResolveType, Attribute.Resolve)
10283         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
10284         Update to changes.
10285         (Attributes.Search): Remove internal version.  Update.
10286         (Attributes.SearchMulti): Update.
10287         (Attributes.GetClsCompliantAttribute): Remove.
10288         (Attributes.GetIndexerNameAttribute): Remove.
10289         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
10290         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
10291         * class.cs (Indexer.Define): Likewise.
10292
10293 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
10294
10295         Fix bug #68790
10296         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
10297         MarshallByReference members access.
10298
10299         * expression.cs: Use CheckMarshallByRefAccess;
10300         Better error CS0197 message.
10301
10302         * report.cs: Print whole related error message.
10303
10304 2004-11-30  Raja R Harinath  <rharinath@novell.com>
10305
10306         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
10307         the current directory to help debugging.
10308
10309 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10310
10311         * class (GetClassBases): Better error 60 report.
10312         (EventProperty): Disabled warning 67 detection.
10313
10314 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10315
10316         Fix bug #60324
10317         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
10318
10319         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
10320         precise values.
10321
10322 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10323
10324         Fix bug #49488
10325         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
10326
10327         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
10328
10329 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
10330
10331         * attribute.cs (Attribute.Resolve): Refine error reporting and
10332         report a cs0117 if the identifier does not exist, to distinguish
10333         from 0617 which is a miss-use of the actual identifier.
10334
10335         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
10336         between cs0070 and cs0079.
10337
10338         * class.cs (MemberBase.DoDefine): When reporting a wrong
10339         accessibility level, we use MethodCore to compare instead of
10340         Method (this was a regression in some refactoring effort).
10341
10342         So now we correctly report cs0056 again.
10343
10344         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
10345         testing the target_type (which was known to be object_type) and
10346         not the source type (which is anonymous_method).
10347
10348         Fixed reporting of error cs1660.
10349
10350         * expression.cs (UserCast.Source): Expose the underlying cast.
10351
10352         * statement.cs (Switch.SwitchGoverningType): Sort the list of
10353         allowed types to find a match to int32 first (most common).
10354
10355         In addition, it ignores any ImplicitUserConversions that did an
10356         internal implicit conversion (as the switch statement allows only
10357         one integral conversion to exist).
10358
10359         * class.cs (PartialContainer.Create): rename `name' to
10360         `member_name' for clarity.  Then replace the string calls with a
10361         call to MemberName.GetPartialName, as now using
10362         MemberName.ToString is an error (this is due to the side effects
10363         it had, that were fixed in the past).
10364
10365         This will restore the error reporting on a number of partial class
10366         errors that were missusing this (and getting an exception as a
10367         results, which is now just a plain textual warning, because
10368         yyparse debug output would crash otherwise).
10369
10370 2004-11-26  Raja R Harinath  <rharinath@novell.com>
10371
10372         * Makefile (PROGRAM_INSTALL_DIR): Remove.
10373
10374 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10375
10376         * rootcontext.cs (LookupType): Make sure to cache lookups that
10377         don't give us a negative result. This saves about 5% of corlib
10378         compilation time.
10379
10380 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10381
10382         * report.cs (AbstractMessage.Print): messages are sent to stderr
10383
10384         * class.cs (TypeContainer.GetClassBases): It is an error to have a
10385         non-interface in the list of interfaces (at this point, either
10386         parent was properly set, or a base class is being listed in the
10387         interfaces section).
10388
10389         This flags error 1722, and resolves the crash from bug 69259.
10390
10391 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10392
10393         * statement.cs (Using.EmitExpressionFinally): make this work right
10394         for valuetypes. Fixes 69926.
10395
10396 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10397
10398         * const.cs (Const.ChangeType): Cope with the "0 literal can be
10399         converted to an enum" here, before we try to change the underlying
10400         type.  This code exists, but it is a different code path than the
10401         one used while encoding constants.
10402
10403         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
10404         old bug: when converting from the null literal to a pointer,
10405         return an EmptyCast, not the NullLiteral.
10406
10407         This fixes #69921, the recent null_type changes probably made this
10408         bug more prominent.
10409
10410         (ImplicitReferenceConversionExists): In addition, resynchronized
10411         the code here, so it matches the same code in
10412         ImplicitReferenceConversionExists for the `from any class-type S
10413         to any interface-type T'.
10414         
10415
10416 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
10417
10418         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
10419
10420 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
10421
10422         * cs-parser.jay: Use verbosity accordingly. 
10423
10424 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10425
10426         * expression.cs (Unary.ResolveOperator): Do not report warning;
10427         AddressOf reads from variable.
10428         
10429         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
10430
10431 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10432
10433         Fix bug #69462
10434
10435         * attribute.cs (Attributable): Removed CheckTargets.
10436         (Attributes.Emit): Explicit attribute targets are tested here.
10437
10438         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
10439         not enabled for interfaces.
10440
10441         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
10442         (GetAssemblyName): Ouch next bug there.
10443
10444 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10445
10446         * expression.cs: Error 275 added.
10447         
10448 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
10449
10450         Fix bug #69177 (Implemented decimal constant support)
10451
10452         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
10453         (BinaryFold): Add DecimalConstant.
10454
10455         * const.cs (Define): Decimal constant 
10456         (is not constant.
10457         (ChangeType): Add decimal type handling.
10458         (LookupConstantValue): Don't set value for decimal type but
10459         emit DecimalConstantAttribute. Needed for constant optimization.
10460
10461         * constant.cs (ToDecimal): New method.
10462         (ConvertToDecimal): New method.
10463         (IntConstant): Implemented ConvertToDecimal.
10464         (DecimalConstant.Emit): Emit optimized version for decimals in
10465         int range.
10466
10467         * expression.cs (ResolveOperator): Changed order of constant
10468         reduction to work correctly with native types which have
10469         overloaded operators.
10470         (ResolveMemberAccess): Extract constant value from attribute
10471         for decimal type.
10472
10473         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
10474
10475         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
10476         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
10477         (ChangeType): Decimal is special.
10478         (TypeToCoreType): Add decimal type.
10479
10480 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10481
10482         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
10483         decimal types.
10484
10485 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10486
10487         * class.cs (EventField.ApplyAttributeBuilder): Fix error
10488         test cs1667-5.cs.
10489
10490 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10491
10492         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
10493
10494         * pending.cs (PendingImplementation): Grab only interfaces.
10495
10496 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10497
10498         * statement.cs (ForeachHelperMethods): Add location member and
10499         error 202 detection.
10500
10501 2004-11-19  Raja R Harinath  <rharinath@novell.com>
10502
10503         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
10504         automatically handled by executable.make.
10505         (PROGRAM): Make profile-specific.
10506
10507 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
10508
10509         * expression.cs (DoResolveBase): Fixed wrong warning for out
10510         variables.
10511
10512 2004-11-18  Martin Baulig  <martin@ximian.com>
10513
10514         Merged latest changes into gmcs.  Please keep this comment in
10515         here, it makes it easier for me to see what changed in MCS since
10516         the last time I merged.
10517
10518 2004-11-17  Raja R Harinath  <rharinath@novell.com>
10519
10520         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
10521         (TypeHandle.GetMemberCache): New.
10522         (TypeHandle.TypeHandle): Update.
10523         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
10524         (TypeManager.LookupParentInterfacesCache):
10525         Rename from LookupInterfaceCache.  Optimize slightly.
10526         (TypeManager.MemberLookup_FindMembers): Update.
10527         * decl.cs (MemberCache.MemberCache): Set Container to null in the
10528         multi-type variant.
10529         (AddCacheContents): Rename from AddHashtable.
10530         * class.cs (TypeContainer.parent_container): Remove.
10531         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
10532         (TypeContainer.DoDefineMembers): Don't initialize it.
10533         Update to name changes.
10534         
10535 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
10536
10537         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
10538         that factors the code to check access modifiers on override.  
10539
10540         (PropertyBase): Use the code here.
10541
10542         Patch from Lluis S'anchez, fixes bug #69361.
10543
10544 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
10545
10546         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
10547         routine that is used to report the use of a captured variable
10548         whose address has been taken.
10549
10550         There are two checks: one when variables are being captured and
10551         the other check is when the address of a variable is taken. 
10552         
10553         (because an anonymous methods might be resolved before *or* after
10554         the address has been taken) and 
10555
10556         * expression.cs (Conditional.DoResolve): Remove the special
10557         casing that Martin added to trueExpr and falseExpr being both
10558         NullLiteral.  We get the right behavior now just by introducing
10559         the null_type into the compiler. 
10560
10561         * convert.cs (ExplicitConversion): Change the code to use
10562         null_type instead of testing `expr is NullLiteral'.
10563         (ImplicitConversionStandard): use null_type too.
10564         (ImplicitReferenceConversionExists): use null_type too.
10565         (ImplicitReferenceConversion): use null_type too.
10566
10567         * literal.cs: The type of `NullLiteral' is now null_type instead
10568         of object_type. 
10569         (Resolve): Set the type here.
10570
10571         * typemanager.cs: Introduce null_type.
10572
10573 2004-11-17  Martin Baulig  <martin@ximian.com>
10574
10575         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
10576         direction, like FindMembers() does.  Fixes #69546, testcase is in
10577         test-315.cs.    
10578
10579 2004-11-16  Martin Baulig  <martin@ximian.com>
10580
10581         This is based on a patch from Marek Safar, see bug #69082.
10582         Fixes bugs #63705 and #67130.
10583
10584         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
10585         method; create a MemberCache for an interface type and cache the
10586         result.
10587
10588         * decl.cs (IMemberContainer.ParentContainer): Removed.
10589         (IMemberContainer.ParentCache): New property.
10590         (MemberCache.SetupCacheForInterface): Removed.
10591         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
10592         to create a cache for an interface's "parent".
10593
10594         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
10595         interfaces too.
10596
10597 2004-11-16  Martin Baulig  <martin@ximian.com>
10598
10599         Merged back from gmcs; these changes already went into gmcs a
10600         couple of weeks ago.
10601
10602         * typemanager.cs
10603         (TypeManager.AddUserType): Removed the `ifaces' argument.
10604         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
10605         `TypeExpr []'.
10606         (TypeManager.AddUserInterface): Removed.
10607         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
10608         `TypeExpr []'.
10609         (TypeManager.GetInterfaces): Likewise.
10610         (TypeManager.GetExplicitInterfaces): Likewise.
10611
10612         * ecore.cs (TypeExpr.GetInterfaces): Removed.
10613
10614         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
10615         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
10616
10617 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
10618
10619         * statement.cs: Avoid adding bools to a hashtable.
10620
10621 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
10622
10623         * expression.cs (Invocation.OverloadResolve): Flag error if we are
10624         calling an unsafe method from a safe location.
10625
10626 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
10627
10628         Fix #69167
10629         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
10630
10631 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
10632
10633         * namespace.cs (VerifyUsing): use GetPartialName instead of
10634         ToString. 
10635
10636 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
10637
10638         * statement.cs (Return.Resolve): Fix regression in typo: if
10639         `in_exc', we have to request a NeedReturnLabel, this was a typo
10640         introduced in the anonymous method check-in.  Fixes #69131.
10641
10642         * Indexers were using the ShortName when defining themselves,
10643         causing a regression in the compiler bootstrap when applying the
10644         patch from 2004-11-02 (first part), now they use their full name
10645         and the bug is gone.
10646
10647 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
10648
10649         * driver.cs: Strip the path from the names of embedded resources. Fixes
10650         #68519.
10651
10652 2004-11-04  Raja R Harinath  <rharinath@novell.com>
10653
10654         Fix error message regression: cs0104-2.cs.
10655         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
10656         (AliasEntry.Resolve): Update.
10657         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
10658         'silent' flag.
10659         (RootContext.LookupType): Update.
10660
10661 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
10662
10663         * cs-parser.jay: Add support for handling accessor modifiers
10664         * class: Add support port accessor modifiers and error checking,
10665         define PropertyMethod.Define as virtual (not abstract anymore)
10666         * ecore.cs: Add checking for proeprties access with access modifiers
10667         * iterators.cs: Modify Accessor constructor call based in the modified
10668         constructor
10669 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
10670
10671         * expression.cs (StringConcat): Handle being called twice,
10672         as when we have a concat in a field init with more than two
10673         ctors in the class
10674
10675 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
10676
10677         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
10678         special case explicit implementations, we should always produce
10679         the .property or .event declaration.
10680         
10681         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
10682         since it will not return correct data if people use this
10683         unresolved in the presence of using statements (see test-313).
10684
10685         * class.cs (MethodData.Define): If we are an explicit interface
10686         implementation, set the method name to the full name of the
10687         interface plus the name of the method.  
10688
10689         Notice that using the method.MethodName.GetFullName() does not
10690         work, as it will only contain the name as declared on the source
10691         file (it can be a shorthand in the presence of using statements)
10692         and not the fully qualifed type name, for example:
10693
10694         using System;
10695
10696         class D : ICloneable {
10697                 object ICloneable.Clone ()  {
10698                 }
10699         }
10700
10701         Would produce a method called `ICloneable.Clone' instead of
10702         `System.ICloneable.Clone'.
10703
10704         * namespace.cs (Alias.Resolve): Use GetPartialName.
10705         
10706 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10707
10708         * cs-parser.jay: Add error 1055 report.
10709
10710 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
10711
10712         * assign.cs (Assign.DoResolve): Only do the transform of
10713         assignment into a New if the types are compatible, if not, fall
10714         through and let the implicit code deal with the errors and with
10715         the necessary conversions. 
10716
10717 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10718
10719         * cs-parser.jay: Add error 1031 report.
10720
10721         * cs-tokenizer.cs: Add location for error 1038.
10722
10723 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10724
10725         * cs-parser.jay: Add error 1016 report.
10726
10727 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10728
10729         * cs-parser.jay: Add errors 1575,1611 report.
10730
10731 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10732
10733         * cs-parser.jay: Add error 1001 report.
10734
10735 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10736
10737         Fix #68850
10738         * attribute.cs (GetMarshal): Add method argument for
10739         caller identification.
10740
10741         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
10742         agument for GetMarshal and RuntimeMissingSupport.
10743
10744 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10745
10746         * attribute.cs (ExtractSecurityPermissionSet): Removed
10747         TypeManager.code_access_permission_type.
10748
10749         * typemanager.cs: Removed TypeManager.code_access_permission_type.
10750
10751 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
10752
10753         * expression.cs (LocalVariableReference.DoResolveLValue): Check
10754         for obsolete use of a variable here.   Fixes regression on errors
10755         cs0619-25 and cs0619-26.
10756
10757 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
10758
10759         Fix #62358, implemented security attribute encoding.
10760
10761         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
10762         Tests permitted SecurityAction for assembly or other types.
10763         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
10764         data from SecurityPermissionAttribute to PermisionSet class.
10765
10766         * class.cs (ApplyAttributeBuilder): Added special handling
10767         for System.Security.Permissions.SecurityAttribute based types.
10768
10769         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
10770         special handling for System.Security.Permissions.SecurityAttribute
10771         based types.
10772
10773         * enum.cs (ApplyAttributeBuilder): Added special handling
10774         for System.Security.Permissions.SecurityAttribute based types.
10775
10776         * parameter.cs (ApplyAttributeBuilder): Added special handling
10777         for System.Security.Permissions.SecurityAttribute based types.
10778
10779         * rootcontext.cs: Next 2 core types.
10780
10781         * typemanager.cs (TypeManager.security_permission_attr_type):
10782         Built in type for the SecurityPermission Attribute.
10783         (code_access_permission_type): Build in type.
10784
10785 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
10786
10787         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
10788         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
10789         all of this information into
10790         EmitContext.EmitCapturedVariableInstance.
10791         
10792         * codegen.cs (EmitCapturedVariableInstance): move here the
10793         funcionality of emitting an ldarg.0 in the presence of a
10794         remapping.   This centralizes the instance emit code.
10795
10796         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
10797         then emit a load of this: it means that we have reached the
10798         topmost ScopeInfo: the one that contains the pointer to the
10799         instance of the class hosting the anonymous method.
10800
10801         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
10802         captures to the topmost CaptureContext.
10803
10804 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
10805
10806         * expression.cs (LocalVariableReference): Move the knowledge about
10807         the iterators into codegen's EmitCapturedVariableInstance.
10808
10809 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
10810
10811         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
10812         all code paths return a value from an anonymous method (it is the
10813         same as the 161 error, but for anonymous methods).
10814
10815 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
10816
10817         The introduction of anonymous methods in the compiler changed
10818         various ways of doing things in the compiler.  The most
10819         significant one is the hard split between the resolution phase
10820         and the emission phases of the compiler.
10821
10822         For instance, routines that referenced local variables no
10823         longer can safely create temporary variables during the
10824         resolution phase: they must do so from the emission phase,
10825         since the variable might have been "captured", hence access to
10826         it can not be done with the local-variable operations from the runtime.
10827         
10828         * statement.cs 
10829
10830         (Block.Flags): New flag `IsTopLevel' to indicate that this block
10831         is a toplevel block.
10832
10833         (ToplevelBlock): A new kind of Block, these are the blocks that
10834         are created by the parser for all toplevel method bodies.  These
10835         include methods, accessors and anonymous methods.
10836
10837         These contain some extra information not found in regular blocks:
10838         A pointer to an optional CaptureContext (for tracking captured
10839         local variables and parameters).  A pointer to the parent
10840         ToplevelBlock.
10841         
10842         (Return.Resolve): Catch missmatches when returning a value from an
10843         anonymous method (error 1662).
10844         Invoke NeedReturnLabel from the Resolve phase instead of the emit
10845         phase.
10846
10847         (Break.Resolve): ditto.
10848
10849         (SwitchLabel): instead of defining the labels during the
10850         resolution phase, we now turned the public ILLabel and ILLabelCode
10851         labels into methods called GetILLabelCode() and GetILLabel() that
10852         only define the label during the Emit phase.
10853
10854         (GotoCase): Track the SwitchLabel instead of the computed label
10855         (its contained therein).  Emit the code by using
10856         SwitchLabel.GetILLabelCode ().
10857
10858         (LocalInfo.Flags.Captured): A new flag has been introduce to track
10859         whether the Local has been captured or not.
10860
10861         (LocalInfo.IsCaptured): New property, used to tell whether the
10862         local has been captured.
10863         
10864         * anonymous.cs: Vastly updated to contain the anonymous method
10865         support.
10866
10867         The main classes here are: CaptureContext which tracks any
10868         captured information for a toplevel block and ScopeInfo used to
10869         track the activation frames for various local variables.   
10870
10871         Each toplevel block has an optional capture context associated
10872         with it.  When a method contains an anonymous method both the
10873         toplevel method and the anonymous method will create a capture
10874         context.   When variables or parameters are captured, they are
10875         recorded on the CaptureContext that owns them, for example:
10876
10877         void Demo () {
10878              int a;
10879              MyDelegate d = delegate {
10880                  a = 1;
10881              }
10882         }
10883
10884         Here `a' will be recorded as captured on the toplevel
10885         CapturedContext, the inner captured context will not have anything
10886         (it will only have data if local variables or parameters from it
10887         are captured in a nested anonymous method.
10888
10889         The ScopeInfo is used to track the activation frames for local
10890         variables, for example:
10891
10892         for (int i = 0; i < 10; i++)
10893                 for (int j = 0; j < 10; j++){
10894                    MyDelegate d = delegate {
10895                         call (i, j);
10896                    }
10897                 }
10898
10899         At runtime this captures a single captured variable `i', but it
10900         captures 10 different versions of the variable `j'.  The variable
10901         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
10902         recorded on a child.  
10903
10904         The toplevel ScopeInfo will also track information like the `this'
10905         pointer if instance variables were referenced (this is necessary
10906         as the anonymous method lives inside a nested class in the host
10907         type of the method). 
10908
10909         (AnonymousMethod): Expanded to track the Toplevel, implement
10910         `AnonymousMethod.Compatible' to tell whether an anonymous method
10911         can be converted to a target delegate type. 
10912
10913         The routine now also produces the anonymous method content
10914
10915         (AnonymousDelegate): A helper class that derives from
10916         DelegateCreation, this is used to generate the code necessary to
10917         produce the delegate for the anonymous method that was created. 
10918
10919         * assign.cs: API adjustments for new changes in
10920         Convert.ImplicitStandardConversionExists.
10921
10922         * class.cs: Adjustments to cope with the fact that now toplevel
10923         blocks are of type `ToplevelBlock'. 
10924
10925         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
10926         insteda of standard blocks.
10927
10928         Flag errors if params arguments are passed to anonymous methods.
10929
10930         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
10931         `CurrentAnonymousMethod' which points to the current Anonymous
10932         Method.  The variable points to the AnonymousMethod class that
10933         holds the code being compiled.  It is set in the new EmitContext
10934         created for the anonymous method.
10935
10936         (EmitContext.Phase): Introduce a variable and an enumeration to
10937         assist in enforcing some rules about when and where we are allowed
10938         to invoke certain methods (EmitContext.NeedsReturnLabel is the
10939         only one that enfonces this right now).
10940
10941         (EmitContext.HaveCaptureInfo): new helper method that returns
10942         whether we have a CapturedContext initialized.
10943
10944         (EmitContext.CaptureVariable): New method used to register that a
10945         LocalInfo must be flagged for capturing. 
10946
10947         (EmitContext.CapturedParameter): New method used to register that a
10948         parameters must be flagged for capturing. 
10949         
10950         (EmitContext.CapturedField): New method used to register that a
10951         field must be flagged for capturing. 
10952
10953         (EmitContext.HaveCapturedVariables,
10954         EmitContext.HaveCapturedFields): Return whether there are captured
10955         variables or fields. 
10956
10957         (EmitContext.EmitMethodHostInstance): This is used to emit the
10958         instance for the anonymous method.  The instance might be null
10959         (static methods), this (for anonymous methods that capture nothing
10960         and happen to live side-by-side with the current method body) or a
10961         more complicated expression if the method has a CaptureContext.
10962
10963         (EmitContext.EmitTopBlock): Routine that drives the emission of
10964         code: it will first resolve the top block, then emit any metadata
10965         and then emit the code.  The split is done so that we can extract
10966         any anonymous methods and flag any captured variables/parameters.
10967         
10968         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
10969         during this phase, the ILGenerator should not be used as labels
10970         and local variables declared here might not be accessible to any
10971         code that is part of an anonymous method.  
10972
10973         Exceptions to this include the temporary variables that are
10974         created by some statements internally for holding temporary
10975         variables. 
10976         
10977         (EmitContext.EmitMeta): New routine, in charge of emitting all the
10978         metadata for a cb
10979
10980         (EmitContext.TemporaryReturn): This method is typically called
10981         from the Emit phase, and its the only place where we allow the
10982         ReturnLabel to be defined other than the EmitMeta.  The reason is
10983         that otherwise we would have to duplicate a lot of logic in the
10984         Resolve phases of various methods that today is on the Emit
10985         phase. 
10986
10987         (EmitContext.NeedReturnLabel): This no longer creates the label,
10988         as the ILGenerator is not valid during the resolve phase.
10989
10990         (EmitContext.EmitThis): Extended the knowledge in this class to
10991         work in anonymous methods in addition to iterators. 
10992
10993         (EmitContext.EmitCapturedVariableInstance): This emits whatever
10994         code is necessary on the stack to access the instance to a local
10995         variable (the variable will be accessed as a field).
10996
10997         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
10998         EmitContext.EmitAddressOfParameter): Routines to support
10999         parameters (not completed at this point). 
11000         
11001         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
11002         will also remove the parameters.
11003
11004         * convert.cs (Convert): Define a `ConstantEC' which points to a
11005         null.  This is just to prefity some code that uses
11006         ImplicitStandardConversion code and do not have an EmitContext
11007         handy.
11008
11009         The idea is to flag explicitly that at that point in time, it is
11010         known that the conversion will not trigger the delegate checking
11011         code in implicit conversions (which requires a valid
11012         EmitContext). 
11013
11014         Everywhere: pass new EmitContext parameter since
11015         ImplicitStandardConversionExists now requires it to check for
11016         anonymous method conversions. 
11017
11018         (Convert.ImplicitStandardConversionExists): If the type of an
11019         expression is the anonymous_method_type, and the type is a
11020         delegate, we invoke the AnonymousMethod.Compatible method to check
11021         whether an implicit conversion is possible. 
11022
11023         (Convert.ImplicitConversionStandard): Only do implicit method
11024         group conversions if the language level is not ISO_1.
11025
11026         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
11027         MethodInfo for the Invoke method.  used by Delegate and
11028         AnonymousDelegate.
11029
11030         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
11031         method conversions if the target type is a delegate.
11032
11033         Removed extra debugging nops.
11034
11035         (LocalVariableReference): Turn the `local_info' into a public
11036         field. 
11037
11038         Add `prepared' field, the same hack used for FieldExprs to cope
11039         with composed assignments, as Local variables do not necessarily
11040         operate purely on the stack as they used to: they can be captured
11041         fields. 
11042
11043         Add `temp' for a temporary result, like fields.
11044
11045         Refactor DoResolve and DoResolveLValue into DoResolveBase.
11046
11047         It now copes with Local variables that are captured and emits the
11048         proper instance variable to load it from a field in the captured
11049         case. 
11050
11051         (ParameterReference.DoResolveBase): During the resolve phase,
11052         capture parameters if we are in an anonymous method.
11053
11054         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
11055         anonymous method, use the EmitContext helper routines to emit the
11056         parameter reference.
11057
11058         * iterators.cs: Set RemapToProxy to true/false during the
11059         EmitDispose class.
11060
11061         * parameters.cs (GetParameterByName): New helper method. 
11062
11063         * typemanager.cs (anonymous_method_type) a new type that
11064         represents an anonyous method.  This is always an internal type,
11065         used as a fencepost to test against the anonymous-methodness of an
11066         expression. 
11067         
11068 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
11069
11070         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
11071         561 report.
11072         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
11073
11074 2004-10-18  Martin Baulig  <martin@ximian.com>
11075
11076         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
11077         `Type' directly, but call ResolveType() on it.
11078         (Catch.Resolve): Likewise.
11079         (Foreach.Resolve): Likewise.
11080
11081 2004-10-18  Martin Baulig  <martin@ximian.com>
11082
11083         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
11084         `Type' directly, but call ResolveType() on it.
11085         (Probe.DoResolve): Likewise.
11086         (ArrayCreation.LookupType): Likewise.
11087         (TypeOf.DoResolve): Likewise.
11088         (SizeOf.DoResolve): Likewise.
11089
11090 2004-10-18  Martin Baulig  <martin@ximian.com>
11091
11092         * expression.cs (Invocation.BetterFunction): Put back
11093         TypeManager.TypeToCoreType().
11094
11095 2004-10-18  Raja R Harinath  <rharinath@novell.com>
11096
11097         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
11098         the ResolveType.
11099
11100 2004-10-18  Martin Baulig  <martin@ximian.com>
11101
11102         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
11103         `Type' directly, but call ResolveType() on it.
11104
11105 2004-10-18  Martin Baulig  <martin@ximian.com>
11106
11107         * class.cs (FieldMember.Define): Don't access the TypeExpr's
11108         `Type' directly, but call ResolveType() on it.
11109         (MemberBase.DoDefine): Likewise.
11110
11111         * expression.cs (New.DoResolve): Don't access the TypeExpr's
11112         `Type' directly, but call ResolveType() on it.
11113         (ComposedCast.DoResolveAsTypeStep): Likewise.
11114
11115         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
11116         `Type' directly, but call ResolveType() on it.
11117
11118 2004-10-17  John Luke  <john.luke@gmail.com>
11119
11120         * class.cs (Operator.GetSignatureForError): use CSharpName
11121
11122         * parameter.cs (Parameter.GetSignatureForError): Returns
11123         correct name even if was not defined.
11124
11125 2004-10-13  Raja R Harinath  <rharinath@novell.com>
11126
11127         Fix #65816.
11128         * class.cs (TypeContainer.EmitContext): New property.
11129         (DefineNestedTypes): Create an emitcontext for each part.
11130         (MethodCore.DoDefineParameters): Use container's emitcontext.
11131         Pass type array to InternalParameters.
11132         (MemberBase.DoDefine): Use container's emitcontext.
11133         (FieldMember.Define): Likewise.
11134         (Event.Define): Likewise.
11135         (SetMethod.GetParameterInfo): Change argument to EmitContext.
11136         Pass type array to InternalParameters.
11137         (SetIndexerMethod.GetParameterInfo): Likewise.
11138         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
11139         * delegate.cs (Define): Pass emitcontext to
11140         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
11141         array to InternalParameters.
11142         * expression.cs (ParameterReference.DoResolveBase): Pass
11143         emitcontext to GetParameterInfo.
11144         (ComposedCast.DoResolveAsTypeStep): Remove check on
11145         ec.ResolvingTypeTree.
11146         * parameter.cs (Parameter.Resolve): Change argument to
11147         EmitContext.  Use ResolveAsTypeTerminal.
11148         (Parameter.GetSignature): Change argument to EmitContext.
11149         (Parameters.ComputeSignature): Likewise.
11150         (Parameters.ComputeParameterTypes): Likewise.
11151         (Parameters.GetParameterInfo): Likewise.
11152         (Parameters.ComputeAndDefineParameterTypes): Likewise.
11153         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
11154         * support.cs (InternalParameters..ctor): Remove variant that takes
11155         a DeclSpace.
11156         * typemanager.cs (system_intptr_expr): New.
11157         (InitExpressionTypes): Initialize it.
11158
11159 2004-10-12  Chris Toshok  <toshok@ximian.com>
11160
11161         * cs-parser.jay: fix location for try_statement and catch_clause.
11162
11163 2004-10-11  Martin Baulig  <martin@ximian.com>
11164
11165         * report.cs: Don't make --fatal abort on warnings, we have
11166         -warnaserror for that.
11167
11168 2004-10-07  Raja R Harinath  <rharinath@novell.com>
11169
11170         More DeclSpace.ResolveType avoidance.
11171         * decl.cs (MemberCore.InUnsafe): New property.
11172         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
11173         with newly created EmitContext.
11174         (FieldMember.Define): Likewise.
11175         * delegate.cs (Delegate.Define): Likewise.
11176         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
11177         only if normal name-lookup fails.
11178         (TypeExpr.DoResolve): Enable error-checking.
11179         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
11180         (SizeOf.DoResolve): Likewise.
11181         (ComposedCast.DoResolveAsTypeStep): Likewise.
11182         (StackAlloc.DoResolve): Likewise.
11183         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
11184         (Block.Unsafe): New property.
11185         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
11186         (Unsafe): Set 'unsafe' flag of contained block.
11187         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
11188         (Fixed.Resolve): Likewise.
11189         (Catch.Resolve): Likewise.
11190         (Using.ResolveLocalVariableDecls): Likewise.
11191         (Foreach.Resolve): Likewise.
11192
11193 2004-10-05  John Luke <john.luke@gmail.com>
11194
11195         * cs-parser.jay: add location to error CS0175
11196
11197 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
11198
11199         * ecore.cs (Expression.Constantity): Add support for turning null
11200         into a constant.
11201
11202         * const.cs (Const.Define): Allow constants to be reference types
11203         as long as the value is Null.
11204
11205 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
11206
11207         * namespace.cs (NamespaceEntry.Using): No matter which warning
11208         level is set, check if this namespace name has already been added.
11209
11210 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
11211
11212         * expression.cs: reftype [!=]= null should always use br[true,false].
11213         # 67410
11214
11215 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
11216
11217         Fix #67108
11218         * attribute.cs: Enum conversion moved to 
11219         GetAttributeArgumentExpression to be applied to the all
11220         expressions.
11221
11222 2004-10-01  Raja R Harinath  <rharinath@novell.com>
11223
11224         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
11225         * class.c (TypeContainer.DefineType): Flag error if
11226         base types aren't accessible due to access permissions.
11227         * decl.cs (DeclSpace.ResolveType): Move logic to
11228         Expression.ResolveAsTypeTerminal.
11229         (DeclSpace.ResolveTypeExpr): Thin layer over
11230         Expression.ResolveAsTypeTerminal.
11231         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
11232         Refactor code into NestedAccess.  Use it.
11233         (DeclSpace.NestedAccess): New.
11234         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
11235         argument to silence errors.  Check access permissions.
11236         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
11237         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
11238         (Cast.DoResolve): Likewise.
11239         (New.DoResolve): Likewise.
11240         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
11241         (TypeOf.DoResolve): Likewise.
11242
11243         * expression.cs (Invocation.BetterConversion): Return the Type of
11244         the better conversion.  Implement section 14.4.2.3 more faithfully.
11245         (Invocation.BetterFunction): Make boolean.  Make correspondence to
11246         section 14.4.2.2 explicit.
11247         (Invocation.OverloadResolve): Update.
11248         (Invocation): Remove is_base field.
11249         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
11250         (Invocation.Emit): Likewise.
11251
11252 2004-09-27  Raja R Harinath  <rharinath@novell.com>
11253
11254         * README: Update to changes.
11255
11256 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
11257
11258         * cs-parser.jay: Reverted 642 warning fix.
11259
11260 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11261
11262         Fix bug #66615
11263         * decl.cs (FindMemberWithSameName): Indexer can have more than
11264         1 argument.
11265
11266 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11267
11268         * expression.cs (LocalVariableReference.DoResolveLValue):
11269         Do not report warning 219 for out values.
11270         (EmptyExpression.Null): New member to avoid extra allocations.
11271
11272 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11273
11274         * cs-parser.jay: Fix wrong warning 642 report.
11275
11276         * cs-tokenizer.cs (CheckNextToken): New helper;
11277         Inspect next character if is same as expected.
11278
11279 2004-09-23  Martin Baulig  <martin@ximian.com>
11280
11281         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
11282         (Convert.ImplicitReferenceConversionExists): Likewise.
11283
11284 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11285
11286         * class.cs (Operator.Define): Add error 448 and 559 report.
11287
11288 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11289
11290         * class.cs (MemberBase.IsTypePermitted): New protected
11291         method for checking error CS0610.
11292
11293 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11294
11295         * class.cs (TypeContainer.HasExplicitLayout): New property
11296         Returns whether container has StructLayout attribute set Explicit.
11297         (FieldMember): New abstract class for consts and fields.
11298         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
11299         (Field): Reuse FieldMember.
11300
11301         * const.cs (Const): Reuse FieldMember.
11302
11303         * rootcontext.cs: EmitConstants call moved to class.
11304
11305 2004-09-22  Martin Baulig  <martin@ximian.com>
11306
11307         Thanks to Peter Sestoft for this bug report.
11308
11309         * expression.cs (Conditional): If both the `trueExpr' and the
11310         `falseExpr' is a NullLiteral, return a NullLiteral.
11311
11312 2004-09-22  Martin Baulig  <martin@ximian.com>
11313
11314         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
11315         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
11316         for the "get_Current" call.
11317
11318 2004-09-22  Martin Baulig  <martin@ximian.com>
11319
11320         Marek and me just fixed one of our oldest bugs: #28562 :-)
11321
11322         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
11323
11324         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
11325         we're an EnumConstant, just return that.
11326         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
11327         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
11328         to get the value which'll actually be written into the attribute.
11329         However, we have to use GetValue() to access the attribute's value
11330         in the compiler.        
11331
11332 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11333
11334         * constant.cs (Constant.IsNegative): New abstract property
11335         IsNegative.
11336
11337         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
11338         (StackAlloc.DoResolve): Reused IsNegative.
11339
11340 2004-09-21  Martin Baulig  <martin@ximian.com>
11341
11342         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
11343         if we're used in an iterator, we may be called from different
11344         methods.
11345
11346         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
11347         we actually have an exception block.
11348
11349 2004-09-20  John Luke <jluke@cfl.rr.com>
11350
11351         * class.cs, cs-parser.jay: Improve the error report for 1520:
11352         report the actual line where the error happens, not where the
11353         class was declared.
11354
11355         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
11356         Pass location information that was available elsewhere.
11357
11358 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
11359
11360         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
11361         runtime to delay sign assemblies.
11362
11363 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11364
11365         * cs-parser.jay: Do not report the stack trace, this is barely
11366         used nowadays.
11367
11368 2004-08-22  John Luke  <john.luke@gmail.com>
11369  
11370         * driver.cs : check that a resource id is not already used
11371         before adding it, report CS1508 if it is, bug #63637
11372
11373 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11374
11375         * ecore.cs: Removed dead code.
11376
11377 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
11378
11379         * class.cs: Do not report warning CS0067 on the interfaces.
11380
11381 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11382
11383         * cs-parser.jay: Add error 504 report.
11384
11385 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11386
11387         * rootcontext.cs: WarningLevel is 4 by default now.
11388
11389         * statement.cs (Fixed.Resolve): Do not null
11390         VariableInfo.
11391
11392 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11393
11394         Fixed bug #55780
11395         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
11396         deep search when property is not virtual.
11397         (PropertyExpr.ResolveAccessors): Make one call for both
11398         accessors.
11399
11400 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11401
11402         Fixed bug #65766
11403         * statement.cs: Error 152 report constains also location.
11404
11405 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11406
11407         Fixed bug #65766
11408         * const.cs: Explicitly set constant as static.
11409
11410 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11411
11412         Fixed bug #64226
11413         * cs-parser.jay: Add error 1017 report.
11414
11415 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11416
11417         Fixed bug #59980, #64224
11418         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
11419
11420         * typemanager.cs (IsSpecialMethod): Simplified
11421
11422 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11423
11424         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
11425         condition with better params.
11426
11427 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11428
11429         Fixed bug #65238
11430         * attribute.cs (Resolve): Property has to have both
11431         accessors.
11432
11433 2004-09-14  Martin Baulig  <martin@ximian.com>
11434
11435         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
11436
11437 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11438
11439         Fixed bug #61902
11440         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
11441         called and is obsolete then this member suppress message
11442         when call is inside next [Obsolete] method or type.
11443
11444         * expression.cs: Use TestObsoleteMethodUsage member.
11445
11446 2004-09-14  Martin Baulig  <martin@ximian.com>
11447
11448         * cs-parser.jay: Sync a bit with the GMCS version.
11449
11450 2004-09-14  Martin Baulig  <martin@ximian.com>
11451
11452         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
11453         (CSharpParser.yacc_verbose_flag): New public field.
11454
11455         * genericparser.cs: Removed.
11456
11457 2004-09-14  Raja R Harinath  <rharinath@novell.com>
11458
11459         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
11460
11461 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
11462
11463         * class.cs (MethodCore.CheckBase): Fix bug #65757.
11464
11465 2004-09-10  Martin Baulig  <martin@ximian.com>
11466
11467         Backported my MemberName changes from GMCS into MCS.
11468
11469         - we are now using a special `MemberName' class instead of using
11470         strings; in GMCS, the `MemberName' also contains the type
11471         arguments.
11472
11473         - changed the grammar rules a bit:
11474           * the old `member_name' is now a `namespace_or_type_name':
11475             The rule is that we use `namespace_or_type_name' everywhere
11476             where we expect either a "member name" (GetEnumerator) or a
11477             "member name" with an explicit interface name
11478             (IEnumerable.GetEnumerator).
11479             In GMCS, the explicit interface name may include type arguments
11480             (IEnumerable<T>.GetEnumerator).
11481           * we use `member_name' instead of just `IDENTIFIER' for
11482             "member names":
11483             The rule is that we use `member_name' wherever a member may
11484             have type parameters in GMCS.       
11485
11486         * decl.cs (MemberName): New public class.
11487         (MemberCore.MemberName): New public readonly field.
11488         (MemberCore.ctor): Take a `MemberName' argument, not a string.
11489         (DeclSpace): Likewise.
11490
11491         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
11492         * enum.cs (Enum.ctor): Likewise.
11493
11494         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
11495         MemberName.     
11496         (AliasEntry.ctor): Take a MemberName, not an Expression.
11497         (AliasEntry.UsingAlias): Likewise.
11498
11499         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
11500         (IMethodData.MemberName): Changed type from string to MemberName.
11501         (MemberBase.ExplicitInterfaceName): Likewise.
11502         (AbstractPropertyEventMethod.SetupName): Make this private.
11503         (AbstractPropertyEventMethod.ctor): Added `string prefix'
11504         argument; compute the member name here.
11505         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
11506         on the `member.MemberName' and the `prefix'.
11507
11508         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
11509         not `type_name'.
11510         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
11511         thus, we get a `MemberName' instead of a `string'.  These
11512         declarations may have type parameters in GMCS.
11513         (interface_method_declaration, delegate_declaration): Likewise.
11514         (class_declaration, interface_declaration): Likewise.
11515         (method_header): Use `namespace_or_type_name' instead of
11516         `member_name'.  We may be an explicit interface implementation.
11517         (property_declaration, event_declaration): Likewise.
11518         (member_name): This is now just an `IDENTIFIER', not a
11519         `namespace_or_type_name'.
11520         (type_name, interface_type): Removed.
11521         (namespace_or_type_name): Return a MemberName, not an Expression.
11522         (primary_expression): Use `member_name' instead of `IDENTIFIER';
11523         call GetTypeExpression() on the MemberName to get an expression.
11524         (IndexerDeclaration.interface_type): Changed type from string to
11525         MemberName.
11526         (MakeName): Operate on MemberName's instead of string's.
11527
11528 2004-09-13  Raja R Harinath  <rharinath@novell.com>
11529
11530         Fix bug #55770.
11531         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
11532         (NamespaceEntry.Lookup): Add new argument to flag if we want the
11533         lookup to avoid symbols introduced by 'using'.
11534         * rootcontext.cs (NamespaceLookup): Update.
11535
11536 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11537
11538         * class.cs (TypeContainer.DoDefineMembers): Do not call
11539         DefineDefaultConstructor for static classes.
11540
11541 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11542
11543         * attribute.cs (Attribute.Resolve): Add error 653 report.
11544
11545         * class.cs (Class.ApplyAttributeBuilder): Add error 641
11546         report.
11547         (Method.ApplyAttributeBuilder): Add error 685 report.
11548         (Operator.Define): Add error 564 report.
11549
11550         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
11551
11552         * expression.cs (Invocation.DoResolve): Add error
11553         245 and 250 report.
11554
11555         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
11556         error 674 report.
11557
11558 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11559
11560         * class.cs (ConstructorInitializer.Resolve):
11561         Wrong error number (515->516).
11562
11563 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11564
11565         * class.cs (Indexer.Define): Add error 631 report.
11566
11567 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11568
11569         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
11570
11571 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11572
11573         * expression.cs (Probe.DoResolve): Add error CS0241 report.
11574
11575 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
11576
11577         * cs-parser.jay: Added error CS0241 report.
11578
11579 2004-09-10  Raja R Harinath  <rharinath@novell.com>
11580
11581         * cs-parser.jay (fixed_statement): Introduce a scope for the
11582         declaration in the 'fixed' statement.
11583
11584 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11585
11586         * cs-parser.jay: Added CS0230 error report.
11587
11588 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11589
11590         * cs-parser.jay: Added errors CS0231 and CS0257 report.
11591
11592 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11593
11594         * expression.cs (Argument.Resolve): Added error CS0192 and
11595         CS0199 report.
11596
11597 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11598
11599         C# 2.0 #pragma warning feature
11600
11601         * cs-tokenizer.cs (PreProcessPragma): New method; 
11602         Handles #pragma directive.
11603
11604         * report.cs (WarningRegions): New class; Support
11605         class for #pragma warning directive. It tests whether
11606         warning is enabled for a given line.
11607
11608 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
11609
11610         * const.cs: Add more descriptive error report, tahnks to
11611         Sebastien. 
11612
11613 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
11614
11615         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
11616
11617 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
11618
11619         * expression.cs: Apply patch from Ben: Remove dead code from
11620         ArrayCreation, and remove the TurnintoConstant call in const.cs,
11621         as that code just threw an exception anwyays.
11622
11623         * const.cs: Remove the call to the turnintoconstant, for details
11624         see bug: #63144
11625         
11626         * literal.cs: The type of the null-literal is the null type;  So
11627         we use a placeholder type (literal.cs:System.Null, defined here)
11628         for it.
11629
11630         * expression.cs (Conditional.DoResolve): Remove some old code that
11631         is no longer needed, conversions have been fixed.
11632
11633         (ArrayCreationExpression.DoResolve): Return false if we fail to
11634         resolve the inner expression.
11635
11636 2004-09-07  Raja R Harinath  <rharinath@novell.com>
11637
11638         Fix test-290.cs.
11639         * cs-parser.jay (delegate_declaration): Record a delegate
11640         declaration as a type declaration.
11641         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
11642
11643 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
11644
11645         * parameter.cs: Do not crash if the type can not be resolved. 
11646
11647         * expression.cs: Report errors with unsafe pointers, fixes #64896
11648
11649 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11650
11651         * expression.cs: Pointer arith always needs to do a conv.i
11652         if the operand is a long. fix 65320
11653
11654 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11655
11656         Fixed cs0619-37.cs, cs0619-38.cs
11657
11658         * enum.cs (GetObsoleteAttribute): Removed.
11659
11660         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
11661         on Enum member is double staged. The first is tested member
11662         and then enum.
11663
11664 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11665
11666         Fixed #56986, #63631, #65231
11667
11668         * class.cs: (TypeContainer.AddToMemberContainer): New method,
11669         adds member to name container.
11670         (TypeContainer.AddToTypeContainer): New method, adds type to
11671         name container.
11672         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
11673         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
11674         AddOperator): Simplified by reusing AddToMemberContainer.
11675         (TypeContainer.UserDefinedStaticConstructor): Changed to property
11676         instead of field.
11677         (Method.CheckForDuplications): Fixed implementation to test all
11678         possibilities.
11679         (MemberBase): Detection whether member is explicit interface
11680         implementation is now in constructor.
11681         (MemberBase.UpdateMemberName): Handles IndexerName.
11682         (Accessor): Changed to keep also location information.
11683         (AbstractPropertyEventMethod): Is derived from MemberCore.
11684         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
11685         will be emited or not.
11686         (PropertyBase.AreAccessorsDuplicateImplementation):
11687         Tests whether accessors are not in collision with some method.
11688         (Operator): Is derived from MethodCore to simplify common
11689         operations.
11690
11691         * decl.cs (Flags.TestMethodDuplication): Test for duplication
11692         must be performed.
11693         (DeclSpace.AddToContainer): Adds the member to defined_names
11694         table. It tests for duplications and enclosing name conflicts.
11695
11696         * enum.cs (EnumMember): Clean up to reuse the base structures
11697
11698 2004-09-03  Martin Baulig  <martin@ximian.com>
11699
11700         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
11701         into TypeContainer, to make partial classes work again.
11702
11703 2004-09-03  Martin Baulig  <martin@ximian.com>
11704
11705         * rootcontext.cs (RootContext.V2): Removed.
11706
11707 2004-03-23  Martin Baulig  <martin@ximian.com>
11708
11709         * expression.cs (Invocation.OverloadResolve): Added `bool
11710         may_fail' argument and use it instead of the Location.IsNull() hack.
11711
11712 2004-09-03  Martin Baulig  <martin@ximian.com>
11713
11714         Merged latest changes into gmcs.  Please keep this comment in
11715         here, it makes it easier for me to see what changed in MCS since
11716         the last time I merged.
11717
11718 2004-09-03  Raja R Harinath  <rharinath@novell.com>
11719
11720         Fix #61128.
11721         * expression.cs (BetterConversion): Don't allow either conversion 
11722         to be null.  Remove redundant implicit conversion test when 'q ==
11723         null' -- when this function is invoked, we already know that the
11724         implicit conversion exists.
11725         (BetterFunction): Assume that 'best' is non-null.  Remove
11726         redundant reimplementation of IsApplicable when 'best' is null.
11727         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
11728         number of arguments.
11729         (IsAncestralType): Extract from OverloadResolve.
11730         (OverloadResolve): Make robust to the MethodGroupExpr being
11731         unsorted.  Implement all the logic of Section 14.5.5.1, and
11732         support overloading of methods from multiple applicable types.
11733         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
11734
11735         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
11736         (RealError, Warning): Append type of report to related symbol.
11737
11738 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
11739
11740         * enum.cs: Fixed CLS-Compliance checks for enum members.
11741         Error tests cs3008-8.cs, cs3014-8.cs
11742
11743 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
11744
11745         Fixed bug #62342, #63102
11746         * class.cs: ImplementIndexer uses member.IsExplicitImpl
11747         like ImplementMethod.
11748
11749 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
11750
11751         * attribute.cs (Attribute.GetAttributeArgumentExpression):
11752         Fixed bug #65170.
11753
11754 2004-09-02  Martin Baulig  <martin@ximian.com>
11755
11756         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
11757         TypeManager.GetArgumentTypes() rather than calling GetParameters()
11758         on the MethodBase.
11759
11760 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
11761
11762         C# 2.0 Static classes implemented
11763
11764         * class.cs (TypeContainer): instance_constructors,
11765         initialized_fields, initialized_static_fields,
11766         default_constructor, base_inteface_types are protected to be
11767         accessible from StaticClass.
11768         (TypeContainer.DefineDefaultConstructor): New virtual method
11769         for custom default constructor generating
11770         (StaticClass): New class to handle "Static classes" feature.
11771
11772         * cs-parser.jay: Handle static keyword on class like instance
11773         of StaticClass.
11774
11775         * driver.cs: Added "/langversion" command line switch with two
11776         options (iso-1, default).
11777
11778 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
11779
11780         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
11781
11782 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
11783
11784         * delegate.cs: Style.
11785
11786 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
11787
11788         * delegate.cs: Add seperate instance expr field for miguel.
11789
11790 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11791
11792         * PointerArithmetic (Resolve): make sure we are not doing
11793         pointer arith on void*. Also, make sure we are resolved
11794         by not setting eclass until resolve.
11795
11796         All callers: Make sure that PointerArithmetic gets resolved.
11797
11798 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11799
11800         * ArrayCreation (LookupType): If the type does not resolve 
11801         to an array, give an error.
11802
11803 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
11804
11805         * statement.cs (Try.Resolve): Fixed bug #64222
11806
11807 2004-08-27  Martin Baulig  <martin@ximian.com>
11808
11809         * class.cs
11810         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
11811         crash here.     
11812
11813 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
11814
11815         * ecore.cs (Constantify): Get underlying type via
11816         System.Enum.GetUnderlyingType to avoid StackOverflow on the
11817         Windows in special cases.
11818
11819 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
11820
11821         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
11822         for obtaining also private methods.
11823         (GetRemoveMethod): Used GetRemoveMethod (true)
11824         for obtaining also private methods.
11825
11826 2004-08-24  Martin Baulig  <martin@ximian.com>
11827
11828         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
11829         MethodAttributes.HideBySig for operators.
11830
11831 2004-08-23  Martin Baulig  <martin@ximian.com>
11832
11833         Back to the old error reporting system :-)
11834
11835         * report.cs (Message): Removed.
11836         (Report.MessageData, ErrorData, WarningData): Removed.
11837         (Report.Error, Warning): Back to the old system.
11838
11839 2004-08-23  Martin Baulig  <martin@ximian.com>
11840
11841         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
11842
11843         * class.cs (TypeContainer.ParentContainer): New public virtual
11844         method; replaces the explicit interface implementation.
11845         (ClassPart.ParentContainer): Override.
11846
11847 2004-08-23  Martin Baulig  <martin@ximian.com>
11848
11849         * statement.cs (Switch): Added support for constant switches; see
11850         #59428 or test-285.cs.
11851
11852 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
11853
11854         Fixed bug #62740.
11855         * statement.cs (GetEnumeratorFilter): Removed useless
11856         logic because C# specs is strict. GetEnumerator must be
11857         public.
11858
11859 2004-08-22  Martin Baulig  <martin@ximian.com>
11860
11861         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11862         a switch and may break, reset the barrier.  Fixes #59867.
11863
11864 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
11865
11866         CLS-Compliance speed up (~5% for corlib)
11867
11868         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
11869         New method. Tests container for CLS-Compliant names
11870
11871         * class.cs (TypeContainer.VerifyClsName): New method.
11872         Checks whether container name is CLS Compliant.
11873         (Constructor): Implements IMethodData.
11874
11875         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
11876         low-case table for CLS Compliance test.
11877         (MemberCache.VerifyClsParameterConflict): New method.
11878         Checks method parameters for CS3006 error.
11879
11880         * enum.cs (EnumMember): Is derived from MemberCore.
11881         (Enum.VerifyClsName): Optimized for better performance.
11882
11883 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
11884
11885         * report.cs: Renamed Error_T to Error and changed all
11886         references.
11887
11888 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
11889
11890         * class.cs (TypeContainer.IndexerArrayList): New inner class
11891         container for indexers.
11892         (TypeContainer.DefaultIndexerName): New constant for default
11893         indexer name. Replaced all "Item" with this constant.
11894         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
11895
11896         * typemanager.cs (TypeManager.default_member_ctor): Cache here
11897         DefaultMemberAttribute constructor.
11898
11899 2004-08-05  Martin Baulig  <martin@ximian.com>
11900
11901         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
11902         Fix bug #59429.
11903
11904 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
11905
11906         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
11907         multi platforms problem.
11908
11909         * compiler.csproj: Included shared files.
11910
11911 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
11912
11913         Fix bug 60333, 55971 in the more general way
11914         * attribute.cs (Attribute.GetAttributeArgumentExpression):
11915         Added arg_type argument for constant conversion.
11916         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
11917
11918 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
11919
11920         Fix bug #59760
11921         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
11922         OperatorArrayList, MethodCoreArrayList for typecontainer
11923         containers. Changed class member types to these new types.
11924         (MethodArrayList.DefineMembers): Added test for CS0659.
11925
11926 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
11927
11928         * cfold.cs: Synchronize the folding with the code in expression.cs
11929         Binary.DoNumericPromotions for uint operands.
11930
11931         * attribute.cs: Revert patch from Raja, it introduced a regression
11932         while building Blam-1.2.1 (hard to isolate a test case).
11933
11934 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
11935
11936         Fix for #55382
11937         * class.cs:
11938         (TypeContainer.Define): Renamed to DefineContainerMembers because of
11939         name collision.
11940         (MethodCore.parent_method): New member. The method we're overriding
11941         if this is an override method.
11942         (MethodCore.CheckBase): Moved from Method class and made common.
11943         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
11944         private.
11945         (MethodCore.CheckForDuplications): New abstract method. For custom
11946         member duplication search in a container
11947         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
11948         method and its return type.
11949         (Event.conflict_symbol): New member. Symbol with same name in the
11950         parent class.
11951
11952         * decl.cs:
11953         (MemberCache.FindMemberWithSameName): New method. The method
11954         is looking for conflict with inherited symbols.
11955
11956 2004-08-04  Martin Baulig  <martin@ximian.com>
11957
11958         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
11959
11960         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
11961
11962 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
11963
11964         * report.cs (Message): New enum for better error, warning reference in
11965         the code.
11966         (MessageData): New inner abstract class. It generally handles printing of
11967         error and warning messages.
11968         Removed unused Error, Warning, Message methods.
11969
11970 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
11971
11972         Fix for cs0592-8.cs test
11973         * attribute.cs
11974         (Attributable.ValidAttributeTargets): Made public.
11975         (Attribute.ExplicitTarget): New member for explicit target value.
11976         (Attribute.CheckTargets): Now we translate explicit attribute
11977         target to Target here.
11978
11979 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
11980
11981         * ecore.cs (MethodGroupExpr): new IsBase property.
11982
11983         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
11984
11985         * delegate.cs (DelegateCreation): store a MethodGroupExpr
11986         rather than an instance expr.
11987
11988         (DelegateCreation.Emit): Use the method group rather than
11989         the instance expression. Also, if you have base.Foo as the
11990         method for a delegate, make sure to emit ldftn, not ldftnvirt.
11991
11992         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
11993
11994         (NewDelegate.DoResolve): Only check for the existance of Invoke
11995         if the method is going to be needed. Use MethodGroupExpr.
11996
11997         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
11998
11999         * expression.cs: For pointer arith., make sure to use
12000         the size of the type, not the size of the pointer to
12001         the type.
12002
12003 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12004
12005         Fix for #60722
12006         * class.cs (Class): Added error CS0502 test.
12007
12008 2004-08-03  John Luke  <jluke@cfl.rr.com>
12009             Raja R Harinath  <rharinath@novell.com>
12010
12011         Fix for #60997.
12012         * attribute.cs (Attribute.complained_before): New flag.
12013         (Attribute.ResolveType, Attribute.Resolve),
12014         (Attribute.DefinePInvokeMethod): Set it.
12015         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
12016         
12017 2004-08-03  Martin Baulig  <martin@ximian.com>
12018
12019         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
12020         use a user-defined operator; we still need to do numeric
12021         promotions in case one argument is a builtin type and the other
12022         one has an implicit conversion to that type.  Fixes #62322.
12023
12024 2004-08-02  Martin Baulig  <martin@ximian.com>
12025
12026         * statement.cs (LocalInfo.Flags): Added `IsThis'.
12027         (LocalInfo.IsThis): New public property.
12028         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
12029
12030 2004-08-01  Martin Baulig  <martin@ximian.com>
12031
12032         * class.cs (TypeContainer.GetClassBases): Don't set the default
12033         here since we may get called from GetPartialBases().
12034         (TypeContainer.DefineType): If GetClassBases() didn't return a
12035         parent, use the default one.
12036
12037 2004-07-30  Duncan Mak  <duncan@ximian.com>
12038
12039         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
12040
12041 2004-07-30  Martin Baulig  <martin@ximian.com>
12042
12043         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
12044
12045         * class.cs (SourceMethod): New public class, derive from the
12046         symbol writer's ISourceMethod.
12047         (Method): Use the new symbol writer API.
12048
12049         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
12050         as argument and use the new symbol writer.
12051
12052         * location.cs
12053         (SourceFile): Implement the symbol writer's ISourceFile.
12054         (Location.SymbolDocument): Removed.
12055         (Location.SourceFile): New public property.
12056
12057         * symbolwriter.cs: Use the new symbol writer API.
12058
12059 2004-07-30  Raja R Harinath  <rharinath@novell.com>
12060
12061         * Makefile (install-local): Remove.  Functionality moved to
12062         executable.make.
12063
12064 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
12065
12066         * Makefile: Install mcs.exe.config file together with mcs.exe.
12067         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
12068         correct runtime version.
12069         
12070 2004-07-25  Martin Baulig  <martin@ximian.com>
12071
12072         * class.cs
12073         (TypeContainer.RegisterOrder): Removed, this was unused.
12074         (TypeContainer, interface_order): Removed.
12075         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
12076         TypeContainer as argument since we can also be called with a
12077         `PartialContainer' for a partial class/struct/interface.
12078         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
12079         of checking whether we're an `Interface' - we could be a
12080         `PartialContainer'.
12081         (PartialContainer.Register): Override; call
12082         AddClass()/AddStruct()/AddInterface() on our parent.
12083
12084         * cs-parser.jay (interface_member_declaration): Add things to the
12085         `current_container', not the `current_class'.
12086
12087         * rootcontext.cs (RegisterOrder): The overloaded version which
12088         takes an `Interface' was unused, removed.
12089
12090         * typemanager.cs (TypeManager.LookupInterface): Return a
12091         `TypeContainer', not an `Interface'.
12092         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
12093         contain a `PartialContainer' for an interface, so check it's
12094         `Kind' to figure out what it is.
12095
12096 2004-07-25  Martin Baulig  <martin@ximian.com>
12097
12098         * class.cs (Class.DefaultTypeAttributes): New public constant.
12099         (Struct.DefaultTypeAttributes): Likewise.
12100         (Interface.DefaultTypeAttributes): Likewise.
12101         (PartialContainer.TypeAttr): Override this and add the
12102         DefaultTypeAttributes.
12103
12104 2004-07-25  Martin Baulig  <martin@ximian.com>
12105
12106         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
12107         we can just use the `Parent' field instead.
12108
12109 2004-07-25  Martin Baulig  <martin@ximian.com>
12110
12111         * class.cs (TypeContainer.Emit): Renamed to EmitType().
12112
12113 2004-07-25  Martin Baulig  <martin@ximian.com>
12114
12115         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
12116         our parts before defining any methods.
12117         (TypeContainer.VerifyImplements): Make this virtual.
12118         (ClassPart.VerifyImplements): Override and call VerifyImplements()
12119         on our PartialContainer.
12120
12121 2004-07-25  Martin Baulig  <martin@ximian.com>
12122
12123         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
12124
12125         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
12126         argument, we can just use the `Parent' field instead.
12127
12128         * class.cs
12129         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
12130         (MemberBase.DoDefine): Likewise.
12131
12132 2004-07-24  Martin Baulig  <martin@ximian.com>
12133
12134         * decl.cs (MemberCore.Parent): New public field.
12135         (DeclSpace.Parent): Moved to MemberCore.
12136
12137         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
12138         (MemberBase.ctor): Added TypeContainer argument, pass it to our
12139         parent's .ctor.
12140         (FieldBase, Field, Operator): Likewise.
12141         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
12142         (EventField, Event): Likewise.
12143
12144 2004-07-23  Martin Baulig  <martin@ximian.com>
12145
12146         * class.cs (PartialContainer): New public class.
12147         (ClassPart): New public class.
12148         (TypeContainer): Added support for partial classes.
12149         (TypeContainer.GetClassBases): Splitted some of the functionality
12150         out into GetNormalBases() and GetPartialBases().
12151
12152         * cs-tokenizer.cs (Token.PARTIAL): New token.
12153         (Tokenizer.consume_identifier): Added some hacks to recognize
12154         `partial', but only if it's immediately followed by `class',
12155         `struct' or `interface'.
12156
12157         * cs-parser.jay: Added support for partial clases.
12158
12159 2004-07-23  Martin Baulig  <martin@ximian.com>
12160
12161         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
12162         a `DeclSpace' and also made it readonly.
12163         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
12164         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
12165         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
12166
12167         * cs-parser.jay: Pass the `current_class', not the
12168         `current_container' (at the moment, this is still the same thing)
12169         to a new Method, Property, Event, Indexer or Constructor.
12170
12171 2004-07-23  Martin Baulig  <martin@ximian.com>
12172
12173         * cs-parser.jay (CSharpParser): Added a new `current_class' field
12174         and removed the `current_interface' one.
12175         (struct_declaration, class_declaration, interface_declaration):
12176         Set `current_class' to the newly created class/struct/interface;
12177         set their `Bases' and call Register() before parsing their body.
12178
12179 2004-07-23  Martin Baulig  <martin@ximian.com>
12180
12181         * class.cs (Kind): New public enum.
12182         (TypeContainer): Made this class abstract.
12183         (TypeContainer.Kind): New public readonly field.
12184         (TypeContainer.CheckDef): New public method; moved here from
12185         cs-parser.jay.
12186         (TypeContainer.Register): New public abstract method.
12187         (TypeContainer.GetPendingImplementations): New public abstract
12188         method.
12189         (TypeContainer.GetClassBases): Removed the `is_class' and
12190         `is_iface' parameters.
12191         (TypeContainer.DefineNestedTypes): Formerly known as
12192         DoDefineType().
12193         (ClassOrStruct): Made this class abstract.
12194
12195         * tree.cs (RootTypes): New public type. 
12196
12197 2004-07-20  Martin Baulig  <martin@ximian.com>
12198
12199         * tree.cs (Tree.RecordNamespace): Removed.
12200         (Tree.Namespaces): Removed.
12201
12202         * rootcontext.cs (RootContext.IsNamespace): Removed.
12203
12204         * cs-parser.jay (namespace_declaration): Just create a new
12205         NamespaceEntry here.
12206
12207 2004-07-20  Martin Baulig  <martin@ximian.com>
12208
12209         * statement.cs (ExceptionStatement): New abstract class.  This is
12210         now used as a base class for everyone who's using `finally'.
12211         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
12212         our local variables before using them.
12213
12214         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
12215         virtual method.  This is used by Yield.Resolve() to "steal" an
12216         outer block's `finally' clauses.
12217         (FlowBranchingException): The .ctor now takes an ExceptionStatement
12218         argument.
12219
12220         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
12221         version which takes an ExceptionStatement.  This version must be
12222         used to create exception branchings.
12223
12224         * iterator.cs
12225         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
12226         (Iterator.EmitMoveNext): Added exception support; protect the
12227         block with a `fault' clause, properly handle 'finally' clauses.
12228         (Iterator.EmitDispose): Run all the `finally' clauses here.
12229
12230 2004-07-20  Martin Baulig  <martin@ximian.com>
12231
12232         * iterator.cs: This is the first of a set of changes in the
12233         iterator code.  Match the spec more closely: if we're an
12234         IEnumerable, then GetEnumerator() must be called.  The first time
12235         GetEnumerator() is called, it returns the current instance; all
12236         subsequent invocations (if any) must create a copy.
12237
12238 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
12239
12240         * expression.cs: Resolve the constant expression before returning
12241         it. 
12242
12243 2004-07-19  Martin Baulig  <martin@ximian.com>
12244
12245         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
12246         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
12247         the return type of the new EmitContext.
12248
12249 2004-07-18  Martin Baulig  <martin@ximian.com>
12250
12251         * class.cs (Property.Define): Fix iterators.
12252
12253         * iterators.cs (Iterator.Define): Moved the
12254         `container.AddInterator (this)' call here from the .ctor; only do
12255         it if we resolved successfully.
12256
12257 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
12258
12259         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
12260         `true' for preprocessing directives that we parse.  The return
12261         value indicates whether we should return to regular tokenizing or
12262         not, not whether it was parsed successfully.
12263
12264         In the past if we were in: #if false ... #line #endif, we would
12265         resume parsing after `#line'.  See bug 61604.
12266
12267         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
12268         building: IsEnumType should return true only for enums, not for
12269         enums or System.Enum itself.  This fixes #61593.
12270
12271         Likely what happened is that corlib was wrong: mcs depended on
12272         this bug in some places.  The bug got fixed, we had to add the
12273         hack, which caused bug 61593.
12274
12275         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
12276         that was a workaround for the older conditions.
12277
12278 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
12279
12280         * assign.cs: IAssignMethod has a new interface, as documented
12281         inline. All assignment code now uses this new api.
12282
12283         * ecore.cs, expression.cs: All classes which implement
12284         IAssignMethod now use the new interface.
12285
12286         * expression.cs (Invocation): add a hack to EmitCall so that
12287         IndexerAccess can be the target of a compound assignment without
12288         evaluating its arguments twice.
12289
12290         * statement.cs: Handle changes in Invocation api.
12291
12292 2004-07-16  Martin Baulig  <martin@ximian.com>
12293
12294         * iterators.cs: Rewrote this.  We're now using one single Proxy
12295         class for both the IEnumerable and the IEnumerator interface and
12296         `Iterator' derives from Class so we can use the high-level API.
12297
12298         * class.cs (TypeContainer.AddIterator): New method.
12299         (TypeContainer.DoDefineType): New protected virtual method, which
12300         is called from DefineType().
12301         (TypeContainer.DoDefineMembers): Call DefineType() and
12302         DefineMembers() on all our iterators.
12303         (TypeContainer.Emit): Call Emit() on all our iterators.
12304         (TypeContainer.CloseType): Call CloseType() on all our iterators.
12305
12306         * codegen.cs (EmitContext.CurrentIterator): New public field.
12307
12308 2004-07-15  Martin Baulig  <martin@ximian.com>
12309
12310         * typemanager.cs
12311         (TypeManager.not_supported_exception_type): New type.   
12312
12313 2004-07-14  Martin Baulig  <martin@ximian.com>
12314
12315         * iterators.cs: Use real error numbers.
12316
12317 2004-07-14  Martin Baulig  <martin@ximian.com>
12318
12319         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
12320         requires this to be a System.Collection.IEnumerable and not a
12321         class implementing that interface.
12322         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
12323
12324 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
12325
12326         * class.cs: Fixed previous fix, it broke some error tests.
12327
12328 2004-07-12  Martin Baulig  <martin@ximian.com>
12329
12330         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
12331         Fixes #61293.
12332
12333 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
12334
12335         * assign.cs (LocalTemporary): Add new argument: is_address,If
12336         `is_address' is true, then the value that we store is the address
12337         to the real value, and not the value itself.
12338         
12339         * ecore.cs (PropertyExpr): use the new local temporary
12340         stuff to allow us to handle X.Y += z (where X is a struct)
12341
12342 2004-07-08  Martin Baulig  <martin@ximian.com>
12343
12344         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
12345         not always return, just like we're doing in Using.Resolve().
12346
12347 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
12348
12349         * cs-parser.jay (fixed_statement): flag this as Pinned.
12350
12351 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
12352
12353         * typemanager.cs (TypeManager): Removed MakePinned method, this
12354         mechanism is replaced with the .NET 2.x compatible mechanism of
12355         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
12356
12357         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
12358         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
12359         `IsFixed' property which has a different meaning.
12360
12361 2004-07-02  Raja R Harinath  <rharinath@novell.com>
12362
12363         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
12364         visible from inside a nested class, not just the names of the
12365         immediately enclosing class.
12366         Fix for bug #60730.
12367
12368 2004-06-24  Raja R Harinath  <rharinath@novell.com>
12369
12370         * expression.cs (BetterConversion): Remove buggy special-case
12371         handling of "implicit constant expression conversions".  At this
12372         point, we already know that the conversion is possible -- we're
12373         only checking to see which is better.
12374
12375 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12376
12377         * cs-parser.jay: Added error CS0210 test.
12378
12379 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12380
12381         * cs-parser.jay: Added error CS0134 test.
12382
12383 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12384
12385         Fix bug #52507
12386         * cs-parser.jay: Added error CS0145 test.
12387
12388 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12389
12390         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
12391
12392 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
12393         
12394         * expression.cs (StackAlloc.Resolve): The argument may not
12395         be a constant; deal with this case.
12396         
12397 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
12398
12399         * attribute.cs (IndexerName_GetIndexerName): Renamed to
12400         GetIndexerAttributeValue.
12401         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
12402
12403         * class.cs (Indexer.Define): Added error tests for CS0415,
12404         CS0609.
12405
12406 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
12407
12408         * attribute.cs (Attribute.Resolve): Keep field code in sync with
12409         property code.
12410
12411 2004-06-23  Martin Baulig  <martin@ximian.com>
12412
12413         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
12414         neither return nor throw, reset the barrier as well.  Fixes #60457.
12415
12416 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
12417
12418         * class.cs : EventAttributes is now set to None by default.
12419           This fixes bug #60459.
12420
12421 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12422
12423         Fix bug #60219
12424         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12425         Don't throw exception but return null (it's sufficient now).
12426
12427 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12428
12429         * typemanager.cs (GetArgumentTypes): Faster implementation.
12430
12431 2004-06-18  Martin Baulig  <martin@ximian.com>
12432
12433         * attribute.cs (Attribute.Resolve): Check whether we're an
12434         EmptyCast which a Constant child.  Fixes #60333.
12435
12436 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
12437
12438         * statement.cs (EmitCollectionForeach): Account for the fact that
12439         not all valuetypes are in areas which we can take the address of.
12440         For these variables, we store to a temporary variable. Also, make
12441         sure that we dont emit a `callvirt' on a valuetype method.
12442
12443 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12444
12445         * expression.cs (StackAlloc.DoReSolve): Added test for
12446         negative parameter (CS0247).
12447
12448 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12449
12450         Fix bug #59792
12451         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
12452
12453 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12454
12455         Fix bug #59781
12456         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
12457         ulong.
12458
12459 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12460
12461         Fix bug #58254 & cs1555.cs, cs1556.cs
12462         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
12463
12464 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12465
12466         * cs-parser.jay: Added error CS1669 test for indexers.
12467
12468 2004-06-11  Martin Baulig  <martin@ximian.com>
12469
12470         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
12471         call this twice: for params and varargs methods.
12472
12473 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12474
12475         * class.cs:
12476         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
12477
12478 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12479
12480         * attribute.cs (Attribute.GetValidTargets): Made public.
12481
12482         * class.cs: 
12483         (AbstractPropertyEventMethod): New class for better code sharing.
12484         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
12485         CS1667 report.
12486         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
12487
12488 2004-06-11  Raja R Harinath  <rharinath@novell.com>
12489
12490         Fix bug #59477.
12491         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
12492         that the call to Resolve is part of a MemberAccess.
12493         (Expression.Resolve): Use it for SimpleName resolution.
12494         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
12495         Add 'intermediate' boolean argument.
12496         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
12497         error message when the SimpleName can be resolved ambiguously
12498         between an expression and a type.
12499         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
12500         public.
12501         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
12502         call on the left-side.
12503
12504 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12505
12506         * class.cs:
12507         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
12508
12509 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12510
12511         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
12512
12513 2004-06-11  Martin Baulig  <martin@ximian.com>
12514
12515         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
12516         varargs methods if applicable.
12517
12518 2004-06-11  Martin Baulig  <martin@ximian.com>
12519
12520         * expression.cs (Invocation.EmitCall): Don't use
12521         `method.CallingConvention == CallingConventions.VarArgs' since the
12522         method could also have `CallingConventions.HasThis'.
12523
12524 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12525
12526         * class.cs (Event.GetSignatureForError): Implemented.
12527         Fixed crash in error test cs3010.cs
12528
12529 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
12530
12531         * cs-tokenizer.cs: Change the way we track __arglist to be
12532         consistent with the other keywords.
12533
12534 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
12535
12536         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
12537         tomorrow.
12538
12539 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
12540
12541         * codegen.cs: Check that all referenced assemblies have a strongname
12542         before strongnaming the compiled assembly. If not report error CS1577.
12543         Fix bug #56563. Patch by Jackson Harper.
12544         * typemanager.cs: Added a method to return all referenced assemblies.
12545         Fix bug #56563. Patch by Jackson Harper.
12546
12547 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12548
12549         * class.cs:
12550         (Method.ApplyAttributeBuilder): Moved and added conditional
12551         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
12552
12553         * delegate.cs:
12554         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
12555
12556 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12557
12558         Fixed #59640
12559         * class.cs: (EventField.attribute_targets): Changed default target.
12560
12561 2004-06-08  Martin Baulig  <martin@ximian.com>
12562
12563         * expression.cs (Invocation.EmitCall): Enable varargs methods.
12564
12565 2004-06-08  Martin Baulig  <martin@ximian.com>
12566
12567         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
12568
12569 2004-06-07  Martin Baulig  <martin@ximian.com>
12570
12571         Added support for varargs methods.
12572
12573         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
12574         keyword.
12575
12576         * cs-parser.jay: Added support for `__arglist'.
12577
12578         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
12579
12580         * expression.cs (Argument.AType): Added `ArgList'.
12581         (Invocation): Added support for varargs methods.
12582         (ArglistAccess): New public class.
12583         (Arglist): New public class.
12584
12585         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
12586
12587         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
12588         a method's top-level block if the method has varargs.
12589
12590         * support.cs (ReflectionParameters, InternalParameters): Added
12591         support for varargs methods.    
12592
12593 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
12594
12595         * class.cs: Provide location in indexer error report.
12596
12597         * driver.cs: Use standard names.
12598
12599         * namespace.cs: Catch the use of using after a namespace has been
12600         declared also on using aliases.
12601
12602 2004-06-03  Raja R Harinath  <rharinath@novell.com>
12603
12604         Bug #50820.
12605         * typemanager.cs (closure_private_ok, closure_invocation_type)
12606         (closure_qualifier_type, closure_invocation_assembly)
12607         (FilterWithClosure): Move to ...
12608         (Closure): New internal nested class.
12609         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
12610         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
12611         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
12612         (MemberLookup, MemberLookupFailed): Use it.
12613         * expression.cs (New.DoResolve): Treat the lookup for the
12614         constructor as being qualified by the 'new'ed type.
12615         (Indexers.GetIndexersForTypeOrInterface): Update.
12616
12617 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
12618
12619         * attribute.cs
12620         (GetConditionalAttributeValue): New method. Returns
12621         condition of ConditionalAttribute.
12622         (SearchMulti): New method.  Returns all attributes of type 't'.
12623         Use it when attribute is AllowMultiple = true.
12624         (IsConditionalMethodExcluded): New method.
12625
12626         * class.cs
12627         (Method.IsExcluded): Implemented. Returns true if method has conditional
12628         attribute and the conditions is not defined (method is excluded).
12629         (IMethodData): Extended interface for ConditionalAttribute support.
12630         (PropertyMethod.IsExcluded): Implemented.
12631
12632         * decl.cs
12633         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
12634
12635         * expression.cs
12636         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
12637         on the method.
12638
12639 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
12640
12641         * expression.cs (ArrayCreationExpression): Make this just an
12642         `expression'. It can't be a statement, so the code here was
12643         dead.
12644
12645 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12646
12647         Fixed #59072
12648         * typemanager.cs (GetFullNameSignature): New method for
12649         MethodBase types.
12650
12651 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12652
12653         Fixed #56452
12654         * class.cs (MemberBase.GetSignatureForError): New virtual method.
12655         Use this method when MethodBuilder is null.
12656         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
12657         Added test for error CS0626 (MONO reports error for this situation).
12658         (IMethodData.GetSignatureForError): Extended interface.
12659
12660 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12661
12662         * attribute.cs
12663         (AttributeTester.GetObsoleteAttribute): Returns instance of
12664         ObsoleteAttribute when type is obsolete.
12665
12666         * class.cs
12667         (TypeContainer.VerifyObsoleteAttribute): Override.
12668         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
12669         (MethodCode.VerifyObsoleteAttribute): Override.
12670         (MemberBase.VerifyObsoleteAttribute): Override.
12671
12672         * decl.cs
12673         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
12674         and report proper error.
12675
12676         *delegate.cs
12677         Delegate.VerifyObsoleteAttribute): Override.
12678
12679         * ecore.cs
12680         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
12681         and report proper error.
12682         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
12683
12684         * enum.cs
12685         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
12686         and enum member.
12687
12688         * expression.cs
12689         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
12690         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
12691         Added test for ObsoleteAttribute.
12692
12693         * statement.cs
12694         (Catch): Derived from Statement.
12695
12696 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12697  
12698         Fixed bug #59071 & cs0160.cs
12699  
12700         * statement.cs (Try.Resolve): Check here whether order of catch
12701         clauses matches their dependencies.
12702
12703 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
12704
12705         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
12706         caused a regression: #59343.  Referencing nested classes from an
12707         assembly stopped working.
12708
12709 2004-05-31  Martin Baulig  <martin@ximian.com>
12710
12711         MCS is now frozen for beta 2.
12712
12713 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12714
12715         * convert.cs: add a trivial cache for overload operator resolution.
12716
12717 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12718
12719         * decl.cs: If possible, use lookuptypedirect here. We can only do
12720         this if there is no `.' after the namespace. Avoids using
12721         LookupType, which does lots of slow processing.
12722         (FindNestedType) New method, does what it says :-).
12723         * namespace.cs: use LookupTypeDirect.
12724         * rootcontext.cs: use membercache, if possible.
12725         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
12726
12727 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12728
12729         * expression.cs:
12730         According to the spec, 
12731
12732         In a member access of the form E.I, if E is a single identifier,
12733         and if the meaning of E as a simple-name (§7.5.2) is a constant,
12734         field, property, localvariable, or parameter with the same type as
12735         the meaning of E as a type-name (§3.8), then both possible
12736         meanings of E are permitted.
12737
12738         We did not check that E as a simple-name had the same type as E as
12739         a type name.
12740
12741         This trivial check gives us 5-7% on bootstrap time.
12742
12743 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12744
12745         * expression.cs (Invocation.OverloadResolve): Avoid the
12746         use of hashtables and boxing here by allocating on demand.
12747
12748 2004-05-30  Martin Baulig  <martin@ximian.com>
12749
12750         * rootcontext.cs (RootContext.LookupType): Don't cache things if
12751         we're doing a silent lookup.  Don't try to lookup nested types in
12752         TypeManager.object_type (thanks to Ben Maurer).
12753
12754 2004-05-30  Martin Baulig  <martin@ximian.com>
12755
12756         Committing a patch from Ben Maurer.
12757
12758         * rootcontext.cs (RootContext.LookupType): Cache negative results.
12759
12760 2004-05-29  Martin Baulig  <martin@ximian.com>
12761
12762         * class.cs (IMethodData.ShouldIgnore): New method.
12763
12764         * typemanager.cs (TypeManager.MethodFlags): Don't take a
12765         `Location' argument, we don't need it anywhere.  Use
12766         `IMethodData.ShouldIgnore ()' instead of
12767         `MethodData.GetMethodFlags ()'.
12768         (TypeManager.AddMethod): Removed.
12769         (TypeManager.AddMethod2): Renamed to AddMethod.
12770
12771 2004-05-29  Martin Baulig  <martin@ximian.com>
12772
12773         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
12774
12775         * convert.cs (Convert.ImplicitReferenceConversion): If we're
12776         converting from a class type S to an interface type and we already
12777         have an object on the stack, don't box it again.  Fixes #52578.
12778
12779 2004-05-29  Martin Baulig  <martin@ximian.com>
12780
12781         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12782         Added support for `params' parameters.  Fixes #59267.
12783
12784 2004-05-29  Martin Baulig  <martin@ximian.com>
12785
12786         * literal.cs (NullPointer): Provide a private .ctor which sets
12787         `type' to TypeManager.object_type.  Fixes #59048.
12788
12789 2004-05-29  Martin Baulig  <martin@ximian.com>
12790
12791         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
12792         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
12793
12794         * ecore.cs (EventExpr.instance_expr): Make the field private.
12795
12796 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
12797
12798         Fixed bug #50080 & cs0214-2.cs
12799         * expression.cs (Cast.DoResolve): Check unsafe context here.
12800         
12801         * statement.cs (Resolve.DoResolve): Likewise.
12802
12803 2004-05-26  Martin Baulig  <martin@ximian.com>
12804
12805         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
12806
12807         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
12808         (RootContext.LookupType): Pass down the `silent' flag.
12809
12810 2004-05-25  Martin Baulig  <martin@ximian.com>
12811
12812         * expression.cs
12813         (MethodGroupExpr.IdenticalTypeName): New public property.
12814         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
12815         expression actually refers to a type.
12816
12817 2004-05-25  Martin Baulig  <martin@ximian.com>
12818
12819         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
12820         for #56176 and made it actually work.
12821
12822 2004-05-25  Martin Baulig  <martin@ximian.com>
12823
12824         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
12825         (FieldExpr, PropertyExpr): Override and implement
12826         CacheTemporaries.  Fixes #52279.
12827
12828 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
12829
12830         * location.cs: In the new compiler listing a file twice is a
12831         warning, not an error.
12832
12833 2004-05-24  Martin Baulig  <martin@ximian.com>
12834
12835         * enum.cs (Enum.DefineType): For the `BaseType' to be a
12836         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
12837
12838 2004-05-24  Martin Baulig  <martin@ximian.com>
12839
12840         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
12841         walking the `using' list.  Fixes #53921.
12842
12843 2004-05-24  Martin Baulig  <martin@ximian.com>
12844
12845         * const.cs (Const.LookupConstantValue): Added support for
12846         EmptyCast's; fixes #55251.
12847
12848 2004-05-24  Martin Baulig  <martin@ximian.com>
12849
12850         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
12851         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
12852         which does the CS0135 check.  The reason is that we first need to
12853         check whether the variable actually exists.
12854
12855 2004-05-24  Martin Baulig  <martin@ximian.com>
12856
12857         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
12858         than RootContext.LookupType() to find the explicit interface
12859         type.  Fixes #58584.
12860
12861 2004-05-24  Raja R Harinath  <rharinath@novell.com>
12862
12863         * Makefile: Simplify.  Use executable.make.
12864         * mcs.exe.sources: New file.  List of sources of mcs.exe.
12865
12866 2004-05-24  Anders Carlsson  <andersca@gnome.org>
12867
12868         * decl.cs:
12869         * enum.cs:
12870         Use the invariant culture when doing String.Compare for CLS case
12871         sensitivity.
12872         
12873 2004-05-23  Martin Baulig  <martin@ximian.com>
12874
12875         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
12876         don't have any dots.  Fixes #52622, added cs0246-8.cs.
12877
12878         * namespace.cs (NamespaceEntry.Lookup): Likewise.
12879         
12880 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
12881
12882         * class.cs (MemberBase.Define): Reuse MemberType member for 
12883         resolved type. Other methods can use it too.
12884
12885 2004-05-23  Martin Baulig  <martin@ximian.com>
12886
12887         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
12888         the variable also exists in the current block (otherwise, we need
12889         to report a CS0103).  Fixes #58670.
12890
12891 2004-05-23  Martin Baulig  <martin@ximian.com>
12892
12893         * flowanalysis.cs (Reachability.Reachable): Compute this
12894         on-the-fly rather than storing it as a field.
12895
12896 2004-05-23  Martin Baulig  <martin@ximian.com>
12897
12898         * flowanalysis.cs (Reachability.And): Manually compute the
12899         resulting `barrier' from the reachability.      
12900        
12901 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
12902
12903         Fix bug #57835
12904         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
12905         instance of ObsoleteAttribute when symbol is obsolete.
12906
12907         * class.cs
12908         (IMethodData): Extended interface for ObsoleteAttribute support.
12909
12910 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
12911
12912         * attribute.cs: Fix bug #55970
12913
12914 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
12915
12916         Fix bug #52705
12917         * attribute.cs
12918         (GetObsoleteAttribute): New method. Creates the instance of
12919         ObsoleteAttribute.
12920         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
12921         ObsoleteAttribute when member is obsolete.
12922         (AttributeTester.Report_ObsoleteMessage): Common method for
12923         Obsolete error/warning reporting.
12924
12925         * class.cs
12926         (TypeContainer.base_classs_type): New member for storing parent type.
12927
12928         * decl.cs
12929         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
12930         for this MemberCore.
12931
12932 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
12933
12934         * attribute.cs, const.cs: Fix bug #58590
12935
12936 2004-05-21  Martin Baulig  <martin@ximian.com>
12937
12938         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
12939         out parameters if the end of the method is unreachable.  Fixes
12940         #58098. 
12941
12942 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
12943
12944         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
12945         Hari was right, why extra method.
12946
12947 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
12948
12949         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
12950
12951 2004-05-20  Martin Baulig  <martin@ximian.com>
12952
12953         Merged this back from gmcs to keep the differences to a minumum.
12954
12955         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
12956         instead of a Declspace.
12957         (Attribute.ResolveType): Likewise.
12958         (Attributes.Search): Likewise.
12959         (Attributes.Contains): Likewise.
12960         (Attributes.GetClsCompliantAttribute): Likewise.
12961
12962         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
12963         argument.
12964         (MethodData.ApplyAttributes): Take an EmitContext instead of a
12965         DeclSpace.
12966
12967 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
12968
12969         Fix bug #58688 (MCS does not report error when the same attribute
12970         is assigned twice)
12971
12972         * attribute.cs (Attribute.Emit): Distinction between null and default.
12973
12974 2004-05-19  Raja R Harinath  <rharinath@novell.com>
12975
12976         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
12977         of a top-level attribute without an attribute target.
12978         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
12979         Make non-static.
12980         (Attribute.Conditional_GetConditionName), 
12981         (Attribute.Obsolete_GetObsoleteMessage): Update.
12982         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
12983         part of ScanForIndexerName.
12984         (Attribute.CanIgnoreInvalidAttribute): New function.
12985         (Attribute.ScanForIndexerName): Move to ...
12986         (Attributes.ScanForIndexerName): ... here.
12987         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
12988         (Attributes.Search): New internal variant that can choose not to
12989         complain if types aren't resolved.  The original signature now
12990         complains.
12991         (Attributes.GetClsCompliantAttribute): Use internal variant, with
12992         complaints suppressed.
12993         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
12994         only if it not useful.
12995         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
12996         top-level for attributes that are shared between the assembly
12997         and a top-level class.
12998         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
12999         * class.cs: Update to reflect changes.
13000         (DefineIndexers): Fuse loops.
13001         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
13002         a couple more variants of attribute names.
13003
13004 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
13005
13006         Fix bug #52585 (Implemented explicit attribute declaration)
13007
13008         * attribute.cs:
13009         (Attributable.ValidAttributeTargets): New abstract method. It gets
13010         list of valid attribute targets for explicit target declaration.
13011         (Attribute.Target): It holds target itself.
13012         (AttributeSection): Removed.
13013         (Attribute.CheckTargets): New method. It checks whether attribute
13014         target is valid for the current element.
13015
13016         * class.cs:
13017         (EventProperty): New class. For events that are declared like
13018         property (with add and remove accessors).
13019         (EventField): New class. For events that are declared like field.
13020         class.cs
13021
13022         * cs-parser.jay: Implemented explicit attribute target declaration.
13023
13024         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
13025         Override ValidAttributeTargets.
13026
13027         * parameter.cs:
13028         (ReturnParameter): Class for applying custom attributes on 
13029         the return type.
13030         (ParameterAtribute): New class. Class for applying custom
13031         attributes on the parameter type.
13032
13033 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
13034
13035         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
13036         definitions. 
13037
13038         (Method): Allow UNSAFE here.
13039
13040         * modifiers.cs: Support unsafe reporting.
13041
13042 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
13043
13044         * decl.cs: Fix bug #58478.
13045
13046 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13047
13048         * statement.cs: When checking for unreachable code on an EmptyStatement,
13049         set the location. Fixes bug #58488.
13050
13051 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
13052
13053         * driver.cs: Add -pkg handling.
13054
13055         From Gonzalo: UseShelLExecute=false
13056
13057 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
13058
13059         * attribute.cs:
13060         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
13061         for attribute.
13062         (Attribute.IsClsCompliaceRequired): Moved to base for better
13063         accesibility.
13064         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
13065         when attribute is AttributeUsageAttribute.
13066         (Attribute.GetValidTargets): Simplified.
13067         (Attribute.GetAttributeUsage): New method returns AttributeUsage
13068         attribute for this type.
13069         (Attribute.ApplyAttributes): Method renamed to Emit and make
13070         non-static.
13071         (GlobalAttributeSection): New class for special handling of global
13072         attributes (assembly, module).
13073         (AttributeSection.Emit): New method.
13074
13075         * class.cs: Implemented Attributable abstract methods.
13076         (MethodCore.LabelParameters): Moved to Parameter class.
13077         (Accessor): Is back simple class.
13078         (PropertyMethod): Implemented Attributable abstract class.
13079         (DelegateMethod): Implemented Attributable abstract class.
13080         (Event): New constructor for disctintion between normal Event
13081         and Event with accessors.
13082
13083         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
13084
13085         * codegen.cs, const.cs, decl.cs, delegate.cs:
13086         (CommonAssemblyModulClass): Implemented Attributable abstract class
13087         and simplified.
13088
13089         * enum.cs: Implement IAttributeSupport interface.
13090         (EnumMember): New class for emum members. Implemented Attributable
13091         abstract class
13092
13093         * parameter.cs:
13094         (ParameterBase): Is abstract.
13095         (ReturnParameter): New class for easier [return:] attribute handling.
13096
13097         * typemanager.cs: Removed builder_to_attr.
13098
13099 2004-05-11  Raja R Harinath  <rharinath@novell.com>
13100
13101         Fix bug #57151.
13102         * attribute.cs (Attribute.GetPositionalValue): New function.
13103         * class.cs (TypeContainer.VerifyMembers): New function.
13104         (TypeContainer.Emit): Use it.
13105         (ClassOrStruct): New base class for Class and Struct.
13106         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
13107         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
13108         class.
13109         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
13110         then each non-static field should have a FieldOffset attribute.
13111         Otherwise, none of the fields should have a FieldOffset attribute.
13112         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
13113         and FieldOffset attributes.
13114         * typemanager.cs (TypeManager.struct_layout_attribute_type)
13115         (TypeManager.field_offset_attribute_type): New core types.
13116         (TypeManager.InitCoreTypes): Initialize them.
13117
13118 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
13119
13120         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
13121         Return correct type.
13122         From bug #58270.
13123
13124 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
13125
13126         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
13127         be implicitly converted to ulong.
13128         
13129         * expression.cs: The logic for allowing operator &, | and ^ worked
13130         was wrong, it worked before because we did not report an error in
13131         an else branch.  Fixes 57895.
13132
13133         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
13134         allow volatile fields to be reference types.
13135
13136 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
13137
13138         * driver.cs: Add support for /debug-
13139
13140 2004-05-07  Raja R Harinath  <rharinath@novell.com>
13141
13142         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
13143         Add a 'complain' parameter to silence errors.
13144         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
13145         silently overlooked type-resolutions.
13146         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
13147         to reflect changes.
13148         (Attributes.Search): New function.
13149         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
13150         (Attributes.GetAttributeFullName): Remove hack.
13151         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
13152         Update to reflect changes.
13153         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
13154         Use Attributes.Search instead of nested loops.
13155
13156 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
13157
13158         * decl.cs:
13159         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
13160         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
13161         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
13162
13163         * report.cs: (Report.Warning): Renamed to Warning_T because of
13164         parameter collision.
13165
13166 2004-05-05  Raja R Harinath  <rharinath@novell.com>
13167
13168         * expression.cs (MemberAccess.ResolveMemberAccess):
13169         Exit with non-zero status after Report.Error.
13170         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
13171         Likewise.
13172         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
13173
13174 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13175
13176         * support.cs: Don't hang when the file is empty.
13177
13178 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13179
13180         * support.cs: In SeekableStreamReader, compute the preamble size of the
13181           underlying stream. Position changes should take into account that initial
13182           count of bytes.
13183
13184 2004-05-03  Todd Berman  <tberman@sevenl.net>
13185
13186         * driver.cs: remove unused GetSysVersion function.
13187
13188 2004-05-03  Todd Berman  <tberman@sevenl.net>
13189
13190         * driver.cs: Remove the hack from saturday, as well as the hack
13191         from jackson (LoadAssemblyFromGac), also adds the CWD to the
13192         link_paths to get that bit proper.
13193
13194 2004-05-01  Todd Berman  <tberman@sevenl.net>
13195
13196         * driver.cs: Try a LoadFrom before a Load, this checks the current
13197         path. This is currently a bug in mono that is be fixed, however, this
13198         provides a workaround for now. This will be removed when the bug
13199         is fixed.
13200
13201 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
13202
13203         * CryptoConvert.cs: Updated to latest version. Fix issue with 
13204         incomplete key pairs (#57941).
13205
13206 2004-05-01  Todd Berman  <tberman@sevenl.net>
13207
13208         * driver.cs: Remove '.' from path_chars, now System.* loads properly
13209         from the GAC
13210
13211 2004-04-30  Jackson Harper  <jackson@ximian.com>
13212
13213         * codegen.cs: Open keys readonly.
13214         
13215 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13216
13217         * typemanager.cs: don't report cyclic struct layout when a struct
13218         contains 2 or more fields of the same type. Failed for Pango.AttrShape
13219         which has 2 Pango.Rectangle fields.
13220
13221 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13222
13223         * expression.cs: Handle IntPtr comparisons with IL code
13224         rather than a method call.
13225
13226 2004-04-29  Martin Baulig  <martin@ximian.com>
13227
13228         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
13229         the list of PropertyInfo's in class hierarchy and find the
13230         accessor.  Fixes #56013.
13231
13232 2004-04-29  Martin Baulig  <martin@ximian.com>
13233
13234         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
13235
13236 2004-04-29  Martin Baulig  <martin@ximian.com>
13237
13238         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13239
13240         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
13241
13242 2004-04-29  Martin Baulig  <martin@ximian.com>
13243
13244         * class.cs (ConstructorInitializer.Resolve): Check whether the
13245         parent .ctor is accessible.  Fixes #52146.
13246
13247 2004-04-29  Martin Baulig  <martin@ximian.com>
13248
13249         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13250
13251         * statement.cs (Using.EmitLocalVariableDecls): Use
13252         TypeManager.idisposable_type, not typeof (IDisposable).
13253         (Foreach.EmitCollectionForeach): Added support for valuetypes.
13254
13255 2004-04-29  Martin Baulig  <martin@ximian.com>
13256
13257         * class.cs (Event.Define): Don't emit the field and don't set
13258         RTSpecialName and SpecialName for events on interfaces.  Fixes
13259         #57703. 
13260
13261 2004-04-29  Raja R Harinath  <rharinath@novell.com>
13262
13263         Refactor Attribute.ApplyAttributes.
13264         * attribute.cs (Attributable): New base class for objects that can
13265         have Attributes applied on them.
13266         (Attribute): Make AttributeUsage fields public.
13267         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
13268         (Attribute.IsInternalCall): New property.
13269         (Attribute.UsageAttr): Convert to a public read-only property.
13270         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
13271         (Attribute.ResolveType, Attribute.Resolve)
13272         (Attribute.ScanForIndexerName): Update to reflect changes.
13273         (Attribute.CheckAttributeTarget): Re-format.
13274         (Attribute.ApplyAttributes): Refactor, to various
13275         Attributable.ApplyAttributeBuilder methods.
13276         * decl.cs (MemberCore): Make Attributable.
13277         * class.cs (Accessor): Make Attributable.
13278         (MethodData.ApplyAttributes): Use proper attribute types, not
13279         attribute names.
13280         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
13281         (TypeContainer.ApplyAttributeBuilder)
13282         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
13283         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
13284         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
13285         (Operator.ApplyAttributeBuilder): New factored-out methods.
13286         * const.cs (Const.ApplyAttributeBuilder): Likewise.
13287         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
13288         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
13289         * parameter.cs (ParameterBase): New Attributable base class
13290         that can also represent Return types.
13291         (Parameter): Update to the changes.
13292
13293 2004-04-29  Jackson Harper  <jackson@ximian.com>
13294
13295         * driver.cs: Prefer the corlib system version when looking for
13296         assemblies in the GAC. This is still a hack, but its a better hack
13297         now.
13298         
13299 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
13300
13301         * decl.cs, enum.cs: Improved error 3005 reporting.
13302   
13303         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
13304         (related_symbols): New private member for list of symbols
13305         related to reported error/warning.
13306         
13307         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
13308
13309 2004-04-29  Martin Baulig  <martin@ximian.com>
13310
13311         * ecore.cs (Expression.Constantify): If we're an enum and
13312         TypeManager.TypeToCoreType() doesn't give us another type, use
13313         t.UnderlyingSystemType.  Fixes #56178.  
13314
13315 2004-04-29  Martin Baulig  <martin@ximian.com>
13316
13317         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
13318         interfaces and for each interface, only add members directly
13319         declared in that interface.  Fixes #53255.
13320
13321 2004-04-28  Martin Baulig  <martin@ximian.com>
13322
13323         * expression.cs (ConditionalLogicalOperator): Use a temporary
13324         variable for `left' to avoid that we evaluate it more than once;
13325         bug #52588.
13326
13327 2004-04-28  Martin Baulig  <martin@ximian.com>
13328
13329         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
13330         `void[]' (CS1547).
13331
13332 2004-04-28  Martin Baulig  <martin@ximian.com>
13333
13334         * statement.cs (LocalInfo.Resolve): Check whether the type is not
13335         void (CS1547).
13336
13337         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
13338         whether the type is not void (CS1547).
13339
13340 2004-04-28  Martin Baulig  <martin@ximian.com>
13341
13342         * expression.cs (Unary.DoResolveLValue): Override this and report
13343         CS0131 for anything but Operator.Indirection.
13344
13345 2004-04-28  Martin Baulig  <martin@ximian.com>
13346
13347         Committing a patch from Ben Maurer; see bug #50820.
13348
13349         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13350         check for classes.
13351
13352         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13353         classes.        
13354
13355 2004-04-28  Martin Baulig  <martin@ximian.com>
13356
13357         Committing a patch from Ben Maurer; see bug #50820.
13358
13359         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13360         check for classes.
13361
13362         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13363         classes.        
13364
13365 2004-04-28  Martin Baulig  <martin@ximian.com>
13366
13367         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
13368         (Block.AddLabel): Call DoLookupLabel() to only search in the
13369         current block.
13370
13371 2004-04-28  Martin Baulig  <martin@ximian.com>
13372
13373         * cfold.cs (ConstantFold.BinaryFold): Added special support for
13374         comparing StringConstants and NullLiterals in Equality and Inequality.
13375
13376 2004-04-28  Jackson Harper  <jackson@ximian.com>
13377
13378         * driver.cs: Attempt to load referenced assemblies from the
13379         GAC. This is the quick and dirty version of this method that
13380         doesnt take into account versions and just takes the first
13381         canidate found. Will be good enough for now as we will not have more
13382         then one version installed into the GAC until I update this method.
13383
13384 2004-04-28  Martin Baulig  <martin@ximian.com>
13385
13386         * typemanager.cs (TypeManager.CheckStructCycles): New public
13387         static method to check for cycles in the struct layout.
13388
13389         * rootcontext.cs (RootContext.PopulateTypes): Call
13390         TypeManager.CheckStructCycles() for each TypeContainer.
13391         [Note: We only need to visit each type once.]
13392
13393 2004-04-28  Martin Baulig  <martin@ximian.com>
13394
13395         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
13396
13397         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
13398         success and added `out object value'.  Use a `bool resolved' field
13399         to check whether we've already been called rather than
13400         `ConstantValue != null' since this breaks for NullLiterals.
13401
13402 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13403
13404         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
13405         setting of this flag, since the 'set' method may be non-public.
13406
13407 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13408
13409         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
13410         check on current_vector.Block.
13411
13412 2004-04-27  Martin Baulig  <martin@ximian.com>
13413
13414         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
13415         a field initializer.  Fixes #56459.
13416
13417 2004-04-27  Martin Baulig  <martin@ximian.com>
13418
13419         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
13420         we're not attempting to use an indexer.  Fixes #52154.
13421
13422 2004-04-27  Martin Baulig  <martin@ximian.com>
13423
13424         * statement.cs (Return): Don't create a return label if we don't
13425         need it; reverts my change from January 20th.  Thanks to Ben
13426         Maurer for this.
13427
13428 2004-04-27  Martin Baulig  <martin@ximian.com>
13429
13430         According to the spec, `goto' can only leave a nested scope, but
13431         never enter it.
13432
13433         * statement.cs (Block.LookupLabel): Only lookup in the current
13434         block, don't recurse into parent or child blocks.
13435         (Block.AddLabel): Check in parent and child blocks, report
13436         CS0140/CS0158 if we find a duplicate.
13437         (Block): Removed this indexer for label lookups.
13438         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
13439         this already does the error reporting for us.
13440
13441         * flowanalysis.cs
13442         (FlowBranching.UsageVector.Block): New public variable; may be null.
13443         (FlowBranching.CreateSibling): Added `Block' argument.
13444         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
13445         label for the target of a `goto' and check whether we're not
13446         leaving a `finally'.
13447
13448 2004-04-27  Martin Baulig  <martin@ximian.com>
13449
13450         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13451         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
13452         just for returns).
13453
13454 2004-04-27  Martin Baulig  <martin@ximian.com>
13455
13456         * statement.cs (Block.AddLabel): Also check for implicit blocks
13457         and added a CS0158 check.
13458
13459 2004-04-27  Martin Baulig  <martin@ximian.com>
13460
13461         * flowanalysis.cs (FlowBranchingLoop): New class.
13462         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
13463         UsageVector's instead of an ArrayList.
13464         (FlowBranching.Label): Likewise.
13465         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
13466         (FlowBranching.AddBreakVector): New method.
13467
13468 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
13469
13470         * attribute.cs: Small regression fix: only convert the type if we
13471         the type is different, fixes System.Drawing build.
13472
13473 2004-04-27  Martin Baulig  <martin@ximian.com>
13474
13475         * attribute.cs (Attribute.Resolve): If we have a constant value
13476         for a named field or property, implicity convert it to the correct
13477         type.
13478
13479 2004-04-27  Raja R Harinath  <rharinath@novell.com>
13480
13481         * statement.cs (Block.Block): Implicit blocks share
13482         'child_variable_names' fields with parent blocks.
13483         (Block.AddChildVariableNames): Remove.
13484         (Block.AddVariable): Mark variable as "used by a child block" in
13485         every surrounding block.
13486         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
13487         been used in a child block, complain about violation of "Invariant
13488         meaning in blocks" rule.
13489         * cs-parser.jay (declare_local_variables): Don't use
13490         AddChildVariableNames.
13491         (foreach_statement): Don't create an implicit block: 'foreach'
13492         introduces a scope.
13493
13494 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
13495
13496         * convert.cs (ImplicitNumericConversion): 0 is also positive when
13497         converting from 0L to ulong.  Fixes 57522.
13498
13499 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13500
13501         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
13502         derived class hides via 'new' keyword field from base class (test-242.cs).
13503         TODO: Handle this in the more general way.
13504         
13505         * class.cs (CheckBase): Ditto.
13506
13507 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13508
13509         * decl.cs (caching_flags): New member for storing cached values
13510         as bit flags.
13511         (MemberCore.Flags): New enum where bit flags for caching_flags
13512         are defined.
13513         (MemberCore.cls_compliance): Moved to caching_flags.
13514         (DeclSpace.Created): Moved to caching_flags.
13515
13516         * class.cs: Use caching_flags instead of DeclSpace.Created
13517         
13518 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
13519
13520         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
13521         if we are only a derived class, not a nested class.
13522
13523         * typemanager.cs: Same as above, but do this at the MemberLookup
13524         level (used by field and methods, properties are handled in
13525         PropertyExpr).   Allow for the qualified access if we are a nested
13526         method. 
13527
13528 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
13529
13530         * class.cs: Refactoring.
13531         (IMethodData): New inteface; Holds links to parent members
13532         to avoid member duplication (reduced memory allocation).
13533         (Method): Implemented IMethodData interface.
13534         (PropertyBase): New inner classes for get/set methods.
13535         (PropertyBase.PropertyMethod): Implemented IMethodData interface
13536         (Event): New inner classes for add/remove methods.
13537         (Event.DelegateMethod): Implemented IMethodData interface.
13538
13539         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
13540         EmitContext (related to class.cs refactoring).
13541
13542 2004-04-21  Raja R Harinath  <rharinath@novell.com>
13543
13544         * delegate.cs (Delegate.VerifyApplicability): If the number of
13545         arguments are the same as the number of parameters, first try to
13546         verify applicability ignoring  any 'params' modifier on the last
13547         parameter.
13548         Fixes #56442.
13549
13550 2004-04-16  Raja R Harinath  <rharinath@novell.com>
13551
13552         * class.cs (TypeContainer.AddIndexer): Use
13553         'ExplicitInterfaceName' to determine if interface name was
13554         explicitly specified.  'InterfaceType' is not initialized at this time.
13555         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
13556         Indexers array is already in the required order.  Initialize
13557         'IndexerName' only if there are normal indexers.
13558         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
13559         (TypeContainer.Emit): Emit DefaultMember attribute only if
13560         IndexerName is initialized.
13561         Fixes #56300.
13562
13563 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
13564
13565         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
13566         Fixes #57007
13567
13568 2004-04-15  Raja R Harinath  <rharinath@novell.com>
13569
13570         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
13571         attributes.
13572         Fix for #56456.
13573
13574         * attribute.cs (Attribute.Resolve): Check for duplicate named
13575         attributes.
13576         Fix for #56463.
13577
13578 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
13579
13580         * iterators.cs (MarkYield): track whether we are in an exception,
13581         and generate code accordingly.  Use a temporary value to store the
13582         result for our state.
13583
13584         I had ignored a bit the interaction of try/catch with iterators
13585         since their behavior was not entirely obvious, but now it is
13586         possible to verify that our behavior is the same as MS .NET 2.0
13587
13588         Fixes 54814
13589
13590 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
13591
13592         * iterators.cs: Avoid creating temporaries if there is no work to
13593         do. 
13594
13595         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
13596         Enumerations, use TypeManager.EnumToUnderlying and call
13597         recursively. 
13598
13599         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
13600         bug #57013
13601
13602         (This.Emit): Use EmitContext.EmitThis to emit our
13603         instance variable.
13604
13605         (This.EmitAssign): Ditto.
13606
13607         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
13608         codepaths, we will move all the functionality into
13609         Mono.CSharp.This 
13610
13611         (FieldExpr.EmitAssign): Ditto.
13612
13613         This fixes several hidden bugs that I uncovered while doing a code
13614         review of this today.
13615
13616         * codegen.cs (EmitThis): reworked so the semantics are more clear
13617         and also support value types "this" instances.
13618
13619         * iterators.cs: Changed so that for iterators in value types, we
13620         do not pass the value type as a parameter.  
13621
13622         Initialization of the enumerator helpers is now done in the caller
13623         instead of passing the parameters to the constructors and having
13624         the constructor set the fields.
13625
13626         The fields have now `assembly' visibility instead of private.
13627
13628 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
13629
13630         * expression.cs (Argument.Resolve): Check if fields passed as ref
13631         or out are contained in a MarshalByRefObject.
13632
13633         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
13634         another compiler type.
13635
13636 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
13637
13638         * class.cs (Indexer.Define): use the new name checking method.
13639         Also, return false on an error.
13640         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
13641         (is_identifier_[start/part]_character): make static.
13642
13643 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
13644
13645         * expression.cs (Binary.ResolveOperator): Do no append strings
13646         twice: since we can be invoked more than once (array evaluation)
13647         on the same concatenation, take care of this here.  Based on a fix
13648         from Ben (bug #56454)
13649
13650 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
13651
13652         * codegen.cs: Fix another case where CS1548 must be reported (when 
13653         delay-sign isn't specified and no private is available #56564). Fix
13654         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
13655         error when MCS is used on the MS runtime and we need to delay-sign 
13656         (which seems unsupported by AssemblyBuilder - see #56621).
13657
13658 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
13659
13660         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
13661         (TypeManager.ComputeNamespaces): Faster implementation for
13662         Microsoft runtime.
13663
13664         * compiler.csproj: Updated AssemblyName to mcs.
13665
13666 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
13667
13668         * rootcontext.cs: Add new types to the boot resolution.
13669
13670         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
13671         MulticastDelegate is not allowed.
13672
13673         * typemanager.cs: Add new types to lookup: System.TypedReference
13674         and ArgIterator.
13675
13676         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
13677         check for TypedReference or ArgIterator, they are not allowed. 
13678
13679         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
13680         makes us properly catch 1510 in some conditions (see bug 56016 for
13681         details). 
13682
13683 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
13684
13685         * CryptoConvert.cs: update from corlib version
13686         with endian fixes.
13687
13688 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
13689
13690         * class.cs (Indexer.Define): Check indexername declaration
13691
13692 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
13693
13694         * attribute.cs (IsClsCompliant): Fixed problem with handling
13695         all three states (compliant, not-compliant, undetected).
13696
13697 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
13698
13699         * attribute.cs (Attribute): Location is now public.
13700         (Resolve): Store resolved arguments (pos_values) in attribute class.
13701         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
13702         (GetClsCompliantAttributeValue): New method that gets
13703         CLSCompliantAttribute value.
13704         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
13705         if exists else null.
13706         (AttributeTester): New class for CLS-Compliant verification routines.
13707
13708         * class.cs (Emit): Add CLS-Compliant verification.
13709         (Method.GetSignatureForError): Implemented.
13710         (Constructor.GetSignatureForError): Implemented
13711         (Constructor.HasCompliantArgs): Returns if constructor has
13712         CLS-Compliant arguments.
13713         (Constructor.Emit): Override.
13714         (Construcor.IsIdentifierClsCompliant): New method; For constructors
13715         is needed to test only parameters.
13716         (FieldBase.GetSignatureForError): Implemented.
13717         (TypeContainer): New member for storing base interfaces.
13718         (TypeContainer.FindMembers): Search in base interfaces too.
13719
13720         * codegen.cs (GetClsComplianceAttribute): New method that gets
13721         assembly or module CLSCompliantAttribute value.
13722         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
13723         for assembly.
13724         (ModuleClass.Emit): Add error 3012 test.
13725
13726         * const.cs (Emit): Override and call base for CLS-Compliant tests.
13727
13728         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
13729         state for all decl types.
13730         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
13731         if CLS-Compliant tests are required.
13732         (IsClsCompliaceRequired): New method. Analyze whether code
13733         must be CLS-Compliant.
13734         (IsExposedFromAssembly): New method. Returns true when MemberCore
13735         is exposed from assembly.
13736         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
13737         value or gets cached value.
13738         (HasClsCompliantAttribute): New method. Returns true if MemberCore
13739         is explicitly marked with CLSCompliantAttribute.
13740         (IsIdentifierClsCompliant): New abstract method. This method is
13741         used to testing error 3005.
13742         (IsIdentifierAndParamClsCompliant): New method. Common helper method
13743         for identifier and parameters CLS-Compliant testing.
13744         (VerifyClsCompliance): New method. The main virtual method for
13745         CLS-Compliant verifications.
13746         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
13747         null. I don't know why is null (too many public members !).
13748         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
13749         and get value of first CLSCompliantAttribute that found.
13750
13751         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
13752         (VerifyClsCompliance): Override and add extra tests.
13753
13754         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
13755         clscheck- disable CLS-Compliant verification event if assembly is has
13756         CLSCompliantAttribute(true).
13757
13758         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
13759         ApllyAttribute is now called in emit section as in the other cases.
13760         Possible future Emit integration.
13761         (IsIdentifierClsCompliant): New override.
13762         (VerifyClsCompliance): New override.
13763         (GetEnumeratorName): Returns full enum name.
13764
13765         * parameter.cs (GetSignatureForError): Implemented.
13766
13767         * report.cs (WarningData): New struct for Warning message information.
13768         (LocationOfPreviousError): New method.
13769         (Warning): New method. Reports warning based on the warning table.
13770         (Error_T): New method. Reports error based on the error table.
13771
13772         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
13773         verifications are done here.
13774
13775         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
13776
13777         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
13778         CLSCompliantAttribute.
13779         (all_imported_types): New member holds all imported types from other
13780         assemblies.
13781         (LoadAllImportedTypes): New method fills static table with exported types
13782         from all referenced assemblies.
13783         (Modules): New property returns all assembly modules.
13784
13785 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
13786
13787         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
13788         throwing a parser error.
13789
13790         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
13791         which removes the hardcoded get_/set_ prefixes for properties, as
13792         IL allows for the properties to be named something else.  
13793
13794         Bug #56013
13795
13796         * expression.cs: Do not override operand before we know if it is
13797         non-null.  Fix 56207
13798
13799 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13800
13801         * typemanager.cs: support for pinned variables.
13802
13803 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13804
13805         * decl.cs, typemanager.cs: Avoid using an arraylist
13806         as a buffer if there is only one result set.
13807
13808 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13809
13810         * expression.cs: Make sure you cant call a static method
13811         with an instance expression, bug #56174.
13812
13813 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
13814
13815         * class.cs (IsDuplicateImplementation): Improve error reporting to
13816         flag 663 (method only differs in parameter modifier).
13817
13818         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
13819         in preprocessor directives.
13820
13821         * location.cs (LookupFile): Allow for the empty path.
13822
13823         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
13824         better approach for some of that patch, but its failing with the
13825         CharSet enumeration.  For now try/catch will do.
13826
13827         * typemanager.cs: Do not crash if a struct does not have fields.
13828         Fixes 56150.
13829
13830 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13831
13832         * expression.cs: cs0213, cant fix a fixed expression.
13833         fixes 50231.
13834
13835 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13836
13837         * cs-parser.jay: detect invalid embeded statements gracefully.
13838         bug #51113.
13839
13840 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13841
13842         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
13843         As a regex:
13844         s/
13845         the invocation type may not be a subclass of the tye of the item/
13846         The type of the item must be a subclass of the invocation item.
13847         /g
13848
13849         Fixes bug #50820.
13850
13851 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
13852
13853         * attribute.cs: Added methods to get a string and a bool from an
13854         attribute. Required to information from AssemblyKeyFileAttribute,
13855         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
13856         * codegen.cs: Modified AssemblyName creation to include support for
13857         strongnames. Catch additional exceptions to report them as CS1548.
13858         * compiler.csproj: Updated include CryptoConvert.cs.
13859         * compiler.csproj.user: Removed file - user specific configuration.
13860         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
13861         Mono.Security assembly. The original class is maintained and tested in
13862         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
13863         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
13864         like CSC 8.0 (C# v2) supports.
13865         * Makefile: Added CryptoConvert.cs to mcs sources.
13866         * rootcontext.cs: Added new options for strongnames.
13867
13868 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
13869
13870         * driver.cs: For --expect-error, report error code `2'
13871         if the program compiled with no errors, error code `1' if
13872         it compiled with an error other than the one expected.
13873
13874 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
13875
13876         * compiler.csproj: Updated for Visual Studio .NET 2003.
13877         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
13878         * compiler.sln: Updated for Visual Studio .NET 2003.
13879
13880 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
13881
13882         * expression.cs: Fix bug #47234. We basically need to apply the
13883         rule that we prefer the conversion of null to a reference type
13884         when faced with a conversion to 'object' (csc behaviour).
13885
13886 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13887
13888         * statement.cs: Shorter form for foreach, eliminates
13889         a local variable. r=Martin.
13890
13891 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13892
13893         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
13894         checks if we can use brtrue/brfalse to test for 0.
13895         * expression.cs: use the above in the test for using brtrue/brfalse.
13896         cleanup code a bit.
13897
13898 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13899
13900         * expression.cs: Rewrite string concat stuff. Benefits:
13901
13902         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
13903         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
13904         rather than a concat chain.
13905
13906         * typemanager.cs: Add lookups for more concat overloads.
13907
13908 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13909
13910         * expression.cs: Emit shorter il code for array init.
13911
13912         newarr
13913         dup
13914         // set 1
13915
13916         // set 2
13917
13918         newarr
13919         stloc.x
13920
13921         ldloc.x
13922         // set 1
13923
13924         ldloc.x
13925         // set 2
13926
13927 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
13928
13929         * statement.cs: Before, two switch blocks would be merged if the
13930         total size of the blocks (end_item - begin_item + 1) was less than
13931         two times the combined sizes of the blocks.
13932
13933         Now, it will only merge if after the merge at least half of the
13934         slots are filled.
13935
13936         fixes 55885.
13937
13938 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
13939
13940         * class.cs : csc build fix for GetMethods(). See bug #52503.
13941
13942 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
13943
13944         * expression.cs: Make sure fp comparisons work with NaN.
13945         This fixes bug #54303. Mig approved this patch a long
13946         time ago, but we were not able to test b/c the runtime
13947         had a related bug.
13948
13949 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
13950
13951         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
13952
13953 2004-03-19  Martin Baulig  <martin@ximian.com>
13954
13955         * class.cs (MemberCore.IsDuplicateImplementation): Report the
13956         error here and not in our caller.
13957
13958 2004-03-19  Martin Baulig  <martin@ximian.com>
13959
13960         * interface.cs: Completely killed this file.
13961         (Interface): We're now a TypeContainer and live in class.cs.
13962
13963         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
13964         argument; we're now also called for interfaces.
13965         (TypeContainer.DefineMembers): Allow this method being called
13966         multiple times.
13967         (TypeContainer.GetMethods): New public method; formerly known as
13968         Interface.GetMethod().  This is used by PendingImplementation.
13969         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
13970         it's now private and non-static.
13971         (Interface): Moved this here; it's now implemented similar to
13972         Class and Struct.
13973         (Method, Property, Event, Indexer): Added `bool is_interface'
13974         argument to their .ctor's.
13975         (MemberBase.IsInterface): New public field.
13976
13977         * cs-parser.jay: Create normal Method, Property, Event, Indexer
13978         instances instead of InterfaceMethod, InterfaceProperty, etc.
13979         (opt_interface_base): Removed; we now use `opt_class_base' instead.
13980         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
13981
13982 2004-03-19  Martin Baulig  <martin@ximian.com>
13983
13984         * class.cs (MethodCore.IsDuplicateImplementation): New private
13985         method which does the CS0111 checking.
13986         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
13987         Use IsDuplicateImplementation().
13988
13989 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
13990
13991         * decl.cs (FindMemberToOverride): New method to find the correct
13992         method or property to override in the base class.
13993         * class.cs
13994             - Make Method/Property use the above method to find the
13995               version in the base class.
13996             - Remove the InheritableMemberSignatureCompare as it is now
13997               dead code.
13998
13999         This patch makes large code bases much faster to compile, as it is
14000         O(n) rather than O(n^2) to do this validation.
14001
14002         Also, it fixes bug 52458 which is that nested classes are not
14003         taken into account when finding the base class member.
14004
14005         Reviewed/Approved by Martin.
14006
14007 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
14008
14009         * interface.cs: In all interface classes removed redundant
14010         member initialization.
14011
14012 2004-03-16  Martin Baulig  <martin@ximian.com>
14013
14014         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
14015
14016 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
14017
14018         * decl.cs (DefineTypeAndParents): New helper method to define a
14019         type's containers before the type itself is defined;  This is a
14020         bug exposed by the recent changes to Windows.Forms when an
14021         implemented interface was defined inside a class that had not been
14022         built yet.   
14023
14024         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
14025
14026         (Check): Loop correctly to report errors modifiers
14027         (UNSAFE was not in the loop, since it was the same as TOP).
14028
14029         * interface.cs: Every interface member now takes a ModFlags,
14030         instead of a "is_new" bool, which we set on the base MemberCore. 
14031
14032         Every place where we called "UnsafeOk" in the interface, now we
14033         call the proper member (InterfaceMethod.UnsafeOK) instead to get
14034         the unsafe settings from the member declaration instead of the
14035         container interface. 
14036
14037         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
14038
14039         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
14040         `set_indexer_name' to the pending bits (one per type).
14041
14042         We fixed a bug today that was picking the wrong method to
14043         override, since for properties the existing InterfaceMethod code
14044         basically ignored the method name.  Now we make sure that the
14045         method name is one of the valid indexer names.
14046
14047 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
14048  
14049         * support.cs (SeekableStreamReader): Keep track of stream byte
14050         positions and don't mix them with character offsets to the buffer.
14051
14052         Patch from Gustavo Giráldez
14053
14054 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
14055
14056         * interface.cs (InterfaceSetGetBase): Removed double member
14057         initialization, base class does it as well.
14058
14059 2004-03-13  Martin Baulig  <martin@ximian.com>
14060
14061         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
14062         when compiling corlib.
14063
14064 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
14065
14066         * convert.cs (ExplicitConversion): We were reporting an error on
14067         certain conversions (object_type source to a value type, when the
14068         expression was `null') before we had a chance to pass it through
14069         the user defined conversions.
14070
14071         * driver.cs: Replace / and \ in resource specifications to dots.
14072         Fixes 50752
14073
14074         * class.cs: Add check for duplicate operators.  Fixes 52477
14075
14076 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
14077
14078         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
14079         that are in the middle of the statements, not only at the end.
14080         Fixes #54987
14081
14082         * class.cs (TypeContainer.AddField): No longer set the
14083         `HaveStaticConstructor' flag, now we call it
14084         `UserDefineStaticConstructor' to diferentiate the slightly
14085         semantic difference.
14086
14087         The situation is that we were not adding BeforeFieldInit (from
14088         Modifiers.TypeAttr) to classes that could have it.
14089         BeforeFieldInit should be set to classes that have no static
14090         constructor. 
14091
14092         See:
14093
14094         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
14095
14096         And most importantly Zoltan's comment:
14097
14098         http://bugzilla.ximian.com/show_bug.cgi?id=44229
14099
14100         "I think beforefieldinit means 'it's ok to initialize the type sometime 
14101          before its static fields are used', i.e. initialization does not need
14102          to be triggered by the first access to the type. Setting this flag
14103          helps the JIT to compile better code, since it can run the static
14104          constructor at JIT time, and does not need to generate code to call it
14105          (possibly lots of times) at runtime. Unfortunately, mcs does not set
14106          this flag for lots of classes like String. 
14107          
14108          csc sets this flag if the type does not have an explicit static 
14109          constructor. The reasoning seems to be that if there are only static
14110          initalizers for a type, and no static constructor, then the programmer
14111          does not care when this initialization happens, so beforefieldinit
14112          can be used.
14113          
14114          This bug prevents the AOT compiler from being usable, since it 
14115          generates so many calls to mono_runtime_class_init that the AOT code
14116          is much slower than the JITted code. The JITted code is faster, 
14117          because it does not generate these calls if the vtable is type is
14118          already initialized, which is true in the majority of cases. But the
14119          AOT compiler can't do this."
14120
14121 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
14122
14123         * class.cs (MethodData.Emit): Refactor the code so symbolic
14124         information is generated for destructors;  For some reasons we
14125         were taking a code path that did not generate symbolic information
14126         before. 
14127
14128 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14129
14130         * class.cs: Create a Constructor.CheckBase method that
14131         takes care of all validation type code. The method
14132         contains some code that was moved from Define.
14133
14134         It also includes new code that checks for duplicate ctors.
14135         This fixes bug #55148.
14136
14137 2004-03-09  Joshua Tauberer <tauberer@for.net>
14138
14139         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
14140         a { ... }-style array creation invokes EmitStaticInitializers
14141         which is not good for reference-type arrays.  String, decimal
14142         and now null constants (NullCast) are not counted toward
14143         static initializers.
14144
14145 2004-03-05  Martin Baulig  <martin@ximian.com>
14146
14147         * location.cs (SourceFile.HasLineDirective): New public field;
14148         specifies whether the file contains or is referenced by a "#line"
14149         directive.
14150         (Location.DefineSymbolDocuments): Ignore source files which
14151         either contain or are referenced by a "#line" directive.        
14152
14153 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
14154
14155         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
14156         direct access to our parent, so check the method inline there.
14157
14158 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14159
14160         * expression.cs (Invocation.EmitCall): Miguel's last commit
14161         caused a regression. If you had:
14162
14163             T t = null;
14164             t.Foo ();
14165
14166         In Foo the implict this would be null.
14167
14168 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
14169
14170         * expression.cs (Invocation.EmitCall): If the method is not
14171         virtual, do not emit a CallVirt to it, use Call.
14172
14173         * typemanager.cs (GetFullNameSignature): Improve the method to
14174         cope with ".ctor" and replace it with the type name.
14175
14176         * class.cs (ConstructorInitializer.Resolve): Now the method takes
14177         as an argument the ConstructorBuilder where it is being defined,
14178         to catch the recursive constructor invocations.
14179
14180 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
14181
14182         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
14183         routines to check if a type is an enumerable/enumerator allow
14184         classes that implement the IEnumerable or IEnumerator interfaces.
14185
14186         * class.cs (Property, Operator): Implement IIteratorContainer, and
14187         implement SetYields.
14188
14189         (Property.Define): Do the block swapping for get_methods in the
14190         context of iterators.   We need to check if Properties also
14191         include indexers or not.
14192
14193         (Operator): Assign the Block before invoking the
14194         OperatorMethod.Define, so we can trigger the Iterator code
14195         replacement. 
14196
14197         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
14198         Property and Operator classes are not created when we parse the
14199         declarator but until we have the block completed, so we use a
14200         singleton SimpleIteratorContainer.Simple to flag whether the
14201         SetYields has been invoked.
14202
14203         We propagate this setting then to the Property or the Operator to
14204         allow the `yield' to function.
14205
14206 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
14207
14208         * codegen.cs: Implemented attribute support for modules.
14209         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
14210         Assembly/Module functionality.
14211
14212         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
14213         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
14214         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
14215
14216 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
14217
14218         * interface.cs (FindMembers): The operation is performed on all base
14219         interfaces and not only on the first. It is required for future CLS Compliance patch.
14220
14221 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14222
14223         * statement.cs, codegen.cs:
14224         This patch deals with patterns such as:
14225
14226         public class List : IEnumerable {
14227
14228                 public MyEnumerator GetEnumerator () {
14229                         return new MyEnumerator(this);
14230                 }
14231
14232                 IEnumerator IEnumerable.GetEnumerator () {
14233                         ...
14234                 }
14235                 
14236                 public struct MyEnumerator : IEnumerator {
14237                         ...
14238                 }
14239         }
14240
14241         Before, there were a few things we did wrong:
14242         1) we would emit callvirt on a struct, which is illegal
14243         2) we emited ldarg when we needed to emit ldarga
14244         3) we would mistakenly call the interface methods on an enumerator
14245         type that derived from IEnumerator and was in another assembly. For example:
14246
14247         public class MyEnumerator : IEnumerator
14248
14249         Would have the interface methods called, even if there were public impls of the
14250         method. In a struct, this lead to invalid IL code.
14251
14252 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
14253
14254         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
14255           renamed to Emit.
14256
14257         * delegate.cs (Define): Fixed crash when delegate type is undefined.
14258
14259 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
14260
14261         * cs-parser.jay: Fix small regression: we were not testing V2
14262         compiler features correctly.
14263
14264         * interface.cs: If the emit context is null, then create one
14265
14266 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
14267
14268         * decl.cs (GetSignatureForError): New virtual method to get full name
14269           for error messages.
14270
14271         * attribute.cs (IAttributeSupport): New interface for attribute setting.
14272           Now it is possible to rewrite ApplyAttributes method to be less if/else.
14273
14274         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
14275           Duplicated members and code in these classes has been removed.
14276           Better encapsulation in these classes.
14277
14278 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
14279
14280         * assign.cs (Assign.DoResolve): When dealing with compound
14281         assignments, there is a new rule in ECMA C# 2.4 (might have been
14282         there before, but it is documented here) that states that in:
14283
14284         a op= b;
14285
14286         If b is of type int, and the `op' is a shift-operator, then the
14287         above is evaluated as:
14288
14289         a = (int) a op b 
14290
14291         * expression.cs (Binary.ResolveOperator): Instead of testing for
14292         int/uint/long/ulong, try to implicitly convert to any of those
14293         types and use that in pointer arithmetic.
14294
14295         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
14296         method to print information for from the type, not from the
14297         null-method we were given.
14298
14299 2004-02-01  Duncan Mak  <duncan@ximian.com>
14300
14301         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
14302         parsing for cmd, fixes bug #53694.
14303
14304 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
14305
14306         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
14307         in the member name duplication tests. Property and operator name duplication
14308         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
14309
14310 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
14311
14312         * interface.cs (PopulateMethod): Fixed crash when interface method
14313         returns not existing type (error test cs0246-3.cs).
14314
14315 2004-02-02  Ravi Pratap M <ravi@ximian.com>
14316
14317         * cs-parser.jay (interface_accessors): Re-write actions to also
14318         store attributes attached to get and set methods. Fix spelling
14319         while at it.
14320
14321         (inteface_property_declaration): Modify accordingly.
14322
14323         (InterfaceAccessorInfo): New helper class to store information to pass
14324         around between rules that use interface_accessors.
14325
14326         * interface.cs (Emit): Apply attributes on the get and set
14327         accessors of properties and indexers too.
14328
14329         * attribute.cs (ApplyAttributes): Modify accordingly to use the
14330         right MethodBuilder when applying attributes to the get and set accessors.
14331
14332 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
14333
14334         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
14335
14336 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
14337
14338         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
14339
14340 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
14341
14342         * cs-parser.jay: Remove YIELD token, instead use the new grammar
14343         changes that treat `yield' specially when present before `break'
14344         or `return' tokens.
14345
14346         * cs-tokenizer.cs: yield is no longer a keyword.
14347
14348 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
14349
14350         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
14351         setting for default constructors.
14352         For default constructors are almost every time set wrong Modifier. The
14353         generated IL code has been alright. But inside mcs this values was
14354         wrong and this was reason why several of my CLS Compliance tests
14355         failed.
14356
14357 2004-01-22  Martin Baulig  <martin@ximian.com>
14358
14359         * cs-parser.jay (namespace_or_type_name): Return an Expression,
14360         not a QualifiedIdentifier.  This is what `type_name_expression'
14361         was previously doing.
14362         (type_name_expression): Removed; the code is now in
14363         `namespace_or_type_name'.
14364         (qualified_identifier): Removed, use `namespace_or_type_name'
14365         instead.
14366         (QualifiedIdentifier): Removed this class.      
14367
14368 2004-01-22  Martin Baulig  <martin@ximian.com>
14369
14370         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
14371         not a string as alias name.
14372
14373 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
14374
14375         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
14376         #52730 bug, and instead compute correctly the need to use a
14377         temporary variable when requesting an address based on the
14378         static/instace modified of the field and the constructor.
14379  
14380 2004-01-21  Martin Baulig  <martin@ximian.com>
14381
14382         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
14383         class and namespace before looking up aliases.  Fixes #52517.
14384
14385 2004-01-21  Martin Baulig  <martin@ximian.com>
14386
14387         * flowanalysis.cs (UsageVector.Merge): Allow variables being
14388         assinged in a 'try'; fixes exception4.cs.
14389
14390 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14391         * class.cs : Implemented parameter-less constructor for TypeContainer
14392
14393         * decl.cs: Attributes are now stored here. New property OptAttributes
14394
14395         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
14396
14397         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
14398
14399 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14400
14401         * typemanager.cs (CSharpSignature): Now reports also inner class name.
14402           (CSharpSignature): New method for indexer and property signature.
14403
14404 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14405
14406         * pending.cs (IsVirtualFilter): Faster implementation.
14407
14408 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14409
14410         * typemanager.cs: Avoid inclusion of same assembly more than once.
14411
14412 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14413
14414         * cs-parser.jay: Fixed problem where the last assembly attribute
14415           has been applied also to following declaration (class, struct, etc.)
14416           
14417 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14418
14419         * class.cs: Added error CS0538, CS0539 reporting.
14420         Fixed crash on Microsoft runtime when field type is void.
14421
14422         * cs-parser.jay: Added error CS0537 reporting.
14423
14424         * pending.cs: Added error CS0535 reporting.
14425         Improved error report for errors CS0536, CS0534.
14426
14427 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
14428
14429         Merge a few bits from the Anonymous Method MCS tree.
14430
14431         * statement.cs (ToplevelBlock): New class for toplevel methods,
14432         will hold anonymous methods, lifted variables.
14433
14434         * cs-parser.jay: Create toplevel blocks for delegates and for
14435         regular blocks of code. 
14436
14437 2004-01-20  Martin Baulig  <martin@ximian.com>
14438
14439         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
14440         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
14441         and `NeedExplicitReturn'; added `IsLastStatement'.
14442         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
14443         have a `ReturnLabel' or we're not unreachable.
14444
14445         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
14446         child's reachability; don't just override ours with it.  Fixes
14447         #58058 (lluis's example).
14448         (FlowBranching): Added public InTryOrCatch(), InCatch(),
14449         InFinally(), InLoop(), InSwitch() and
14450         BreakCrossesTryCatchBoundary() methods.
14451
14452         * statement.cs (Return): Do all error checking in Resolve().
14453         Unless we are the last statement in a top-level block, always
14454         create a return label and jump to it.
14455         (Break, Continue): Do all error checking in Resolve(); also make
14456         sure we aren't leaving a `finally'.
14457         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
14458         statement in a top-level block.
14459         (Block.Flags): Added `IsDestructor'.
14460         (Block.IsDestructor): New public property.
14461
14462 2004-01-20  Martin Baulig  <martin@ximian.com>
14463
14464         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
14465
14466 2004-01-20  Martin Baulig  <martin@ximian.com>
14467
14468         * statement.cs (Statement.ResolveUnreachable): New public method.
14469         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
14470         (Block.Resolve): Resolve unreachable statements.
14471
14472 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14473
14474         * expression.cs: We need to fix the case where we do
14475         not have a temp variable here.
14476
14477         * assign.cs: Only expression compound assignments need
14478         temporary variables.
14479
14480 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14481
14482         * flowanalysis.cs: Reduce memory allocation in a few ways:
14483           - A block with no variables should not allocate a bit
14484             vector for itself.
14485           - A method with no out parameters does not need any tracking
14486             for assignment of the parameters, so we need not allocate
14487             any data for it.
14488           - The arrays:
14489                 public readonly Type[] VariableTypes;
14490                 public readonly string[] VariableNames;
14491             Are redundant. The data is already stored in the variable
14492             map, so we need not allocate another array for it.
14493           - We need to add alot of checks for if (params | locals) == null
14494             due to the first two changes.
14495
14496 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
14497
14498         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
14499         implement IMemoryLocation, we store a copy on a local variable and
14500         take the address of it.  Patch from Benjamin Jemlich
14501
14502         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
14503         to use a special "type_name_expression" rule which reduces the
14504         number of "QualifiedIdentifier" classes created, and instead
14505         directly creates MemberAccess expressions.
14506
14507 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
14508
14509         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
14510         that fixes #52853.  Null literal assignment to ValueType
14511
14512         * class.cs (MethodData.Emit): Instead of checking the name of the
14513         method to determine if its a destructor, create a new derived
14514         class from Method called Destructor, and test for that.  
14515
14516         * cs-parser.jay: Create a Destructor object instead of a Method.  
14517
14518         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
14519
14520         Fixes: 52933
14521
14522 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
14523
14524         * expression.cs (Binary.ResolveOperator): Perform an implicit
14525         conversion from MethodGroups to their delegate types on the
14526         Addition operation.
14527
14528         * delegate.cs: Introduce a new class DelegateCreation that is the
14529         base class for `NewDelegate' and `ImplicitDelegateCreation',
14530         factor some code in here.
14531
14532         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
14533         conversion from MethodGroups to compatible delegate types. 
14534
14535         * ecore.cs (Expression.Resolve): Do not flag error 654
14536         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
14537         we allow conversions from MethodGroups to delegate types now.
14538
14539         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
14540         assignments in v2 either.
14541
14542 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
14543
14544         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
14545         static read-only fields in ctors.
14546
14547         Applied patch from Benjamin Jemlich 
14548
14549         * expression.cs (UnaryMutator): Avoid leaking local variables. 
14550
14551 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
14552
14553         * cs-tokenizer.cs (IsCastToken): Allow the various native types
14554         here to return true, as they can be used like this:
14555
14556                 (XXX) int.MEMBER ()
14557
14558         Fixed 49836 and all the other dups
14559
14560 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
14561
14562         * driver.cs: Implement /win32res and /win32icon.
14563
14564 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
14565
14566         * cs-parser.jay: Add a rule to improve error handling for the
14567         common mistake of placing modifiers after the type.
14568
14569 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
14570
14571         * cs-parser.jay (interface_event_declaration): Catch
14572         initialization of events on interfaces, and report cs0068
14573
14574         * cs-parser.jay (interface_event_declaration): Catch
14575         initialization of events. 
14576
14577         * ecore.cs: Better report missing constructors.
14578
14579         * expression.cs (Binary.ResolveOperator): My previous bug fix had
14580         the error reporting done in the wrong place.  Fix.
14581
14582         * expression.cs (Binary.ResolveOperator): Catch the 
14583         operator + (E x, E y) error earlier, and later allow for implicit
14584         conversions in operator +/- (E e, U x) from U to the underlying
14585         type of E.
14586
14587         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
14588         52596, if the container class is abstract, the default constructor
14589         is protected otherwise its public (before, we were always public).
14590
14591         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
14592         fixed statement.
14593
14594         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
14595         Jemlich that fixes bug #52597, MCS was generating invalid code for
14596         idisposable structs.   Thanks to Ben for following up with this
14597         bug as well.
14598
14599 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
14600
14601         * driver.cs: Allow assemblies without code to be generated, fixes
14602         52230.
14603
14604 2004-01-07  Nick Drochak <ndrochak@gol.com>
14605
14606         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
14607
14608 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
14609
14610         * cs-parser.jay: Add rules to improve error reporting if fields or
14611         methods are declared at the namespace level (error 116)
14612
14613         * Add rules to catch event add/remove
14614
14615 2004-01-04  David Sheldon <dave-mono@earth.li>
14616
14617   * expression.cs: Added matching ")" to error message for 
14618   CS0077
14619
14620 2004-01-03 Todd Berman <tberman@gentoo.org>
14621
14622         * ecore.cs, attribute.cs:
14623         Applying fix from #52429.
14624
14625 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14626
14627         * ecore.cs, expression.cs, statement.cs:
14628         Total rewrite of how we handle branching. We
14629         now handle complex boolean expressions with fewer
14630         jumps. As well if (x == 0) no longer emits a ceq.
14631
14632         if (x is Foo) is much faster now, because we generate
14633         better code.
14634
14635         Overall, we get a pretty big improvement on our benchmark
14636         tests. The code we generate is smaller and more readable.
14637
14638         I did a full two-stage bootstrap. The patch was reviewed
14639         by Martin and Miguel.
14640
14641 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14642
14643         * cs-parser.jay: Make primary_expression not take a QI.
14644         we dont need this because the member_access rule covers
14645         us here. So we replace the rule with just IDENTIFIER.
14646
14647         This has two good effects. First, we remove a s/r conflict.
14648         Second, we allocate many fewer QualifiedIdentifier objects.
14649
14650 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14651
14652         * attribute.cs: Handle MarshalAs attributes as pseudo, and
14653         set the correct information via SRE. This prevents
14654         hanging on the MS runtime. Fixes #29374.
14655
14656 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14657
14658         * convert.cs: correctly handle conversions to value types
14659         from Enum and ValueType as unboxing conversions.
14660
14661         Fixes bug #52569. Patch by Benjamin Jemlich.
14662
14663 2004-01-02  Ravi Pratap  <ravi@ximian.com>
14664
14665         * expression.cs (BetterConversion): Prefer int -> uint
14666         over int -> ulong (csc's behaviour). This fixed bug #52046.
14667
14668 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
14669
14670         * decl.cs (MemberCache.FindMembers): now returns a
14671         MemberInfo [].
14672
14673         * typemanager.cs: In general, go with with ^^.
14674         (CopyNewMethods): take an IList.
14675         (RealMemberLookup): Only allocate an arraylist
14676         if we copy from two sets of methods.
14677
14678         This change basically does two things:
14679         1) Fewer array lists allocated due to CopyNewMethods.
14680         2) the explicit cast in MemberList costed ALOT.
14681
14682 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
14683
14684         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
14685         a hashtable to avoid needless string allocations when an identifier is
14686         used more than once (the common case).
14687
14688 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14689
14690         * pending.cs: MS's TypeBuilder.GetInterfaces ()
14691         is broken, it will not return anything. So, we
14692         have to use the information we have in mcs to
14693         do the task.
14694
14695         * typemanager.cs: Add a cache for GetInterfaces,
14696         since this will now be used more often (due to ^^)
14697
14698         (GetExplicitInterfaces) New method that gets the
14699         declared, not effective, interfaces on a type
14700         builder (eg, if you have interface IFoo, interface
14701         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
14702         { IBar }.
14703
14704         This patch makes MCS able to bootstrap itself on
14705         Windows again.
14706
14707 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14708
14709         * expression.cs: Remove the Nop's that Miguel put
14710         in by mistake.
14711
14712 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14713
14714         * report.cs, codegen.cs: Give the real stack trace to
14715         the error when an exception is thrown.
14716
14717 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14718
14719         * decl.cs: only allocate hashtables for ifaces if 
14720         it is an iface!
14721
14722 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14723
14724         * expression.cs: fix the error from cs0121-2.cs
14725         (a parent interface has two child interfaces that
14726         have a function with the same name and 0 params
14727         and the function is called through the parent).
14728
14729 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14730
14731         * class.cs, rootcontext.cs, typmanager.cs: do not
14732         leak pointers.
14733
14734 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14735
14736         * codegen.cs: remove stack for the ec flow branching.
14737         It is already a linked list, so no need.
14738
14739 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14740
14741         * Makefile: Allow custom profiler here.
14742
14743 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
14744
14745         * typemanager.cs (LookupType):
14746           - Use a static char [], because split takes
14747             a param array for args, so it was allocating
14748             every time.
14749           - Do not store true in a hashtable, it boxes.
14750
14751 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
14752
14753         * flowanalysis.cs: bytify common enums.
14754
14755 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14756
14757         * modifiers.cs: Add a new set of flags for the
14758         flags allowed on explicit interface impls.
14759         * cs-parser.jay: catch the use of modifiers in
14760         interfaces correctly.
14761         * class.cs: catch private void IFoo.Blah ().
14762
14763         All related to bug #50572.
14764
14765 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14766
14767         * decl.cs: Rewrite the consistant accessability checking.
14768         Accessability is not linear, it must be implemented in
14769         a tableish way. Fixes #49704.
14770
14771 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14772
14773         * expression.cs: Handle negation in a checked context.
14774         We must use subtraction from zero. Fixes #38674.
14775
14776 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14777
14778         * class.cs: Ignore static void main in DLLs.
14779         * rootcontext.cs: Handle the target type here,
14780         since we are have to access it from class.cs
14781         * driver.cs: account for the above.
14782
14783 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14784
14785         * report.cs: Give line numbers and files if available.
14786
14787 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
14788
14789         * driver.cs: Implement /addmodule.
14790
14791         * typemanager.cs:  Change 'modules' field so it now contains Modules not
14792         ModuleBuilders.
14793
14794 2003-12-20  Martin Baulig  <martin@ximian.com>
14795
14796         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
14797         (FieldBase.IsAssigned): Removed this field.
14798         (FieldBase.SetAssigned): New public method.
14799         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
14800
14801 2003-12-20  Martin Baulig  <martin@ximian.com>
14802
14803         * expression.cs (LocalVariableReference.DoResolve): Don't set
14804         `vi.Used' if we're called from DoResolveLValue().
14805
14806         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
14807         returns the usage vector it just merged into the current one -
14808         pass this one to UsageWarning().
14809         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
14810         of the `EmitContext', don't call this recursively on our children.
14811
14812 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
14813
14814         * driver.cs: Implement /target:module.
14815
14816 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
14817
14818         * support.cs (CharArrayHashtable): New helper class.
14819
14820         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
14821         char arrays, not strings, so we can avoid creating a string in
14822         consume_identifier if the identifier is a keyword.
14823
14824 2003-12-16  Martin Baulig  <martin@ximian.com>
14825
14826         * statement.cs (LocalInfo.Assigned): Removed this property.
14827         (LocalInfo.Flags): Removed `Assigned'.
14828         (LocalInfo.IsAssigned): New public method; takes the EmitContext
14829         and uses flow analysis.
14830         (Block.UsageWarning): Made this method private.
14831         (Block.Resolve): Call UsageWarning() if appropriate.
14832
14833         * expression.cs (LocalVariableReference.DoResolve): Always set
14834         LocalInfo.Used here.
14835
14836 2003-12-13  Martin Baulig  <martin@ximian.com>
14837
14838         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
14839         any value here; we're now using flow analysis to figure out
14840         whether a statement/block returns a value.
14841
14842 2003-12-13  Martin Baulig  <martin@ximian.com>
14843
14844         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
14845         working again.
14846         (FlowBranching.MergeFinally): Don't call
14847         `branching.CheckOutParameters()' here, this is called in
14848         MergeTopBlock().
14849         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
14850         when adding the `finally' vector.       
14851
14852 2003-12-13  Martin Baulig  <martin@ximian.com>
14853
14854         * flowanalysis.cs
14855         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
14856         actually work and also fix #48962.
14857
14858 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14859
14860         * decl.cs: Do not check System.Object for nested types,
14861         since we know it does not have any. Big bang for buck:
14862
14863         BEFORE:
14864            Run 1:   8.35 seconds
14865            Run 2:   8.32 seconds
14866            corlib:  17.99 seconds
14867         AFTER:
14868            Run 1:   8.17 seconds
14869            Run 2:   8.17 seconds
14870            corlib:  17.39 seconds
14871
14872 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14873
14874         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
14875         time we are returning 0 members, so we save alot here.
14876
14877 2003-12-11  Martin Baulig  <martin@ximian.com>
14878
14879         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
14880         `MergeChild()', also just take the `FlowBranching' as argument;
14881         call Merge() on it and return the result.
14882         (FlowBranching.Merge): We don't need to do anything if we just
14883         have one sibling.
14884
14885 2003-12-11  Martin Baulig  <martin@ximian.com>
14886
14887         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
14888         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
14889         Maurer for this idea.
14890
14891 2003-12-11  Martin Baulig  <martin@ximian.com>
14892
14893         * flowanalysis.cs (MergeResult): This class is now gone; we now
14894         use the `UsageVector' for this.  The reason for this is that if a
14895         branching just has one sibling, we don't need to "merge" them at
14896         all - that's the next step to do.
14897         (FlowBranching.Merge): We now return a `UsageVector' instead of a
14898         `MergeResult'.
14899
14900 2003-12-11  Martin Baulig  <martin@ximian.com>
14901
14902         Reworked flow analyis and made it more precise and bug-free.  The
14903         most important change is that we're now using a special `Reachability'
14904         class instead of having "magic" meanings of `FlowReturns'.  I'll
14905         do some more cleanups and optimizations and also add some more
14906         documentation this week.
14907
14908         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
14909         largely reworked this class.
14910         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
14911         the new `Reachability' class instead of having "magic" values here.
14912         (FlowBranching): We're now using an instance of `Reachability'
14913         instead of having separate `Returns', `Breaks' etc. fields.
14914
14915         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
14916         based on flow analysis; ignore the return value of block.Emit ().
14917
14918 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
14919
14920         * driver.cs typemanager.cs: Find the mono extensions to corlib even
14921         if they are private.
14922
14923 2003-12-09  Martin Baulig  <martin@ximian.com>
14924
14925         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
14926         call them directly on the UsageVector.
14927
14928 2003-12-09  Martin Baulig  <martin@ximian.com>
14929
14930         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
14931         Changed return type from `FlowReturns' to `Reachability'.
14932
14933 2003-12-09  Martin Baulig  <martin@ximian.com>
14934
14935         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
14936         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
14937         `Reachable' fields with a single `Reachability' one.
14938
14939 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
14940
14941         * class.cs (FindMembers): Remove foreach's.
14942
14943         Bootstrap times:
14944
14945         BEFORE
14946                 Run 1:   8.74 seconds
14947                 Run 2:   8.71 seconds
14948
14949         AFTER
14950                 Run 1:   8.64 seconds
14951                 Run 2:   8.58 seconds
14952
14953
14954 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
14955
14956         * cs-parser.jay:
14957         * gen-treedump.cs:
14958         * statement.cs:
14959         This patch does a few things:
14960                 1. EmptyStatement is now a singleton, so it is never reallocated.
14961                 2. All blah is EmptyStatement constructs have been changed to
14962                    blah == EmptyStatement.Value, which is much faster and valid
14963                    now that EmptyStatement is a singleton.
14964                 3. When resolving a block, rather than allocating a new array for
14965                    the non-empty statements, empty statements are replaced with
14966                    EmptyStatement.Value
14967                 4. Some recursive functions have been made non-recursive.
14968         Mainly the performance impact is from (3), however (1) and (2) are needed for
14969         this to work. (4) does not make a big difference in normal situations, however
14970         it makes the profile look saner.
14971
14972         Bootstrap times:
14973
14974         BEFORE
14975         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
14976         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
14977         Total memory allocated: 56397 KB
14978
14979         AFTER
14980         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
14981         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
14982         Total memory allocated: 55666 KB
14983
14984 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
14985
14986         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
14987         than the hashtable in a hashtable version
14988
14989         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
14990         we always end up concating a string. This results in a huge perf
14991         loss, because many strings have to be tracked by the GC. In this
14992         patch, we first use a hashtable that works with two keys, so that
14993         the strings do not need to be concat'ed.
14994
14995         Bootstrap times:
14996         BEFORE
14997                 Run 1:   8.74 seconds
14998                 Run 2:   8.71 seconds
14999
15000         AFTER
15001                 Run 1:   8.65 seconds
15002                 Run 2:   8.56 seconds
15003
15004 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15005
15006         * Makefile: Add a new target `do-time' that does a quick and simple
15007         profile, leaving easy to parse output.
15008
15009 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
15010
15011         * codegen.cs (Init): Create the dynamic assembly with 
15012         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
15013
15014 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15015
15016         * support.cs: Make the PtrHashtable use only one
15017         instance of its comparer.
15018
15019 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
15020
15021         * typemanager.cs: Fix lookup of GetNamespaces.
15022
15023 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
15024
15025         * expression.cs: Removed redundant line.
15026
15027         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
15028         ArrayLists, use for loops with bounds.  
15029
15030         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
15031         arraylist.
15032
15033         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
15034         arraylists, use for loop with bounds.
15035
15036         The above three changes give us a 0.071 second performance
15037         improvement out of 3.294 seconds down to 3.223.  On my machine
15038         the above changes reduced the memory usage by 1,387 KB during
15039         compiler bootstrap.
15040
15041         * cs-parser.jay (QualifiedIdentifier): New class used to represent
15042         QualifiedIdentifiers.  Before we created a new string through
15043         concatenation, and mostly later on, the result would be
15044         manipulated by DecomposeQI through string manipulation.
15045
15046         This reduced the compiler memory usage for bootstrapping from
15047         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
15048         compile times in 0.05 seconds.
15049
15050 2003-11-28  Dick Porter  <dick@ximian.com>
15051
15052         * support.cs: Do string compares with the Invariant culture.
15053
15054         * rootcontext.cs: 
15055         * gen-treedump.cs: 
15056         * expression.cs: 
15057         * driver.cs: 
15058         * decl.cs: 
15059         * codegen.cs: 
15060         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
15061         the comparison is done with the Invariant culture.
15062
15063 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
15064
15065         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
15066         GetEnumerator method.
15067
15068         (ProbeCollectionType): Iterate starting at the most specific type
15069         upwards looking for a GetEnumerator
15070
15071         * expression.cs: Shift count can be up to 31 for int/uint and 63
15072         for long/ulong.
15073
15074 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
15075
15076         * statement.cs (Block.LookupLabel): Also look for the label on the
15077         children blocks.  Use a hash table to keep track of visited
15078         nodes. 
15079
15080         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
15081         we actually did transform the other operand, otherwise fall back
15082         to the common codepath that casts to long.
15083
15084         * cs-tokenizer.cs: Use the same code pattern as the int case.
15085         Maybe I should do the parsing myself, and avoid depending on the
15086         Parse routines to get this done.
15087
15088 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
15089
15090         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15091         which fixes bug 51347.  This time test it.
15092
15093         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
15094         attributes for example can not tell the difference between these.
15095         The difference was only a syntax feature of the language. 
15096
15097         * attribute.cs: Apply attributes to delegates.
15098
15099         * delegate.cs: Call the apply attributes method.
15100
15101 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
15102
15103         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
15104         comparing 0 vs Byte.MinValue, not the value
15105
15106         (ImplicitConversionRequired): When reporting a conversion error,
15107         use error 31 to print out the constant error instead of the
15108         simpler 29.
15109
15110         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15111         which fixes bug 51347.
15112
15113 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
15114
15115         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
15116         which fixes the -warnaserror command line option.
15117
15118 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
15119
15120         * cfold.cs (DoNumericPromotions): During constant folding of
15121         additions on UIntConstant, special case intconstants with
15122         IntConstants like we do on the expression binary operator. 
15123
15124 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
15125
15126         * convert.cs (ImplicitReferenceConversion): We were missing a case
15127         (System.Enum are not value types or class types, so we need to
15128         classify them separatedly).
15129
15130         * driver.cs: We do not support error 2007.
15131
15132 2003-11-12 Jackson Harper <jackson@ximian.com>
15133
15134         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
15135         system directory. Also use the full file name so users can
15136         libraries names mscorlib-o-tron.dll in a non system dir.
15137
15138 2003-11-10  Martin Baulig  <martin@ximian.com>
15139
15140         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
15141         (TypeManager.InitCoreTypes): Initialize them here, but instead of
15142         calling `ResolveType()' on them, directly assign their `Type'.
15143
15144 2003-11-08  Martin Baulig  <martin@ximian.com>
15145
15146         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
15147         return value and the `out parent' parameter.
15148         (TypeContainer.DefineType): Moved the CS0644 check into
15149         GetClassBases().  Don't pass the interface types to the
15150         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
15151         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
15152
15153         * ecore.cs (TypeExpr.IsAttribute): New property.
15154         (TypeExpr.GetInterfaces): New method.
15155
15156         * interface.cs (Interface.GetInterfaceTypeByName): Return a
15157         TypeExpr instead of a Type.
15158         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
15159         (Interface.DefineType): Don't pass the interface types to the
15160         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
15161         them later and then call `TypeBulider.AddInterfaceImplementation()'.
15162
15163         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
15164         instead of a `Type[]'.
15165         (TypeManager.RegisterBuilder): Likewise.
15166         (TypeManager.AddUserInterface): Likewise.
15167         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
15168         `Type[]' and also return a `TypeExpr[]'.
15169         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
15170
15171 2003-11-08  Martin Baulig  <martin@ximian.com>
15172
15173         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
15174         Expression.     
15175
15176 2003-11-08  Martin Baulig  <martin@ximian.com>
15177
15178         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
15179         TypeManager.ResolveExpressionTypes().
15180
15181         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
15182         instead of an Expression.
15183         (TypeExpr): This is now an abstract base class for `TypeExpression'.
15184         (TypeExpression): New public class; formerly known as `TypeExpr'.
15185
15186         * expression.cs (ComposedCast): Derive from TypeExpr.
15187
15188         * typemanager.cs (TypeManager.system_*_expr): These are now
15189         TypExpr's instead of Expression's.
15190         (TypeManager.ResolveExpressionTypes): New public static function;
15191         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
15192         of them.        
15193
15194 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
15195
15196         * expression.cs (New.DoResolve): Do not dereference value that
15197         might be a null return.
15198
15199         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
15200         sure that the constant value has the right type.  Fixes an
15201         unreported bug, similar to 50425.
15202
15203         * const.cs (Const.LookupConstantValue): Call
15204         ImplicitStandardConversionExists before doing a conversion to
15205         avoid havng the TypeManager.ChangeType do conversions.
15206
15207         Reduced the number of casts used
15208
15209         (Const.ChangeType): New routine to enable reuse of the constant
15210         type changing code from statement.
15211
15212         * typemanager.cs (ChangeType): Move common initialization to
15213         static global variables.
15214
15215         Fixes #50425.
15216
15217         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
15218         every value type to go through, even if it was void.  Fix that. 
15219
15220         * cs-tokenizer.cs: Use is_identifier_start_character on the start
15221         character of the define, and the is_identifier_part_character for
15222         the rest of the string.
15223
15224 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
15225
15226         * expression.cs (UnaryMutator.EmitCode): When I updated
15227         LocalVariableReference.DoResolve, I overdid it, and dropped an
15228         optimization done on local variable references.
15229
15230 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
15231
15232         * ecore.cs: Convert the return from Ldlen into an int.
15233
15234 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
15235
15236         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
15237         the accessibility, this is a special case for toplevel non-public
15238         classes (internal for instance).
15239
15240 2003-10-20  Nick Drochak <ndrochak@gol.com>
15241
15242         * ecore.cs: Fix typo and build.  Needed another right paren.
15243
15244 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
15245
15246         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
15247         `internal' case regular and protected, but not allowing protected
15248         to be evaluated later.  Bug 49840
15249
15250 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
15251
15252         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
15253         to kb.Nlast, and not the kb.nFirst to isolate the switch
15254         statement.
15255
15256         Extract the underlying type, so enumerations of long/ulong are
15257         treated like long/ulong.
15258
15259 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
15260
15261         * expression.cs (New): Overload the meaning of RequestedType to
15262         track the possible creation of the NewDelegate type, since
15263         DoResolve is invoked more than once for new constructors on field
15264         initialization.
15265
15266         See bugs: #48800 and #37014
15267
15268         * cs-parser.jay (declare_local_constants): Take an arraylist
15269         instead of a single constant.
15270
15271         (local_constant_declaration): It should take a
15272         constant_declarators, not a constant_declarator.  Fixes 49487
15273
15274         * convert.cs: Fix error report.
15275
15276 2003-10-13 Jackson Harper <jackson@ximian.com>
15277
15278         * typemanager.cs (TypeToCoreType): Add float and double this fixes
15279         bug #49611
15280
15281 2003-10-09  Martin Baulig  <martin@ximian.com>
15282
15283         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
15284         to the .ctor.
15285         (MethodCore.DoDefineParameters): Removed the TypeContainer
15286         argument; use the DeclSpace which was passed to the .ctor instead.
15287         (MethodCore.CheckParameter): Take a DeclSpace instead of a
15288         TypeContainer; we only need a DeclSpace here.
15289
15290 2003-10-09  Martin Baulig  <martin@ximian.com>
15291
15292         * class.cs (MethodData): Added additional `DeclSpace ds' argument
15293         to the .ctor.
15294         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
15295         EmitContext's .ctor.    
15296
15297 2003-10-09  Martin Baulig  <martin@ximian.com>
15298
15299         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
15300         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
15301         AsAccessible(), moved them as well.
15302
15303         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
15304
15305 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
15306
15307         * cs-parser.jay : Renamed yyName to yyNames related to jay.
15308
15309 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
15310
15311         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
15312         generation for >=, as spotted by Paolo, bug 48679.  
15313         Patch from David Waite.
15314
15315         * cs-tokenizer.cs: Add handling for #pragma.
15316
15317         * cs-parser.jay: Allow for both yield and yield return in the
15318         syntax.  The anti-cobolization of C# fight will go on!
15319
15320         * class.cs (TypeBuilder.DefineType): Catch error condition here
15321         (Parent.DefineType erroring out and returning null).
15322
15323         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15324         coping with enumerations variables, we were mistakenly processing
15325         them as a regular value type instead of built-in types.  Fixes the
15326         bug #48063
15327
15328         * typemanager.cs (IsBuiltinOrEnum): New method.
15329
15330 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
15331
15332         * cs-parser.jay: Upgrade: yield now needs the return clause.
15333
15334 2003-09-19  Martin Baulig  <martin@ximian.com>
15335
15336         * decl.cs (MemberCache.SetupCacheForInterface): Take a
15337         `MemberCache parent' argument.  Normally, an interface doesn't
15338         have a parent type except System.Object, but we use this in gmcs
15339         for generic type parameters.
15340
15341 2003-09-18  Martin Baulig  <martin@ximian.com>
15342
15343         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
15344         on `type.IsInterface'; don't check whether the type has a parent
15345         to determine whether it's an interface.
15346
15347 2003-09-15  Martin Baulig  <martin@ximian.com>
15348
15349         * class.cs (TypeContainer.DefineType): Added an error flag to
15350         avoid reporting duplicate CS0146's ("class definition is
15351         circular.").
15352
15353         * driver.cs (Driver.MainDriver): Abort if
15354         RootContext.ResolveTree() reported any errors.
15355
15356 2003-09-07  Martin Baulig  <martin@ximian.com>
15357
15358         * report.cs (Error, Warning): Added overloaded versions which take
15359         a `params object[] args' and call String.Format().
15360
15361 2003-09-07  Martin Baulig  <martin@ximian.com>
15362
15363         * decl.cs (DeclSpace..ctor): Don't call
15364         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
15365         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
15366         (DeclSpace.RecordDecl): New method.
15367
15368         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
15369
15370 2003-09-02  Ravi Pratap  <ravi@ximian.com>
15371
15372         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
15373         value attributes to be applied to ParameterBuilders.
15374
15375         * class.cs (MethodCore.LabelParameters): Make static and more
15376         generic so that it can be used from other places - like interface
15377         methods, for instance.
15378
15379         * interface.cs (Interface.Emit): Call LabelParameters before
15380         emitting attributes on the InterfaceMethod.
15381
15382 2003-08-26  Martin Baulig  <martin@ximian.com>
15383
15384         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
15385         resolving aliases; fixes #47927.
15386
15387 2003-08-26  Martin Baulig  <martin@ximian.com>
15388
15389         * statement.cs (Using.DoResolve): This is internally emitting a
15390         try/finally clause, so we need to set ec.NeedExplicitReturn if we
15391         do not always return.  Fixes #47681.
15392
15393 2003-08-26  Martin Baulig  <martin@ximian.com>
15394
15395         * decl.cs (MemberCore): Moved WarningNotHiding(),
15396         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
15397         into MemberBase.
15398         (AdditionResult): Make this nested in DeclSpace.
15399         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
15400         argument; call NamespaceEntry.Define() unless we're nested in a
15401         class or struct.
15402
15403         * namespace.cs (Namespace.DefineName): New public function.  This
15404         is called from DeclSpace's .ctor to add 
15405         (Namespace.Lookup): Include DeclSpaces in the lookup.
15406
15407         * class.cs (Operator): Derive from MemberBase, not MemberCore.
15408
15409         * const.cs (Const): Derive from MemberBase, not MemberCore.     
15410
15411 2003-08-25  Martin Baulig  <martin@ximian.com>
15412
15413         * convert.cs (Convert.ExplicitReferenceConversion): When
15414         converting from an interface type to a class, unbox if the target
15415         type is a struct type.  Fixes #47822.
15416
15417 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15418
15419         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
15420         #47854.
15421
15422 2003-08-22  Martin Baulig  <martin@ximian.com>
15423
15424         * class.cs (TypeManager.DefineType): When defining a nested type,
15425         call DefineType() on our parent; fixes #47801.
15426
15427 2003-08-22  Martin Baulig  <martin@ximian.com>
15428
15429         * class.cs (MethodData.Define): While checking if a method is an
15430         interface implementation, improve the test a bit more to fix #47654.
15431
15432 2003-08-22  Martin Baulig  <martin@ximian.com>
15433
15434         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
15435         correctly; fixes #47722.
15436
15437 2003-08-22  Martin Baulig  <martin@ximian.com>
15438
15439         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
15440         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
15441
15442         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
15443
15444 2003-08-22  Martin Baulig  <martin@ximian.com>
15445
15446         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
15447         can only be assigned in static constructors.  Fixes #47161.
15448
15449 2003-08-22  Martin Baulig  <martin@ximian.com>
15450
15451         Rewrote and improved the flow analysis code.
15452
15453         * flowbranching.cs (FlowBranching): Make this class abstract.
15454         (FlowBranching.CreateBranching): New static function to create a
15455         new flow branching.
15456         (FlowBranchingBlock, FlowBranchingException): New classes.
15457         (FlowBranching.UsageVector.Type): New public readonly field.
15458         (FlowBranching.UsageVector.Breaks): Removed the setter.
15459         (FlowBranching.UsageVector.Returns): Removed the setter.
15460         (FlowBranching.UsageVector): Added Break(), Return(),
15461         NeverReachable() and Throw() methods to modify the reachability.
15462         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
15463         done by FlowBranching.Merge().
15464         (FlowBranching.UsageVector.MergeChild): New method; merges the
15465         merge result into the current vector.
15466         (FlowBranching.Merge): New abstract method to merge a branching.
15467
15468 2003-08-12  Martin Baulig  <martin@ximian.com>
15469
15470         * expression.cs (Indirection.CacheTemporaries): Create the
15471         LocalTemporary with the pointer type, not its element type.
15472
15473 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
15474
15475         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
15476         token was a keyword or not.
15477
15478         Add `error' options where an IDENTIFIER was expected;  Provide
15479         CheckToken and CheckIdentifierToken convenience error reporting
15480         functions. 
15481
15482         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
15483
15484         * decl.cs: Rename `NamespaceEntry Namespace' public field into
15485         NameSpaceEntry NameSpaceEntry.
15486
15487         (LookupInterfaceOrClass): Avoid creating a full qualified name
15488         from namespace and name: avoid doing lookups when we know the
15489         namespace is non-existant.   Use new Tree.LookupByNamespace which
15490         looks up DeclSpaces based on their namespace, name pair.
15491
15492         * driver.cs: Provide a new `parser verbose' to display the
15493         exception thrown during parsing.  This is turned off by default
15494         now, so the output of a failure from mcs is more graceful.
15495
15496         * namespace.cs: Track all the namespaces defined in a hashtable
15497         for quick lookup.
15498
15499         (IsNamespace): New method
15500
15501 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
15502
15503         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
15504         we know that we need to concatenate (full typename can never be
15505         null). 
15506
15507         * class.cs: ditto.
15508
15509         * statement.cs: Use a bitfield;  Do not initialize to null things
15510         which are done by the constructor by default.
15511
15512         * cs-parser.jay: bug fix, parameter was 4, not 3.
15513
15514         * expression.cs: Just use the property;
15515
15516         * statement.cs: No need for GetVariableInfo method.
15517
15518 2003-08-08  Martin Baulig  <martin@ximian.com>
15519
15520         * flowanalysis.cs (FlowReturns): This is now nested in the
15521         `FlowBranching' class.
15522         (MyBitVector): Moved this here from statement.cs.
15523         (FlowBranching.SiblingType): New enum type.
15524         (FlowBranching.CreateSibling): Added `SiblingType' argument.
15525
15526 2003-08-07  Martin Baulig  <martin@ximian.com>
15527
15528         * flowanalysis.cs (FlowBranchingType): This is now nested in the
15529         `FlowBranching' class and called `BranchingType'.
15530
15531 2003-08-07  Martin Baulig  <martin@ximian.com>
15532
15533         * flowanalysis.cs: Moved all the control flow analysis code into
15534         its own file.
15535
15536 2003-08-07  Martin Baulig  <martin@ximian.com>
15537
15538         * assign.cs (Assign.DoResolve): `target' must either be an
15539         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
15540         #37319.
15541
15542 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
15543
15544         * expression.cs (BinaryMethod): This kind of expression is created by the
15545         Binary class if it determines that the operator has to be handled
15546         by a method.
15547
15548         (BinaryDelegate): This kind of expression is created if we are
15549         dealing with a + or - operator on delegates.
15550
15551         (Binary): remove method, argumetns, and DelegateOperator: when
15552         dealing with methods, 
15553
15554         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
15555
15556         * statement.cs (Block): use bitfields for the three extra booleans
15557         we had in use.   Remove unused topblock parameter.
15558
15559         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
15560
15561         * assign.cs: Drop extra unneeded tests.
15562
15563 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
15564
15565         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
15566
15567         * statement.cs (Foreach): Use VariableStorage instead of
15568         LocalBuilders.   
15569
15570         * codegen.cs (VariableStorage): New class used by clients that
15571         require a variable stored: locals or fields for variables that
15572         need to live across yield.
15573
15574         Maybe provide a convenience api for EmitThis+EmitLoad?
15575
15576         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
15577         these bad boys.
15578
15579 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
15580
15581         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
15582         RemapParameterLValue): New methods that are used to turn a
15583         precomputed FieldInfo into an expression like this:
15584
15585                 instance.FieldInfo
15586
15587         The idea is to use this instead of making LocalVariableReference
15588         have more than one meaning.
15589
15590         * cs-parser.jay: Add error production to BASE.
15591
15592         * ecore.cs: Deal with TypeManager.GetField returning null, which
15593         is now a valid return value.
15594
15595         (FieldExprNoAddress): New expression for Fields whose address can
15596         not be taken.
15597
15598         * expression.cs (LocalVariableReference): During the resolve
15599         phases, create new expressions if we are in a remapping context.
15600         Remove code that dealt with remapping here.
15601
15602         (ParameterReference): same.
15603
15604         (ProxyInstance): New expression, like the `This' expression, but
15605         it is born fully resolved.  We know what we are doing, so remove
15606         the errors that are targeted to user-provided uses of `this'.
15607
15608         * statement.cs (Foreach): our variable is now stored as an
15609         Expression;  During resolution, follow the protocol, dont just
15610         assume it will return this.
15611
15612 2003-08-06  Martin Baulig  <martin@ximian.com>
15613
15614         * support.cs (SeekableStreamReader.cs): New public class.
15615
15616         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
15617         SeekableStreamReader instead of the normal StreamReader.
15618
15619 2003-08-04  Martin Baulig  <martin@ximian.com>
15620
15621         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
15622         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
15623         deambiguate casts and delegate invocations.
15624         (parenthesized_expression): Use the new tokens to ensure this is
15625         not a cast of method invocation.
15626
15627         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
15628         when reading a `)' and Deambiguate_CloseParens () was previously
15629         called.
15630
15631         * expression.cs (ParenthesizedExpression): New class.  This is
15632         just used for the CS0075 test.
15633         (Binary.DoResolve): Check for CS0075.   
15634
15635 2003-07-29  Ravi Pratap  <ravi@ximian.com>
15636
15637         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
15638         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
15639         reference comparison.
15640
15641         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
15642         examine the ReturnType for equality - this is necessary in the
15643         cases of implicit and explicit operators whose signature also
15644         includes the return type.
15645
15646 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
15647
15648         * namespace.cs: Cache the result of the namespace computation,
15649         instead of computing it every time.
15650
15651 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
15652
15653         * decl.cs: Use a global arraylist that we reuse over invocations
15654         to avoid excesive memory consumption.  Reduces memory usage on an
15655         mcs compile by one meg (45 average).
15656
15657         * typemanager.cs (LookupTypeReflection): In .NET pointers are
15658         private, work around that.
15659
15660 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
15661
15662         * literal.cs (IntLiteral): Define Zero and One static literals. 
15663
15664         * cs-parser.jay (integer_literal): use static literals to reduce
15665         memory usage for the most used literals (0, 1 and -1).  211kb
15666         reduced in memory usage.
15667
15668         Replace all calls to `new ArrayList' with `new
15669         ArrayList(4)' which is a good average number for most allocations,
15670         and also requires only 16 bytes of memory for its buffer by
15671         default. 
15672
15673         This reduced MCS memory usage in seven megabytes for the RSS after
15674         bootstrapping.
15675
15676 2003-07-28  Ravi Pratap  <ravi@ximian.com>
15677
15678         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
15679         handle params methods the correct way by forming only one
15680         applicable set with params and normal methods in them. Earlier we
15681         were looking at params methods only if we found no normal methods
15682         which was not the correct thing to do.
15683
15684         (Invocation.BetterFunction): Take separate arguments indicating
15685         when candidate and the best method are params methods in their
15686         expanded form.
15687
15688         This fixes bugs #43367 and #46199.
15689
15690         * attribute.cs: Documentation updates.
15691
15692         (CheckAttribute): Rename to CheckAttributeTarget.
15693         (GetValidPlaces): Rename to GetValidTargets.
15694
15695         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
15696         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
15697
15698         Fixes bug #44468.
15699
15700 2003-07-28  Martin Baulig  <martin@ximian.com>
15701
15702         * class.cs (TypeContainer.DefineMembers): Use the base type's full
15703         name when looking up the base class of a nested class.  Fixes #46977.
15704
15705 2003-07-26  Martin Baulig  <martin@ximian.com>
15706
15707         * expression.cs (Indexers.Indexer): New nested struct; contains
15708         getter, setter and the indexer's type.
15709         (Indexers.Properties): This is now an ArrayList of
15710         Indexers.Indexer's.
15711         (IndexerAccess.DoResolveLValue): Correctly set the type if the
15712         indexer doesn't have any getters.
15713
15714         * assign.cs (Assign.DoResolve): Also do the implicit conversions
15715         for embedded property and indexer assignments.
15716
15717 2003-07-26  Martin Baulig  <martin@ximian.com>
15718
15719         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
15720         preprocessor directive is not the first non-whitespace character
15721         on a line.
15722
15723 2003-07-26  Martin Baulig  <martin@ximian.com>
15724
15725         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
15726         namespace parsing, follow the spec more closely.
15727
15728         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
15729         NamespaceEntry.Lookup().
15730
15731 2003-07-25  Martin Baulig  <martin@ximian.com>
15732
15733         * MethodCore.cs (OverridesSomething): New public field; it's set
15734         from TypeContainer.DefineMembers if this method overrides
15735         something (which doesn't need to be a method).  Fix #39462.
15736
15737 2003-07-25  Ravi Pratap  <ravi@ximian.com>
15738
15739         * typemanager.cs (GetMembers): Ensure that the list of members is
15740         reversed. This keeps things in sync.
15741
15742         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
15743         find an AttributeUsage attribute.
15744
15745         * expression.cs (Invocation.OverloadResolve): Perform the check
15746         which disallows Invoke to be directly called on a Delegate.
15747
15748         (Error_InvokeOnDelegate): Report error cs1533.
15749
15750 2003-07-25  Martin Baulig  <martin@ximian.com>
15751
15752         * expression.cs (Indexers.GetIndexersForType): Only look in the
15753         interface hierarchy if the requested type is already an
15754         interface.  Fixes #46788 while keeping #46502 fixed.
15755
15756 2003-07-25  Martin Baulig  <martin@ximian.com>
15757
15758         * class.cs (TypeContainer.DefineMembers): Check whether all
15759         readonly fields have been assigned and report warning CS0649 if
15760         not.
15761
15762         * statement.cs (LocalInfo.IsFixed): Always return true if this is
15763         a valuetype.
15764
15765 2003-07-24  Ravi Pratap  <ravi@ximian.com>
15766
15767         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
15768         returned from GetMethods to make things consistent with the
15769         assumptions MCS makes about ordering of methods.
15770
15771         This should comprehensively fix bug #45127 and it does :-)
15772
15773         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
15774         ordering is actually reverse.
15775
15776         * Clean up some debug messages I left lying around.
15777
15778         * interface.cs (Populate*): Get rid of code which emits attributes
15779         since the stage in which we emit attributes is the 'Emit' stage,
15780         not the define stage.
15781
15782         (Emit): Move attribute emission for interface members here.
15783
15784 2003-07-22  Ravi Pratap  <ravi@ximian.com>
15785
15786         * expression.cs (Invocation.OverloadResolve): Follow the spec more
15787         closely: we eliminate methods in base types when we have an
15788         applicable method in a top-level type.
15789
15790         Please see section 14.5.5.1 for an exact description of what goes
15791         on. 
15792
15793         This fixes bug #45127 and a host of other related to corlib compilation.
15794
15795         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
15796         array is the method corresponding to the top-level type (this is
15797         because of the changes made to icall.c) so we change this
15798         accordingly.
15799
15800         (MethodGroupExpr.Name): This too.
15801
15802         * typemanager.cs (GetElementType): New method which does the right
15803         thing when compiling corlib. 
15804
15805         * everywhere: Make use of the above in the relevant places.
15806
15807 2003-07-22  Martin Baulig  <martin@ximian.com>
15808
15809         * cs-parser.jay (invocation_expression): Moved
15810         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
15811         `cast_expression', but create a InvocationOrCast which later
15812         resolves to either an Invocation or a Cast.
15813
15814         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
15815         method; call this before EmitStatement() to make sure that this
15816         expression can be used as a statement.
15817
15818         * expression.cs (InvocationOrCast): New class; resolves to either
15819         an Invocation or a Cast.
15820
15821         * statement.cs (StatementExpression): Call ResolveStatement() on
15822         the ExpressionStatement before emitting it.
15823
15824 2003-07-21  Martin Baulig  <martin@ximian.com>
15825
15826         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
15827         `ref' and `out' attributes match; fixes #46220.
15828         (MemberAccess.ResolveMemberAccess): You can't reference a type
15829         through an expression; fixes #33180.
15830         (Indexers.GetIndexersForType): Don't return the indexers from
15831         interfaces the class implements; fixes #46502.
15832
15833 2003-07-21  Martin Baulig  <martin@ximian.com>
15834
15835         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
15836         CS0661 checks; fixes bug #30442.
15837
15838 2003-07-21  Martin Baulig  <martin@ximian.com>
15839
15840         * decl.cs (AdditionResult): Added `Error'.
15841
15842         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
15843
15844         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
15845         makes cs0031.cs actually work.
15846
15847 2003-07-20  Martin Baulig  <martin@ximian.com>
15848
15849         * namespace.cs: Fixed that bug which caused a crash when compiling
15850         the debugger's GUI.
15851
15852 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
15853
15854         * typemanager.cs (LookupTypeReflection): Never expose types which
15855         are NotPublic, NestedPrivate, NestedAssembly, or
15856         NestedFamANDAssem.  We used to return these, and later do a check
15857         that would report a meaningful error, but the problem is that we
15858         would not get the real match, if there was a name override.
15859
15860 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
15861
15862         * namespace.cs (Namespace, Name): Do not compute the namespace
15863         name dynamically, compute it in the constructor.  This reduced
15864         memory usage by 1697 KB.
15865
15866         * driver.cs: Use --pause to pause at the end.
15867
15868 2003-07-17  Peter Williams  <peter@newton.cx>
15869
15870         * Makefile: Change the name of the test target so that it doesn't
15871         conflict with the recursive test target.
15872
15873 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
15874
15875         * expression.cs (LocalVariableReference.Emit, EmitAssign,
15876         AddressOf): Do not use EmitThis, that was wrong, use the actual
15877         this pointer.
15878
15879 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
15880
15881         * class.cs (MethodData.Define): While checking if a method is an
15882         interface implementation, improve the test: If we are not public
15883         (use new test here: use the computed MethodAttributes directly,
15884         instead of the parsed modifier flags) check if the `implementing'
15885         method comes from an interface or not.
15886
15887         * pending.cs (VerifyPendingMethods): Slightly better error
15888         message.
15889
15890         * makefile: add test target that does the mcs bootstrap.
15891
15892 2003-07-16  Ravi Pratap  <ravi@ximian.com>
15893
15894         * interface.cs (Define): Do nothing here since there are no
15895         members to populate etc. Move the attribute emission out of here
15896         since this was just totally the wrong place to put it. Attribute
15897         application happens during the 'Emit' phase, not in the 'Define'
15898         phase.
15899
15900         (Emit): Add this method and move the attribute emission here
15901
15902         * rootcontext.cs (EmitCode): Call the Emit method on interface
15903         types too.
15904
15905 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15906
15907         * expression.cs (OverloadResolve): Report error only if Location
15908         is not 'Null' which means that there was a probe going on.
15909
15910 2003-07-14  Martin Baulig  <martin@ximian.com>
15911
15912         * expression.cs (ConditionalLogicalOperator): New public class to
15913         implement user defined conditional logical operators.
15914         This is section 14.11.2 in the spec and bug #40505.
15915
15916 2003-07-14  Martin Baulig  <martin@ximian.com>
15917
15918         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
15919
15920 2003-07-14  Martin Baulig  <martin@ximian.com>
15921
15922         * codegen.cs (EmitContext.InFixedInitializer): New public field.
15923
15924         * ecore.cs (IVariable.VerifyFixed): New interface method.
15925
15926         * expression.cs (Unary.ResolveOperator): When resolving the `&'
15927         operator, check whether the variable is actually fixed.  Fixes bug
15928         #36055.  Set a variable definitely assigned when taking its
15929         address as required by the spec.
15930
15931         * statement.cs (LocalInfo.IsFixed): New field.
15932         (LocalInfo.MakePinned): Set `IsFixed' to true.
15933
15934 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15935
15936         * attribute.cs (Attribute.Resolve): While doing a Member lookup
15937         for .ctors, ensure that we only ask for members declared in the
15938         attribute type (BindingFlags.DeclaredOnly).
15939
15940         Fixes bug #43632.
15941
15942         * expression.cs (Error_WrongNumArguments): Report error 1501
15943         correctly the way CSC does.
15944
15945 2003-07-13  Martin Baulig  <martin@ximian.com>
15946
15947         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
15948         lookup on the fully qualified name, to make things like "X.X" work
15949         where "X.X" is a fully qualified type name, but we also have a
15950         namespace "X" in the using list.  Fixes #41975.
15951
15952 2003-07-13  Martin Baulig  <martin@ximian.com>
15953
15954         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
15955         function. If we're a CompoundAssign, we need to create an embedded
15956         CompoundAssign, not an embedded Assign.
15957         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
15958         Fixes #45854.
15959
15960 2003-07-13  Martin Baulig  <martin@ximian.com>
15961
15962         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
15963         work to fix bug #46088.
15964
15965 2003-07-13  Ravi Pratap <ravi@ximian.com>
15966
15967         * class.cs (Operator.Emit): Do not emit attributes here - it is
15968         taken care of by the Method class that we delegate too. This takes
15969         care of bug #45876.
15970
15971 2003-07-10  Martin Baulig  <martin@ximian.com>
15972
15973         * expression.cs (TypeOfVoid): New class.
15974         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
15975
15976 2003-07-10  Martin Baulig  <martin@ximian.com>
15977
15978         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
15979         bug #35957.
15980
15981 2003-07-10  Martin Baulig  <martin@ximian.com>
15982
15983         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
15984         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
15985
15986         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
15987
15988         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
15989
15990 2003-07-10  Martin Baulig  <martin@ximian.com>
15991
15992         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
15993         of decimal.  Fixes #42850.
15994
15995         NOTE: I also fixed the created byte blob, but this doesn't work on
15996         the MS runtime and csc never produces any byte blobs for decimal
15997         arrays.
15998
15999 2003-07-10  Martin Baulig  <martin@ximian.com>
16000
16001         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
16002         structs; fixes #32068.
16003         (Block.AddChildVariableNames): Fixed #44302.
16004
16005 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16006
16007         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
16008
16009 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16010
16011         * attribute.cs: And this test is onger needed.
16012
16013 2003-07-08  Martin Baulig  <martin@ximian.com>
16014
16015         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
16016         inaccessible types.  Fixes #36313.
16017
16018         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
16019
16020         * namespace.cs (NamespaceEntry): Create implicit entries for all
16021         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
16022         implicit entries for N1.N2 and N1.
16023
16024 2003-07-08  Martin Baulig  <martin@ximian.com>
16025
16026         Rewrote the handling of namespaces to fix a lot of the issues
16027         wrt. `using' aliases etc.
16028
16029         * namespace.cs (Namespace): Splitted this class into a
16030         per-assembly `Namespace' and a per-file `NamespaceEntry'.
16031
16032         * typemanager.cs (TypeManager.IsNamespace): Removed.
16033         (TypeManager.ComputeNamespaces): Only compute namespaces from
16034         loaded assemblies here, not the namespaces from the assembly we're
16035         currently compiling.
16036
16037 2003-07-08  Martin Baulig  <martin@ximian.com>
16038
16039         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
16040
16041 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16042
16043         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
16044         already fixed it.  
16045
16046         I thought about the memory savings here, but LookupTypeReflection
16047         is used under already very constrained scenarios.  Compiling
16048         corlib or mcs only exposes one hit, so it would not really reduce
16049         any memory consumption.
16050
16051 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16052
16053         * typemanager.cs: fixes bug #45889 by only adding public types from
16054         other assemblies to the list of known types.
16055
16056 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16057
16058         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
16059         on the type we resolved.
16060
16061 2003-07-05  Martin Baulig  <martin@ximian.com>
16062
16063         * pending.cs (PendingImplementation.ParentImplements): Don't
16064         create the proxy if the parent is abstract.
16065
16066         * class.cs (TypeContainer.DefineIndexers): Process explicit
16067         interface implementations first.  Fixes #37714.
16068
16069 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
16070
16071         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
16072         defined recursively;  but since we modify the input parameters
16073         (left is set to `this' temporarily), we reset this value if the
16074         left_is_explicit is false, which gives the original semantics to
16075         the code.  
16076
16077         * literal.cs (NullPointer): new class used to represent a null
16078         literal in a pointer context.
16079
16080         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
16081         type is a pointer, use a NullPointer object instead of a
16082         NullLiteral.   Closes 43687
16083
16084         (ExplicitConversion): Convert pointer values using
16085         the conv opcode to the proper type.
16086
16087         * ecore.cs (New): change ValueTypeVariable property into a method,
16088         that returns whether the valuetype is suitable for being used.
16089
16090         * expression.cs (Binary.DoNumericPromotions): Only return if we
16091         the int constant was a valid uint, and we can return both left and
16092         right as uints.  If not, we continue processing, to trigger the
16093         type conversion.  This fixes 39018.
16094
16095         * statement.cs (Block.EmitMeta): During constant resolution, set
16096         the CurrentBlock property on the emitcontext, so that we resolve
16097         constants propertly.
16098
16099 2003-07-02  Martin Baulig  <martin@ximian.com>
16100
16101         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
16102         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
16103
16104         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
16105         than emitting it here.
16106
16107         * statement.cs: Fixed some more flow analysis bugs.
16108
16109 2003-07-02  Martin Baulig  <martin@ximian.com>
16110
16111         * class.cs (MethodData.Define): When implementing interface
16112         methods, set Final unless we're Virtual.
16113
16114         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
16115         check work for interface methods.
16116
16117 2003-07-01  Martin Baulig  <martin@ximian.com>
16118
16119         * ecore.cs (EmitContext.This): Replaced this property with a
16120         GetThis() method which takes a Location argument.  This ensures
16121         that we get the correct error location for a CS0188.
16122
16123 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
16124
16125         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
16126         ImplicitStandardConversion.
16127
16128         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
16129
16130 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
16131
16132         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
16133         optimization.
16134
16135 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
16136
16137         * class.cs (Constructor.Define): Turn off initlocals for unsafe
16138         constructors.
16139
16140         (MethodData.Define): Turn off initlocals for unsafe methods.
16141
16142 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
16143
16144         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
16145         complete;  Fixes #37521.
16146
16147         * delegate.cs: Use Modifiers.TypeAttr to compute the
16148         TypeAttributes, instead of rolling our own.  This makes the flags
16149         correct for the delegates.
16150
16151 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
16152
16153         * class.cs (Constructor.Define): Set the private flag for static
16154         constructors as well.
16155
16156         * cs-parser.jay (statement_expression): Set the return value to
16157         null, to avoid a crash when we catch an error.
16158
16159 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
16160
16161         * cs-parser.jay: Applied patch from Jackson that adds support for
16162         extern and unsafe modifiers to destructor declarations.
16163
16164         * expression.cs: Report error 21 if the user is trying to index a
16165         System.Array.
16166
16167         * driver.cs: Add an error message, suggested by the bug report.
16168
16169         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
16170         if we do not have a ": this ()" constructor initializer.  Fixes 45149
16171
16172 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
16173
16174         * namespace.cs: Add some information to reduce FAQs.
16175
16176 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
16177
16178         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
16179         underlying enumeration types.  Fixes #43915.
16180
16181         * expression.cs: Treat ushort/short as legal values to be used in
16182         bitwise operations.
16183
16184 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
16185
16186         * delegate.cs: transfer custom attributes for paramenters from
16187         the delegate declaration to Invoke and BeginInvoke.
16188
16189 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
16190
16191         * attribute.cs: handle custom marshalers and emit marshal info
16192         for fields, too.
16193
16194 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
16195
16196         * makefile.gnu: Added anonymous.cs to the compiler sources.
16197
16198 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
16199
16200         * iterators.cs: Change the name of the proxy class to include two
16201         underscores.
16202
16203         * cs-parser.jay: Update grammar to include anonymous methods.
16204
16205         * anonymous.cs: new file.
16206
16207 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
16208
16209         * class.cs (Field.Define): Add missing test for pointers and
16210         safety. 
16211
16212 2003-05-27  Ravi Pratap  <ravi@ximian.com>
16213
16214         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
16215         we use the stobj opcode.
16216
16217         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
16218         since it wasn't the correct fix. 
16219
16220         It still is puzzling that we are required to use stobj for IntPtr
16221         which seems to be a ValueType.
16222
16223 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
16224
16225         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
16226         during regular simple name resolution.   Now, the trick is that
16227         instead of returning for processing the simplename, we do a
16228         TypeManager.LookupType (ie, a rooted lookup as opposed to a
16229         contextual lookup type).   If a match is found, return that, if
16230         not, return for further composition.
16231
16232         This fixes long-standing 30485.
16233
16234         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16235         using the address to initialize an object, do an Stobj instead of
16236         using the regular Stelem.
16237
16238         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
16239         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
16240         Because if we are a BaseIndexerAccess that value will be true.
16241         Fixes 43643.
16242
16243         * statement.cs (GotoCase.Resolve): Return after reporting an
16244         error, do not attempt to continue. 
16245
16246         * expression.cs (PointerArithmetic.Emit): If our operand is a
16247         long, convert our constants to match the operand before
16248         multiplying.  Convert to I type before adding.   Fixes 43670.
16249
16250 2003-05-14  Ravi Pratap  <ravi@ximian.com>
16251
16252         * enum.cs (ImplicitConversionExists) : Rename to
16253         ImplicitEnumConversionExists to remove ambiguity. 
16254
16255         * ecore.cs (NullCast): New type of cast expression class which
16256         basically is very similar to EmptyCast with the difference being
16257         it still is a constant since it is used only to cast a null to
16258         something else
16259         (eg. (string) null)
16260
16261         * convert.cs (ImplicitReferenceConversion): When casting a null
16262         literal, we return a NullCast.
16263
16264         * literal.cs (NullLiteralTyped): Remove - I don't see why this
16265         should be around anymore.
16266
16267         The renaming (reported was slightly wrong). Corrections:
16268
16269         ConvertImplicitStandard -> ImplicitConversionStandard
16270         ConvertExplicitStandard -> ExplicitConversionStandard
16271
16272         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
16273         before passing them in !
16274
16275         * convert.cs (ImplicitConversionStandard): When comparing for
16276         equal expr and target types, ensure that expr is not a
16277         NullLiteral.
16278
16279         In general, we must not be checking (expr_type ==
16280         target_type) in the top level conversion methods
16281         (ImplicitConversion, ExplicitConversion etc). This checking is
16282         done in the methods that they delegate to.
16283
16284 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
16285
16286         * convert.cs: Move Error_CannotConvertType,
16287         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
16288         ImplicitNumericConversion, ImplicitConversionExists,
16289         ImplicitUserConversionExists, StandardConversionExists,
16290         FindMostEncompassedType, FindMostSpecificSource,
16291         FindMostSpecificTarget, ImplicitUserConversion,
16292         ExplicitUserConversion, GetConversionOperators,
16293         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
16294         TryImplicitIntConversion, Error_CannotConvertImplicit,
16295         ConvertImplicitRequired, ConvertNumericExplicit,
16296         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
16297         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
16298         its own file.
16299
16300         Perform the following renames:
16301
16302         StandardConversionExists -> ImplicitStandardConversionExists
16303         ConvertImplicit -> ImplicitConversion
16304         ConvertImplicitStandard -> ImplicitStandardConversion
16305         TryImplicitIntConversion -> ImplicitIntConversion
16306         ConvertImplicitRequired -> ImplicitConversionRequired
16307         ConvertNumericExplicit -> ExplicitNumericConversion
16308         ConvertReferenceExplicit -> ExplicitReferenceConversion
16309         ConvertExplicit -> ExplicitConversion
16310         ConvertExplicitStandard -> ExplicitStandardConversion
16311
16312 2003-05-19  Martin Baulig  <martin@ximian.com>
16313
16314         * statement.cs (TypeInfo.StructInfo): Made this type protected.
16315         (TypeInfo): Added support for structs having structs as fields.
16316
16317         * ecore.cs (FieldExpr): Implement IVariable.
16318         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
16319         VariableInfo for the field.
16320
16321 2003-05-18  Martin Baulig  <martin@ximian.com>
16322
16323         * expression.cs (This.DoResolve): Report a CS0027 if we're
16324         emitting a field initializer.
16325
16326 2003-05-18  Martin Baulig  <martin@ximian.com>
16327
16328         * expression.cs (This.ResolveBase): New public function.
16329         (This.DoResolve): Check for CS0188.
16330
16331         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
16332         This.Resolve().
16333
16334         * ecore.cs (MethodGroupExpr.DoResolve): Set the
16335         `instance_expression' to null if we don't have any non-static
16336         methods.
16337
16338 2003-05-18  Martin Baulig  <martin@ximian.com>
16339
16340         Reworked the way how local variables and parameters are handled by
16341         the flow analysis code.
16342
16343         * statement.cs (TypeInfo, VariableMap): New public classes.
16344         (VariableInfo): New public class.  This is now responsible for
16345         checking whether a variable has been assigned.  It is used for
16346         parameters and local variables.
16347         (Block.EmitMeta): Take the InternalParameters as argument; compute
16348         the layout of the flow vectors here.
16349         (Block.LocalMap, Block.ParameterMap): New public properties.
16350         (FlowBranching): The .ctor doesn't get the InternalParameters
16351         anymore since Block.EmitMeta() now computes the layout of the flow
16352         vector.
16353         (MyStructInfo): This class is now known as `StructInfo' and nested
16354         in `TypeInfo'; we don't access this directly anymore.
16355
16356         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
16357         property and removed IsAssigned(), IsFieldAssigned(),
16358         SetAssigned() and SetFieldAssigned(); we now call them on the
16359         VariableInfo so we don't need to duplicate this code everywhere.
16360
16361         * expression.cs (ParameterReference): Added `Block block' argument
16362         to the .ctor.
16363         (LocalVariableReference, ParameterReference, This): The new
16364         VariableInfo class is now responsible for all the definite
16365         assignment stuff.
16366
16367         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
16368         IsParameterAssigned, SetParameterAssigned): Removed.
16369
16370 2003-05-18  Martin Baulig  <martin@ximian.com>
16371
16372         * typemanager.cs (InitCoreTypes): Try calling
16373         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
16374         the 3-args-version.  Corlib now also needs our `void_type'.
16375         (GetMethod): Added overloaded version which takes an optional
16376         `bool report_errors' to allow lookups of optional methods.
16377
16378 2003-05-12  Martin Baulig  <martin@ximian.com>
16379
16380         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
16381         only used for locals and not for parameters.
16382
16383 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
16384
16385         * support.cs (InternalParameters.ParameterType): Return the
16386         ExternalType of the parameter.
16387
16388         * parameter.cs (Parameter.ExternalType): drop the two arguments,
16389         they were unused.
16390
16391 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
16392
16393         * class.cs (MethodData.Define): Do not set the `newslot' on
16394         interface members, if they are also flagged as "override".
16395
16396         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
16397         better code for ++i and i++.  This only works for static fields
16398         and local variables.
16399
16400         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
16401         want to pull the DeclSpace out of the builder_to_declspace instead
16402         of the TypeBuilder (like in TypeContainer.FindMembers).
16403
16404         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
16405         instead of LookupTypeContainer.  Fixes the crash on .NET for
16406         looking up interface members.
16407
16408         * const.cs: Create our own emit context during the Definition
16409         stage, so that constants are evaluated in the proper context, when
16410         a recursive definition happens.
16411
16412 2003-05-11  Martin Baulig  <martin@ximian.com>
16413
16414         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
16415         new block for a switch section.
16416         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
16417         the adding/lookup in the switch block.  Fixes #39828.
16418
16419 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
16420
16421         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
16422         functionality: I needed to convert the data after I had performed
16423         the add/sub operation into the operands type size.
16424
16425         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
16426         pass the type for the box operation, otherwise the resulting
16427         object would have been of type object.
16428
16429         (BoxedCast): Add constructor to specify the type to box as.
16430
16431 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
16432
16433         * iterators.cs: I was reusing the `count' variable inadvertently,
16434         take steps to not allow this to happen.
16435
16436 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
16437
16438         * attribute.cs (Attribute.Resolve): Params attributes are encoded
16439         by creating an array at the point where the params starts and
16440         putting all those arguments there, then adjusting the size of the
16441         array.
16442
16443 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
16444
16445         * expression.cs (New.AddressOf): Implement interface
16446         IMemoryLocation.  This is used when the `new' operator is used in
16447         the context of an invocation to a method on a value type.
16448
16449         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
16450         example. 
16451
16452         * namespace.cs: Also check the using aliases here.
16453
16454         * driver.cs: Move the test for using validity after the types have
16455         been entered, so we do a single pass that also includes the using
16456         aliases. 
16457
16458         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
16459         in the regular case.   CreateSiblingForFinally is doing extra
16460         error checking.
16461
16462         * attribute.cs (GetAttributeArgumentExpression): Store the result
16463         on an out value, and use the return value to indicate failure
16464         instead of using null (which is a valid return for Constant.GetValue).
16465
16466         * statement.cs: Perform the analysis flow for the increment
16467         portion after the statement, because this will be the real flow of
16468         execution.  Fixes #42385
16469
16470         * codegen.cs (EmitContext.EmitArgument,
16471         EmitContext.EmitStoreArgument): New helper functions when the
16472         RemapToProxy flag is set.
16473
16474         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
16475         function.
16476
16477         Add support for remapping parameters. 
16478
16479         * iterators.cs: Propagate parameter values;  Store parameter
16480         values in the proxy classes.
16481
16482 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
16483
16484         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
16485         need a proxy reference;  I do not know what I was thinking
16486
16487         * cs-parser.jay (constructor_initializer): catch another error,
16488         and display nice message.
16489
16490         (field_declaration): catch void field declaration
16491         to flag a better error. 
16492
16493         * class.cs (MemberBase.CheckBase): Report an error instead of a
16494         warning if a new protected member is declared in a struct. 
16495         (Field.Define): catch the error of readonly/volatile.
16496
16497         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
16498
16499         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
16500         volatile variable is taken
16501
16502 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
16503
16504         * statement.cs (Fixed.Resolve): Report an error if we are not in
16505         an unsafe context.
16506
16507 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
16508
16509         * typemanager.cs: reuse the code that handles type clashes for
16510         delegates and enumerations.
16511
16512         * class.cs (Report28): Always report.
16513
16514         * expression.cs (EncodeAsAttribute): Allow nulls here.
16515
16516 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
16517
16518         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
16519         the functionality for testing whether an expression is valid for
16520         an attribute here.  Also handle the case of arrays of elements
16521         being stored. 
16522
16523         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
16524         encoding a linear array into an array of objects that are suitable
16525         to be passed to an CustomAttributeBuilder.
16526
16527         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
16528
16529         * ecore.cs: (FieldExpr): Handle field remapping here.
16530
16531         * iteratators.cs: Pass the instance variable (if the method is an
16532         instance method) to the constructors, so we can access the field
16533         variables on the class.
16534
16535         TODO: Test this with structs.  I think the THIS variable on
16536         structs might have to be a pointer, and not a refenrece
16537
16538 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
16539
16540         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
16541         local variables to fields in a proxy class.
16542
16543         * iterators.cs (PopulateProxy): Rename our internal fields to
16544         <XXX>.  
16545         Create a <THIS> field if we are an instance method, so we can
16546         reference our parent container variables.
16547         (MapVariable): Called back from the EmitContext code to enter a
16548         new variable to field mapping into the proxy class (we just create
16549         a FieldBuilder).
16550
16551         * expression.cs
16552         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
16553         for using the remapped locals to fields.
16554
16555         I placed the code here, because that gives the same semantics to
16556         local variables, and only changes the Emit code.
16557
16558         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
16559         statements inside iterators.
16560         (VariableInfo): Add a FieldBuilder for the cases when we are
16561         remapping local variables to fields in a proxy class
16562
16563         * ecore.cs (SimpleNameResolve): Avoid testing two times for
16564         current_block != null.
16565
16566         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
16567         not cope with strings, as it has been moved to the
16568         TableSwitchEmit.  Fixed bug in switch generation.
16569
16570         * expression.cs (New.DoResolve): Provide more context for the user
16571         when reporting an error.
16572
16573         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
16574         pointers. 
16575
16576         * expression.cs (MemberAccess.DoResolve): When we get a type back,
16577         check the permissions for it.  Note than in a type-resolution
16578         context the check was already present in DeclSpace.ResolveType,
16579         but was missing from the MemberAccess.
16580
16581         (ArrayCreation.CheckIndices): warn if the user has
16582         more nested levels of expressions, but there are no more
16583         dimensions specified.  Avoids crash on bug 41906.
16584
16585 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
16586
16587         * statement.cs (Block): replace Implicit bool, for a generic
16588         flags.   
16589         New flag: `Unchecked'.  This is used during the EmitMeta phase
16590         (which is out-of-line with the regular Resolve/Emit process for a
16591         statement, as this is done ahead of time, but still gets a chance
16592         to call constant resolve).
16593
16594         (Block.Flags): new enum for adding a new flag.
16595
16596         (Block.EmitMeta): track the state of unchecked.
16597
16598         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
16599         to enable constant resolution to work there as well.
16600
16601 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
16602
16603         * typemanager.cs (ienumerable_type): Also look up
16604         System.Collections.IEnumerable. 
16605
16606 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
16607
16608         TODO: Test more than one conditional per method.
16609
16610         * class.cs (Indexer.Define): Report the location where the user is
16611         referencing the unsupported feature.
16612
16613         (MethodData): Overload the use of `conditionals' to
16614         minimize the creation of needless ArrayLists.   This saves roughly
16615         212kb on my machine.
16616
16617         (Method): Implement the new IIteratorContainer interface.
16618         (Method.SetYields): Implement the method by setting the ModFlags
16619         to contain METHOD_YIELDS.
16620
16621         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
16622         which just got set to null.
16623
16624         * iterators.cs: New file.
16625
16626         (Yield, YieldBreak): New statements.
16627
16628         * statement.cs (Return.Resolve): Flag an error if we are used in
16629         an iterator method.
16630
16631         * codegen.cs (InIterator): New flag set if the code is being
16632         compiled in an iterator method.
16633
16634         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
16635         internal modifier, and we just use it to avoid adding extra
16636         fields, as this is seldom used.  
16637
16638         * cs-parser.jay: Add yield_statement (yield and yield break).
16639
16640         * driver.cs: New flag -v2 to turn on version 2 features. 
16641
16642         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
16643         hashtable when v2 is enabled.
16644
16645 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
16646
16647         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
16648         there is already a namespace defined with this name.
16649
16650         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
16651         people upgraded their corlibs.
16652
16653         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
16654         always use fully qualified types, no need to use the compiler
16655         front end.
16656
16657         (TypeManager.IsNamespace): Use binarysearch.
16658
16659         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
16660         AddDelegate): I did not quite use the new IsValid API properly: I
16661         have to pass the short-name and the fullname.  I was passing only
16662         the basename instead of the fullname sometimes. 
16663
16664         (TypeContainer.DefineType): call NamespaceClash.
16665
16666         * interface.cs (Interface.DefineType): use NamespaceClash before
16667         defining the type.
16668
16669         * delegate.cs (Delegate.DefineType): use NamespaceClash before
16670         defining the type.
16671
16672         * enum.cs: (Enum.DefineType): use NamespaceClash before
16673         defining the type.
16674
16675         * typemanager.cs (: 3-line patch that gives us some tasty 11%
16676         speed increase.  First, use the negative_hits cache when we get a
16677         negative.  Second, add the type with its full original name
16678         instead of the new . and + encoded name (reflection uses + to
16679         separate type from a nested type).  Use LookupTypeReflection
16680         directly which bypasses the type->name hashtable (that we already
16681         know does not contain the type.
16682
16683         * decl.cs (DeclSpace.ResolveTypeExpr): track the
16684         location/container type. 
16685
16686         * driver.cs: When passing utf8, use directly the UTF8Encoding.
16687
16688 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
16689
16690         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
16691
16692         * delegate.cs (NewDelegate.Resolve): Test whether an instance
16693         method is being referenced in the method group from a static
16694         context, and report error 120 if so.
16695
16696         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
16697         Error118. 
16698
16699         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
16700         is created, we create the A namespace).
16701
16702         * cs-parser.jay: A namespace also introduces a DeclarationFound.
16703         Fixes #41591
16704
16705 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
16706
16707         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
16708         invocation to ModuleBuilder.GetType with the same values will
16709         return a new type instance, so we need to cache its return
16710         values. 
16711
16712         * expression.cs (Binary.ResolveOperator): Only allow the compare
16713         operators on enums if they are of the same type.
16714
16715         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
16716         types of ValueType on their own case.  Before we were giving them
16717         the same treatment as objects.
16718
16719         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
16720         fullname.  Short name is used to compare against container name.
16721         Fullname is used to check against defined namespace names.
16722
16723         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
16724         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
16725
16726         (Method.CheckBase): Call parent.
16727         (MemberBase.CheckBase): Check for protected members on sealed
16728         classes.
16729         (PropertyBase.CheckBase): Call parent.
16730         (Field.Define): Call parent.
16731
16732         * report.cs: Negative error codes are now mapped to 8000 - code,
16733         so that the display is render more nicely.
16734
16735         * typemanager.cs: Do not use try/catch, instead report a regular
16736         error. 
16737
16738         (GetPointerType, GetReferenceType): These methods provide
16739         mechanisms to obtain the T* and T& from a T.  We had the code
16740         previously scattered around the code base, and it also used
16741         TypeManager.LookupType that would go through plenty of caches.
16742         This one goes directly to the type source.
16743
16744         In some places we did the Type.GetType followed by
16745         ModuleBuilder.GetType, but not in others, so this unifies the
16746         processing as well.
16747
16748         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
16749         statements now that we have namespace information.
16750
16751         * typemanager.cs (IsNamespace): New method, returns whether the
16752         string presented is a namespace or not.
16753
16754         (ComputeNamespaces): New public entry point, computes the list of
16755         available namespaces, using the GetNamespaces API call in Mono, or
16756         the slower version in MS.NET.   
16757
16758         Now before we start the semantic analysis phase, we have a
16759         complete list of namespaces including everything that the user has
16760         provided.
16761
16762         Deleted old code to cache namespaces in .nsc files.
16763
16764 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
16765
16766         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
16767         class/struct location definition Location for the implicit
16768         constructor location.
16769
16770         (Operator.Define): Use the location of the operator for the
16771         implicit Method definition.
16772
16773         (Constructor.Emit): use the constructor location for the implicit
16774         base initializer constructor.
16775
16776         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
16777         and the Expression class now contains two new methods:
16778
16779         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
16780         isolate type lookup from the rest of the resolution process.
16781
16782         Since we use Expressions to hold type definitions due to the way
16783         we parse the input we have historically overloaded Resolve to
16784         perform the Type lookups if a special flag is passed.  Now this is
16785         eliminated and two methods take their place. 
16786
16787         The differences in the two methods between xStep and xTerminal is
16788         that xStep is involved in our current lookup system that uses
16789         SimpleNames to compose a name, while xTerminal is used just to
16790         catch the case where the simplename lookup failed.
16791
16792 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
16793
16794         * expression.cs (ResolveMemberAccess): Remove redundant code.
16795         TypeExpr expressions are always born fully resolved.
16796
16797         * interface.cs (PopulateMethod): Do not lookup the types twice.
16798         We were doing it once during SemanticAnalysis and once during
16799         PopulateMethod.
16800
16801         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
16802         in local variable type definitions, were being returned as a
16803         SimpleName (we decomposed everything into a string), that is
16804         because primary_expression was being used instead of a type in the
16805         grammar (reduce/reduce conflicts).
16806
16807         The part that was wrong is that we converted the expression into a
16808         string (an oversimplification in one hand, compounded with primary
16809         expressions doing string concatenation).
16810
16811         So things like:
16812
16813         A.B.C [] x;
16814
16815         Would return "A.B.C[]" as a SimpleName.  This stopped things like
16816         using clauses from working on this particular context.  And a type
16817         was being matched directly against "A.B.C[]".
16818
16819         We now use the correct approach, and allow for ComposedCast to be
16820         part of the unary expression.  So the "A.B.C []" become a composed
16821         cast of "A.B.C" (as a nested group of MemberAccess with a
16822         SimpleName at the end) plus the rank composition "[]". 
16823
16824         Also fixes 35567
16825
16826 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
16827
16828         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
16829         for the access level checking.
16830
16831         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
16832         `TypeContainer container', because I kept getting confused when I
16833         was debugging this code.
16834
16835         * expression.cs (Indexers): Instead of tracking getters/setters,
16836         we now track them in parallel.  We create one arraylist less, but
16837         most importantly it is possible now for the LValue code to find a
16838         matching get for a set.
16839
16840         (IndexerAccess.DoResolveLValue): Update the code.
16841         GetIndexersForType has been modified already to extract all the
16842         indexers from a type.  The code assumed it did not.
16843
16844         Also make the code set the correct return type for the indexer.
16845         This was fixed a long time ago for properties, but was missing for
16846         indexers.  It used to be void_type.
16847
16848         (Binary.Emit): Test first for doubles instead of
16849         floats, as they are more common.
16850
16851         (Binary.EmitBranchable): Use the .un version of the branch opcodes
16852         when dealing with floats and the <=, >= operators.  This fixes bug
16853         #39314 
16854
16855         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
16856         to load the array value by emitting a load on the foreach variable
16857         type.  This was incorrect.  
16858
16859         We now emit the code to load an element using the the array
16860         variable type, and then we emit the conversion operator.
16861
16862         Fixed #40176
16863
16864 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
16865
16866         * attribute.cs: Avoid allocation of ArrayLists in the common case.
16867
16868 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
16869
16870         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
16871         test for protection before we test for signatures. 
16872
16873         (MethodSignature.ToString): implement.
16874
16875         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
16876         to the case where we reduced into a LongConstant.
16877
16878         * decl.cs (CheckAccessLevel): If the type is an array, we can not
16879         depend on whether the information is acurrate, because the
16880         Microsoft runtime will always claim that the array type is public,
16881         regardless of the real state.
16882
16883         If the type is a pointer, another problem happens: the type is
16884         reported as non-public in Microsoft.  
16885
16886         In both cases we have to call CheckAccessLevel recursively with
16887         the underlying type as the argument to be tested.
16888
16889 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
16890
16891         * assign.cs (Assign.Emit): If we are dealing with a compound
16892         assignment expression, we should use the code path that stores the
16893         intermediate result in a temporary value.  This fixes #40903.
16894
16895         *expression.cs (Indirection.ToString): Provide ToString method for
16896         debugging. 
16897
16898 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
16899
16900         * class.cs: Null out fields holding references to Block objects so
16901         they can be garbage collected.
16902
16903         * expression.cs (OverloadResolve): Remove unused local.
16904
16905 2003-04-07  Martin Baulig  <martin@ximian.com>
16906
16907         * codegen.cs (EmitContext.CurrentFile): New public field.
16908         (EmitContext.Mark): Use the CurrentFile to check whether the
16909         location is in the correct file.
16910         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
16911
16912 2003-04-07  Martin Baulig  <martin@ximian.com>
16913
16914         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
16915
16916         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
16917         location.  [FIXME: The location argument which gets passed to this
16918         method is sometimes wrong!]
16919
16920 2003-04-07  Nick Drochak <ndrochak@gol.com>
16921
16922         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
16923
16924 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
16925
16926         * expression.cs (Indirection.EmitAssign): We were using the
16927         temporary, but returning immediately instead of continuing the
16928         EmitAssing flow.
16929
16930 2003-04-06  Martin Baulig  <martin@ximian.com>
16931
16932         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
16933         if it's a nested child, but also deriving from the outer class.
16934         See test 190.cs.
16935
16936         * typemanager.cs (IsNestedChildOf): Make this work if it's a
16937         nested child, but also deriving from the outer class.  See
16938         test-190.cs.
16939         (FilterWithClosure): We may access private members of the outer
16940         class if we're a nested child and deriving from the outer class.
16941         (RealMemberLookup): Only set `closure_private_ok' if the
16942         `original_bf' contained BindingFlags.NonPublic.
16943
16944 2003-04-05  Martin Baulig  <martin@ximian.com>
16945
16946         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
16947
16948 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
16949
16950         * class.cs (Event.Define): Do not allow abstract events to have
16951         initializers. 
16952
16953 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
16954
16955         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
16956         block in event declarations.
16957
16958         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
16959         value type, get its address.
16960
16961         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
16962         leaving a class on the stack instead of a boolean value (int
16963         0/1).  Change the code so we compare against null, and then the
16964         result against zero.
16965
16966         * class.cs (TypeContainer.GetClassBases): We were checking for the
16967         parent class being sealed too late.
16968
16969         * expression.cs (Binary.Emit): For <= and >= when dealing with
16970         floating point values, use cgt.un and clt.un instead of cgt and
16971         clt alone.
16972
16973 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
16974
16975         * statement.cs: Apply the same optimization as MS: skip the 
16976         GetEnumerator returning an IEnumerator, and use the one returning a 
16977         CharEnumerator instead. This allows us to avoid the try-finally block 
16978         and the boxing.
16979
16980 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
16981
16982         * cs-parser.jay: Attributes cannot be applied to
16983                          namespaces. Fixes #40473
16984
16985 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16986
16987         * class.cs:
16988         (Add*): check if the name is valid using the full name for constants,
16989         fields, properties and events.
16990
16991 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
16992
16993         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
16994         char constants to be part of the enumeration.
16995
16996         * expression.cs (Conditional.DoResolve): Add support for operator
16997         true. Implements the missing functionality from 14.12
16998
16999         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
17000         operator true/false as required by the spec.
17001
17002         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
17003         implicit conversion to boolean.
17004
17005         * statement.cs (Statement.ResolveBoolean): A boolean expression is
17006         also one where the type implements `operator true'. 
17007
17008         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
17009         get an expression that will invoke operator true based on an
17010         expression.  
17011
17012         (GetConversionOperators): Removed the hack that called op_True
17013         here.  
17014
17015         (Expression.ResolveBoolean): Move this from Statement.
17016
17017 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
17018
17019         * ecore.cs (FieldExpr): do not allow initialization of initonly
17020         fields on derived classes
17021
17022 2003-03-13  Martin Baulig  <martin@ximian.com>
17023
17024         * statement.cs (Block.Emit): Call ig.BeginScope() and
17025         ig.EndScope() when compiling with debugging info; call
17026         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
17027
17028 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
17029
17030         * expression.cs (Indexers): Do not construct immediately, allow
17031         for new members to be appended as we go.  Fixes 38143
17032
17033 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17034
17035         * expression.cs: save/restore context when resolving an unchecked
17036         expression.
17037
17038 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
17039
17040         * cfold.cs: Catch division by zero in modulus operator during
17041         constant folding.
17042
17043 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
17044
17045         * interface.cs (Interface.DefineMembers): Avoid defining members
17046         twice. 
17047
17048 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
17049
17050         * driver.cs: handle the +/- options for -noconfig
17051
17052         * statement.cs (Unckeched.Resolve): Also track the state of
17053         unchecked in the Resolve phase.
17054
17055 2003-02-27  Martin Baulig  <martin@ximian.com>
17056
17057         * ecore.cs (Expression.MemberLookup): Don't create a
17058         MethodGroupExpr for something which is not a method.  Fixes #38291.
17059
17060 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
17061
17062         * class.cs (MemberBase.CheckParameters): Also check that the type
17063         is unmanaged if it is a pointer.
17064
17065         * expression.cs (SizeOf.Resolve): Add location information.
17066
17067         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
17068         a managed type is declared.
17069
17070         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
17071         parameter modifiers as well.  Fixes bug 38606
17072
17073         * class.cs: Very sad.  Am backing out the speed up changes
17074         introduced by the ArrayList -> Array in the TypeContainer, as they
17075         were not actually that much faster, and introduced a bug (no error
17076         reports on duplicated methods).
17077
17078         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
17079         source first, this will guarantee that we have a valid expression
17080         before calling in lower levels functions that will require a
17081         resolved object.  Then use this original_source in the
17082         target.ResolveLValue instead of the original source that was
17083         passed to us.
17084
17085         Another change.  Use target.Resolve instead of LValueResolve.
17086         Although we are resolving for LValues, we will let the Assign code
17087         take care of that (it will be called again from Resolve).  This
17088         basically allows code like this:
17089
17090         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
17091         class Y { void A (X x) { x [0] += o; }
17092
17093         The problem was that the indexer was trying to resolve for
17094         set_Item (idx, object o) and never finding one.  The real set_Item
17095         was set_Item (idx, X).  By delaying the process we get the right
17096         semantics. 
17097
17098         Fixes bug 36505
17099
17100 2003-02-23  Martin Baulig  <martin@ximian.com>
17101
17102         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
17103         while calling DoEmit ().
17104
17105         * codegen.cs (EmitContext.Mark): Don't mark locations in other
17106         source files; if you use the #line directive inside a method, the
17107         compiler stops emitting line numbers for the debugger until it
17108         reaches the end of the method or another #line directive which
17109         restores the original file.
17110
17111 2003-02-23  Martin Baulig  <martin@ximian.com>
17112
17113         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
17114
17115 2003-02-23  Martin Baulig  <martin@ximian.com>
17116
17117         * statement.cs (Block.AddChildVariableNames): We need to call this
17118         recursively, not just for our immediate children.
17119
17120 2003-02-23  Martin Baulig  <martin@ximian.com>
17121
17122         * class.cs (Event.Define): Always make the field private, like csc does.
17123
17124         * typemanager.cs (TypeManager.RealMemberLookup): Make events
17125         actually work, fixes bug #37521.
17126
17127 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
17128
17129         * delegate.cs: When creating the various temporary "Parameters"
17130         classes, make sure that we call the ComputeAndDefineParameterTypes
17131         on those new parameters (just like we do with the formal ones), to
17132         allow them to be resolved in the context of the DeclSpace.
17133
17134         This fixes the bug that Dick observed in Bugzilla #38530.
17135
17136 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
17137
17138         * expression.cs (ResolveMemberAccess): When resolving a constant,
17139         do not attempt to pull a constant if the value was not able to
17140         generate a valid constant.
17141
17142         * const.cs (LookupConstantValue): Do not report more errors than required.
17143
17144 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17145
17146         * expression.cs: fixes bug #38328.
17147
17148 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17149
17150         * class.cs: Changed all the various members that can be part of a
17151         class from being an ArrayList to be an Array of the right type.
17152         During the DefineType type_list, interface_list, delegate_list and
17153         enum_list are turned into types, interfaces, delegates and enums
17154         arrays.  
17155
17156         And during the member population, indexer_list, event_list,
17157         constant_list, field_list, instance_constructor_list, method_list,
17158         operator_list and property_list are turned into their real arrays.
17159
17160         Although we could probably perform this operation earlier, for
17161         good error reporting we need to keep the lists and remove the
17162         lists for longer than required.
17163
17164         This optimization was triggered by Paolo profiling the compiler
17165         speed on the output of `gen-sample-program.pl' perl script. 
17166
17167         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
17168         not crash in methods like MemberLookupFailed that use this field.  
17169
17170         This problem arises when the compiler fails to resolve a type
17171         during interface type definition for example.
17172
17173 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17174
17175         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
17176         inherit from System.Object, so we have to stop at null, not only
17177         when reaching System.Object.
17178
17179 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
17180
17181         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
17182         DeclaredOnly because the parent indexer might have had a different
17183         name, but did not loop until the top of the hierarchy was reached.
17184
17185         The problem this one fixes is 35492: when a class implemented an
17186         indexer from an interface, we were getting the interface method
17187         (which was abstract) and we were flagging an error (can not invoke
17188         abstract method).
17189
17190         This also keeps bug 33089 functioning, and test-148 functioning.
17191
17192         * typemanager.cs (IsSpecialMethod): The correct way of figuring
17193         out if a method is special is to see if it is declared in a
17194         property or event, or whether it is one of the predefined operator
17195         names.   This should fix correctly #36804.
17196
17197 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
17198
17199         The goal here is to remove the dependency on EmptyCast.Peel ().
17200         Killing it completely.
17201
17202         The problem is that currently in a number of places where
17203         constants are expected, we have to "probe" for an EmptyCast, and
17204         Peel, which is not the correct thing to do, as this will be
17205         repetitive and will likely lead to errors. 
17206
17207         The idea is to remove any EmptyCasts that are used in casts that
17208         can be reduced to constants, so we only have to cope with
17209         constants. 
17210
17211         This bug hunt was triggered by Bug 37363 and the desire to remove
17212         the duplicate pattern where we were "peeling" emptycasts to check
17213         whether they were constants.  Now constants will always be
17214         constants.
17215
17216         * ecore.cs: Use an enumconstant here instead of wrapping with
17217         EmptyCast.  
17218
17219         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
17220         throwing me off.  By handling this we can get rid of a few hacks.
17221
17222         * statement.cs (Switch): Removed Peel() code.
17223
17224 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
17225
17226         * class.cs: Location information for error 508
17227
17228         * expression.cs (New.DoResolve): Add a guard against double
17229         resolution of an expression.  
17230
17231         The New DoResolve might be called twice when initializing field
17232         expressions (see EmitFieldInitializers, the call to
17233         GetInitializerExpression will perform a resolve on the expression,
17234         and later the assign will trigger another resolution
17235
17236         This leads to bugs (#37014)
17237
17238         * delegate.cs: The signature for EndInvoke should contain any ref
17239         or out parameters as well.  We were not doing this in the past. 
17240
17241         * class.cs (Field.Define): Do not overwrite the type definition
17242         inside the `volatile' group.  Turns out that volatile enumerations
17243         were changing the type here to perform a validity test, which
17244         broke conversions. 
17245
17246 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
17247
17248         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
17249         and structs, we do not want to load the instance variable
17250
17251         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
17252         enum_type has to be handled like an object reference (implicit
17253         conversions exists from this to object), but the regular IsClass
17254         and IsValueType tests will never return true for this one.
17255
17256         Also we use TypeManager.IsValueType instead of type.IsValueType,
17257         just for consistency with the rest of the code (this is only
17258         needed if we ever use the construct exposed by test-180.cs inside
17259         corlib, which we dont today).
17260
17261 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
17262
17263         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
17264         just InternalCall.
17265
17266 2003-02-09  Martin Baulig  <martin@ximian.com>
17267
17268         * namespace.cs (Namespace..ctor): Added SourceFile argument.
17269         (Namespace.DefineNamespaces): New static public method; this is
17270         called when we're compiling with debugging to add all namespaces
17271         to the symbol file.
17272
17273         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
17274         pass it to the Namespace's .ctor.
17275
17276         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
17277         and MethodBase arguments; pass the namespace ID to the symwriter;
17278         pass the MethodBase instead of the token to the symwriter.
17279         (SymbolWriter.DefineNamespace): New method to add a namespace to
17280         the symbol file.
17281
17282 2003-02-09  Martin Baulig  <martin@ximian.com>
17283
17284         * symbolwriter.cs: New file.  This is a wrapper around
17285         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
17286         methods here in near future.
17287
17288 2003-02-09  Martin Baulig  <martin@ximian.com>
17289
17290         * codegen.cs (EmitContext.Mark): Just pass the arguments to
17291         ILGenerator.MarkSequencePoint() which are actually used by the
17292         symbol writer.
17293
17294 2003-02-09  Martin Baulig  <martin@ximian.com>
17295
17296         * location.cs (SourceFile): New public sealed class.  This
17297         contains the name and an index which is used in the location's token.
17298         (Location): Reserve an appropriate number of bits in the token for
17299         the source file instead of walking over that list, this gives us a
17300         really huge performance improvement when compiling with debugging.
17301
17302         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
17303         `SourceFile' argument instead of a string.
17304         (Driver.ProcessFile): Add all the files via Location.AddFile(),
17305         but don't parse/tokenize here, we need to generate the list of all
17306         source files before we do that.
17307         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
17308         the files.
17309
17310         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
17311         instead of a string.
17312
17313         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
17314         of a string.
17315
17316 2003-02-09  Martin Baulig  <martin@ximian.com>
17317
17318         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
17319         filename on `#line default'.
17320
17321 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
17322
17323         * statement.cs: don't clear the pinned var when the fixed statement
17324         returns from the method (fixes bug#37752).
17325
17326 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
17327
17328         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
17329         to IsValueType.
17330
17331 2003-02-07  Martin Baulig  <martin@ximian.com>
17332
17333         * driver.cs: Removed the `--debug-args' command line argument.
17334
17335         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
17336         automatically by the AsssemblyBuilder.
17337         (CodeGen.InitializeSymbolWriter): We don't need to call any
17338         initialization function on the symbol writer anymore.  This method
17339         doesn't take any arguments.
17340
17341 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
17342
17343         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
17344         from referenced assemblies as well.
17345
17346 2003-02-02  Martin Baulig  <martin@ximian.com>
17347
17348         * class.cs (MethodData.Emit): Generate debugging info for external methods.
17349
17350 2003-02-02  Martin Baulig  <martin@ximian.com>
17351
17352         * class.cs (Constructor.Emit): Open the symbol writer before
17353         emitting the constructor initializer.
17354         (ConstructorInitializer.Emit): Call ec.Mark() to allow
17355         single-stepping through constructor initializers.
17356
17357 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
17358
17359         * class.cs: Handle error 549: do not allow virtual methods in
17360         sealed classes. 
17361
17362 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
17363
17364         * decl.cs: Check access levels when resolving types
17365
17366 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
17367
17368         * statement.cs: Add parameters and locals set in catch blocks that might 
17369         return to set vector
17370
17371 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
17372
17373         * class.cs (Operator): Set the SpecialName flags for operators.
17374
17375         * expression.cs (Invocation.DoResolve): Only block calls to
17376         accessors and operators on SpecialName methods.
17377
17378         (Cast.TryReduce): Handle conversions from char constants.
17379
17380
17381 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
17382
17383         * statement.cs: small memory and time optimization in FlowBranching.
17384
17385 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
17386
17387         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
17388         problem that the last fix but in the other sid (Set).
17389
17390         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
17391         access when there is no indexer in the hierarchy.
17392
17393 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
17394
17395         * class.cs: Combine some if statements.
17396
17397 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17398
17399         * driver.cs: fixed bug #37187.
17400
17401 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
17402
17403         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
17404         any indexer, it's needed to build a list with all the indexers in the
17405         hierarchy (AllGetters), else we have problems. Fixes #35653.
17406
17407 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
17408
17409         * class.cs (MethodData.Define): It is wrong for an interface
17410         implementation to be static in both cases: explicit and implicit.
17411         We were only handling this in one case.
17412
17413         Improve the if situation there to not have negations.
17414
17415         * class.cs (Field.Define): Turns out that we do not need to check
17416         the unsafe bit on field definition, only on usage.  Remove the test.
17417
17418 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17419
17420         * driver.cs: use assembly.Location instead of Codebase (the latest
17421         patch made mcs fail when using MS assemblies).
17422
17423 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
17424
17425         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
17426         get the path to *corlib.dll.
17427
17428 2003-01-21  Nick Drochak <ndrochak@gol.com>
17429
17430         * cs-tokenizer.cs:
17431         * pending.cs:
17432         * typemanager.cs: Remove compiler warnings
17433
17434 2003-01-20  Duncan Mak  <duncan@ximian.com>
17435
17436         * AssemblyInfo.cs: Bump the version number to 0.19.
17437
17438 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17439
17440         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
17441
17442 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
17443
17444         * class.cs (Constructor::Emit): Emit debugging info for constructors.
17445
17446 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
17447
17448         * cs-parser.jay: Small fix: we were not comparing the constructor
17449         name correctly.   Thanks to Zoltan for the initial pointer.
17450
17451 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
17452
17453         * cs-tokenizer.cs: Set file name when specified with #line
17454
17455 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
17456
17457         * cs-parser.jay: Only perform the constructor checks here if we
17458         are named like the class;  This will help provider a better
17459         error.  The constructor path is taken when a type definition is
17460         not found, but most likely the user forgot to add the type, so
17461         report that rather than the constructor error.
17462
17463 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
17464
17465         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
17466         allocations.
17467
17468 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17469
17470         * cs-parser.jay: Add cleanup call.
17471
17472 2003-01-13  Duncan Mak  <duncan@ximian.com>
17473
17474         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
17475         consistent with other methods.
17476
17477 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17478
17479         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
17480
17481 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
17482
17483         * attribute.cs: only set GuidAttr to true when we have a
17484         GuidAttribute.
17485
17486 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17487
17488         * ecore.cs:
17489         * expression.cs:
17490         * typemanager.cs: fixes to allow mcs compile corlib with the new
17491         Type.IsSubclassOf fix.
17492
17493 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
17494
17495         * expression.cs (LocalVariableReference.DoResolve): Classify a
17496         constant as a value, not as a variable.   Also, set the type for
17497         the variable.
17498
17499         * cs-parser.jay (fixed_statement): take a type instead of a
17500         pointer_type, so we can produce a better error message later.
17501
17502         * statement.cs (Fixed.Resolve): Flag types that are not pointers
17503         as an error.  
17504
17505         (For.DoEmit): Make inifinite loops have a
17506         non-conditional branch back.
17507
17508         (Fixed.DoEmit): First populate the pinned variables, then emit the
17509         statement, then clear the variables.  Before I was emitting the
17510         code once for each fixed piece.
17511
17512
17513 2003-01-08  Martin Baulig  <martin@ximian.com>
17514
17515         * statement.cs (FlowBranching.MergeChild): A break in a
17516         SWITCH_SECTION does not leave a loop.  Fixes #36155.
17517
17518 2003-01-08  Martin Baulig  <martin@ximian.com>
17519
17520         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
17521         lives in the same number space than `param_map'.  Fixes #36154.
17522
17523 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
17524
17525         * cs-parser.jay (constructor_declaration): Set the
17526         Constructor.ModFlags before probing for it.  This makes the
17527         compiler report 514, 515 and 132 (the code was there, but got
17528         broken). 
17529
17530         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
17531         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
17532         (GotoCase.Resolve): Set `Returns' to ALWAYS.
17533
17534 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
17535
17536         * enum.cs: create the enum static fields using the enum type.
17537
17538 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
17539
17540         * class.cs: don't try to create the ParamBuilder for the return
17541         type if it's not needed (and handle it breaking for the ms runtime
17542         anyway).
17543
17544 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
17545
17546         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
17547
17548 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
17549
17550         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
17551         the command.   This showed up while compiling the JANET source
17552         code, which used \r as its only newline separator.
17553
17554 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
17555
17556         * class.cs (Method.Define): If we are an operator (because it
17557         reuses our code), then set the SpecialName and HideBySig.  #36128
17558
17559 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
17560
17561         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
17562         exception, report error 120 `object reference required'.
17563
17564         * driver.cs: Add --pause option, used during to measure the size
17565         of the process as it goes with --timestamp.
17566
17567         * expression.cs (Invocation.DoResolve): Do not allow methods with
17568         SpecialName to be invoked.
17569
17570 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
17571
17572         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
17573         number before adding it.
17574
17575 2002-12-21  Ravi Pratap  <ravi@ximian.com>
17576
17577         * ecore.cs (StandardImplicitConversion): When in an unsafe
17578         context, we allow conversion between void * to any other pointer
17579         type. This fixes bug #35973.
17580
17581 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
17582
17583         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
17584         is not thrown when extensionless outputs are used 
17585
17586 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17587
17588         * rootcontext.cs: fixed compilation of corlib.
17589
17590 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
17591
17592         * attribute.cs (Attributes.Contains): Add new method.
17593
17594         * class.cs (MethodCore.LabelParameters): if the parameter is an
17595         `out' parameter, check that no attribute `[In]' has been passed.
17596
17597         * enum.cs: Handle the `value__' name in an enumeration.
17598
17599 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
17600
17601         * decl.cs: Added special case to allow overrides on "protected
17602         internal" methods
17603
17604 2002-12-18  Ravi Pratap  <ravi@ximian.com>
17605
17606         * attribute.cs (Attributes.AddAttributeSection): Rename to this
17607         since it makes much more sense.
17608
17609         (Attributes.ctor): Don't require a Location parameter.
17610
17611         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
17612
17613         * attribute.cs (ApplyAttributes): Remove extra Location parameters
17614         since we already have that information per attribute.
17615
17616         * everywhere : make appropriate changes.
17617
17618         * class.cs (LabelParameters): Write the code which actually
17619         applies attributes to the return type. We can't do this on the MS
17620         .NET runtime so we flag a warning in the case an exception is
17621         thrown.
17622
17623 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
17624
17625         * const.cs: Handle implicit null conversions here too.
17626
17627 2002-12-17  Ravi Pratap  <ravi@ximian.com>
17628
17629         * class.cs (MethodCore.LabelParameters): Remove the extra
17630         Type [] parameter since it is completely unnecessary. Instead
17631         pass in the method's attributes so that we can extract
17632         the "return" attribute.
17633
17634 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
17635
17636         * cs-parser.jay (parse): Use Report.Error to flag errors instead
17637         of ignoring it and letting the compile continue.
17638
17639         * typemanager.cs (ChangeType): use an extra argument to return an
17640         error condition instead of throwing an exception.
17641
17642 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
17643
17644         * expression.cs (Unary.TryReduce): mimic the code for the regular
17645         code path.  Perform an implicit cast in the cases where we can
17646         implicitly convert to one of the integral types, and then reduce
17647         based on that constant.   This fixes bug #35483.
17648
17649 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17650
17651         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
17652
17653 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17654
17655         * namespace.cs: fixed bug #35489.
17656
17657 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
17658
17659         * class.cs: Remove some dead code.
17660
17661         * cs-parser.jay: Estimate the number of methods needed
17662         (RootContext.MethodCount);
17663
17664         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
17665         numbers instead of StringBuilders.
17666
17667         * support.cs (PtrHashtable): Add constructor with initial size;
17668         We can now reduce reallocations of the method table.
17669
17670 2002-12-10  Ravi Pratap  <ravi@ximian.com>
17671
17672         * attribute.cs (ApplyAttributes): Keep track of the emitted
17673         attributes on a per-target basis. This fixes bug #35413.
17674
17675 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
17676
17677         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
17678         default to the Windows 1252 encoding.
17679
17680         (UnixParseOption): Support version, thanks to Alp for the missing
17681         pointer. 
17682
17683         * AssemblyInfo.cs: Add nice assembly information.
17684
17685         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
17686         (bug 35169).
17687
17688         * cs-parser.jay: Allow a trailing comma before the close bracked
17689         in the attribute_section production.
17690
17691         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
17692         address of the instance was being taken, I will take this out,
17693         because we take the address of the object immediately here.
17694
17695 2002-12-09  Ravi Pratap  <ravi@ximian.com>
17696
17697         * typemanager.cs (AreMultipleAllowed): Take care of the most
17698         obvious case where attribute type is not in the current assembly -
17699         stupid me ;-)
17700
17701 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
17702
17703         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
17704         definitions, instead of doing that afterwards.  
17705
17706         Also we use a nice little hack, depending on the constructor, we
17707         know if we are a "composed" name or a simple name.  Hence, we
17708         avoid the IndexOf test, and we avoid 
17709
17710         * codegen.cs: Add code to assist in a bug reporter to track down
17711         the source of a compiler crash. 
17712
17713 2002-12-07  Ravi Pratap  <ravi@ximian.com>
17714
17715         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
17716         types have been emitted for a given element and flag an error
17717         if something which does not have AllowMultiple set is used more
17718         than once.
17719
17720         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
17721         attribute types and their corresponding AllowMultiple properties
17722
17723         (AreMultipleAllowed): Check the property for a given type.
17724
17725         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
17726         property in the case we have a TypeContainer.
17727
17728         (Attributes.AddAttribute): Detect duplicates and just skip on
17729         adding them. This trivial fix catches a pretty gross error in our
17730         attribute emission - global attributes were being emitted twice!
17731
17732         Bugzilla bug #33187 is now fixed.
17733
17734 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
17735
17736         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
17737         instead of pp_and).
17738
17739         * expression.cs (Binary.ResolveOperator): I can only use the
17740         Concat (string, string, string) and Concat (string, string,
17741         string, string) if the child is actually a concatenation of
17742         strings. 
17743
17744 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
17745
17746         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
17747         context where we need a 2-character lookahead.
17748
17749         * pending.cs (PendingImplementation): Rework so we can keep track
17750         of interface types all the time, and flag those which were
17751         implemented by parents as optional.
17752
17753 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
17754
17755         * expression.cs (Binary.ResolveOperator): Use
17756         String.Concat(string,string,string) or
17757         String.Concat(string,string,string,string) when possible. 
17758
17759         * typemanager: More helper methods.
17760
17761
17762 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
17763
17764         * pending.cs: remove the bogus return from GetMissingInterfaces()
17765         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
17766
17767 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17768
17769         * namespace.cs: avoid duplicated 'using xxx' being added to
17770         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
17771         when we get more than one 'using' statement for the same namespace.
17772         Report a CS0105 warning for it.
17773
17774 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
17775
17776         * cs-tokenizer.cs (consume_identifier): use read directly, instead
17777         of calling getChar/putback, uses internal knowledge of it.    
17778
17779         (xtoken): Reorder tokenizer so most common patterns are checked
17780         first.  This reduces the compilation time in another 5% (from 8.11s
17781         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
17782
17783         The parsing time is 22% of the compilation in mcs, and from that
17784         64% is spent on the tokenization process.  
17785
17786         I tried using a binary search for keywords, but this is slower
17787         than the hashtable.  Another option would be to do a couple of
17788         things:
17789
17790                 * Not use a StringBuilder, instead use an array of chars,
17791                   with a set value.  Notice that this way we could catch
17792                   the 645 error without having to do it *afterwards*.
17793
17794                 * We could write a hand-parser to avoid the hashtable
17795                   compares altogether.
17796
17797         The identifier consumption process takes 37% of the tokenization
17798         time.  Another 15% is spent on is_number.  56% of the time spent
17799         on is_number is spent on Int64.Parse:
17800
17801                 * We could probably choose based on the string length to
17802                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
17803                   computations. 
17804
17805         Another 3% is spend on wrapping `xtoken' in the `token' function.
17806
17807         Handle 0xa0 as whitespace (#34752)
17808
17809 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
17810
17811         * typemanager.cs (IsCLRType): New routine to tell whether a type
17812         is one of the builtin types.  
17813
17814         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
17815         typecode in more places instead of doing pointer comparissions.
17816         We could leverage some knowledge about the way the typecodes are
17817         laid out.
17818
17819         New code to cache namespaces in assemblies, it is currently not
17820         invoked, to be used soon.
17821
17822         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
17823
17824         * expression.cs (Binary.ResolveOperator): specially handle
17825         strings, and do not perform user-defined operator overloading for
17826         built-in types.
17827
17828 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
17829
17830         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
17831         internalcall as it is a pretty simple operation;  Avoid whenever
17832         possible to call Char.IsLetter.
17833
17834         (consume_identifier): Cut by half the number of
17835         hashtable calls by merging the is_keyword and GetKeyword behavior.
17836
17837         Do not short-circuit, because if we do, we
17838         report errors (ie, #if false && true would produce an invalid
17839         directive error);
17840
17841
17842 2002-11-24  Martin Baulig  <martin@ximian.com>
17843
17844         * expression.cs (Cast.TryReduce): If we're in checked syntax,
17845         check constant ranges and report a CS0221.  Fixes #33186.
17846
17847 2002-11-24  Martin Baulig  <martin@ximian.com>
17848
17849         * cs-parser.jay: Make this work for uninitialized variable
17850         declarations in the `for' initializer.  Fixes #32416.
17851
17852 2002-11-24  Martin Baulig  <martin@ximian.com>
17853
17854         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
17855         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
17856
17857 2002-11-24  Martin Baulig  <martin@ximian.com>
17858
17859         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
17860         argument; if true, we also check for user-defined conversions.
17861         This is only needed if both arguments are of a user-defined type.
17862         Fixes #30443, added test-175.cs.
17863         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
17864
17865         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
17866
17867 2002-11-24  Martin Baulig  <martin@ximian.com>
17868
17869         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
17870         function to get the store opcode.
17871         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
17872         only emit the Ldelema if the store opcode is Stobj.  You must run
17873         both test-34 and test-167 to test this.  Fixes #34529.
17874
17875 2002-11-23  Martin Baulig  <martin@ximian.com>
17876
17877         * ecore.cs (Expression.MemberLookup): Added additional
17878         `qualifier_type' argument which is used when we're being called
17879         from MemberAccess.DoResolve() and null if we're called from a
17880         SimpleName lookup.
17881         (Expression.MemberLookupFailed): New method to report errors; this
17882         does the CS1540 check and reports the correct error message.
17883
17884         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
17885         argument for the CS1540 check and redone the way how we're dealing
17886         with private members.  See the comment in the source code for details.
17887         (FilterWithClosure): Reverted this back to revision 1.197; renamed
17888         `closure_start_type' to `closure_qualifier_type' and check whether
17889         it's not null.  It was not this filter being broken, it was just
17890         being called with the wrong arguments.
17891
17892         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
17893         and pass it the correct `qualifier_type'; this also does the error
17894         handling for us.
17895
17896 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
17897
17898         * expression.cs (Invocation.EmitParams): If the we are dealing
17899         with a non-built-in value type, load its address as well.
17900
17901         (ArrayCreation): Use a a pretty constant instead
17902         of the hardcoded value 2.   Use 6 instead of 2 for the number of
17903         static initializers.  
17904
17905         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
17906         because they are not really value types, just glorified integers. 
17907
17908         * driver.cs: Do not append .exe, the CSC compiler does not do it.
17909
17910         * ecore.cs: Remove redundant code for enumerations, make them use
17911         the same code path as everything else, fixes the casting issue
17912         with enumerations in Windows.Forms.
17913
17914         * attribute.cs: Do only cast to string if it is a string, the
17915         validation happens later.
17916
17917         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
17918         people upgrade their corlibs.
17919
17920         * ecore.cs: Oops, enumerations were not following the entire code path
17921
17922 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
17923
17924         * typemanager.cs (FilterWithClosure): Commented out the test for
17925         1540 in typemanager.cs, as it has problems when accessing
17926         protected methods from a parent class (see test-174.cs). 
17927
17928         * attribute.cs (Attribute.ValidateGuid): new method.
17929         (Attribute.Resolve): Use above.
17930
17931 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
17932
17933         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
17934
17935         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
17936         handling for enumerations, as we only needed the TypeContainer
17937         functionality to begin with (this is required for the fix below to
17938         work for enums that reference constants in a container class for
17939         example). 
17940
17941         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
17942
17943         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
17944         a valid TypeBuilder to perform lookups on.o
17945
17946         * class.cs (InheritableMemberSignatureCompare): Use true in the
17947         call to GetGetMethod and GetSetMethod, because we are comparing
17948         the signature, and we need to get the methods *even* if they are
17949         private. 
17950
17951         (PropertyBase.CheckBase): ditto.
17952
17953         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
17954         GotoCase.Resolve): Use Peel on EmpytCasts.
17955
17956         * ecore.cs (EmptyCast): drop child, add Peel method.
17957
17958 2002-11-17  Martin Baulig  <martin@ximian.com>
17959
17960         * ecore.cs (EmptyCast.Child): New public property.
17961
17962         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
17963         label resolved to an EmptyCast.  Fixes #34162.
17964         (GotoCase.Resolve): Likewise.
17965         (Block.EmitMeta): Likewise.
17966
17967 2002-11-17  Martin Baulig  <martin@ximian.com>
17968
17969         * expression.cs (Invocation.BetterConversion): Prefer int over
17970         uint; short over ushort; long over ulong for integer literals.
17971         Use ImplicitConversionExists instead of StandardConversionExists
17972         since we also need to check for user-defined implicit conversions.
17973         Fixes #34165.  Added test-173.cs.
17974
17975 2002-11-16  Martin Baulig  <martin@ximian.com>
17976
17977         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
17978         with the `true' and `false' literals.  Fixes #33151.
17979
17980 2002-11-16  Martin Baulig  <martin@ximian.com>
17981
17982         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
17983         October 22nd; don't do the cs1540 check for static members.
17984
17985         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
17986         now using our own filter here and doing the cs1540 check again.
17987
17988 2002-11-16  Martin Baulig  <martin@ximian.com>
17989
17990         * support.cs (InternalParameters): Don't crash if we don't have
17991         any fixed parameters.  Fixes #33532.
17992
17993 2002-11-16  Martin Baulig  <martin@ximian.com>
17994
17995         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
17996         when looking up static methods to make this work on Windows.
17997         Fixes #33773.
17998
17999 2002-11-16  Martin Baulig  <martin@ximian.com>
18000
18001         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
18002         a setter rather than using PropertyInfo.CanWrite.
18003
18004 2002-11-15  Nick Drochak  <ndrochak@gol.com>
18005
18006         * class.cs: Allow acces to block member by subclasses. Fixes build
18007         breaker.
18008
18009 2002-11-14  Martin Baulig  <martin@ximian.com>
18010
18011         * class.cs (Constructor.Emit): Added the extern/block check.
18012         Fixes bug #33678.
18013
18014 2002-11-14  Martin Baulig  <martin@ximian.com>
18015
18016         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
18017         iteration while looking for indexers, this is needed because the
18018         indexer may have a different name in our base classes.  Fixed the
18019         error reporting (no indexers at all, not get accessor, no
18020         overloaded match).  Fixes bug #33089.
18021         (IndexerAccess.DoResolveLValue): Likewise.
18022
18023 2002-11-14  Martin Baulig  <martin@ximian.com>
18024
18025         * class.cs (PropertyBase.CheckBase): Make this work for multiple
18026         indexers.  Fixes the first part of bug #33089.
18027         (MethodSignature.InheritableMemberSignatureCompare): Added support
18028         for properties.
18029
18030 2002-11-13  Ravi Pratap  <ravi@ximian.com>
18031
18032         * attribute.cs (Attribute.Resolve): Catch the
18033         NullReferenceException and report it since it isn't supposed to
18034         happen. 
18035
18036 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
18037
18038         * expression.cs (Binary.EmitBranchable): Also handle the cases for
18039         LogicalOr and LogicalAnd that can benefit from recursively
18040         handling EmitBranchable.  The code now should be nice for Paolo.
18041
18042 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
18043
18044         * typemanager.cs (LookupType): Added a negative-hit hashtable for
18045         the Type lookups, as we perform quite a number of lookups on
18046         non-Types.  This can be removed once we can deterministically tell
18047         whether we have a type or a namespace in advance.
18048
18049         But this might require special hacks from our corlib.
18050
18051         * TODO: updated.
18052
18053         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
18054         and double which avoids a conversion from an integer to a double.
18055
18056         * expression.cs: tiny optimization, avoid calling IsConstant,
18057         because it effectively performs the lookup twice.
18058
18059 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
18060
18061         But a bogus return here to keep the semantics of the old code
18062         until the Mono runtime is fixed.
18063
18064         * pending.cs (GetMissingInterfaces): New method used to remove all
18065         the interfaces that are already implemented by our parent
18066         classes from the list of pending methods. 
18067
18068         * interface.cs: Add checks for calls after ResolveTypeExpr.
18069
18070 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
18071
18072         * class.cs (Class.Emit): Report warning 67: event not used if the
18073         warning level is beyond 3.
18074
18075         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
18076         being a NullLiteral.
18077
18078         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
18079         specifiers. 
18080
18081         * class.cs (TypeContainer.GetClassBases): Cover a missing code
18082         path that might fail if a type can not be resolved.
18083
18084         * expression.cs (Binary.Emit): Emit unsigned versions of the
18085         operators. 
18086
18087         * driver.cs: use error 5.
18088
18089 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
18090
18091         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
18092
18093 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
18094
18095         * cs-parser.jay (switch_section): A beautiful patch from Martin
18096         Baulig that fixed 33094.
18097
18098 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
18099
18100         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
18101         Check whether the base is abstract and report an error if so.
18102
18103         * expression.cs (IndexerAccess.DoResolveLValue,
18104         IndexerAccess.DoResolve): ditto. 
18105
18106         (Invocation.DoResolve): ditto.
18107
18108         (Invocation.FullMethodDesc): Improve the report string.
18109
18110         * statement.cs (Block): Eliminate IsVariableDefined as it is
18111         basically just a wrapper for GetVariableInfo.
18112
18113         * ecore.cs (SimpleName): Use new 
18114
18115         * support.cs (ReflectionParamter.ParameterType): We unwrap the
18116         type, as we return the actual parameter ref/unref state on a
18117         different call.
18118
18119 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
18120
18121         * support.cs: Return proper flags REF/OUT fixing the previous
18122         commit.  
18123
18124         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
18125         not used to mean `ref' but `ref or out' in ParameterReference
18126
18127         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
18128         full type signature instead of calling TypeManger.CSharpName
18129         ourselves. 
18130
18131         * support.cs (InternalParameters.ParameterDesc): Do not compare
18132         directly to the modflags, because REF/OUT will actually be bitsets
18133         if set. 
18134
18135         * delegate.cs (VerifyMethod): Check also the modifiers.
18136
18137         * cs-tokenizer.cs: Fix bug where floating point values with an
18138         exponent where a sign was missing was ignored.
18139
18140         * driver.cs: Allow multiple assemblies to be specified in a single
18141         /r: argument
18142
18143 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
18144
18145         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
18146         because identifiers after a parenthesis would end up in this kind
18147         of production, and we needed to desamiguate it for having casts
18148         like:
18149
18150                 (UserDefinedType *) xxx
18151
18152 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
18153
18154         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
18155         we should set on the Bindingflags.NonPublic, but not turn on
18156         private_ok.  private_ok controls whether a Private member is
18157         returned (this is chekced on the filter routine), while the
18158         BindingFlags.NonPublic just controls whether private/protected
18159         will be allowed.   This fixes the problem part of the problem of
18160         private properties being allowed to be used in derived classes.
18161
18162         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
18163         so we can call the children DoResolveLValue method (this will
18164         properly signal errors on lvalue assignments to base properties)
18165
18166         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
18167         getter are null, and we have a property info, we know that this
18168         happened because the lookup failed, so we report an error 122 for
18169         protection level violation.
18170
18171         We also silently return if setter and getter are null in the
18172         resolve functions, this condition only happens if we have flagged
18173         the error before.  This is the other half of the problem. 
18174
18175         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
18176         not have accessibility information, that is why we were returning
18177         true in the filter function in typemanager.cs.
18178
18179         To properly report 122 (property is inaccessible because of its
18180         protection level) correctly, we report this error in ResolveAccess
18181         by failing if both the setter and the getter are lacking (ie, the
18182         lookup failed). 
18183
18184         DoResolve and DoLResolve have been modified to check for both
18185         setter/getter being null and returning silently, the reason being
18186         that I did not want to put the knowledge about this error in upper
18187         layers, like:
18188
18189         int old = Report.Errors;
18190         x = new PropertyExpr (...);
18191         if (old != Report.Errors)
18192                 return null;
18193         else
18194                 return x;
18195
18196         So the property expr is returned, but it is invalid, so the error
18197         will be flagged during the resolve process. 
18198
18199         * class.cs: Remove InheritablePropertySignatureCompare from the
18200         class, as we no longer depend on the property signature to compute
18201         whether it is possible to implement a method or not.
18202
18203         The reason is that calling PropertyInfo.GetGetMethod will return
18204         null (in .NET, in Mono it works, and we should change this), in
18205         cases where the Get Method does not exist in that particular
18206         class.
18207
18208         So this code:
18209
18210         class X { public virtual int A { get { return 1; } } }
18211         class Y : X { }
18212         class Z : Y { public override int A { get { return 2; } } }
18213
18214         Would fail in Z because the parent (Y) would not have the property
18215         defined.  So we avoid this completely now (because the alternative
18216         fix was ugly and slow), and we now depend exclusively on the
18217         method names.
18218
18219         (PropertyBase.CheckBase): Use a method-base mechanism to find our
18220         reference method, instead of using the property.
18221
18222         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
18223         routines are gone now.
18224
18225         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
18226         names, they were incorrectly named.
18227
18228         * cs-tokenizer.cs: Return are more gentle token on failure. 
18229
18230         * pending.cs (PendingImplementation.InterfaceMethod): This routine
18231         had an out-of-sync index variable, which caused it to remove from
18232         the list of pending methods the wrong method sometimes.
18233
18234 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
18235
18236         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
18237         CanWrite, because those refer to this particular instance of the
18238         property, and do not take into account the fact that we can
18239         override single members of a property.
18240
18241         Constructor requires an EmitContext.  The resolution process does
18242         not happen here, but we need to compute the accessors before,
18243         because the resolution does not always happen for properties.
18244
18245         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
18246         subclass, before we did not update this flag, but we did update
18247         bindingflags. 
18248
18249         (GetAccessors): Drop this routine, as it did not work in the
18250         presence of partially overwritten set/get methods. 
18251
18252         Notice that this broke the cs1540 detection, but that will require
18253         more thinking. 
18254
18255 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18256
18257         * class.cs:
18258         * codegen.cs:
18259         * driver.cs: issue a warning instead of an error if we don't support
18260         debugging for the platform. Also ignore a couple of errors that may
18261         arise when trying to write the symbols. Undo my previous patch.
18262
18263 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18264
18265         * driver.cs: ignore /debug switch except for Unix platforms.
18266
18267 2002-10-23  Nick Drochak  <ndrochak@gol.com>
18268
18269         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
18270
18271 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
18272
18273         * driver.cs: Do not make mcs-debug conditional, so we do not break
18274         builds that use it.
18275
18276         * statement.cs (UsageVector.MergeChildren): I would like Martin to
18277         review this patch.  But basically after all the children variables
18278         have been merged, the value of "Breaks" was not being set to
18279         new_breaks for Switch blocks.  I think that it should be set after
18280         it has executed.  Currently I set this to the value of new_breaks,
18281         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
18282         conservative, but I do not understand this code very well.
18283
18284         I did not break anything in the build, so that is good ;-)
18285
18286         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
18287
18288 2002-10-20  Mark Crichton  <crichton@gimp.org>
18289
18290         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
18291
18292 2002-10-20  Nick Drochak  <ndrochak@gol.com>
18293
18294         * cfold.cs: Fixed compile blocker.
18295
18296 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
18297
18298         * driver.cs: I was chekcing the key, not the file.
18299
18300 2002-10-19  Ravi Pratap  <ravi@ximian.com>
18301
18302         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
18303         message that we were generating - we just need to silently return
18304         a null.
18305
18306 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
18307
18308         * class.cs (Event.Define): Change my previous commit, as this
18309         breaks the debugger.  This is a temporary hack, as it seems like
18310         the compiler is generating events incorrectly to begin with.
18311
18312         * expression.cs (Binary.ResolveOperator): Added support for 
18313         "U operator - (E x, E y)"
18314
18315         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
18316         y)".
18317
18318         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
18319         init-only variables, but this path did not take into account that
18320         there might be also instance readonly variables.  Correct this
18321         problem. 
18322
18323         This fixes bug 32253
18324
18325         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
18326         delegates as well.
18327
18328         * driver.cs: Change the extension for modules to `netmodule'
18329
18330         * cs-parser.jay: Improved slightly the location tracking for
18331         the debugger symbols.
18332
18333         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
18334         modifiers that were specified instead of the hardcoded value
18335         (FamAndAssem).  This was basically ignoring the static modifier,
18336         and others.  Fixes 32429.
18337
18338         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
18339         fixed a bug in the process (32476)
18340
18341         * expression.cs (ArrayAccess.EmitAssign): Patch from
18342         hwang_rob@yahoo.ca that fixes bug 31834.3
18343
18344 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
18345
18346         * driver.cs: Make the module extension .netmodule.
18347
18348 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
18349
18350         * driver.cs: Report an error if the resource file is not found
18351         instead of crashing.
18352
18353         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
18354         false, like Emit does.
18355
18356 2002-10-16  Nick Drochak  <ndrochak@gol.com>
18357
18358         * typemanager.cs: Remove unused private member.  Also reported mcs
18359         bug to report this as a warning like csc.
18360
18361 2002-10-15  Martin Baulig  <martin@gnome.org>
18362
18363         * statement.cs (Statement.Emit): Made this a virtual method; emits
18364         the line number info and calls DoEmit().
18365         (Statement.DoEmit): New protected abstract method, formerly knows
18366         as Statement.Emit().
18367
18368         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
18369
18370 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
18371
18372         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
18373         have fixed a remaining problem: not every AddXXXX was adding a
18374         fully qualified name.  
18375
18376         Now everyone registers a fully qualified name in the DeclSpace as
18377         being defined instead of the partial name.  
18378
18379         Downsides: we are slower than we need to be due to the excess
18380         copies and the names being registered this way.  
18381
18382         The reason for this is that we currently depend (on the corlib
18383         bootstrap for instance) that types are fully qualified, because
18384         we dump all the types in the namespace, and we should really have
18385         types inserted into the proper namespace, so we can only store the
18386         basenames in the defined_names array.
18387
18388 2002-10-10  Martin Baulig  <martin@gnome.org>
18389
18390         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
18391         from bug #31834, see the bug report for a testcase which is
18392         miscompiled.
18393
18394 2002-10-10  Martin Baulig  <martin@gnome.org>
18395
18396         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
18397         flow analysis code for this.
18398
18399         * statement.cs (Do, While, For): Tell the flow analysis code about
18400         infinite loops.
18401         (FlowBranching.UsageVector): Added support for infinite loops.
18402         (Block.Resolve): Moved the dead code elimination here and use flow
18403         analysis to do it.
18404
18405 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
18406
18407         * class.cs (Field.Define): Catch cycles on struct type
18408         definitions. 
18409
18410         * typemanager.cs (IsUnmanagedtype): Do not recursively check
18411         fields if the fields are static.  We only need to check instance
18412         fields. 
18413
18414         * expression.cs (As.DoResolve): Test for reference type.
18415
18416         * statement.cs (Using.ResolveExpression): Use
18417         ConvertImplicitRequired, not ConvertImplicit which reports an
18418         error on failture
18419         (Using.ResolveLocalVariableDecls): ditto.
18420
18421         * expression.cs (Binary.ResolveOperator): Report errors in a few
18422         places where we had to.
18423
18424         * typemanager.cs (IsUnmanagedtype): Finish implementation.
18425
18426 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
18427
18428         * expression.cs: Use StoreFromPtr instead of extracting the type
18429         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
18430
18431         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
18432         an enumeration value to a System.Enum, but System.Enum is not a
18433         value type, but an class type, so we need to box.
18434
18435         (Expression.ConvertExplicit): One codepath could return
18436         errors but not flag them.  Fix this.  Fixes #31853
18437
18438         * parameter.cs (Resolve): Do not allow void as a parameter type.
18439
18440 2002-10-06  Martin Baulig  <martin@gnome.org>
18441
18442         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
18443         if it's a class type and not a struct.  Fixes #31815.
18444
18445 2002-10-06  Martin Baulig  <martin@gnome.org>
18446
18447         * statement.cs: Reworked the flow analysis code a bit to make it
18448         usable for dead code elimination.
18449
18450 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18451
18452         * cs-parser.jay: allow empty source files. Fixes bug #31781.
18453
18454 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18455
18456         * expression.cs (ComposedCast.DoResolveType): A quick workaround
18457         to fix the test 165, will investigate deeper.
18458
18459 2002-10-04  Martin Baulig  <martin@gnome.org>
18460
18461         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
18462         finally blocks actually work.
18463         (Try.Resolve): We don't need to create a sibling for `finally' if
18464         there is no finally block.
18465
18466 2002-10-04  Martin Baulig  <martin@gnome.org>
18467
18468         * class.cs (Constructor.Define): The default accessibility for a
18469         non-default constructor is private, not public.
18470
18471 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18472
18473         * class.cs (Constructor): Make AllowedModifiers public, add
18474         EXTERN.
18475
18476         * cs-parser.jay: Perform the modifiers test here, as the
18477         constructor for the Constructor class usually receives a zero
18478         because of the way we create it (first we create, later we
18479         customize, and we were never checking the modifiers).
18480
18481         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
18482         is a version of LookupTypeReflection that includes the type-name
18483         cache.  This can be used as a fast path for functions that know
18484         the fully qualified name and are only calling into *.GetType() to
18485         obtain a composed type.
18486
18487         This is also used by TypeManager.LookupType during its type
18488         composition.
18489
18490         (LookupType): We now also track the real type name, as sometimes
18491         we can get a quey for the real type name from things like
18492         ComposedCast.  This fixes bug 31422.
18493
18494         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
18495         complete type fullname, it does not have to go through the type
18496         resolution system to obtain the composed version of the type (for
18497         obtaining arrays or pointers).
18498
18499         (Conditional.Emit): Use the EmitBoolExpression to
18500         generate nicer code, as requested by Paolo.
18501
18502         (ArrayCreation.CheckIndices): Use the patch from
18503         hwang_rob@yahoo.ca to validate the array initializers. 
18504
18505 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
18506
18507         * class.cs (ConstructorInitializer.Emit): simplify code by using
18508         Invocation.EmitCall, and at the same time, fix the bugs in calling
18509         parent constructors that took variable arguments. 
18510
18511         * ecore.cs (Expression.ConvertNumericExplicit,
18512         Expression.ImplicitNumericConversion): Remove the code that
18513         manually wrapped decimal (InternalTypeConstructor call is now gone
18514         as well).
18515
18516         * expression.cs (Cast.TryReduce): Also handle decimal types when
18517         trying to perform a constant fold on the type.
18518
18519         * typemanager.cs (IsUnmanagedtype): Partially implemented.
18520
18521         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
18522         that only turned off an error report, and did nothing else. 
18523
18524 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
18525
18526         * driver.cs: Handle and ignore /fullpaths
18527
18528 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
18529
18530         * expression.cs (Binary.ResolveOperator): Catch the case where
18531         DoNumericPromotions returns true, 
18532
18533         (Binary.DoNumericPromotions): Simplify the code, and the tests.
18534
18535 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
18536
18537         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
18538         report error 70.
18539
18540 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
18541
18542         * ecore.cs (ConvertNumericExplicit): It is not enough that the
18543         conversion exists, but it is also required that the conversion be
18544         performed.  This manifested in "(Type64Enum) 2".  
18545
18546         * class.cs (TypeManager.AddMethod): The fix is not to change
18547         AddEnum, because that one was using a fully qualified name (every
18548         DeclSpace derivative does), but to change the AddMethod routine
18549         that was using an un-namespaced name.  This now correctly reports
18550         the duplicated name.
18551
18552         Revert patch until I can properly fix it.  The issue
18553         is that we have a shared Type space across all namespaces
18554         currently, which is wrong.
18555
18556         Options include making the Namespace a DeclSpace, and merge
18557         current_namespace/current_container in the parser.
18558
18559 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
18560
18561         * cs-parser.jay: Improve error reporting when we get a different
18562         kind of expression in local_variable_type and
18563         local_variable_pointer_type. 
18564
18565         Propagate this to avoid missleading errors being reported.
18566
18567         * ecore.cs (ImplicitReferenceConversion): treat
18568         TypeManager.value_type as a target just like object_type.   As
18569         code like this:
18570
18571         ValueType v = 1;
18572
18573         Is valid, and needs to result in the int 1 being boxed before it
18574         is assigned to the value type v.
18575
18576         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
18577         to validate the enumeration name.
18578
18579         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
18580         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
18581         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
18582
18583         * ecore.cs (TryImplicitIntConversion): When doing an
18584         implicit-enumeration-conversion, check if the type is 64-bits and
18585         perform a conversion before passing to EnumConstant.
18586
18587 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
18588
18589         * decl.cs (Error_AmbiguousTypeReference); New routine used to
18590         report ambiguous type references.  Unlike the MS version, we
18591         report what the ambiguity is.   Innovation at work ;-)
18592
18593         (DeclSpace.FindType): Require a location argument to
18594         display when we display an ambiguous error.
18595
18596         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
18597
18598         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
18599
18600         * expression.cs (EmitDynamicInitializers): Apply patch from
18601         hwang_rob@yahoo.ca that fixes the order in which we emit our
18602         initializers. 
18603
18604 2002-09-21  Martin Baulig  <martin@gnome.org>
18605
18606         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
18607         delegate takes no arguments.
18608
18609 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
18610
18611         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
18612         from integers.
18613
18614         * expression.cs: Extract the underlying type.
18615
18616         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
18617
18618         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
18619
18620 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
18621
18622         * class.cs (TypeContainer.DefineType): We can not use the nice
18623         PackingSize with the size set to 1 DefineType method, because it
18624         will not allow us to define the interfaces that the struct
18625         implements.
18626
18627         This completes the fixing of bug 27287
18628
18629         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
18630         means also structs.  This fixes part of the problem. 
18631         (Expresion.ImplicitReferenceConversionExists): ditto.
18632
18633         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
18634         error if there were no errors reported during the type lookup
18635         process, to avoid duplicates or redundant errors.  Without this
18636         you would get an ambiguous errors plus a type not found.  We have
18637         beaten the user enough with the first error.  
18638
18639         (DeclSparce.FindType): Emit a warning if we have an ambiguous
18640         reference. 
18641
18642         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
18643         during the resolution process, stop the lookup, this avoids
18644         repeated error reports (same error twice).
18645
18646         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
18647
18648         * typemanager.cs (LookupType): Redo the type lookup code to match
18649         the needs of System.Reflection.  
18650
18651         The issue is that System.Reflection requires references to nested
18652         types to begin with a "+" sign instead of a dot.  So toplevel
18653         types look like: "NameSpace.TopLevelClass", and nested ones look
18654         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
18655         levels. 
18656
18657 2002-09-19  Martin Baulig  <martin@gnome.org>
18658
18659         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
18660         says that a method always returns or always throws an exception,
18661         don't report the CS0161.
18662
18663         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
18664         set `Returns = new_returns'.
18665
18666 2002-09-19  Martin Baulig  <martin@gnome.org>
18667
18668         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
18669         to an enum constant, check for a CS0176.
18670
18671 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
18672
18673         * class.cs (TypeContainer.CheckPairedOperators): Now we check
18674         for operators that must be in pairs and report errors.
18675
18676         * ecore.cs (SimpleName.DoResolveType): During the initial type
18677         resolution process, when we define types recursively, we must
18678         check first for types in our current scope before we perform
18679         lookups in the enclosing scopes.
18680
18681         * expression.cs (MakeByteBlob): Handle Decimal blobs.
18682
18683         (Invocation.VerifyArgumentsCompat): Call
18684         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
18685         I thought we were supposed to always call this, but there are a
18686         few places in the code where we dont do it.
18687
18688 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
18689
18690         * driver.cs: Add support in -linkres and -resource to specify the
18691         name of the identifier.
18692
18693 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18694
18695         * ecore.cs (StandardConversionExists): Sync with the conversion
18696         code: allow anything-* to void* conversions.
18697
18698         (FindMostSpecificSource): Use an Expression argument
18699         instead of a Type, because we might be handed over a Literal which
18700         gets a few more implicit conversions that plain types do not.  So
18701         this information was being lost.
18702
18703         Also, we drop the temporary type-holder expression when not
18704         required.
18705
18706 2002-09-17  Martin Baulig  <martin@gnome.org>
18707
18708         * class.cs (PropertyBase.CheckBase): Don't check the base class if
18709         this is an explicit interface implementation.
18710
18711 2002-09-17  Martin Baulig  <martin@gnome.org>
18712
18713         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
18714         different `IndexerName' attributes.
18715
18716         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
18717         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
18718         virtual CommonResolve().
18719
18720 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18721
18722         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
18723         and convert that to the UnderlyingType.
18724
18725         * statement.cs (Foreach.Resolve): Indexers are just like variables
18726         or PropertyAccesses.
18727
18728         * cs-tokenizer.cs (consume_string): Track line numbers and columns
18729         inside quoted strings, we were not doing this before.
18730
18731 2002-09-16  Martin Baulig  <martin@gnome.org>
18732
18733         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
18734         resolve it.  This is needed for the definite assignment check of the
18735         instance expression, fixes bug #29846.
18736         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
18737
18738 2002-09-16  Nick Drochak  <ndrochak@gol.com>
18739
18740         * parameter.cs: Fix compile error.  Cannot reference static member
18741         from an instance object.  Is this an mcs bug?
18742
18743 2002-09-14  Martin Baulig  <martin@gnome.org>
18744
18745         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
18746         multiple times.  Fixes bug #30295, added test-166.cs.
18747
18748 2002-09-14  Martin Baulig  <martin@gnome.org>
18749
18750         * statement.cs (Block.Emit): Don't emit unreachable code.
18751         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
18752         `break' statements.
18753         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
18754
18755 2002-09-14  Martin Baulig  <martin@gnome.org>
18756
18757         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
18758         is set.
18759
18760 2002-09-14  Martin Baulig  <martin@gnome.org>
18761
18762         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
18763         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
18764         be false on the ms runtime.
18765
18766 2002-09-13  Martin Baulig  <martin@gnome.org>
18767
18768         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
18769         the CS0038 error message.
18770
18771 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
18772
18773         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
18774         constant inside, return it.
18775
18776 2002-09-12  Martin Baulig  <martin@gnome.org>
18777
18778         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
18779         implicit conversion can be done between enum types.
18780
18781         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
18782         check whether an implicit conversion to the current enum's UnderlyingType
18783         exists and report an error if not.
18784
18785         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
18786         without debugging support.
18787
18788         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
18789         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
18790
18791 2002-09-12  Martin Baulig  <martin@gnome.org>
18792
18793         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
18794
18795         * ecore.cs (IMemberExpr.DeclaringType): New property.
18796         (SimpleName.SimpleNameResolve): Check whether we're accessing a
18797         nonstatic member of an outer type (CS0038).
18798
18799 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
18800
18801         * driver.cs: Activate the using-error detector at warning level
18802         4 (at least for MS-compatible APIs).
18803
18804         * namespace.cs (VerifyUsing): Small buglett fix.
18805
18806         * pending.cs (PendingImplementation): pass the container pointer. 
18807
18808         * interface.cs (GetMethods): Allow for recursive definition.  Long
18809         term, I would like to move every type to support recursive
18810         definitions, not the current ordering mechanism that we have right
18811         now.
18812
18813         The situation is this: Attributes are handled before interfaces,
18814         so we can apply attributes to interfaces.  But some attributes
18815         implement interfaces, we will now handle the simple cases
18816         (recursive definitions will just get an error).  
18817
18818         * parameter.cs: Only invalidate types at the end if we fail to
18819         lookup all types.  
18820
18821 2002-09-09  Martin Baulig  <martin@gnome.org>
18822
18823         * ecore.cs (PropertyExpr.Emit): Also check for
18824         TypeManager.system_int_array_get_length so this'll also work when
18825         compiling corlib.  Fixes #30003.
18826
18827 2002-09-09  Martin Baulig  <martin@gnome.org>
18828
18829         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
18830         and throw an exception if we can't get the type's size.  Fixed #30040,
18831         added test-165.cs.
18832
18833 2002-09-09  Martin Baulig  <martin@gnome.org>
18834
18835         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
18836
18837         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
18838         context.  Fixes bug #30027.
18839
18840         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
18841         virtual functions.  Fixes bug #30043, added test-164.cs.
18842
18843 2002-09-08  Ravi Pratap  <ravi@ximian.com>
18844
18845         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
18846
18847 2002-09-08  Nick Drochak  <ndrochak@gol.com>
18848
18849         * driver.cs: Use an object to get the windows codepage since it's not a
18850         static property.
18851
18852 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
18853
18854         * statement.cs (For.Emit): for infinite loops (test == null)
18855         return whether there is a break inside, not always "true".
18856
18857         * namespace.cs (UsingEntry): New struct to hold the name of the
18858         using definition, the location where it is defined, and whether it
18859         has been used in a successful type lookup.
18860
18861         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
18862         strings.
18863
18864         * decl.cs: ditto.
18865
18866 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18867
18868         * attribute.cs : Fix incorrect code which relied on catching
18869         a NullReferenceException to detect a null being passed in
18870         where an object was expected.
18871
18872 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
18873
18874         * statement.cs (Try): flag the catch variable as assigned
18875
18876         * expression.cs (Cast): Simplified by using ResolveType instead of
18877         manually resolving.
18878
18879         * statement.cs (Catch): Fix bug by using ResolveType.
18880
18881 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18882
18883         * expression.cs (BetterConversion): Special case for when we have
18884         a NullLiteral as the argument and we have to choose between string
18885         and object types - we choose string the way csc does.
18886
18887         * attribute.cs (Attribute.Resolve): Catch the
18888         NullReferenceException and report error #182 since the Mono
18889         runtime no more has the bug and having this exception raised means
18890         we tried to select a constructor which takes an object and is
18891         passed a null.
18892
18893 2002-09-05  Ravi Pratap  <ravi@ximian.com>
18894
18895         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
18896         message (1502, 1503) when we can't locate a method after overload
18897         resolution. This is much more informative and closes the bug
18898         Miguel reported.
18899
18900         * interface.cs (PopulateMethod): Return if there are no argument
18901         types. Fixes a NullReferenceException bug.
18902
18903         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
18904         expressions too. Previously we were checking only in one place for
18905         positional arguments leaving out named arguments.
18906
18907         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
18908         type to the enum type is not allowed. Remove code corresponding to
18909         that.
18910
18911         (ConvertNumericExplicit): Allow explicit conversions from
18912         the underlying type to enum type. This precisely follows the spec
18913         and closes a bug filed by Gonzalo.
18914
18915 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18916
18917         * compiler.csproj:
18918         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
18919
18920 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
18921
18922         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
18923         it was important that we stored the right value after the
18924         reduction in `converted'.
18925
18926 2002-09-04  Martin Baulig  <martin@gnome.org>
18927
18928         * location.cs (Location.SymbolDocument): Use full pathnames for the
18929         source files.
18930
18931 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
18932
18933         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
18934         of the expression resolve mechanism, because that will catch the
18935         SimpleName error failures.
18936
18937         (Conditional): If we can not resolve the
18938         expression, return, do not crash.
18939
18940 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18941
18942         * cs-tokenizer.cs:
18943         (location): display token name instead of its number.
18944
18945 2002-08-28  Martin Baulig  <martin@gnome.org>
18946
18947         * expression.cs (Binary.ResolveOperator): Don't silently return
18948         but return an error if an operator cannot be applied between two
18949         enum types.
18950
18951 2002-08-28  Martin Baulig  <martin@gnome.org>
18952
18953         * class.cs (Constructor.Define): Set the permission attributes
18954         correctly instead of making all constructors public.
18955
18956 2002-08-28  Martin Baulig  <martin@gnome.org>
18957
18958         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
18959         for private members before reporting a CS0103; if we find anything,
18960         it's a CS0122.
18961
18962 2002-08-28  Martin Baulig  <martin@gnome.org>
18963
18964         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
18965         to check whether `closure_start_type == closure_invocation_type',
18966         we also need to check whether `m.DeclaringType == closure_invocation_type'
18967         before bypassing the permission checks.  We might be accessing
18968         protected/private members from the base class.
18969         (TypeManager.RealMemberLookup): Only set private_ok if private
18970         members were requested via BindingFlags.NonPublic.
18971
18972         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
18973
18974         * expression.cs (MemberAccess.ResolveMemberAccess): Set
18975         MethodGroupExpr.IsExplicitImpl if appropriate.
18976         (Invocation.DoResolve): Don't report the CS0120 for explicit
18977         interface implementations.
18978
18979 2002-08-27  Martin Baulig  <martin@gnome.org>
18980
18981         * expression.cs (Invocation.DoResolve): If this is a static
18982         method and we don't have an InstanceExpression, we must report
18983         a CS0120.
18984
18985 2002-08-25  Martin Baulig  <martin@gnome.org>
18986
18987         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
18988         `==' between a valuetype and an object.
18989
18990 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
18991
18992         * ecore.cs (TypeExpr): Provide a ToString method.
18993
18994 2002-08-24  Martin Baulig  <martin@gnome.org>
18995
18996         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
18997         now called proggie.dbg and it's a binary file.
18998
18999 2002-08-23  Martin Baulig  <martin@gnome.org>
19000
19001         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
19002
19003 2002-08-23  Martin Baulig  <martin@gnome.org>
19004
19005         * struct.cs (MyStructInfo.ctor): Make this work with empty
19006         structs; it's not allowed to use foreach() on null.
19007
19008 2002-08-23  Martin Baulig  <martin@gnome.org>
19009
19010         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
19011         writer the full pathname of the generated assembly.
19012
19013 2002-08-23  Martin Baulig  <martin@gnome.org>
19014
19015         * statements.cs (FlowBranching.UsageVector.MergeChildren):
19016         A `finally' block never returns or breaks; improved handling of
19017         unreachable code.
19018
19019 2002-08-23  Martin Baulig  <martin@gnome.org>
19020
19021         * statement.cs (Throw.Resolve): Allow `throw null'.
19022
19023 2002-08-23  Martin Baulig  <martin@gnome.org>
19024
19025         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
19026         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
19027         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
19028         MemberLookup would return a wrong event if this is an explicit
19029         interface implementation and the class has an event with the same
19030         name.
19031
19032 2002-08-23  Martin Baulig  <martin@gnome.org>
19033
19034         * statement.cs (Block.AddChildVariableNames): New public method.
19035         (Block.AddChildVariableName): Likewise.
19036         (Block.IsVariableNameUsedInChildBlock): Likewise.
19037         (Block.AddVariable): Check whether a variable name has already
19038         been used in a child block.
19039
19040         * cs-parser.jay (declare_local_variables): Mark all variable names
19041         from the current block as being used in a child block in the
19042         implicit block.
19043
19044 2002-08-23  Martin Baulig  <martin@gnome.org>
19045
19046         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
19047         find the symbol writer.
19048
19049         * driver.cs: csc also allows the arguments to /define being
19050         separated by commas, not only by semicolons.
19051
19052 2002-08-23  Martin Baulig  <martin@gnome.org>
19053
19054         * interface.cs (Interface.GetMembers): Added static check for events.
19055
19056 2002-08-15  Martin Baulig  <martin@gnome.org>
19057
19058         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
19059         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
19060
19061         * ecore.cs (Expression.MemberLookup): Added documentation and explained
19062         why the MethodData.EmitDestructor() change was necessary.
19063
19064 2002-08-20  Martin Baulig  <martin@gnome.org>
19065
19066         * class.cs (TypeContainer.FindMembers): Added static check for events.
19067
19068         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
19069
19070         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
19071         use Type.GetEvents(), not Type.FindMembers().
19072
19073 2002-08-20  Martin Baulig  <martin@gnome.org>
19074
19075         * decl.cs (MemberCache): Added a special method cache which will
19076         be used for method-only searched.  This ensures that a method
19077         search will return a MethodInfo with the correct ReflectedType for
19078         inherited methods.      
19079
19080 2002-08-20  Martin Baulig  <martin@gnome.org>
19081
19082         * decl.cs (DeclSpace.FindMembers): Made this public.
19083
19084 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19085
19086         * delegate.cs: fixed build on windows.
19087         [FIXME:  Filed as bug #29150: MCS must report these errors.]
19088
19089 2002-08-19  Ravi Pratap  <ravi@ximian.com>
19090
19091         * ecore.cs (StandardConversionExists): Return a false
19092         if we are trying to convert the void type to anything else
19093         since that is not allowed.
19094
19095         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
19096         we flag error 70 in the event an event is trying to be accessed
19097         directly from outside the declaring type.
19098
19099 2002-08-20  Martin Baulig  <martin@gnome.org>
19100
19101         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
19102         MemberCache from typemanager.cs to decl.cs.
19103
19104 2002-08-19  Martin Baulig  <martin@gnome.org>
19105
19106         * class.cs (TypeContainer): Implement IMemberContainer.
19107         (TypeContainer.DefineMembers): Create the MemberCache.
19108         (TypeContainer.FindMembers): Do better BindingFlags checking; only
19109         return public members if BindingFlags.Public was given, check
19110         whether members are static.
19111
19112 2002-08-16  Martin Baulig  <martin@gnome.org>
19113
19114         * decl.cs (DeclSpace.Define): Splitted this in Define and
19115         DefineMembers.  DefineMembers is called first and initializes the
19116         MemberCache.
19117
19118         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
19119         DefineMembers() on all our DeclSpaces.
19120
19121         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
19122         but call DefineMembers() on all nested interfaces.  We call their
19123         Define() in our new Define() function.
19124
19125         * interface.cs (Interface): Implement IMemberContainer.
19126         (Interface.Define): Moved all code except the attribute stuf to
19127         DefineMembers().
19128         (Interface.DefineMembers): Initialize the member cache.
19129
19130         * typemanager.cs (IMemberFinder): Removed this interface, we don't
19131         need this anymore since we can use MemberCache.FindMembers directly.
19132
19133 2002-08-19  Martin Baulig  <martin@gnome.org>
19134
19135         * typemanager.cs (MemberCache): When creating the cache for an
19136         interface type, add all inherited members.
19137         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
19138         to `out bool used_cache' and documented it.
19139         (TypeManager.MemberLookup): If we already used the cache in the first
19140         iteration, we don't need to do the interfaces check.
19141
19142 2002-08-19  Martin Baulig  <martin@gnome.org>
19143
19144         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
19145         here from IMemberFinder and don't implement this interface anymore.
19146         (DeclSpace.MemberCache): Moved here from IMemberFinder.
19147
19148         * typemanager.cs (IMemberFinder): This interface is now only used by
19149         classes which actually support the member cache.
19150         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
19151         since we only put DeclSpaces into this Hashtable.
19152         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
19153         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
19154
19155 2002-08-16  Martin Baulig  <martin@gnome.org>
19156
19157         * typemanager.cs (ICachingMemberFinder): Removed.
19158         (IMemberFinder.MemberCache): New property.
19159         (TypeManager.FindMembers): Merged this with RealFindMembers().
19160         This function will never be called from TypeManager.MemberLookup()
19161         so we can't use the cache here, just the IMemberFinder.
19162         (TypeManager.MemberLookup_FindMembers): Check whether the
19163         IMemberFinder has a MemberCache and call the cache's FindMembers
19164         function.
19165         (MemberCache): Rewrote larger parts of this yet another time and
19166         cleaned it up a bit.
19167
19168 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
19169
19170         * driver.cs (LoadArgs): Support quoting.
19171
19172         (Usage): Show the CSC-like command line arguments.
19173
19174         Improved a few error messages.
19175
19176 2002-08-15  Martin Baulig  <martin@gnome.org>
19177
19178         * typemanager.cs (IMemberContainer.Type): New property.
19179         (IMemberContainer.IsInterface): New property.
19180
19181         The following changes are conditional to BROKEN_RUNTIME, which is
19182         defined at the top of the file.
19183
19184         * typemanager.cs (MemberCache.MemberCache): Don't add the base
19185         class'es members, but add all members from TypeHandle.ObjectType
19186         if we're an interface.
19187         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
19188         is the current type.
19189         (MemberCache.CacheEntry.Container): Removed this field.
19190         (TypeHandle.GetMembers): Include inherited members.
19191
19192 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19193
19194         * typemanager.cs: fixed compilation and added a comment on a field that
19195         is never used.
19196
19197 2002-08-15  Martin Baulig  <martin@gnome.org>
19198
19199         * class.cs (ConstructorInitializer.Resolve): In the
19200         Expression.MemberLookup call, use the queried_type as
19201         invocation_type.
19202
19203         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
19204         declared' attribute, it's always true.
19205         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
19206         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
19207         temporary wrapper for FindMembers which tells MemberLookup whether
19208         members from the base classes are included in the return value.
19209         This will go away soon.
19210         (TypeManager.MemberLookup): Use this temporary hack here; once the
19211         new MemberCache is completed, we don't need to do the DeclaredOnly
19212         looping here anymore since the MemberCache will take care of this.
19213         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
19214         (MemberCache): When creating the MemberCache for a class, get
19215         members from the current class and all its base classes.
19216         (MemberCache.CacheEntry.Container): New field.  This is a
19217         temporary hack until the Mono runtime is fixed to distinguish
19218         between ReflectedType and DeclaringType.  It allows us to use MCS
19219         with both the MS runtime and the unfixed Mono runtime without
19220         problems and without accecting performance.
19221         (MemberCache.SearchMembers): The DeclaredOnly looping from
19222         TypeManager.MemberLookup is now done here.      
19223
19224 2002-08-14  Martin Baulig  <martin@gnome.org>
19225
19226         * statement.cs (MyStructInfo.MyStructInfo): Don't call
19227         Type.GetFields on dynamic types but get the fields from the
19228         corresponding TypeContainer.
19229         (MyStructInfo.GetStructInfo): Added check for enum types.
19230
19231         * typemanager.cs (MemberList.IsSynchronized): Implemented.
19232         (MemberList.SyncRoot): Implemented.
19233         (TypeManager.FilterWithClosure): No need to check permissions if
19234         closure_start_type == closure_invocation_type, don't crash if
19235         closure_invocation_type is null.
19236
19237 2002-08-13  Martin Baulig  <martin@gnome.org>
19238
19239         Rewrote TypeContainer.FindMembers to use a member cache.  This
19240         gives us a speed increase of about 35% for the self-hosting MCS
19241         build and of about 15-20% for the class libs (both on GNU/Linux).
19242
19243         * report.cs (Timer): New class to get enhanced profiling.  This
19244         whole class is "TIMER" conditional since it remarkably slows down
19245         compilation speed.
19246
19247         * class.cs (MemberList): New class.  This is an IList wrapper
19248         which we're now using instead of passing MemberInfo[]'s around to
19249         avoid copying this array unnecessarily.
19250         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
19251         (ICachingMemberFinder, IMemberContainer): New interface.
19252         (TypeManager.FilterWithClosure): If `criteria' is null, the name
19253         has already been checked, otherwise use it for the name comparision.
19254         (TypeManager.FindMembers): Renamed to RealMemberFinder and
19255         provided wrapper which tries to use ICachingMemberFinder.FindMembers
19256         if possible.  Returns a MemberList, not a MemberInfo [].
19257         (TypeHandle): New class, implements IMemberContainer.  We create
19258         one instance of this class per type, it contains a MemberCache
19259         which is used to do the member lookups.
19260         (MemberCache): New class.  Each instance of this class contains
19261         all members of a type and a name-based hash table.
19262         (MemberCache.FindMembers): This is our new member lookup
19263         function.  First, it looks up all members of the requested name in
19264         the hash table.  Then, it walks this list and sorts out all
19265         applicable members and returns them.
19266
19267 2002-08-13  Martin Baulig  <martin@gnome.org>
19268
19269         In addition to a nice code cleanup, this gives us a performance
19270         increase of about 1.4% on GNU/Linux - not much, but it's already
19271         half a second for the self-hosting MCS compilation.
19272
19273         * typemanager.cs (IMemberFinder): New interface.  It is used by
19274         TypeManager.FindMembers to call FindMembers on a TypeContainer,
19275         Enum, Delegate or Interface.
19276         (TypeManager.finder_to_member_finder): New PtrHashtable.
19277         (TypeManager.finder_to_container): Removed.
19278         (TypeManager.finder_to_delegate): Removed.
19279         (TypeManager.finder_to_interface): Removed.
19280         (TypeManager.finder_to_enum): Removed.
19281
19282         * interface.cs (Interface): Implement IMemberFinder.
19283
19284         * delegate.cs (Delegate): Implement IMemberFinder.
19285
19286         * enum.cs (Enum): Implement IMemberFinder.
19287
19288         * class.cs (TypeContainer): Implement IMemberFinder.
19289
19290 2002-08-12  Martin Baulig  <martin@gnome.org>
19291
19292         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
19293
19294 2002-08-12  Martin Baulig  <martin@gnome.org>
19295
19296         * ecore.cs (ITypeExpression): New interface for expressions which
19297         resolve to a type.
19298         (TypeExpression): Renamed to TypeLookupExpression.
19299         (Expression.DoResolve): If we're doing a types-only lookup, the
19300         expression must implement the ITypeExpression interface and we
19301         call DoResolveType() on it.
19302         (SimpleName): Implement the new ITypeExpression interface.
19303         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
19304         hack, the situation that we're only looking up types can't happen
19305         anymore when this method is called.  Moved the type lookup code to
19306         DoResolveType() and call it.
19307         (SimpleName.DoResolveType): This ITypeExpression interface method
19308         is now doing the types-only lookup.
19309         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
19310         (ResolveFlags): Added MaskExprClass.
19311
19312         * expression.cs (MemberAccess): Implement the ITypeExpression
19313         interface.
19314         (MemberAccess.DoResolve): Added support for a types-only lookup
19315         when we're called via ITypeExpression.DoResolveType().
19316         (ComposedCast): Implement the ITypeExpression interface.
19317
19318         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
19319         Expression.Resolve() with ResolveFlags.Type instead.
19320
19321 2002-08-12  Martin Baulig  <martin@gnome.org>
19322
19323         * interface.cs (Interface.Define): Apply attributes.
19324
19325         * attribute.cs (Attribute.ApplyAttributes): Added support for
19326         interface attributes.
19327
19328 2002-08-11  Martin Baulig  <martin@gnome.org>
19329
19330         * statement.cs (Block.Emit): Only check the "this" variable if we
19331         do not always throw an exception.
19332
19333         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
19334         whether the property has a set accessor.
19335
19336 2002-08-11  Martin Baulig  <martin@gnome.org>
19337
19338         Added control flow analysis support for structs.
19339
19340         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
19341         with control flow analysis turned off.
19342         (IVariable): New interface.
19343         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
19344         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
19345         (FieldExpr.DoResolve): Resolve the instance expression with flow
19346         analysis turned off and do the definite assignment check after the
19347         resolving when we know what the expression will resolve to.
19348
19349         * expression.cs (LocalVariableReference, ParameterReference):
19350         Implement the new IVariable interface, only call the flow analysis
19351         code if ec.DoFlowAnalysis is true.
19352         (This): Added constructor which takes a Block argument.  Implement
19353         the new IVariable interface.
19354         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
19355         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
19356         This does the definite assignment checks for struct members.
19357
19358         * class.cs (Constructor.Emit): If this is a non-static `struct'
19359         constructor which doesn't have any initializer, call
19360         Block.AddThisVariable() to tell the flow analysis code that all
19361         struct elements must be initialized before control returns from
19362         the constructor.
19363
19364         * statement.cs (MyStructInfo): New public class.
19365         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
19366         argument to this indexer.  If non-zero, check an individual struct
19367         member, not the whole struct.
19368         (FlowBranching.CheckOutParameters): Check struct members.
19369         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
19370         overloaded versions of these methods which take an additional
19371         `int field_idx' argument to check struct members.
19372         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
19373         overloaded versions of these methods which take an additional
19374         `string field_name' argument to check struct member.s
19375         (VariableInfo): Implement the IVariable interface.
19376         (VariableInfo.StructInfo): New public property.  Returns the
19377         MyStructInfo instance of the variable if it's a struct or null.
19378         (Block.AddThisVariable): New public method.  This is called from
19379         Constructor.Emit() for non-static `struct' constructor which do
19380         not have any initializer.  It creates a special variable for the
19381         "this" instance variable which will be checked by the flow
19382         analysis code to ensure that all of the struct's fields are
19383         initialized before control returns from the constructor.
19384         (UsageVector): Added support for struct members.  If a
19385         variable/parameter is a struct with N members, we reserve a slot
19386         in the usage vector for each member.  A struct is considered fully
19387         initialized if either the struct itself (slot 0) or all its
19388         members are initialized.
19389
19390 2002-08-08  Martin Baulig  <martin@gnome.org>
19391
19392         * driver.cs (Driver.MainDriver): Only report an error CS5001
19393         if there were no compilation errors.
19394
19395         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
19396         `UnsafeContext' property to determine whether the parent is in
19397         unsafe context rather than checking the parent's ModFlags:
19398         classes nested in an unsafe class are unsafe as well.
19399
19400 2002-08-08  Martin Baulig  <martin@gnome.org>
19401
19402         * statement.cs (UsageVector.MergeChildren): Distinguish between
19403         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
19404         we return.  Added test17() and test18() to test-154.cs.
19405
19406 2002-08-08  Martin Baulig  <martin@gnome.org>
19407
19408         * typemanager.cs (TypeManager.FilterWithClosure): If we have
19409         Family access, make sure the invoking type isn't a subclass of the
19410         queried type (that'd be a CS1540).
19411
19412         * ecore.cs (Expression.MemberLookup): Added overloaded version of
19413         this method which takes an additional `Type invocation_type'.
19414
19415         * expression.cs (BaseAccess.DoResolve): Use the base type as
19416         invocation and query type.
19417         (MemberAccess.DoResolve): If the lookup failed and we're about to
19418         report a CS0122, try a lookup with the ec.ContainerType - if this
19419         succeeds, we must report a CS1540.
19420
19421 2002-08-08  Martin Baulig  <martin@gnome.org>
19422
19423         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
19424         (MethodGroupExpr): Implement the IMemberExpr interface.
19425
19426         * expression (MemberAccess.ResolveMemberAccess): No need to have
19427         any special code for MethodGroupExprs anymore, they're now
19428         IMemberExprs.   
19429
19430 2002-08-08  Martin Baulig  <martin@gnome.org>
19431
19432         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
19433         Family, FamANDAssem and FamORAssem permissions.
19434         (TypeManager.IsSubclassOrNestedChildOf): New public method.
19435
19436 2002-08-08  Martin Baulig  <martin@gnome.org>
19437
19438         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
19439         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
19440         or loop block.
19441
19442 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
19443
19444         * driver.cs: implemented /resource option to embed managed resources.
19445
19446 2002-08-07  Martin Baulig  <martin@gnome.org>
19447
19448         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
19449         (FieldBase.HasFieldInitializer): New public property.
19450         (FieldBase.GetInitializerExpression): New public method.  Resolves and
19451         returns the field initializer and makes sure it is only resolved once.
19452         (TypeContainer.EmitFieldInitializers): Call
19453         FieldBase.GetInitializerExpression to get the initializer, this ensures
19454         that it isn't resolved multiple times.
19455
19456         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
19457         the resolving process (SimpleName/MemberLookup) that we're currently
19458         emitting a field initializer (which must not access any instance members,
19459         this is an error CS0236).
19460
19461         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
19462         argument, if the `IsFieldInitializer' flag is set, we must report and
19463         error CS0236 and not an error CS0120.   
19464
19465 2002-08-07  Martin Baulig  <martin@gnome.org>
19466
19467         * ecore.cs (IMemberExpr): New public interface.
19468         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
19469         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
19470         if the expression is an IMemberExpr.
19471
19472         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
19473         to be null, implicitly default to `this' if we're non-static in
19474         this case.  Simplified the code a lot by using the new IMemberExpr
19475         interface.  Also fixed bug #28176 here.
19476
19477 2002-08-06  Martin Baulig  <martin@gnome.org>
19478
19479         * cs-parser.jay (SimpleLookup): Removed.  We need to create
19480         ParameterReferences during semantic analysis so that we can do a
19481         type-only search when resolving Cast, TypeOf and SizeOf.
19482         (block): Pass the `current_local_parameters' to the Block's
19483         constructor.
19484
19485         * class.cs (ConstructorInitializer): Added `Parameters parameters'
19486         argument to the constructor.
19487         (ConstructorInitializer.Resolve): Create a temporary implicit
19488         block with the parameters.
19489
19490         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
19491         references here if we aren't doing a type-only search.
19492
19493         * statement.cs (Block): Added constructor which takes a
19494         `Parameters parameters' argument.
19495         (Block.Parameters): New public property.
19496
19497         * support.cs (InternalParameters.Parameters): Renamed `parameters'
19498         to `Parameters' and made it public readonly.
19499
19500 2002-08-06  Martin Baulig  <martin@gnome.org>
19501
19502         * ecore.cs (Expression.Warning): Made this public as well.
19503
19504         * report.cs (Report.Debug): Print the contents of collections.
19505
19506 2002-08-06  Martin Baulig  <martin@gnome.org>
19507
19508         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
19509         used to tell Resolve() which kinds of expressions it may return.
19510         (Expression.Resolve): Added overloaded version of this method which
19511         takes a `ResolveFlags flags' argument.  This can be used to tell
19512         Resolve() which kinds of expressions it may return.  Reports a
19513         CS0118 on error.
19514         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
19515         ResolveFlags.SimpleName.
19516         (Expression.Error118): Added overloaded version of this method which
19517         takes a `ResolveFlags flags' argument.  It uses the flags to determine
19518         which kinds of expressions are allowed.
19519
19520         * expression.cs (Argument.ResolveMethodGroup): New public method.
19521         Resolves an argument, but allows a MethodGroup to be returned.
19522         This is used when invoking a delegate.
19523
19524         * TODO: Updated a bit.
19525
19526 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19527
19528         Fixed compilation with csc.
19529
19530         * ecore.cs: Expression.Error made public. Is this correct? Should
19531         Warning be made public too?
19532
19533         * expression.cs: use ea.Location instead of ea.loc.
19534         [FIXME:  Filed as bug #28607: MCS must report these errors.]
19535
19536 2002-08-06  Martin Baulig  <martin@gnome.org>
19537
19538         * ecore.cs (Expression.loc): Moved the location here instead of
19539         duplicating it in all derived classes.
19540         (Expression.Location): New public property.
19541         (Expression.Error, Expression.Warning): Made them non-static and
19542         removed the location argument.
19543         (Expression.Warning): Added overloaded version which takes an
19544         `int level' argument.
19545         (Expression.Error118): Make this non-static and removed the
19546         expression and location arguments.
19547         (TypeExpr): Added location argument to the constructor.
19548
19549         * expression.cs (StaticCallExpr): Added location argument to
19550         the constructor.
19551         (Indirection, PointerArithmetic): Likewise.
19552         (CheckedExpr, UnCheckedExpr): Likewise.
19553         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
19554         (StringPtr): Likewise.
19555
19556
19557 2002-08-05  Martin Baulig  <martin@gnome.org>
19558
19559         * expression.cs (BaseAccess.DoResolve): Actually report errors.
19560
19561         * assign.cs (Assign.DoResolve): Check whether the source
19562         expression is a value or variable.
19563
19564         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
19565         while resolving the corresponding blocks.
19566
19567         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
19568         an error, don't silently return null.
19569
19570         * statement.cs (Block.AddVariable): Do the error reporting here
19571         and distinguish between CS0128 and CS0136.
19572         (Block.DoResolve): Report all unused labels (warning CS0164).
19573         (LabeledStatement): Pass the location to the constructor.
19574         (LabeledStatement.HasBeenReferenced): New property.
19575         (LabeledStatement.Resolve): Set it to true here.
19576
19577         * statement.cs (Return.Emit): Return success even after reporting
19578         a type mismatch error (CS0126 or CS0127), this is what csc does and
19579         it avoids confusing the users with any consecutive errors.
19580
19581 2002-08-05  Martin Baulig  <martin@gnome.org>
19582
19583         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
19584
19585         * const.cs (Const.LookupConstantValue): Catch circular definitions.
19586
19587         * expression.cs (MemberAccess.DoResolve): Silently return if an
19588         error has already been reported.
19589
19590         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
19591         error has already been reported.
19592
19593 2002-08-05  Martin Baulig  <martin@gnome.org>
19594
19595         * statement.cs (UsageVector): Only initialize the `parameters'
19596         vector if we actually have any "out" parameters.
19597
19598 2002-08-05  Martin Baulig  <martin@gnome.org>
19599
19600         * expression.cs (Binary.ResolveOperator): When combining delegates,
19601         they must have the same type.
19602
19603 2002-08-05  Martin Baulig  <martin@gnome.org>
19604
19605         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
19606         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
19607         work with the ms runtime and we also don't need it: if we're a
19608         PropertyBuilder and not in the `indexer_arguments' hash, then we
19609         are a property and not an indexer.
19610
19611         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
19612         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
19613         since the latter one doesn't work with the ms runtime.
19614
19615 2002-08-03  Martin Baulig  <martin@gnome.org>
19616
19617         Fixed bugs #27998 and #22735.
19618
19619         * class.cs (Method.IsOperator): New public field.
19620         (Method.CheckBase): Report CS0111 if there's already a method
19621         with the same parameters in the current class.  Report CS0508 when
19622         attempting to change the return type of an inherited method.
19623         (MethodData.Emit): Report CS0179 if a method doesn't have a body
19624         and it's not marked abstract or extern.
19625         (PropertyBase): New abstract base class for Property and Indexer.
19626         (PropertyBase.CheckBase): Moved here from Property and made it work
19627         for indexers.
19628         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
19629         the same so we can reuse it there.
19630         (Property, Indexer): Derive from PropertyBase.
19631         (MethodSignature.inheritable_property_signature_filter): New delegate
19632         to find properties and indexers.
19633
19634         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
19635         argument and improved error reporting.
19636
19637         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
19638         EmptyReadOnlyParameters and made it a property.
19639
19640         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
19641         version of this method which takes a `PropertyInfo indexer'.
19642         (TypeManager.RegisterIndexer): New method.
19643
19644         * class.cs: Added myself as author of this file :-)
19645
19646 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19647
19648         * class.cs: fixed compilation on windoze.
19649
19650 2002-08-03  Martin Baulig  <martin@gnome.org>
19651
19652         * interface.cs (Interface.GetInterfaceBases): Check whether all
19653         base interfaces are at least as accessible than the current one.
19654
19655         * class.cs (TypeContainer.GetClassBases): Check whether base types
19656         are at least as accessible than the current type.
19657         (TypeContainer.AsAccessible): Implemented and made non-static.
19658         (MemberBase.CheckParameters): Report errors if the accessibility
19659         checks fail.
19660
19661         * delegate.cs (Delegate.Delegate): The default visibility is
19662         internal for top-level types and private for nested types.
19663         (Delegate.Define): Report errors if the accessibility checks fail.
19664
19665         * enum.cs (Enum.Enum): The default visibility is internal for
19666         top-level types and private for nested types.
19667         (Enum.DefineType): Compute the correct visibility.
19668
19669         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
19670         function which takes a `bool is_toplevel' instead of a TypeContainer.
19671
19672         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
19673         builtin type.
19674
19675 2002-08-02  Martin Baulig  <martin@gnome.org>
19676
19677         * expression.cs (LocalVariableReferenc): Added constructor which
19678         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
19679         (LocalVariableReference.IsReadOnly): New property.
19680         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
19681         variable is readonly, use our own readonly flag to do this; you can
19682         use the new constructor to get a writable reference to a read-only
19683         variable.
19684
19685         * cs-parser.jay (foreach_statement, using_statement): Get a writable
19686         reference to the local variable.
19687
19688 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
19689
19690         * rootcontext.cs (ResolveCore): Also include System.Exception
19691
19692         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
19693         we reach an EmptyStatement.
19694
19695         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
19696         is also fine.
19697
19698         * expression.cs (Binary.ResolveOperator): Check error result in
19699         two places.
19700
19701         use brtrue/brfalse directly and avoid compares to null.
19702
19703 2002-08-02  Martin Baulig  <martin@gnome.org>
19704
19705         * class.cs (TypeContainer.Define): Define all nested interfaces here.
19706         Fixes bug #28407, added test-155.cs.
19707
19708 2002-08-01  Martin Baulig  <martin@gnome.org>
19709
19710         * class.cs (Event.EmitDefaultMethod): Make this work with static
19711         events.  Fixes #28311, added verify-3.cs.
19712
19713 2002-08-01  Martin Baulig  <martin@gnome.org>
19714
19715         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
19716         `is_disposable' fields.
19717         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
19718         `hm.is_disposable' if we're using the collection pattern.
19719         (Foreach.EmitCollectionForeach): Use the correct type for the
19720         enumerator's local variable, only emit the try/finally block if
19721         necessary (fixes #27713).
19722
19723 2002-08-01  Martin Baulig  <martin@gnome.org>
19724
19725         * ecore.cs (Expression.report118): Renamed to Error118 and made
19726         it public static.
19727
19728         * statement.cs (Throw.Resolve): Check whether the expression is of
19729         the correct type (CS0118) and whether the type derives from
19730         System.Exception (CS0155).
19731         (Catch.Resolve): New method.  Do the type lookup here and check
19732         whether it derives from System.Exception (CS0155).
19733         (Catch.CatchType, Catch.IsGeneral): New public properties.
19734
19735         * typemanager.cs (TypeManager.exception_type): Added.
19736
19737 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
19738
19739         * driver.cs: Updated About function.
19740
19741 2002-07-31  Martin Baulig  <martin@gnome.org>
19742
19743         Implemented Control Flow Analysis.
19744
19745         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
19746         (EmitContext.CurrentBranching): Added.
19747         (EmitContext.StartFlowBranching): Added.
19748         (EmitContext.EndFlowBranching): Added.
19749         (EmitContext.KillFlowBranching): Added.
19750         (EmitContext.IsVariableAssigned): Added.
19751         (EmitContext.SetVariableAssigned): Added.
19752         (EmitContext.IsParameterAssigned): Added.
19753         (EmitContext.SetParameterAssigned): Added.
19754         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
19755         Added control flow analysis stuff here.
19756
19757         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
19758         resolve the expression as lvalue.
19759         (LocalVariableReference.DoResolve): Check whether the variable has
19760         already been assigned.
19761         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
19762         the parameter as assigned here.
19763         (ParameterReference.DoResolve): Check whether the parameter has already
19764         been assigned.
19765         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
19766         expression as lvalue.
19767
19768         * statement.cs (FlowBranching): New class for the flow analysis code.
19769         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
19770         (LabeledStatement.IsDefined): New public property.
19771         (LabeledStatement.AddUsageVector): New public method to tell flow
19772         analyis that the label may be reached via a forward jump.
19773         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
19774         flow analysis.
19775         (VariableInfo.Number): New public field.  This is used by flow analysis
19776         to number all locals of a block.
19777         (Block.CountVariables): New public property.  This is the number of
19778         local variables in this block (including the locals from all parent
19779         blocks).
19780         (Block.EmitMeta): Number all the variables.
19781
19782         * statement.cs: Added flow analysis support to all classes.
19783
19784 2002-07-31  Martin Baulig  <martin@gnome.org>
19785
19786         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
19787         To get debugging messages, compile mcs with /define:MCS_DEBUG and
19788         then use this argument.
19789
19790         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
19791
19792         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
19793         use this to specify /define options.
19794
19795 2002-07-29  Martin Baulig  <martin@gnome.org>
19796
19797         * statement.cs (Fixed): Moved all code that does variable lookups
19798         and resolvings from Emit to Resolve.
19799
19800         * statement.cs (For): Moved all code that does variable lookups
19801         and resolvings from Emit to Resolve.
19802
19803         * statement.cs (Using): Moved all code that does variable lookups
19804         and resolvings from Emit to Resolve.
19805
19806 2002-07-29  Martin Baulig  <martin@gnome.org>
19807
19808         * attribute.cs (Attribute.Resolve): Explicitly catch a
19809         System.NullReferenceException when creating the
19810         CustromAttributeBuilder and report a different warning message.
19811
19812 2002-07-29  Martin Baulig  <martin@gnome.org>
19813
19814         * support.cs (ParameterData.ParameterName): Added method to
19815         get the name of a parameter.
19816
19817         * typemanager.cs (TypeManager.IsValueType): New public method.
19818
19819 2002-07-29  Martin Baulig  <martin@gnome.org>
19820
19821         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
19822         is a flag which specifies that it's either ref or out.
19823         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
19824         the out parameter to `out Parameter.Modifier mod', also set the
19825         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
19826
19827         * support.cs (InternalParameters.ParameterModifier): Distinguish
19828         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19829         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19830
19831         * expression.cs (Argument.GetParameterModifier): Distinguish
19832         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19833         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19834
19835 2002-07-29  Martin Baulig  <martin@gnome.org>
19836
19837         * expression.cs (ParameterReference.ParameterReference): Added
19838         `Location loc' argument to the constructor.
19839
19840         * cs-parser.jay: Pass location to ParameterReference.
19841
19842 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
19843
19844         * statement.cs (Try): Initialize the location.
19845
19846         * cs-parser.jay: pass location to Try.
19847
19848         * expression.cs (Unary.Reduce): Change the prototype to return
19849         whether a constant fold could be performed or not.  The result is
19850         returned in an out parameters.  In the case of Indirection and
19851         AddressOf, we want to perform the full tests.
19852
19853 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
19854
19855         * statement.cs (Statement.Emit): Flag dead code.
19856
19857 2002-07-27  Andrew Birkett  <andy@nobugs.org>
19858
19859         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
19860
19861 2002-07-27  Martin Baulig  <martin@gnome.org>
19862
19863         * class.cs (MethodData.Define): Put back call to
19864         TypeManager.AddMethod(), accidentally commented this out.
19865
19866         * report.cs (Debug): New public method to print debugging information,
19867         this is `[Conditional ("DEBUG")]'.
19868
19869 2002-07-26  Martin Baulig  <martin@gnome.org>
19870
19871         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
19872         (switch_statement): Push the current_block to the switch_stack and
19873         pop it again when we're done with the switch.
19874         (switch_section): The new block is a child of the current_block.
19875         Fixes bug #24007, added test-152.cs.
19876
19877 2002-07-27  Martin Baulig  <martin@gnome.org>
19878
19879         * expression.cs (Invocation.EmitArguments): When calling a varargs
19880         function with only its fixed arguments, we need to pass an empty
19881         array.
19882
19883 2002-07-27  Martin Baulig  <martin@gnome.org>
19884
19885         Mono 0.13 has been released.
19886
19887 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
19888
19889         * driver.cs: Rename --resource to --linkres, because that is what
19890         we do currently, we dont support --resource yet.
19891
19892         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
19893
19894 2002-07-25  Martin Baulig  <martin@gnome.org>
19895
19896         * class.cs (MethodData): New public class.  This is a `method builder'
19897         class for a method or one accessor of a Property/Indexer/Event.
19898         (MethodData.GetMethodFlags): Moved here from MemberBase.
19899         (MethodData.ApplyAttributes): Likewise.
19900         (MethodData.ApplyObsoleteAttribute): Likewise.
19901         (MethodData.ApplyConditionalAttribute): Likewise.
19902         (MethodData.ApplyDllImportAttribute): Likewise.
19903         (MethodData.CheckAbstractAndExternal): Likewise.
19904         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
19905         (MethodData.Emit): Formerly known as Method.Emit().
19906         (MemberBase): Moved everything which was specific to a single
19907         accessor/method to MethodData.
19908         (Method): Create a new MethodData and call Define() and Emit() on it.
19909         (Property, Indexer, Event): Create a new MethodData objects for each
19910         accessor and call Define() and Emit() on them.
19911
19912 2002-07-25  Martin Baulig  <martin@gnome.org>
19913
19914         Made MethodCore derive from MemberBase to reuse the code from there.
19915         MemberBase now also checks for attributes.
19916
19917         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
19918         (MemberBase.GetMethodFlags): Moved here from class Method and marked
19919         as virtual.
19920         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
19921         `CallingConventions cc' and `Attributes opt_attrs' arguments.
19922         (MemberBase.ApplyAttributes): New virtual method; applies the
19923         attributes to a method or accessor.
19924         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
19925         (MemberBase.ApplyConditionalAttribute): Likewise.
19926         (MemberBase.ApplyDllImportAttribute): Likewise.
19927         (MemberBase.CheckAbstractAndExternal): Likewise.
19928         (MethodCore.ParameterTypes): This is now a property instead of a
19929         method, it's initialized from DoDefineParameters().
19930         (MethodCore.ParameterInfo): Removed the set accessor.
19931         (MethodCore.DoDefineParameters): New protected virtual method to
19932         initialize ParameterTypes and ParameterInfo.
19933         (Method.GetReturnType): We can now simply return the MemberType.
19934         (Method.GetMethodFlags): Override the MemberBase version and add
19935         the conditional flags.
19936         (Method.CheckBase): Moved some code from Define() here, call
19937         DoDefineParameters() here.
19938         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
19939         here to avoid some larger code duplication.
19940         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
19941         ensure that abstract and external accessors don't declare a body.
19942
19943         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
19944         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
19945         lookup in the attribute's parent classes, so we need to abort as soon
19946         as we found the first match.
19947         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
19948         the attribute has no arguments.
19949
19950         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
19951         of a Method.
19952
19953 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19954
19955         * cs-parser.jay: reverted previous patch.
19956
19957 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19958
19959         * cs-parser.jay: fixed bug #22119.
19960
19961 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19962
19963         * attribute.cs: fixed compilation. The error was:
19964         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
19965         be assigned to before control leaves the current method."
19966         [FIXME:  Filed as bug #28186: MCS must report this error.]
19967
19968 2002-07-25  Martin Baulig  <martin@gnome.org>
19969
19970         * attribute.cs (Attribute.Conditional_GetConditionName): New static
19971         method to pull the condition name ouf of a Conditional attribute.
19972         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
19973         the obsolete message and error flag out of an Obsolete attribute.
19974
19975         * class.cs (Method.GetMethodFlags): New public method to get the
19976         TypeManager.MethodFlags for this method.
19977         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
19978         private methods.
19979         (Method.Define): Get and apply the Obsolete and Conditional attributes;
19980         if we're overriding a virtual function, set the new private variable
19981         `parent_method'; call the new TypeManager.AddMethod().
19982
19983         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
19984         the MethodBuilder and the Method in a PtrHashtable.
19985         (TypeManager.builder_to_method): Added for this purpose.
19986         (TypeManager.MethodFlags): Added IsObsoleteError.
19987         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
19988         Obsolete and Conditional arguments in MethodBuilders.  If we discover
19989         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
19990         the message from the attribute.
19991
19992 2002-07-24  Martin Baulig  <martin@gnome.org>
19993
19994         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
19995         preprocessor directives, ensure that the argument to #define/#undef is
19996         exactly one identifier and that it's actually an identifier.
19997
19998         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
19999         did not work ....
20000
20001 2002-07-24  Martin Baulig  <martin@gnome.org>
20002
20003         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
20004         initialize it to TypeManager.object_type in the constructor.
20005         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
20006         of the `hm.get_current' method if we're using the collection pattern.
20007         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
20008         for the explicit conversion to make it work when we're using the collection
20009         pattern and the `Current' property has a different return type than `object'.
20010         Fixes #27713.
20011
20012 2002-07-24  Martin Baulig  <martin@gnome.org>
20013
20014         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
20015         does not match, but don't report any errors.  This method is called in
20016         order for all methods in a MethodGroupExpr until a matching method is
20017         found, so we don't want to bail out if the first method doesn't match.
20018         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
20019         matches, report the 123.  Fixes #28070.
20020
20021 2002-07-24  Martin Baulig  <martin@gnome.org>
20022
20023         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
20024         TypeManager.TypeToCoreType() to the top of the method so the
20025         following equality checks will work.  Fixes #28107.
20026
20027 2002-07-24  Martin Baulig  <martin@gnome.org>
20028
20029         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
20030         operand is of type uint, and the other operand is of type sbyte,
20031         short or int, the operands are converted to type long." -
20032         Actually do what this comment already told us.  Fixes bug #28106,
20033         added test-150.cs.
20034
20035 2002-07-24  Martin Baulig  <martin@gnome.org>
20036
20037         * class.cs (MethodBase): New abstract class.  This is now a base
20038         class for Property, Indexer and Event to avoid some code duplication
20039         in their Define() and DefineMethods() methods.
20040         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
20041         generic methods for Define() and DefineMethods().
20042         (FieldBase): Derive from MemberBase, not MemberCore.
20043         (Property): Derive from MemberBase, not MemberCore.
20044         (Property.DefineMethod): Moved all the code from this method to the
20045         new MethodBase.DefineAccessor(), just call it with appropriate
20046         argumetnts.
20047         (Property.Define): Call the new Property.DoDefine(), this does some
20048         sanity checks and we don't need to duplicate the code everywhere.
20049         (Event): Derive from MemberBase, not MemberCore.
20050         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
20051         accessors, this will also make them work with interface events.
20052         (Indexer): Derive from MemberBase, not MemberCore.
20053         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
20054         (Indexer.Define): Use the new MethodBase functions.
20055
20056         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
20057         argument to the constructor.
20058         (Interface.FindMembers): Added support for interface events.
20059         (Interface.PopluateEvent): Implemented.
20060
20061         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
20062
20063 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
20064
20065         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
20066         but this is required to check for a method name being the same as
20067         the containing class.  
20068
20069         Handle this now.
20070
20071 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20072
20073         * interface.cs: initialize variable.
20074
20075 2002-07-23  Martin Baulig  <martin@gnome.org>
20076
20077         Implemented the IndexerName attribute in interfaces.
20078
20079         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
20080         name if this is an explicit interface implementation.
20081         (Indexer.InterfaceIndexerName): New public variable.  If we're
20082         implementing an interface indexer, this is the IndexerName in that
20083         interface.  Otherwise, it's the IndexerName.
20084         (Indexer.DefineMethod): If we're implementing interface indexer,
20085         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
20086         and Pending.ImplementIndexer methods.
20087         (Indexer.Define): Also define the PropertyBuilder if we're
20088         implementing an interface indexer and this is neither an explicit
20089         interface implementation nor do the IndexerName match the one in
20090         the interface.
20091
20092         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
20093         If a method is defined here, then we always need to create a proxy
20094         for it.  This is used when implementing interface indexers.
20095         (Pending.IsInterfaceIndexer): New public method.
20096         (Pending.ImplementIndexer): New public method.
20097         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
20098         This is used when implementing interface indexers to define a proxy
20099         if necessary.
20100         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
20101         define a proxy if necessary.
20102
20103         * interface.cs (Interface.IndexerName): New public variable.
20104         (Interface.PopulateIndexer): Set the IndexerName.
20105         (Interface.DefineIndexers): New private method.  Populate all the
20106         indexers and make sure their IndexerNames match.
20107
20108         * typemanager.cs (IndexerPropertyName): Added support for interface
20109         indexers.
20110
20111 2002-07-22  Martin Baulig  <martin@gnome.org>
20112
20113         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
20114         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
20115         ret if HasReturnLabel.
20116         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
20117         variables.
20118
20119         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
20120         and set the ec.LoopBeginTryCatchLevel.
20121         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
20122         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
20123         the current ec.TryCatchLevel, the branch goes out of an exception
20124         block.  In this case, we need to use Leave and not Br.
20125
20126 2002-07-22  Martin Baulig  <martin@gnome.org>
20127
20128         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
20129         block unless the block does not always return or it is contained in
20130         another try { ... } catch { ... } block.  Fixes bug #26506.
20131         Added verify-1.cs to the test suite.
20132
20133 2002-07-22  Martin Baulig  <martin@gnome.org>
20134
20135         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
20136         then we do not always return.  Fixes bug #24985.
20137
20138 2002-07-22  Martin Baulig  <martin@gnome.org>
20139
20140         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
20141         lookup on a per-class level; ie. walk up the class hierarchy until we
20142         found at least one applicable method, then choose the best among them.
20143         Fixes bug #24463 and test-29.cs.
20144
20145 2002-07-22  Martin Baulig  <martin@gnome.org>
20146
20147         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
20148         return types of the methods.  The return type is not part of the
20149         signature and we must not check it to make the `new' modifier work.
20150         Fixes bug #27999, also added test-147.cs.
20151         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
20152
20153         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
20154         on the method's return type.
20155
20156 2002-07-21  Martin Baulig  <martin@gnome.org>
20157
20158         * assign.cs: Make this work if the rightmost source is a constant and
20159         we need to do an implicit type conversion.  Also adding a few more tests
20160         to test-38.cs which should have caught this.
20161
20162         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
20163         target in the makefile for this.  The makefile.gnu is primarily intended
20164         for end-users who don't want to debug the compiler.
20165
20166 2002-07-21  Martin Baulig  <martin@gnome.org>
20167
20168         * assign.cs: Improved the Assign class so it can now handle embedded
20169         assignments (X = Y = Z = something).  As a side-effect this'll now also
20170         consume less local variables.  test-38.cs now passes with MCS, added
20171         a few new test cases to that test.
20172
20173 2002-07-20  Martin Baulig  <martin@gnome.org>
20174
20175         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
20176         instructions.  Fixes bug #27977, also added test-146.cs.
20177
20178 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20179
20180         * cs-tokenizer.cs: fixed getHex ().
20181
20182 2002-07-19  Martin Baulig  <martin@gnome.org>
20183
20184         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
20185         not Type.GetType() to lookup the array type.  This is needed when
20186         we're constructing an array of a user-defined type.
20187         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
20188         single-dimensional arrays, but also for single-dimensial arrays of
20189         type decimal.
20190
20191 2002-07-19  Martin Baulig  <martin@gnome.org>
20192
20193         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
20194         this function is called, it's not allowed to share LocalBuilders
20195         among ILGenerators.
20196
20197 2002-07-19  Martin Baulig  <martin@gnome.org>
20198
20199         * expression.cs (Argument.Resolve): Report an error 118 when trying
20200         to pass a type as argument.
20201
20202 2002-07-18  Martin Baulig  <martin@gnome.org>
20203
20204         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
20205         Conv_R_Un for the signed `long' type.
20206
20207 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
20208
20209         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
20210         `expr' for the temporary result, as that will fail if we do
20211         multiple resolves on the same expression.
20212
20213 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
20214
20215         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
20216         ec.TypeContainer for looking up aliases. 
20217
20218         * class.cs (TypeContainer): Remove LookupAlias from here.
20219
20220         * decl.cs (DeclSpace); Move here.
20221
20222 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
20223
20224         * class.cs (FindMembers): Only call filter if the constructor
20225         bulider is not null.
20226
20227         Also handle delegates in `NestedTypes' now.  Now we will perform
20228         type lookups using the standard resolution process.  This also
20229         fixes a bug.
20230
20231         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
20232         This uses Expressions (the limited kind that can be parsed by the
20233         tree) instead of strings.
20234
20235         * expression.cs (ComposedCast.ToString): Implement, used to flag
20236         errors since now we have to render expressions.
20237
20238         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
20239         FormArrayType. 
20240
20241         * ecore.cs (SimpleName.ToString): ditto.
20242
20243         * cs-parser.jay: Instead of using strings to assemble types, use
20244         Expressions to assemble the type (using SimpleName, ComposedCast,
20245         MemberAccess).  This should fix the type lookups in declarations,
20246         because we were using a different code path for this.
20247
20248         * statement.cs (Block.Resolve): Continue processing statements
20249         even when there is an error.
20250
20251 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
20252
20253         * class.cs (Event.Define): Also remove the `remove' method from
20254         the list of pending items.
20255
20256         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
20257         generate more compact code. 
20258
20259 2002-07-17  Martin Baulig  <martin@gnome.org>
20260
20261         * const.cs (Const.LookupConstantValue): Add support for constant
20262         `unchecked' and `checked' expressions.
20263         Also adding test case test-140.cs for this.
20264
20265 2002-07-17  Martin Baulig  <martin@gnome.org>
20266
20267         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
20268         check whether mi.ReturnType implements the IEnumerator interface; the
20269         `==' and the IsAssignableFrom() will fail in this situation.
20270
20271 2002-07-16  Ravi Pratap  <ravi@ximian.com>
20272
20273         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
20274         here too.
20275
20276 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20277
20278         * expression.cs: fixed bug #27811.
20279
20280 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
20281
20282         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
20283         Molaro: when we are a ref, the value already contains a pointer
20284         value, do not take the address of it.
20285
20286 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
20287         * removed mb-parser.jay and mb-tokenizer.cs
20288
20289 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20290
20291         * expression.cs: check against the building corlib void type.
20292
20293 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
20294
20295         * ecore.cs: fix for valuetype static readonly fields: when 
20296         initializing them, we need their address, not the address of a copy.
20297
20298 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
20299
20300         * typemanager.cs: register also enum_type in corlib.
20301
20302 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20303
20304         * class.cs: allow calling this (but not base) initializers in structs.
20305
20306 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
20307
20308         * ecore.cs: make sure we compare against the building base types
20309         in GetTypeSize ().
20310
20311 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
20312
20313         * typemanager.cs: fix TypeToCoreType() to handle void and object
20314         (corlib gets no more typerefs after this change).
20315
20316 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
20317
20318         * expression.cs (ArrayCreation.EmitArrayArguments): use
20319         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
20320
20321         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
20322         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
20323         array indexes, the runtime actually forbids them.
20324
20325         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
20326         for array arguments here.
20327
20328         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
20329         instead of the default for ValueTypes.
20330
20331         (New.DoEmit): Use IsValueType instead of
20332         IsSubclassOf (value_type)
20333         (New.DoResolve): ditto.
20334         (Invocation.EmitCall): ditto.
20335
20336         * assign.cs (Assign): ditto.
20337
20338         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
20339         Statements *are* currently doing part of their resolution during
20340         Emit.  
20341
20342         Expressions do always resolve during resolve, but statements are
20343         only required to propagate resolution to their children.
20344
20345 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
20346
20347         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
20348
20349         (LoadAssembly): Do not add the dll if it is already specified
20350
20351         (MainDriver): Add the System directory to the link path at the end,
20352         after all the other -L arguments. 
20353
20354         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
20355         wrong opcode for loading bytes and bools (ldelem.i1 instead of
20356         ldelem.u1) and using the opposite for sbytes.
20357
20358         This fixes Digger, and we can finally run it.
20359
20360         * driver.cs (UnixParseOption): Move the option parsing here.  
20361         (CSCParseOption): Implement CSC-like parsing of options.
20362
20363         We now support both modes of operation, the old Unix way, and the
20364         new CSC-like way.  This should help those who wanted to make cross
20365         platform makefiles.
20366
20367         The only thing broken is that /r:, /reference: and /lib: are not
20368         implemented, because I want to make those have the same semantics
20369         as the CSC compiler has, and kill once and for all the confussion
20370         around this.   Will be doing this tomorrow.
20371
20372         * statement.cs (Unsafe.Resolve): The state is checked during
20373         resolve, not emit, so we have to set the flags for IsUnsfe here.
20374
20375 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20376
20377         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
20378         not catch the Error_ObjectRefRequired in SimpleName (as it is
20379         possible to have a class/instance variable name that later gets
20380         deambiguated), we have to check this here.      
20381
20382 2002-07-10  Ravi Pratap  <ravi@ximian.com>
20383
20384         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
20385         make static and put into Expression.
20386
20387         (Event.Define): Register the private field of the event with the 
20388         TypeManager so that GetFieldFromEvent can get at it.
20389
20390         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
20391         keep track of the private field associated with an event which
20392         has no accessors.
20393
20394         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
20395         private field.
20396
20397         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
20398
20399 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20400
20401         * expression.cs (Binary.EmitBranchable): this routine emits the
20402         Binary expression in a branchable context.  This basically means:
20403         we need to branch somewhere, not just get the value on the stack.
20404
20405         This works together with Statement.EmitBoolExpression.
20406
20407         * statement.cs (Statement.EmitBoolExpression): Use
20408         EmitBranchable. 
20409
20410 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
20411
20412         * statement.cs (For): Reduce the number of jumps in loops.
20413
20414         (For): Implement loop inversion for the For statement.
20415
20416         (Break): We can be breaking out of a Try/Catch controlled section
20417         (foreach might have an implicit try/catch clause), so we need to
20418         use Leave instead of Br.
20419
20420         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
20421         now).  If the instace expression supports IMemoryLocation, we use
20422         the AddressOf method from the IMemoryLocation to extract the
20423         address instead of emitting the instance.
20424
20425         This showed up with `This', as we were emitting the instance
20426         always (Emit) instead of the Address of This.  Particularly
20427         interesting when This is a value type, as we dont want the Emit
20428         effect (which was to load the object).
20429
20430 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
20431
20432         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
20433
20434         * statement.cs (Checked): Set the CheckedState during the resolve
20435         process too, as the ConvCast operations track the checked state on
20436         the resolve process, and not emit.
20437
20438         * cs-parser.jay (namespace_member_declaration): Flag that we have
20439         found a declaration when we do.  This is used to flag error 1529
20440
20441         * driver.cs: Report ok when we display the help only.
20442
20443 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
20444
20445         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
20446
20447 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
20448
20449         * cs-tokenizer.cs (define): We also have to track locally the
20450         defines.  AllDefines is just used for the Conditional Attribute,
20451         but we also need the local defines for the current source code. 
20452
20453 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
20454
20455         * statement.cs (While, For, Do): These loops can exit through a
20456         Break statement, use this information to tell whether the
20457         statement is the last piece of code.
20458
20459         (Break): Flag that we break.
20460
20461         * codegen.cs (EmitContexts): New `Breaks' state variable.
20462
20463 2002-07-03  Martin Baulig  <martin@gnome.org>
20464
20465         * class.cs (TypeContainer.MethodModifiersValid): Allow override
20466         modifiers in method declarations in structs.  Otherwise, you won't
20467         be able to override things like Object.Equals().
20468
20469 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20470
20471         * class.cs (Method, Property, Indexer): Do not allow the public
20472         modifier to be used in explicit interface implementations.
20473
20474         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
20475         override modifiers in method declarations in structs
20476
20477 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
20478
20479         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
20480         integer or real overflow, report an error
20481
20482 2002-07-02  Martin Baulig  <martin@gnome.org>
20483
20484         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
20485         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
20486         to tell the runtime about our newly created System.Object and
20487         System.ValueType types.
20488
20489 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20490
20491         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
20492         struct instead of Ldarg/Starg.
20493
20494 2002-07-02  Martin Baulig  <martin@gnome.org>
20495
20496         * expression.cs (Indirection.Indirection): Call
20497         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
20498
20499 2002-07-02  Martin Baulig  <martin@gnome.org>
20500
20501         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
20502         ValueType, call TypeManager.TypeToCoreType() on it.
20503         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
20504         the OpCodes.Newarr argument.
20505
20506 2002-07-02  Martin Baulig  <martin@gnome.org>
20507
20508         * expression.cs (Invocation.EmitCall): When compiling corlib,
20509         replace all calls to the system's System.Array type to calls to
20510         the newly created one.
20511
20512         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
20513         System.Array methods.
20514         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
20515         from the system's System.Array type which must be replaced.
20516
20517 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
20518
20519         * typemanager.cs: load unverifiable_code_ctor so we can build
20520         corlib using the correct type. Avoid using GetTypeCode() with
20521         TypeBuilders.
20522         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
20523         TypeManager.object_type to allow building corlib.
20524
20525 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
20526
20527         * ecore.cs: handle System.Enum separately in LoadFromPtr().
20528
20529 2002-07-01  Martin Baulig  <martin@gnome.org>
20530
20531         * class.cs: Make the last change actually work, we need to check
20532         whether `ifaces != null' to avoid a crash.
20533
20534 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20535
20536         * class.cs: when we build structs without fields that implement
20537         interfaces, we need to add the interfaces separately, since there is
20538         no API to both set the size and add the interfaces at type creation
20539         time.
20540
20541 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20542
20543         * expression.cs: the dimension arguments to the array constructors
20544         need to be converted if they are a long.
20545
20546 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
20547
20548         * class.cs: don't emit ldarg.0 if there is no parent constructor
20549         (fixes showstopper for corlib).
20550
20551 2002-06-29  Martin Baulig  <martin@gnome.org>
20552
20553         MCS now compiles corlib on GNU/Linux :-)
20554
20555         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
20556         ie. check for MethodImplOptions.InternalCall.
20557
20558         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
20559         and TypeManager.attribute_type are null, so we must explicitly check
20560         whether parent is not null to find out whether it's an attribute type.
20561         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
20562         and SetBuilder, not only if the property is neither abstract nor external.
20563         This is necessary to set the MethodImplOptions on the accessor methods.
20564         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
20565         SetBuilder, see Property.Emit().
20566
20567         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
20568         populate "System.Object", "System.ValueType" and "System.Attribute" since
20569         they've already been populated from BootCorlib_PopulateCoreTypes().
20570
20571 2002-06-29  Martin Baulig  <martin@gnome.org>
20572
20573         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
20574         is the NullLiteral, we also need to make sure that target_type is not
20575         an enum type.   
20576
20577 2002-06-29  Martin Baulig  <martin@gnome.org>
20578
20579         * rootcontext.cs (RootContext.ResolveCore): We must initialize
20580         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
20581         before calling BootstrapCorlib_ResolveDelegate ().
20582
20583 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20584
20585         * statement.cs: fixed build-breaker. All tests passed ok.
20586
20587 2002-06-27  Martin Baulig  <martin@gnome.org>
20588
20589         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
20590         for System.Decimal when compiling corlib.
20591
20592 2002-06-27  Martin Baulig  <martin@gnome.org>
20593
20594         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
20595         switch blocks which contain nothing but a default clause.
20596
20597 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
20598
20599        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
20600
20601 2002-06-27  Martin Baulig  <martin@gnome.org>
20602
20603         * ecore.cs (PropertyExpr.PropertyExpr): Call
20604         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
20605
20606         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
20607         is already a TypeBuilder.
20608
20609 2002-06-27  Martin Baulig  <martin@gnome.org>
20610
20611         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
20612         `target_type == TypeManager.array_type', not IsAssignableFrom() in
20613         the "from an array-type to System.Array" case.  This makes it work
20614         when compiling corlib.
20615
20616 2002-06-27  Martin Baulig  <martin@gnome.org>
20617
20618         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
20619         non-static PropertyExpr, set its InstanceExpression.  This makes
20620         the `ICollection.Count' property work in System/Array.cs.
20621
20622 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
20623
20624         * driver.cs: Made error handling more consistent.  Errors now
20625         tracked by Report class, so many methods which used to return int
20626         now return void.  Main() now prints success/failure and 
20627         errors/warnings message.
20628
20629         Renamed '--probe' compiler argument to '--expect-error'.  Removed
20630         the magic number return values (123 and 124).  Now, if the
20631         expected error occurs, the compiler exits with success (exit value
20632         0).  If the compilation completes without seeing that particular
20633         error, the compiler exits with failure (exit value 1).  The
20634         makefile in mcs/errors has been changed to handle the new behaviour.
20635
20636         * report.cs: Made 'expected error' number a property and renamed
20637         it from 'Probe' to 'ExpectedError'.
20638
20639         * genericparser.cs: Removed error handling support, since it is
20640         now all done by Report class.
20641
20642         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
20643         class, so parse() no longer returns an int.
20644
20645         * namespace.cs: Use Report.Error instead of GenericParser.error
20646
20647 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
20648
20649         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
20650         TypeContainer.AddOperator): At the front of the list put the
20651         explicit implementations, so they get resolved/defined first. 
20652
20653 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
20654
20655         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
20656         interface type is implemented by this TypeContainer.  Used during
20657         explicit interface implementation.
20658
20659         (Property.Define, Indexer.Define, Method.Define): Validate that
20660         the given interface in the explicit implementation is one of the
20661         base classes for the containing type.
20662
20663         Also if we are explicitly implementing an interface, but there is
20664         no match in the pending implementation table, report an error.
20665
20666         (Property.Define): Only define the property if we are
20667         not explicitly implementing a property from an interface.  Use the
20668         correct name also for those properties (the same CSC uses,
20669         although that is really not needed).
20670
20671         (Property.Emit): Do not emit attributes for explicitly implemented
20672         properties, as there is no TypeBuilder.
20673
20674         (Indexer.Emit): ditto.
20675
20676         Hiding then means that we do not really *implement* a pending
20677         implementation, which makes code fail.
20678
20679 2002-06-22  Martin Baulig  <martin@gnome.org>
20680
20681         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
20682         the return value of Object.GetType().  [FIXME: we need to do this whenever
20683         we get a type back from the reflection library].
20684
20685 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
20686
20687         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
20688
20689 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
20690
20691         * attribute.cs: Return null if we can not look up the type.
20692
20693         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
20694         the interface types found.
20695
20696         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
20697         interface types found.
20698
20699         * typemanager.cs (GetInterfaces): Make this routine returns alll
20700         the interfaces and work around the lame differences between
20701         System.Type and System.Reflection.Emit.TypeBuilder in the results
20702         result for GetInterfaces.
20703
20704         (ExpandInterfaces): Given an array of interface types, expand and
20705         eliminate repeated ocurrences of an interface.  This expands in
20706         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
20707         be IA, IB, IC.
20708
20709 2002-06-21  Martin Baulig  <martin@gnome.org>
20710
20711         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
20712         on System.Enum.
20713
20714 2002-06-21  Martin Baulig  <martin@gnome.org>
20715
20716         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
20717         and called with one of the core types, return the corresponding typebuilder for
20718         that type.
20719
20720         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
20721         element type.
20722
20723 2002-06-21  Martin Baulig  <martin@gnome.org>
20724
20725         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
20726         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
20727         (Expression.ConvertReferenceExplicit): Likewise.
20728
20729         * expression.cs (ElementAccess.DoResolve): Likewise.
20730         (ElementAccess.DoResolveLValue): Likewise.
20731
20732 2002-06-10  Martin Baulig  <martin@gnome.org>
20733
20734         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
20735         add the "value" parameter to the parameter list.
20736
20737         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
20738         to our caller.
20739
20740 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
20741
20742         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
20743         the argument to an int, uint, long or ulong, per the spec.  Also
20744         catch negative constants in array creation.
20745
20746 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
20747
20748         * class.cs: do not allow the same interface to appear twice in
20749         the definition list.
20750
20751 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
20752
20753         * ecore.cs: don't use ldlen with System.Array.
20754
20755 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
20756
20757         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
20758
20759 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
20760
20761         * modifiers.cs: produce correct field attributes for protected
20762         internal. Easy fix so miguel can work on ther harder stuff:-)
20763
20764 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
20765
20766         * pending.cs: New file.  Move the code from class.cs here.
20767         Support clearning the pending flag for all methods (when not doing
20768         explicit interface implementation).
20769
20770 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
20771
20772         * rootcontext.cs: added a couple more types needed to bootstrap.
20773
20774 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
20775
20776         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
20777         constructor in the type, instead of any constructor in the type
20778         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
20779         a bug in the Mono runtime when applying the params attribute). 
20780
20781 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
20782         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
20783
20784 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
20785
20786         * expression.cs (Unary.ResolveOperator): Use TypeManager
20787         to resolve the type.
20788
20789 2002-06-13  Ravi Pratap  <ravi@ximian.com>
20790
20791         * cs-parser.jay (enum_member_declaration): Pass in the attributes
20792         attached.
20793
20794         * enum.cs (AddEnumMember): Add support to store the attributes associated 
20795         with each member too.
20796
20797         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
20798         field builders too - this takes care of the enum member case.
20799
20800 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
20801
20802         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
20803         address-of operator on both value types and pointers.
20804
20805 2002-06-10  Martin Baulig  <martin@gnome.org>
20806
20807         * interface.cs (Interface.PopulateIndexer): Add the indexer's
20808         PropertyBuilder to the `property_builders' list.
20809
20810         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
20811         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
20812         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
20813         find any indexers which are inherited from an interface.
20814
20815 2002-06-09  Martin Baulig  <martin@gnome.org>
20816
20817         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
20818         the same type as the constant if necessary.  There's also a test-130.cs
20819         for this.
20820
20821         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
20822
20823         * typemanager.cs (TypeManager.ChangeType): Previously known as
20824         Enum.ChangeEnumType().
20825
20826 2002-06-09  Martin Baulig  <martin@gnome.org>
20827
20828         * expression.cs (Cast.TryReduce): Added support for consts.
20829
20830 2002-06-08  Ravi Pratap  <ravi@ximian.com>
20831
20832         * class.cs (Accessor): Hold attributes information so we can pass
20833         it along.
20834
20835         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
20836         Modify to pass in attributes attached to the methods.
20837
20838         (add_accessor_declaration, remove_accessor_declaration): Ditto.
20839
20840         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
20841         to handle the Accessor kind :-)
20842
20843         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
20844
20845 2002-06-08  Martin Baulig  <martin@gnome.org>
20846
20847         * expression.cs (Unary.TryReduceNegative): Added support for
20848         ULongConstants.
20849
20850 2002-06-08  Martin Baulig  <martin@gnome.org>
20851
20852         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
20853         name can't be found in the `defined_names' - the caller will do a
20854         MemberLookup in this case and thus find methods in System.Enum
20855         such as Enum.IsDefined().
20856
20857 2002-06-08  Martin Baulig  <martin@gnome.org>
20858
20859         * enum.cs (Enum.ChangeEnumType): This is a custom version of
20860         Convert.ChangeType() which works with TypeBuilder created types.
20861         (Enum.LookupEnumValue, Enum.Define): Use it here.
20862
20863         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
20864         `TypeBuilder.BaseType != null' check.
20865         (TypeContainer.FindMembers): Only lookup parent members if we
20866         actually have a parent.
20867         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
20868         (ConstructorInitializer.Resolve): Likewise.
20869
20870         * interface.cs (Interface.FindMembers): Added
20871         `TypeBuilder.BaseType != null' check.
20872
20873         * rootcontext.cs (RootContext.ResolveCore): Added
20874         "System.Runtime.CompilerServices.IndexerNameAttribute" to
20875         classes_second_stage.
20876
20877         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
20878         debug_type and trace_type when compiling with --nostdlib.       
20879
20880 2002-06-07  Martin Baulig  <martin@gnome.org>
20881
20882         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
20883         (AddField): Set it to true when adding a non-static field.
20884         (DefineType): Use `have_nonstatic_fields' to find out whether we
20885         have non-static fields, not `Fields != null'.
20886
20887 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
20888
20889         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
20890         dereferencing a null on the static-field code path)
20891
20892 2002-05-30  Martin Baulig  <martin@gnome.org>
20893
20894         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
20895         to take command line arguments.  Use reflection to call the new
20896         custom `Initialize' function on the symbol writer and pass it the
20897         command line arguments.
20898
20899         * driver.cs (--debug-args): New command line argument to pass command
20900         line arguments to the symbol writer.
20901
20902 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
20903
20904         * assign.cs (DoResolve): Forgot to do the implicit conversion to
20905         the target type for indexers and properties.  Thanks to Joe for
20906         catching this.
20907
20908 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
20909
20910         * typemanager.cs (MethodFlags): returns the method flags
20911         (Obsolete/ShouldIgnore) that control warning emission and whether
20912         the invocation should be made, or ignored. 
20913
20914         * expression.cs (Invocation.Emit): Remove previous hack, we should
20915         not do this on matching a base type, we should do this based on an attribute
20916
20917         Only emit calls to System.Diagnostics.Debug and
20918         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
20919         on the command line.
20920
20921         * rootcontext.cs: Global settings for tracing and debugging.
20922
20923         * cs-tokenizer.cs (define): New utility function to track
20924         defines.   Set the global settings for TRACE and DEBUG if found.
20925
20926 2002-05-25  Ravi Pratap  <ravi@ximian.com>
20927
20928         * interface.cs (Populate*): Pass in the TypeContainer as well as
20929         the DeclSpace as parameters so that we can create EmitContexts and
20930         then use that to apply attributes etc.
20931
20932         (PopulateMethod, PopulateEvent, PopulateProperty)
20933         (PopulateIndexer): Apply attributes everywhere.
20934
20935         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
20936         etc.
20937
20938         (ApplyAttributes): Update accordingly.
20939
20940         We now apply interface attributes for all members too.
20941
20942 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
20943
20944         * class.cs (Indexer.Define); Correctly check if we are explicit
20945         implementation (instead of checking the Name for a ".", we
20946         directly look up if the InterfaceType was specified).
20947
20948         Delay the creation of the PropertyBuilder.
20949
20950         Only create the PropertyBuilder if we are not an explicit
20951         interface implementation.   This means that explicit interface
20952         implementation members do not participate in regular function
20953         lookups, and hence fixes another major ambiguity problem in
20954         overload resolution (that was the visible effect).
20955
20956         (DefineMethod): Return whether we are doing an interface
20957         implementation. 
20958
20959         * typemanager.cs: Temporary hack until we get attributes in
20960         interfaces (Ravi is working on that) and we get IndexerName
20961         support in interfaces.
20962
20963         * interface.cs: Register the indexers as properties.
20964
20965         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
20966         warning, I have verified that this is a bug in the .NET runtime
20967         (JavaScript suffers of the same problem).
20968
20969         * typemanager.cs (MemberLookup): When looking up members for
20970         interfaces, the parent of an interface is the implicit
20971         System.Object (so we succeed in searches of Object methods in an
20972         interface method invocation.  Example:  IEnumerable x;  x.ToString
20973         ()) 
20974
20975 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
20976
20977         * class.cs (Event): Events should also register if they do
20978         implement the methods that an interface requires.
20979
20980         * typemanager.cs (MemberLookup); use the new GetInterfaces
20981         method. 
20982
20983         (GetInterfaces): The code used to lookup interfaces for a type is
20984         used in more than one place, factor it here. 
20985
20986         * driver.cs: Track the errors at the bottom of the file, we kept
20987         on going.
20988
20989         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
20990         instance if the method we are calling is static!
20991
20992 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
20993
20994         * attribute.cs (ApplyAttributes): Make this function filter out
20995         the IndexerName attribute (as that attribute in reality is never
20996         applied) and return the string constant for the IndexerName
20997         attribute. 
20998
20999         * class.cs (TypeContainer.Emit): Validate that all the indexers
21000         have the same IndexerName attribute, and if so, set the
21001         DefaultName attribute on the class. 
21002
21003         * typemanager.cs: The return value might contain other stuff (not
21004         only methods).  For instance, consider a method with an "Item"
21005         property and an Item method.
21006
21007         * class.cs: If there is a problem with the parameter types,
21008         return. 
21009
21010 2002-05-24  Ravi Pratap  <ravi@ximian.com>
21011
21012         * ecore.cs (ImplicitConversionExists): Wrapper function which also
21013         looks at user defined conversion after making a call to 
21014         StandardConversionExists - we need this for overload resolution.
21015
21016         * expression.cs : Update accordingly the various method calls.
21017
21018         This fixes 2 bugs filed against implicit user defined conversions 
21019
21020 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
21021
21022         * statement.cs: Track the result of the assignment.
21023
21024 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
21025
21026         * expression.cs (MemberAccess): Improved error reporting for
21027         inaccessible members.
21028
21029 2002-05-22  Martin Baulig  <martin@gnome.org>
21030
21031         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
21032         itself with debugging support.
21033
21034 2002-05-22  Martin Baulig  <martin@gnome.org>
21035
21036         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
21037         Removed, this isn't needed anymore.
21038
21039 2002-05-20  Martin Baulig  <martin@gnome.org>
21040
21041         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
21042         be underlying type for an enum.
21043
21044 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
21045
21046         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
21047         that splits out the loading of just the core types.
21048
21049         * rootcontext.cs (ResolveCore): Split the struct resolution in
21050         two, so we can load the enumeration underlying types before any
21051         enums are used.
21052
21053         * expression.cs (Is): Bandaid until we fix properly Switch (see
21054         bug #24985 for details).
21055
21056         * typemanager.cs (ImplementsInterface): The hashtable will contain
21057         a null if there are no interfaces implemented.
21058
21059 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
21060
21061         * cs-parser.jay (indexer_declarator): It is fine to have array
21062         parameters
21063
21064 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21065
21066         * typemanager.cs: (RegisterBuilder): New function used to register
21067         TypeBuilders that implement interfaces.  Since
21068         TypeBuilder.GetInterfaces (as usual) does not work with lame
21069         Reflection.Emit. 
21070         (AddUserType): register interfaces.
21071
21072         (ImplementsInterface): Use the builder_to_ifaces hash if we are
21073         dealing with TypeBuilder.  Also, arrays are showing up as
21074         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
21075         methods can not be invoked on them!
21076
21077         * ecore.cs (ExplicitReferenceConversionExists): Made public.
21078         (ImplicitReferenceConversionExists): Split out from
21079         StandardConversionExists. 
21080
21081         * expression.cs (As): We were only implementing one of the three
21082         cases for the as operator.  We now implement them all.
21083         (Is): Implement the various other cases for Is as well.
21084
21085         * typemanager.cs (CACHE): New define used to control if we want or
21086         not the FindMembers cache.  Seems to have a negative impact on
21087         performance currently
21088
21089         (MemberLookup): Nested types have full acess to
21090         enclosing type members
21091
21092         Remove code that coped with instance/static returns for events, we
21093         now catch this in RealFindMembers.
21094
21095         (RealFindMembers): only perform static lookup if the instance
21096         lookup did not return a type or an event.  
21097
21098 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21099
21100         * assign.cs (CompoundAssign): We pass more semantic information
21101         now to Compound Assignments than we did before: now we have all
21102         the information at hand, and now we resolve the target *before* we
21103         do the expression expansion, which allows the "CacheValue" method
21104         to have the effect we intended (before, a [x] += 1 would generate
21105         two differen ArrayAccess expressions from the ElementAccess,
21106         during the resolution process).
21107
21108         (CompoundAssign.DoResolve): Resolve target and original_source here.
21109
21110 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
21111
21112         * expression.cs (ArrayAccess): dropped debugging information. 
21113
21114         * typemanager.cs: Small bug fix: I was always returning i_members,
21115         instead of one of i_members or s_members (depending on which had
21116         the content).
21117
21118         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
21119         method is invoked before any code generation takes place, and it
21120         is a mechanism to inform that the expression will be invoked more
21121         than once, and that the method should use temporary values to
21122         avoid having side effects
21123
21124         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
21125
21126         * ecore.cs (Expression.CacheTemporaries): Provide empty default
21127         implementation.
21128
21129         * expression.cs (Indirection, ArrayAccess): Add support for
21130         CacheTemporaries in these two bad boys. 
21131
21132         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
21133         ldobj or ldind_ref.  
21134         (StoreFromPtr): Handle stobj as well.
21135
21136         * expression.cs (UnaryMutator): Share more code.
21137
21138         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
21139         down: I was not tracking the Filter function as well, which
21140         was affecting the results of the cache.
21141
21142 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
21143
21144         * attribute.cs: Remove the hack to handle the CharSet property on
21145         StructLayouts. 
21146
21147 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
21148
21149         * attribute.cs (DoResolve): More uglyness, we now only try to
21150         resolve the attribute partially, to extract the CharSet
21151         information (only if we are a StructLayout attribute).  Otherwise 
21152
21153         (GetExtraTypeInfo): Add some code to conditionally kill in the
21154         future this.   I am more and more convinced that the .NET
21155         framework has special code to handle the attribute setting on
21156         certain elements.
21157
21158         * expression.cs (IsParamsMethodApplicable): Revert my previous
21159         foreach change here, it was wrong.
21160
21161 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
21162
21163         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
21164         (pp_expr): do not abort on unknown input, just return.
21165         (eval): abort if there are pending chars.
21166
21167         * attribute.cs (Attribute.Resolve): Positional parameters are
21168         optional.  Deal with that case.
21169
21170         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
21171         the Ansi/Unicode/Auto information for the type.
21172
21173         (TypeContainer.DefineType): instantiate the EmitContext here, as
21174         we will be using it during the type definition (to resolve
21175         attributes) and during the emit phase.
21176
21177         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
21178         to pull type information out of the attributes
21179
21180         (Attribute.Resolve): track the constructor builder, and allow for
21181         multiple invocations (structs and classes will use this).
21182
21183         * ecore.cs (MemberLookupFinal): new version with all the
21184         parameters customizable.
21185
21186         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
21187         constructors.  Return if the result value is null (as the error
21188         would have been flagged already by MemberLookupFinal)
21189
21190         Do not allow instances of abstract classes or interfaces to be
21191         created.
21192
21193         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
21194         We have to compare the assembly property here when dealing with
21195         FamANDAssem and Assembly access modifiers, because we might be
21196         creating an assembly from *modules* (that means that we are not
21197         getting TypeBuilders for types defined in other modules that are
21198         part of this assembly).
21199
21200         (Method.Emit): If the method is marked abstract and has a body,
21201         emit an error. 
21202
21203         (TypeContainer.DefineMembers): If both the defined member and the
21204         parent name match are methods, then do not emit any warnings: let
21205         the Method.Define routine take care of flagging warnings.  But if
21206         there is a mismatch (method overrides something else, or method is
21207         overriwritten by something, then emit warning).
21208
21209         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
21210         set to null, this means `do not check for the return type on the
21211         signature'. 
21212
21213         (Method.Define): set the return type for the method signature to
21214         null, so that we get methods with the same name and parameters and
21215         different return types.  This is used to flag warning 114 (you are
21216         hiding a method, and you probably want to use the new/override
21217         keywords instead).
21218
21219         * typemanager.cs (MemberLookup): Implemented proper access
21220         control, closing a long standing set of bug reports.  The problem
21221         was that the Framework only has two bits: Public and NonPublic,
21222         and NonPublic includes private and protected methods, but we need
21223         to enforce the FamANDAssem, FamOrAssem and Family. 
21224
21225 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
21226
21227         * statement.cs (GotoCase): Return true: Ammounts to giving up
21228         knowledge on whether we return or not, and letting the other case
21229         be responsible for it.
21230
21231 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
21232
21233         * driver.cs: Do not load directories for each file processed, only
21234         do it if there is a pattern.
21235
21236         * ecore.cs: Report readonly assigns here as well, as we might have
21237         been resolved only by MemberAccess.
21238
21239         (SimpleName.SimpleNameResolve): Also be useful for LValue
21240         resolution.   We need this to propagate assign to local readonly variables
21241
21242         * typemanager.cs: Use a ptrhashtable for the criteria, because we
21243         do not want to reuse potential criteria memory.
21244
21245         * class.cs (MyEventBuilder): Set reflected_type;
21246
21247         * ecore.cs (Constantify): Added support for constifying bools.
21248
21249         (RootContext.LookupType): Added a cache for values looked up in
21250         the declaration space.
21251
21252         * typemanager.cs (FindMembers): Now is a front-end to
21253         RealFindMembers, and provides a two-level hashtable-based cache to
21254         the request.  
21255
21256         15% performance improvement: from 22.5 to 19.2 seconds.
21257
21258         * expression.cs (IsParamsMethodApplicable): use foreach.
21259         (Invocation.DoResolve): ditto.
21260         (New.DoResolve): ditto.
21261         (ArrayCreation.DoResolve): ditto.
21262
21263         * ecore.cs (FindMostEncompassingType): use foreach.
21264
21265         * delegate.cs (NewDelegate.DoResolve): Use foreach
21266
21267         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
21268         (RemoveMethods): use foreach.
21269
21270         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
21271         nested foreach statements instead of for, and also break out of
21272         the inner loop once a match is found.
21273
21274         (Invocation.OverloadResolve): Use foreach, simplify the code. 
21275
21276 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
21277
21278         * cfold.cs (BinaryFold): During an enumeration evaluation context,
21279         we actually unwrap the expression to allow for extra information
21280         to be extracted. 
21281
21282         * expression.cs: Use Shr_Un on unsigned operations. 
21283
21284 2002-05-08  Ravi Pratap  <ravi@ximian.com>
21285
21286         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
21287         applicable operators was not being considered correctly. This closes
21288         the bug Miguel reported.
21289
21290 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
21291
21292         * attribute.cs: check that the type derives from System.Attribute
21293         and report the correct error in that case (moved the duplicate code to
21294         its own method, too).
21295
21296 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
21297
21298         * attribute.cs: lookup attribute type name as the spec says: first the
21299         bare attribute name and then name + "Attribute" (nant compiles with
21300         mcs after this fix).
21301
21302 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
21303
21304         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
21305         Because of the way we parse things, we should try to see if a
21306         UIntConstant can fit in an integer.
21307
21308 2002-05-07  Ravi Pratap  <ravi@ximian.com>
21309
21310         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
21311         when we are in an explicit context.
21312
21313         (ConvertReferenceExplicit): When converting from Iface type S to Class
21314         T make sure the rules are implemented as an OR.
21315
21316         * parameter.cs (ParameterType): Make it a property for now although the
21317         purpose really isn't anything immediate.
21318
21319         * expression.cs (Is*Applicable): Do better checking on the parameter type
21320         of a ref/out parameter. The ones from the system assemblies are already 
21321         marked with the correct type so we don't need to do any correction.
21322
21323         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
21324         the object type is standard too so include that.
21325
21326 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21327
21328         * ecore.cs (StandardConversionExists): Augment with missing code:
21329         deal with IntConstant, LongConstants and Enumerations.
21330
21331         * assign.cs: Report the error, instead of failing silently
21332
21333         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
21334         typecontainer that they are declared, because the
21335         typecontainer/namespace will have the list of using clauses that
21336         need to be applied.
21337
21338         Assembly Attributes were escaping the normal registration
21339         mechanism. 
21340
21341         (EmitCode): Apply attributes within an EmitContext that represents
21342         the container they were declared on.
21343
21344         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
21345
21346 2002-05-06  Ravi Pratap  <ravi@ximian.com>
21347
21348         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
21349         Revamp completely - make much cleaner as we now operate only
21350         on a set of Types.
21351
21352         (FindMostSpecificSource, FindMostSpecificTarget): New methods
21353         to implement the logic detailed in the spec more correctly.
21354
21355         (UserDefinedConversion): Update accordingly.
21356
21357 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21358
21359         * statement.cs: Return flow analysis information up.
21360
21361         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
21362         and the default.
21363
21364         (token): Do not consume an extra character before calling
21365         decimal_digits.
21366
21367 2002-05-06  Piers Haken <piersh@friskit.com>
21368
21369         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
21370
21371 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21372
21373         * class.cs (Constructor.Emit): Set the IsStatic flag in the
21374         EmitContext during the instance constructor initializer
21375         resolution, to stop access to instance variables.
21376
21377         This is mandated by the spec, last paragraph of the `constructor
21378         initializers' section. 
21379
21380 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
21381
21382         * cs-parser.jay, class.cs (Accessor): new class used to represent
21383         an accessor (get or set).  In the past we used `null' to represent
21384         a missing accessor.  But this is ambiguous because there was no
21385         way to tell in abstract indexers/properties if one of them was
21386         specified.
21387
21388         Now there is a way of addressing that.
21389
21390         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
21391         instead of FindMembers.
21392
21393         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
21394         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
21395
21396         * attribute.cs: Treat indexers and properties as the same in terms
21397         of applying attributes
21398
21399         * ecore.cs (FindMostEncompassedType): Use statically initialized
21400         EmptyExpressions()s like we do elsewhere to avoid creating useless
21401         objects (and we take this out of the tight loop).
21402
21403         (GetConversionOperators): Move the code to extract the actual
21404         operators to a separate routine to clean things up.
21405
21406 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
21407
21408         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
21409         events are always registered FieldBuilders.
21410
21411         * class.cs (FieldBase): New class shared by Fields 
21412
21413         * delegate.cs: If we are a toplevel delegate, use our full name.
21414         If we are a nested delegate, then only use our tail name.
21415
21416 2002-05-02  Ravi Pratap  <ravi@ximian.com>
21417
21418         * expression.cs (IsApplicable): Ensure that we add the "&" to
21419         ref/out types before comparing it with the type of the argument.
21420
21421         (IsParamsMethodApplicable): Ditto.
21422
21423         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
21424         silly me ;-)
21425
21426         * delegate.cs : Handle the case when we have more than one applicable
21427         method. Flag an error only when we finish checking all.
21428
21429 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
21430
21431         * expression.cs: Add support for boolean static initializers.
21432
21433 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
21434
21435         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
21436
21437         * parameter.cs (ComputeParameterTypes,
21438         ComputeAndDefineParameterTypes): Better error handling: now we
21439         clear the `types' cache if we fail during any of the type lookups.
21440         We also return the status code correctly to our caller
21441
21442         * delegate.cs: If we fail to define a delegate, abort the extra
21443         steps. 
21444
21445         * expression.cs (Binary.ResolveOperator): for
21446         operator==(object,object) and operator !=(object, object) we also
21447         have to verify that there is an implicit conversion from one to
21448         the other.
21449
21450         (ArrayAccess.DoResolve): Array Access can operate on
21451         non-variables. 
21452
21453 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
21454
21455         * assign.cs (CompoundAssign): A new class used as a "flag" that
21456         the assignment actually is happening as part of a compound
21457         assignment operator.
21458
21459         During compound assignment, a few new rules exist to enable things
21460         like:
21461
21462         byte b |= 1 + 2
21463
21464         From the spec:
21465
21466         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
21467         to the type of x) if y is implicitly convertible to the type of x,
21468         and the operator is a builtin operator and the return type of the
21469         operator is explicitly convertible to the type of x. 
21470
21471         * rootcontext.cs: Reset warning level to 2.  4 catches various
21472         "interesting" features in mcs, we must clean this up at some
21473         point, but currently am trying to kill other bugs ;-)
21474
21475         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
21476         in container classes as well.  
21477
21478         * expression.cs (Binary.ResolveOperator): Handle string case
21479         before anything else (as operator overloading does emit an error
21480         before doing anything else).
21481
21482         This code could go away when we move to a table driven model, but
21483         i could not come up with a good plan last night.
21484
21485 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
21486
21487         * typemanager.cs (CSharpName): reimplementation using regex.
21488         * class.cs: added null check for fields in Emit
21489         * rootcontext.cs: set warninglevel to 4
21490
21491 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
21492
21493         * typemanager.cs (CSharpName): reimplemented with Lupus
21494         suggestion.
21495
21496 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
21497
21498         * statement.cs (If): correclty implement Resolve, because we were
21499         not catching sem errors in there.  The same process is needed
21500         everywhere else. 
21501         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
21502
21503
21504         (Statement.Warning_DeadCodeFound): Factorize code.
21505         (While): Report dead code here too.
21506
21507         (Statement): Added Resolve virtual method to allow
21508         for resolution split from the emit code.
21509
21510 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21511
21512         * statement.cs (EmitBoolExpression): No longer try to resolve the
21513         expression here.    
21514         (MakeBoolean): New utility function that resolve, implicitly
21515         converts to boolean and tags the expression. 
21516
21517
21518         (If, Do): Implement dead code elimination.
21519         (While): Implement loop inversion
21520
21521         (Do, While, For, If): Resolve the expression prior to calling our
21522         code generation.
21523
21524 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
21525
21526         * class.cs:
21527           - added method Report28 (warning: program has more than one entry point)
21528           - added method IsEntryPoint, implements paragraph 10.1 of the spec
21529           - modified method Method.Define, the part at the end of the method
21530
21531         * rootcontext.cs: added static public Location EntryPointLocation;
21532           
21533         * ../errors/cs0028.cs : Add test case for the above warning.              
21534
21535         * typemanager.cs:
21536           - modified method CSharpName to allow arrays of primitive type to
21537             be printed nicely (e.g. instead of System.Int32[][] it now prints
21538             int[][])
21539           - added method CSharpSignature: returns the signature of a method
21540             in string format to be used in reporting errors, warnings, etc.
21541
21542         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
21543         with String.Empty.
21544
21545 2002-04-26  Ravi Pratap  <ravi@ximian.com>
21546
21547         * delegate.cs (Define): Fix extremely silly bug where I was
21548         setting the type of the 'object' parameter of the BeginInvoke
21549         method to System.IAsyncResult instead of System.Object ;-)
21550
21551 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21552
21553         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
21554         here. 
21555
21556         (Constructor.Emit): return if we fail to initialize the
21557         constructor.  Another door closed!  
21558
21559         * expression.cs (New.DoResolve): Improve error message (from -6 to
21560         1501).  Use DeclaredOnly lookup to find the exact constructor.
21561
21562         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
21563         loop.  This is useful.
21564
21565         * cs-parser.jay: Adjust the default parameters so that destructors
21566         have the proper signature.
21567
21568 2002-04-26  Martin Baulig  <martin@gnome.org>
21569
21570         * driver.cs (LoadAssembly): If `assembly' contains any characters
21571         which are only valid in path names and not in assembly names
21572         (currently slash, backslash and point), use Assembly.LoadFrom ()
21573         instead of Assembly.Load () on the `assembly' (before iteration
21574         over the link_paths).
21575
21576 2002-04-26  Martin Baulig  <martin@gnome.org>
21577
21578         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
21579
21580 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
21581
21582         * class.cs (Property): use the new typemanager.MemberLookup
21583
21584         (TypeContainer.MemberLookup): Implement using the
21585         TypeManager.MemberLookup now. 
21586
21587         * typemanager.cs: Make MemberLookup a function of the TypeManager,
21588         and return MemberInfos, so that these can be used without an
21589         EmitContext (what we had before).
21590
21591 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
21592
21593         * expression.cs: Fix the case where the argument to params if the
21594         type of the params.  I omitted handling this before.   Fixed
21595
21596 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21597
21598         * driver.cs: Call BootCorlib_PopulateCoreType
21599
21600         * class.cs (Property.CheckBase): Check for properties only, not
21601         for all members. 
21602
21603         * interface.cs: Temporary hack: try/catch around the
21604         CustomAttributeBuilder, because I am getting an exception that I
21605         do not understand.
21606
21607         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
21608         types whose definitions are required to be there (attributes are
21609         defined before standard types).
21610
21611         Compute definitions as we boot the various types, as they are used
21612         immediately (value_type class will need object_type, but if we do
21613         not initialize object_type, we will pass a null, which will let
21614         the runtime pick the System.Object from the existing corlib, which
21615         is not what we want).
21616
21617 2002-04-22  Patrik Torstensson <totte@labs2.com>
21618
21619         * cs-tokenizer.cs: fixed a number of trim() issues.
21620
21621 2002-04-22  Ravi Pratap  <ravi@ximian.com>
21622
21623         * expression.cs (Argument.Type): Ensure that we return the correct
21624         type when we have out or ref parameters [in which case we 
21625         append a "&"].
21626
21627 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21628
21629         * class.cs (Property, Indexer): Allow extern modifier in there. 
21630
21631         * typemanager.cs (InitBaseTypes): Initializes object_type and
21632         value_type, since those will be used early on during the bootstrap
21633         process to compile corlib.
21634
21635         (InitCoreTypes): Move code from here to InitBaseTypes.
21636
21637 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
21638
21639         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
21640         single-dimension arrays as using the ldlen opcode.  
21641
21642         Daniel Lewis discovered this optimization.  
21643
21644         * typemanager.cs: Add signature for System.Array::get_Length
21645
21646 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21647
21648         * statement.cs: report the error when the foreach does not apply to an
21649         array nor a collection.
21650
21651 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
21652
21653         * expression.cs: Add implicit conversions to the operator ~.
21654
21655         * constant.cs (DecimalConstant.Emit): Emit decimal value.
21656
21657         * typemanager.cs: Locate the decimal constructor.
21658
21659 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21660
21661         * attribute.cs: use the new property of TypeOf.
21662         * expression.cs: added 'get' property around typearg.
21663
21664         These changes fix a build breaker reported by NickD. Is this the
21665         correct way to fix?  If not, please, revert my changes and make it
21666         work :-).
21667
21668 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
21669
21670         * attribute.cs: Add support for typeof in attribute invocations.
21671         I am not sure that this is right though.
21672
21673 2002-04-14  Duncan Mak  <duncan@ximian.com>
21674
21675         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
21676         Binary.Operator.Division case.
21677
21678 2002-04-13  Ravi Pratap  <ravi@ximian.com>
21679
21680         * class.cs (DefineType): Ensure that we do a proper check on
21681         attribute types and also register it with the TypeManager.
21682
21683         (TypeContainer.Targets): The default for attribute types is
21684         AttributeTargets.All.
21685
21686         * attribute.cs (ApplyAttributes): Registering the attribute type
21687         is done elsewhere, not when we discover we have a Usage attribute.
21688
21689 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21690
21691         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
21692         and get rid of is_delegate parameter.
21693
21694         * everywhere : update.
21695
21696 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21697
21698         * cs-parser.jay (compilation_unit): Revamp completely to use
21699         some new ideas that I got from Rhys' grammar to solve the problems
21700         with assembly level attributes.
21701
21702         (outer_declaration): New grammar production.
21703
21704         (attribute_sections): Add.
21705
21706         (opt_attributes): Base on attribute_sections
21707
21708         (namespace_declaration): Allow opt_attributes to tackle the case
21709         when we have assembly level attributes - we are clever in this
21710         regard now ;-)
21711
21712         * attribute.cs (ApplyAttributes): Do not worry about assembly 
21713         attributes in the non-global context.
21714
21715         * rootcontext.cs (AddGlobalAttributes): Go back to using this
21716         instead of SetGlobalAttributes.
21717
21718         * class.cs, rootcontext.cs : Ensure we define and generate 
21719         attribute types before anything else.
21720
21721         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
21722         and flag the new error -20 for the case when the attribute type
21723         does not have valid targets specified. csc does not catch this.
21724
21725         * ../errors/errors.txt : update for error # -20
21726
21727 2002-04-11  Ravi Pratap  <ravi@ximian.com>
21728
21729         * support.cs (InternalParameters.ParameterModifier): Do some null
21730         checking and return sane values.
21731
21732         * class.cs (Method.Define): If we are a PInvoke method, ensure
21733         that we are static and extern. Report error # 601
21734
21735         * ../errors/cs0601.cs : Add test case for the above error.
21736
21737 2002-04-07  Ravi Pratap  <ravi@ximian.com>
21738
21739         * rootcontext.cs (attribute_types): We need to keep type of
21740         all attribute types separately and emit code for them first.
21741
21742         (RegisterAttribute) : Implement.
21743
21744         * class.cs (DefineType): Check if the current Type is a custom
21745         attribute type and register it accordingly.
21746
21747         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
21748         adding the first attribute twice and rename to
21749
21750         (SetGlobalAttributes): this.
21751
21752         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
21753         lookups.
21754
21755         * attribute.cs (ApplyAttributes): Take an additional argument telling us
21756         if we are processing global arguments. Hmm, I am unsure of this.
21757
21758 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21759
21760         * expression.cs: added static array of strings to avoid calling
21761         Enum.ToString () for Operator in Binary. Significant recover of
21762         performance.
21763
21764 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
21765
21766         * class.cs (FindMembers): Allow the Builders of the various
21767         members to be null.  If they are skip them.  This only happens
21768         during the PInvoke declaration.
21769
21770 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
21771
21772         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
21773         failure, so we do not keep going afterwards.
21774
21775         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
21776         wanted to pass `false' as the `is_delegate' argument.  If this is
21777         the case, why not use delegate_type == null to mean `is_delegate =
21778         false' and anything else as is_delegate = true.
21779
21780 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
21781
21782         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
21783         code for the section, not the beginning of the tests.
21784
21785 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
21786
21787         * cfold.cs: Handle operator + (Enum x, Underlying x) 
21788
21789         * expression.cs (Binary): same.  Warn about errors where we have
21790         Enum/Enum in operator + as well.
21791
21792 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
21793
21794         * statement.cs:
21795                 - added support for switch(bool)
21796                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
21797                 - add TableSwitchEmit() to handle table-based switch statements
21798
21799 2002-04-05  Ravi Pratap  <ravi@ximian.com>
21800
21801         * expression.cs (Invocation.OverloadResolve): Factor out code which
21802         does parameter compatibility checking with arguments so that we can 
21803         re-use the code even from Delegate.VerifyApplicability
21804
21805         (VerifyArgumentsCompat): Move above code here.
21806
21807         * delegate.cs (VerifyApplicability): Get rid of duplicate code
21808         and instead make a call to the above method.
21809
21810 2002-03-31  Ravi Pratap  <ravi@ximian.com>
21811
21812         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
21813         We use it to keep track of classes which are attribute types.
21814
21815 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
21816
21817         * delegate.cs (Delegate.Define): Correctly define the types in the
21818         presence of fixed and array parameters.
21819
21820         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
21821         doing FindMembers.
21822
21823         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
21824         include NonPublic after the first iteration.
21825
21826         * class.cs (Indexer.CheckBase): Only check if both parents are
21827         non-null. 
21828
21829         * cs-parser.jay (accessor_body): If empty, set to null.
21830
21831         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
21832         same code path here to resolve constants names that we did have in
21833         MemberAccess.DoResolve.  There is too much code duplicated here.
21834
21835 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
21836
21837         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
21838
21839         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
21840         to MakeUnionSet.
21841
21842         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
21843         tokens, numbers and strings.
21844
21845         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
21846         parenthesis.
21847
21848         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
21849         asyncronous parameters and the regular parameters.  
21850
21851         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
21852         specify the target directory.
21853
21854         * expression.cs: (This.DoResolve): Simplify
21855         (As.Emit): Optimize, do not generate IsInst if the expression is
21856         always of the given type.
21857
21858         (Is.DoResolve): Bug fix, we were reporting both always/never for
21859         the is expression.
21860
21861         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
21862         creating too many unnecessary arrays.
21863
21864 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
21865
21866         * class.cs (EmitFieldInitializer): Use Assign expression to assign
21867         fields instead of rolling our own initializer.   Takes care of all
21868         implicit conversions, and drops unnecessary static checks/argument.
21869
21870 2002-03-31  Dick Porter  <dick@ximian.com>
21871
21872         * driver.cs: use the GetDirectories() return values properly, and
21873         use "/" as path separator.
21874
21875 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
21876
21877         * expression.cs (Unary): Optimize - - expr into expr.
21878         (Binary): Optimize a + (-b) into a -b.
21879
21880         * codegen.cs (CodeGen): Made all methods static.
21881
21882 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
21883
21884         * rootcontext.cs: 
21885
21886         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
21887         TypeBuilder property.
21888
21889         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
21890         instead. 
21891
21892         * tree.cs: Removed the various RecordXXXX, and replaced with a
21893         single RecordDecl.  Removed all the accessor methods, and just
21894         left a single access point Type 
21895
21896         * enum.cs: Rename DefineEnum to DefineType.
21897
21898         * decl.cs: New abstract method `DefineType' used to unify the
21899         Defines for Enumerations, Interfaces, TypeContainers and
21900         Delegates.
21901
21902         (FindType): Moved LookupInterfaceOrClass here.  Moved the
21903         LookupBaseClasses method that used to live in class.cs and
21904         interface.cs here, and renamed to FindType.
21905
21906         * delegate.cs: Implement DefineType.  Take advantage of the
21907         refactored pattern for locating the parent builder without taking
21908         the parent_builder argument (which we know does not work if we are
21909         nested, and triggering a toplevel definition).
21910
21911 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21912
21913         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
21914         accessibility of a member has changed during override and report
21915         an error if so.
21916
21917         * class.cs (Method.Define, Property.Define): Only complain on
21918         overrides if the method is private, any other accessibility is
21919         fine (and since we just checked the permission is the same, we are
21920         good to go).
21921
21922         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
21923         and elif are processed always.  The other pre-processing
21924         directives are only processed if we are "taking" the path
21925
21926 2002-03-29  Martin Baulig  <martin@gnome.org>
21927
21928         * class.cs (Method.Emit): Only emit symbolic debugging info if the
21929         current location is not Null.
21930
21931         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
21932         a separate method so we can profile it.
21933
21934         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
21935         `span.Seconds' are just seconds, but no minutes or hours.
21936         (MainDriver): Profile the CodeGen.SaveSymbols calls.
21937
21938 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21939
21940         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
21941         Remove the gratuitous set of Final:
21942
21943                                 // If an interface implementation, then we can set Final.
21944                                 if (((flags & MethodAttributes.Abstract) == 0) &&
21945                                     implementing.DeclaringType.IsInterface)
21946                                         flags |= MethodAttributes.Final;
21947
21948         I do not know what I was smoking when I used that.
21949
21950
21951         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
21952         step into fixing the name resolution issues for delegates and
21953         unifying the toplevel name resolution.
21954
21955 2002-03-28  Martin Baulig  <martin@gnome.org>
21956
21957         * class.cs (Method.Emit): If we have a symbol writer, call its
21958         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
21959         tell it about the current method.
21960
21961         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
21962         writer that we're going to emit the first byte of IL code for a new
21963         statement (a new source line).
21964         (EmitContext.EmitTopBlock): If we have a symbol writer, call
21965         EmitContext.Mark() before emitting any code.
21966
21967         * location.cs (SymbolDocument): Return null when we're Null.
21968
21969         * statement.cs (Statement): Moved the `Location loc' variable here.
21970         (Statement.EmitBoolExpression): If we have a symbol writer, call
21971         ec.Mark() before emitting any code to tell it that we're at the
21972         beginning of a new statement.
21973         (StatementExpression): Added `Location' argument to the constructor.
21974         (Block): Added public readonly variable `StartLocation' and public
21975         variable `EndLocation'.  The latter is to be set using SetEndLocation().
21976         (Block): Added constructor which takes a start and end location.
21977         (Block.SetEndLocation): New method. This sets the end location.
21978         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
21979         local variables we create.
21980         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
21981         each statement and do also mark the begin and end of the block.
21982
21983         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
21984         tell it the current lexer.Location, use Location.Null for the end of the
21985         block.
21986         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
21987         current block, set its end location using SetEndLocation().
21988         (statement_expression): StatementExpression constructor now takes the
21989         lexer.Location as additional argument.
21990         (for_statement, declare_local_variables): Likewise.
21991         (declare_local_variables): When creating a new implicit block, use the
21992         new Block constructor and pass it the lexer.Location.
21993
21994 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21995
21996         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
21997         members also on the parent interfaces recursively.
21998
21999 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
22000
22001         * report.cs: Use new formats, since Gonzalo finished the missing
22002         bits. 
22003
22004         * expression.cs (Binary.ResolveOperator): added missing operator|
22005         operator& and operator^ for bool/bool.
22006
22007         * cs-parser.jay: CheckDef now takes a Location argument that is
22008         used to report errors more precisly (instead of reporting the end
22009         of a definition, we try to track something which is a lot closer
22010         to the source of the problem).
22011
22012         * cs-tokenizer.cs: Track global token use, so we can properly flag
22013         the use of #define/#undef after the first token has been seen.
22014
22015         Also, rename the reportXXXX to Error_DescriptiveName
22016
22017         * decl.cs (DeclSpace.IsTopLevel): Move property here from
22018         TypeContainer, so that Enum and Interface can use this too.
22019
22020         * class.cs (TypeContainer.LookupInterfaceOrClass,
22021         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
22022         `builder' argument.  Typically this was used to pass the parent
22023         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
22024         the definition).  
22025
22026         The problem is that a nested class could trigger the definition of
22027         a toplevel class, and the builder would be obviously wrong in that
22028         case. 
22029
22030         So we drop this argument, and we compute dynamically the
22031         TypeBuilder/ModuleBuilder (the correct information was available
22032         to us anyways from DeclSpace.Parent)
22033
22034         * interface.cs (Interface.DefineInterface): Drop builder
22035         parameter cleanup like class.cs
22036
22037         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
22038         like class.cs
22039
22040         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
22041         values. 
22042
22043         (Try.Emit): Propagate the returns value from the statement.
22044
22045         (Return.Emit): Even if we are leavning 
22046
22047         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
22048
22049         * modifiers.cs: Fix the computation of MethodAttributes flags.
22050
22051 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
22052
22053         * driver.cs: allow compilation of files that start with '/'.
22054         Add a default case when checking the argument of --target.
22055
22056 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
22057
22058         * interface.cs: Implement the same search algorithm for types in
22059         the interface code.
22060
22061         * delegate.cs: Do not allow multiple definition.
22062
22063         * Recovered ChangeLog that got accidentally amputated
22064
22065         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
22066
22067         * rootcontext.cs: Load manually enum to allow core classes to
22068         contain enumerations.
22069
22070         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
22071         Update to new static methods in TypeManager.
22072
22073         * typemanager.cs (GetMethod, GetConstructor): Use our
22074         implementation of FindMembers to find the members, since during
22075         corlib compilation, the types are TypeBuilders and GetMethod and
22076         GetConstructor do not work.
22077
22078         Make all methods in TypeManager static.
22079
22080         (InitCodeHelpers): Split the functionality from
22081         the InitCodeTypes function.
22082
22083         * driver.cs: Call InitCodeHelpers after we have populated the
22084         types. 
22085
22086         * cs-parser.jay (delegate_declaration): we did not used to compute
22087         the delegate name correctly for void delegates.
22088
22089 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
22090
22091         * rootcontext.cs (RootContext): Init the interface_resolve_order
22092         and type_container_resolve_order always.
22093
22094         (ResolveCore, BootstrapCorlib_ResolveClass,
22095         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
22096         compiler when compiling with --nostdlib
22097
22098         * class.cs (TypeContainer.DefineType): Check that our parent is
22099         not null.  This test is most important when we are bootstraping
22100         the core types.
22101
22102         * codegen.cs: Split out the symbol writing code.
22103
22104 2002-03-25  Martin Baulig  <martin@gnome.org>
22105
22106         * driver.cs (-g): Made -g an alias for --debug.
22107
22108 2002-03-24  Martin Baulig  <martin@gnome.org>
22109
22110         * codegen.cs (SymbolWriter): New public variable. Returns the
22111         current symbol writer.
22112         (CodeGen): Added `bool want_debugging_support' argument to the
22113          constructor. If true, tell the ModuleBuild that we want debugging
22114         support and ask it for the ISymbolWriter.
22115         (Save): If we have a symbol writer, call it's Close() method after
22116         saving the assembly.
22117
22118         * driver.c (--debug): New command line argument to create a
22119         debugger information file.
22120
22121         * location.cs (SymbolDocument): New public property. Returns an
22122         ISymbolDocumentWriter object for the current source file or null
22123         if we don't have a symbol writer.
22124
22125 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
22126
22127         * driver.cs (LoadAssembly): Correctly return when all the paths
22128         have been tried and not before.
22129
22130         * statement.cs (Switch.Emit): return the actual coverage for this
22131         statement (returns/not-returns)
22132
22133         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
22134         switch of the statement if we are the last switch section.  That
22135         kills two problems: try/catch problems (we used to emit an empty
22136         nop at the end) and switch statements where all branches would
22137         return. 
22138
22139 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
22140
22141         * driver.cs: Add default assemblies (the equivalent to the
22142         Microsoft CSC.RSP file)
22143
22144         * cs-tokenizer.cs: When updating `cols and setting it to zero,
22145         also update tokens_seen and set it to false.
22146
22147         * driver.cs: Implement --recurse for Mike.
22148
22149         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
22150         correctly splitting out the paths.
22151
22152 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
22153
22154         * interface.cs (Interface.PopulateProperty): Instead of using
22155         `parent' as the declaration space for the set parameters, use
22156         `this' 
22157
22158         * support.cs (InternalParameters): InternalParameters constructor
22159         takes a DeclSpace instead of a TypeContainer.
22160
22161         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
22162         types are being initialized, load the address of it before calling
22163         the function.  
22164
22165         (New): Provide a mechanism to disable the generation of local
22166         value type temporaries when the caller will be providing us with
22167         an address to store it.
22168
22169         (ArrayCreation.EmitDynamicInitializers): Use it.
22170
22171 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
22172
22173         * expression.cs (Invocation.EmitArguments): Only probe for array
22174         property if there is more than one argument.  Sorry about that.
22175
22176         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
22177         empty param arrays.
22178
22179         * class.cs (Method.LabelParameters): Fix incorrect code path that
22180         prevented the `ParamArrayAttribute' from being applied to the
22181         params attribute.
22182
22183 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
22184
22185         * support.cs (ReflectionParameters): Correctly compute whether the
22186         last argument is a params array.  Fixes the problem with
22187         string.Split ('a')
22188
22189         * typemanager.cs: Make the assemblies array always be non-null
22190         (empty, but non-null)
22191
22192         * tree.cs (RecordDecl): New function that abstracts the recording
22193         of names.  This reports error 101, and provides a pointer to the
22194         previous declaration.  Fixes a crash in the compiler.
22195
22196         * cs-parser.jay (constructor_declaration): Update to new grammar,
22197         and provide a constructor_body that can be empty.
22198
22199 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
22200
22201         * driver.cs: Add support for --resources.
22202
22203         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
22204         Make all types for the various array helper methods be integer.
22205
22206         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
22207         CheckState to ConvCast.
22208
22209         (ConvCast): Now it takes a `checked' state argument, to avoid
22210         depending on the emit context for the conversion, and just using
22211         the resolve time setting.
22212
22213         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
22214         instead of Invocation.EmitArguments.  We do not emit the original
22215         arguments, instead we emit those which have been converted to
22216         unsigned int expressions.
22217
22218         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
22219
22220         * codegen.cs: ditto.
22221
22222         * expression.cs (LocalVariableReference): Drop the use of the
22223         Store function that depended on the variable index.
22224
22225         * statement.cs (VariableInfo): Drop the `Idx' property from this
22226         class, as this is not taking into account the indexes for
22227         temporaries tat we generate during the execution, getting the
22228         indexes wrong.
22229
22230         * class.cs: First emit class initializers, then call the parent
22231         constructor. 
22232
22233         * expression.cs (Binary): Fix opcode emision.
22234         (UnaryMutator.EmitCode): Support checked code generation
22235
22236         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
22237         matches for events for both the Static and Instance scans,
22238         pointing to the same element.   Fix that.
22239
22240 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
22241
22242         * rootcontext.cs (ResolveTree): Always set the
22243         interface_resolve_order, because nested interfaces will be calling
22244         into us.
22245
22246         * class.cs (GetInterfaceOrClass): Track the same resolution
22247         process used by TypeManager.LookupType.  This fixes the nested
22248         type lookups in class declarations (separate path from
22249         LookupType). 
22250
22251         (TypeContainer.DefineType): Also define nested interfaces.
22252         (TypeContainer.RegisterOrder): New public function used to
22253         register the order in which child interfaces need to be closed.
22254
22255         Nested interfaces need to be closed after their parents have been
22256         created. 
22257
22258         * interface.cs (InterfaceAttr): Put all the logic for computing
22259         the interface attribute here. 
22260
22261         (DefineInterface): Register our interface order with the
22262         RootContext or with the TypeContainer depending on the case.
22263
22264 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22265
22266         * cs-parser.jay: rework foreach statement to work with the new
22267         changes to the policy on SimpleNames.
22268
22269         * report.cs: support Stacktrace on warnings as well.
22270
22271         * makefile: drop --unsafe and /unsafe from the compile.
22272
22273 2002-03-13  Ravi Pratap  <ravi@ximian.com>
22274
22275         * ecore.cs (StandardConversionExists): Modify to take an Expression
22276         as the first parameter. Ensure we do null -> reference type conversion
22277         checking.
22278
22279         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
22280         temporary Expression objects.
22281
22282 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
22283
22284         * interface.cs: workaround bug in method overloading resolution
22285         (there is already a bugzilla bug for it).
22286
22287 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22288
22289         We could also solve this problem by having a separate path for
22290         performing type lookups, instead of DoResolve, we could have a
22291         ResolveType entry point, and only participating pieces of the
22292         production (simplename, deref, array) would implement this. 
22293
22294         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
22295         signal SimpleName to only resolve type names and not attempt to
22296         resolve anything else.
22297
22298         * expression.cs (Cast): Set the flag.
22299
22300         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
22301
22302         * class.cs: Only report 108 if there is no `new' modifier.
22303
22304         * cs-parser.jay: rework foreach statement to work with the new
22305         changes to the policy on SimpleNames.
22306
22307         * report.cs: support Stacktrace on warnings as well.
22308
22309         * makefile: drop --unsafe and /unsafe from the compile.
22310
22311 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
22312
22313         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22314         lookups here, instead of doing that at parse time.  This means
22315         that our grammar will not introduce `LocalVariableReferences' as
22316         expressions at this point.  That solves the problem of code like
22317         this:
22318
22319         class X {
22320            static void Main ()
22321            { int X = 1;
22322             { X x = null }}}
22323
22324         This is only half the fix.  The full fix requires parameters to
22325         also be handled in this way.
22326
22327         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
22328         makes the use more obvious of the DeclSpace.  The
22329         ec.TypeContainer.TypeBuilder is now only used to pull the
22330         TypeBuilder for it.
22331
22332         My theory is that I can get rid of the TypeBuilder completely from
22333         the EmitContext, and have typecasts where it is used (from
22334         DeclSpace to where it matters).  
22335
22336         The only pending problem is that the code that implements Aliases
22337         is on TypeContainer, and probably should go in DeclSpace.
22338
22339         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22340         lookups here, instead of doing that at parse time.  This means
22341         that our grammar will not introduce `LocalVariableReferences' as
22342         expressions at this point.  That solves the problem of code like
22343         this:
22344
22345         class X {
22346            static void Main ()
22347            { int X = 1;
22348             { X x = null }}}
22349
22350         This is only half the fix.  The full fix requires parameters to
22351         also be handled in this way.
22352
22353         * class.cs (Property.DefineMethod): When implementing an interface
22354         method, set newslot, when implementing an abstract method, do not
22355         set the flag (before we tried never setting it, or always setting
22356         it, which is the difference).
22357         (Indexer.DefineMethod): same.
22358         (Method.DefineMethod): same.
22359
22360         * ecore.cs: Only set the status used flag if we get back a Field.
22361
22362         * attribute.cs: Temporary hack, so Paolo can keep working.
22363
22364 2002-03-08  Ravi Pratap  <ravi@ximian.com>
22365
22366         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
22367         the unmanaged type in the case we have a MarshalAs attribute.
22368
22369         (Resolve): Handle the case when we are parsing the special MarshalAs
22370         attribute [we need to store the unmanaged type to use later]
22371
22372         * typemanager.cs (marshal_as_attr_type): Built in type for the 
22373         MarshalAs Attribute.
22374
22375         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
22376         on parameters and accordingly set the marshalling info.
22377
22378 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
22379
22380         * class.cs: Optimizing slightly by removing redundant code after
22381         we switched to the `NoTypes' return value.
22382         (Property.DefineMethod): use NoTypes here too.
22383
22384         This fixes the bug I introduced in my last batch of changes.
22385
22386 2002-03-05  Ravi Pratap  <ravi@ximian.com>
22387
22388         * tree.cs (RecordEnum): Add. We now keep track of enums too.
22389
22390         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
22391         Enums since those are types too. 
22392
22393         * cs-parser.jay (enum_declaration): Record enums as we parse them.
22394
22395         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
22396         thanks to a call during the lookup process.
22397
22398 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
22399
22400         * statement.cs (Foreach): Lots of work to accomodate a particular
22401         kind of foreach statement that I had not kept in mind.  It is
22402         possible to have foreachs on classes that provide a GetEnumerator
22403         method that return objects that implement the "pattern" for using
22404         a foreach, there is no need to support GetEnumerator
22405         specifically. 
22406
22407         This is needed to compile nant.
22408
22409         * decl.cs: Only report 114 if the member is not `Finalize' and if
22410         the warning level is at least 2.
22411
22412         * class.cs: Moved the compare function from Method to
22413         MethodSignature. 
22414
22415         (MethodSignature.InheritableMemberSignatureCompare): Add new
22416         filter function that is used to extract inheritable methods from a
22417         class. 
22418
22419         (Method.Define): Use the new `inheritable_method_signature_filter'
22420         delegate
22421
22422         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
22423         command. 
22424
22425 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
22426
22427         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
22428
22429         * cs-parser.jay: Add opt_semicolon to the interface declaration.
22430
22431         * expression.cs: Pass location information to
22432         ConvertImplicitStandard. 
22433
22434         * class.cs: Added debugging code to track return values from
22435         interfaces. 
22436
22437 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
22438
22439         * expression.cs (Is.DoResolve): If either side of the `is' is an
22440         interface, do not flag the warning.
22441
22442         * ecore.cs (ImplicitReferenceConversion): We need a separate test
22443         for interfaces
22444
22445         * report.cs: Allow for --fatal to be used with --probe.
22446
22447         * typemanager.cs (NoTypes): Move the definition for the empty Type
22448         array here. 
22449
22450         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
22451         properties. 
22452         (TypeContainer.DefineProxy): New function used to proxy to parent
22453         implementations when implementing interfaces.
22454         (TypeContainer.ParentImplements): used to lookup if our parent
22455         implements a public function that is required by an interface.
22456         (TypeContainer.VerifyPendingMethods): Hook this up.
22457
22458         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
22459         `modules' and `assemblies' arraylists into arrays.  We only grow
22460         these are the very early start up of the program, so this improves
22461         the speedof LookupType (nicely measured).
22462
22463         * expression.cs (MakeByteBlob): Replaced unsafe code with
22464         BitConverter, as suggested by Paolo.
22465
22466         * cfold.cs (ConstantFold.Binary): Special case: perform constant
22467         folding of string concatenation, but if either side is a string,
22468         and the other is not, then return null, and let the runtime use
22469         the concatenation on the string plus the object (using
22470         `Object.ToString'). 
22471
22472 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
22473
22474         Constant Folding has been implemented now.
22475
22476         * expression.cs (Unary.Reduce): Do not throw an exception, catch
22477         the error instead on types that are not supported in one's
22478         complement. 
22479
22480         * constant.cs (Constant and all children): New set of functions to
22481         perform implict and explicit conversions.
22482
22483         * ecore.cs (EnumConstant): Implement the new functions to perform
22484         conversion by proxying to the child expression.
22485
22486         * codegen.cs: (ConstantCheckState): Constant evaluation has its
22487         own separate setting that can not be turned off from the command
22488         line using --unchecked or --checked and is only controlled using
22489         the checked/unchecked statements and expressions.  This setting is
22490         used by the constant folder to flag errors.
22491
22492         * expression.cs (CheckedExpr, UncheckedExpr): Set the
22493         ConstantCheckState as well.   
22494
22495         During Resolve, they also have to flag the state, because the
22496         constant folder runs completely in the Resolve phase.
22497
22498         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
22499         well.
22500
22501 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22502
22503         * cfold.cs: New file, this file contains the constant folder.
22504
22505         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
22506         argument to track whether we are using the resulting address to
22507         load or store a value and provide better error messages. 
22508
22509         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
22510         new AddressOf arguments.
22511
22512         * statement.cs (Foreach.EmitCollectionForeach): Update
22513
22514         * expression.cs (Argument.Emit): Call AddressOf with proper
22515         arguments to track usage.
22516
22517         (New.DoEmit): Call AddressOf with new arguments.
22518
22519         (Unary.Emit): Adjust AddressOf call.
22520
22521 2002-03-01  Ravi Pratap  <ravi@ximian.com>
22522
22523         * cs-parser.jay (member_access): Change the case for pre-defined types
22524         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
22525         this suggestion.
22526
22527         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
22528         a method body.
22529
22530         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
22531         essentially like methods and apply attributes like MethodImplOptions to them too.
22532
22533         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
22534         not being null.
22535
22536         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
22537         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
22538         is the DeclSpace.
22539
22540         * Update code everywhere accordingly.
22541
22542         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
22543
22544         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
22545
22546 2002-02-28  Ravi Pratap  <ravi@ximian.com>
22547
22548         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
22549         try performing lookups against those instead of jumping straight into using
22550         the 'using' clauses.
22551
22552         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
22553
22554         (LookupType): Perform lookups in implicit parents too.
22555
22556         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
22557         sequence as RootContext.LookupType. 
22558
22559         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
22560         the various cases of namespace lookups into this method.
22561
22562 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22563
22564         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
22565         in positional arguments)
22566
22567         * class.cs (Operator): Update the AllowedModifiers to contain
22568         extern. 
22569
22570         * cs-parser.jay: Update operator declaration to allow for the
22571         operator body to be empty.
22572
22573         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
22574         values. 
22575
22576 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
22577
22578         * class.cs (Method.Emit): Label parameters.
22579
22580         * driver.cs: Return 1 or 0 as the program exit code.
22581
22582 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
22583
22584         * expression.cs: Special case the `null' object when trying to
22585         auto-compute the type, as anything can be explicitly converted to
22586         that. 
22587
22588         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
22589         spotting this Paolo.
22590
22591         (Expression.ImplicitNumericConversion): Perform comparissions of
22592         the type using the underlying type in the case of an enumeration
22593         rather than using the enumeration type for the compare.
22594
22595         Cope with the underlying == type case, which is not possible to
22596         catch before. 
22597
22598         (Expression.ConvertNumericExplicit): Perform comparissions of
22599         the type using the underlying type in the case of an enumeration
22600         rather than using the enumeration type for the compare.
22601
22602         * driver.cs: If the user does not supply an extension, assume .exe
22603
22604         * cs-parser.jay (if_statement): Rewrote so that we can track the
22605         location for the if statement.
22606
22607         * expression.cs (Binary.ConstantFold): Only concat strings when
22608         the operation is "+", not everything ;-)
22609
22610         * statement.cs (Statement.EmitBoolExpression): Take a location
22611         argument. 
22612         (If, While, Do): Track location.
22613
22614         * expression.cs (Binary.ResolveOperator): In the object + string
22615         case, I was missing a call to ConvertImplicit
22616
22617 2002-02-25  Ravi Pratap  <ravi@ximian.com>
22618
22619         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
22620         Location arguments. Ensure we use RootContext.LookupType to do our work
22621         and not try to do a direct Type.GetType and ModuleBuilder.GetType
22622
22623         * interface.cs (PopulateMethod): Handle the type of the parameter being
22624         null gracefully.
22625
22626         * expression.cs (Invocation.BetterFunction): Handle the case when we 
22627         have a params method with no fixed arguments and a call is made with no
22628         arguments.
22629
22630 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
22631
22632         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
22633         the verbatim-string-literal
22634
22635         * support.cs (InternalParameters.ParameterModifier): handle null
22636         fixed parameters.
22637         (InternalParameters.ParameterType): ditto.
22638
22639         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
22640         duplicating the name of the variable parameter.
22641         (GetParameterByName): Fix bug where we were not looking up array
22642         paramters if they were the only present (thanks Paolo!).
22643         (GetParameterInfo): We only have an empty set of types if both
22644         fixed and array are set to null.
22645         (GetParameterInfo-idx): Handle FixedParameter == null
22646
22647         * cs-parser.jay: Handle the case where there is no catch
22648         statements (missing null test).
22649
22650 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
22651
22652         * driver.cs (MainDriver): Be conservative on our command line
22653         handling.
22654
22655         Catch DirectoryNotFoundException when calling GetFiles.
22656
22657         (SplitPathAndPattern): Used to split the input specification into
22658         a path and a pattern that we can feed to Directory.GetFiles.
22659
22660 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
22661
22662         * statement.cs (Fixed): Implement the last case of the Fixed
22663         statement (string handling).
22664
22665         * expression.cs (StringPtr): New class used to return a char * to
22666         a string;  Used by the Fixed statement.
22667
22668         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
22669
22670         * expression.cs (Binary.ResolveOperator): Remove redundant
22671         MemberLookup pn parent type.
22672         Optimize union call, we do not need a union if the types are the same.
22673         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
22674         type.
22675
22676         Specialize the use of MemberLookup everywhere, instead of using
22677         the default settings. 
22678
22679         (StackAlloc): Implement stackalloc keyword.
22680
22681         * cs-parser.jay: Add rule to parse stackalloc.
22682
22683         * driver.cs: Handle /h, /help, /?
22684
22685         * expression.cs (MakeByteBlob): Removed the hacks we had in place
22686         before we supported unsafe code.
22687
22688         * makefile: add --unsafe to the self compilation of mcs.
22689
22690 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
22691
22692         * expression.cs (PointerArithmetic): New class that is used to
22693         perform pointer arithmetic.
22694         (Binary.Resolve): Handle pointer arithmetic
22695         Handle pointer comparission.
22696         (ArrayPtr): Utility expression class that is used to take the
22697         address of an array.
22698
22699         (ElementAccess): Implement array access for pointers
22700
22701         * statement.cs (Fixed): Implement fixed statement for arrays, we
22702         are missing one more case before we are done.
22703
22704         * expression.cs (Indirection): Implement EmitAssign and set the
22705         ExprClass to Variable.  This allows pointer dereferences to be
22706         treated as variables, and to have values assigned to them.
22707
22708         * ecore.cs (Expression.StoreFromPtr): New utility function to
22709         store values dereferencing.
22710
22711 2002-02-20  Ravi Pratap  <ravi@ximian.com>
22712
22713         * expression.cs (Binary.ResolveOperator): Ensure that we are
22714         not trying to operate on a void type - this fixes the reported
22715         bug.
22716
22717         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
22718         the parent implementation is sealed.
22719
22720         * ../errors/cs0239.cs : Add.
22721
22722         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
22723
22724         * typemanager.cs (unverifiable_code_type): Corresponds to 
22725         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
22726         which have unsafe code in them.
22727
22728         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
22729         unsafe context.
22730
22731 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
22732
22733         * cs-tokenizer.cs: Add support for @"litreal strings"
22734
22735         Make tokenizer accept pre-processor directives
22736         on any column (remove the old C-like limitation). 
22737
22738         * rootcontext.cs (EmitCode): Emit any global attributes.
22739         (AddGlobalAttributes): Used to keep track of assembly attributes. 
22740
22741         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
22742
22743         * cs-parser.jay: Add support for global attributes.  
22744
22745 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
22746
22747         * expression.cs (Indirection): New helper class.  Unary will
22748         create Indirection classes to be able to implement the
22749         IMemoryLocation interface on it.
22750
22751 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
22752
22753         * cs-parser.jay (fixed_statement): reference the right statement.
22754
22755         * statement.cs (Fixed.Emit): Finish implementing the fixed
22756         statement for the &x case.
22757
22758 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
22759
22760         * class.cs (Property.Define, Method.Define): Remove newslot when
22761         `implementing'.  
22762
22763         * modifiers.cs: My use of NewSlot when `Abstract' was set was
22764         wrong.  NewSlot should only be used if the `new' keyword is present.
22765
22766         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
22767         locating our system dir.  Sorry about this.
22768
22769 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22770
22771         * driver.cs (GetSystemDir): Compute correctly the location of our
22772         system assemblies.  I was using the compiler directory instead of
22773         the library directory.
22774
22775 2002-02-13  Ravi Pratap  <ravi@ximian.com>
22776
22777         * expression.cs (BetterFunction): Put back in what Miguel commented out
22778         since it is the correct fix. The problem is elsewhere ;-)
22779
22780         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
22781         parameters of the parms method are themselves compatible or not !
22782
22783         (StandardConversionExists): Fix very dangerous bug where we were forgetting
22784         to check that a class implements an interface before saying that an implicit
22785         conversion was allowed. Use ImplementsInterface to do the checking.
22786
22787 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22788
22789         * class.cs (Method.Define): Track whether we are an explicit
22790         implementation or not.  And only call DefineMethodOverride if we
22791         are an explicit implementation.
22792
22793         (Property.DefineMethod): Ditto.
22794
22795 2002-02-11  Ravi Pratap  <ravi@ximian.com>
22796
22797         * expression.cs (BetterFunction): Catch hideous bug which was
22798          preventing us from detecting ambiguous calls due to implicit casts i.e
22799         cs0121.
22800
22801 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
22802
22803         * support.cs (Pair): Remove un-needed method.  I figured why I was
22804         getting the error in cs-parser.jay, the variable in a foreach loop
22805         is readonly, and the compiler does not really treat this as a variable.
22806
22807         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
22808         instead of EQUALS in grammar.  
22809
22810         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
22811
22812         * expression.cs (Unary.DoResolve): Check whether the argument is
22813         managed or not.
22814
22815 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
22816
22817         * support.cs: Api for Pair to set a value.  Despite the fact that
22818         the variables are public the MS C# compiler refuses to compile
22819         code that accesses the field if the variable is part of a foreach
22820         statement. 
22821
22822         * statement.cs (Fixed): Begin implementation of the fixed
22823         statement.
22824
22825         (Block.AddVariable): Return the VariableInfo on success and null
22826         on failure instead of true/false. 
22827
22828         * cs-parser.jay (foreach): Catch errors on variables already
22829         defined (we were ignoring this value before) and properly unwind
22830         the block hierarchy
22831
22832         (fixed_statement): grammar for the fixed statement.
22833
22834 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
22835
22836         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
22837         pointer types to be incretemented.
22838
22839         (SizeOf): Implement.
22840
22841         * cs-parser.jay (pointer_member_access): Implement
22842         expr->IDENTIFIER production.
22843
22844         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
22845         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
22846         on safe contexts.
22847
22848         (Unary): Implement indirection.
22849
22850         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
22851         use in non-unsafe context).
22852
22853         (SimpleName.DoResolve): Check for pointers in field access on safe
22854         contexts. 
22855
22856         (Expression.LoadFromPtr): Factor the load-indirect code in this
22857         function.  This was duplicated in UnboxCast and ParameterReference
22858
22859 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
22860
22861         * expression.cs (ComposedCast): report an error if a pointer cast
22862         is used in a safe region.
22863
22864         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
22865         pointer type casts in unsafe context.
22866
22867         * codegen.cs (EmitContext): Set up IsUnsafe.
22868
22869         * cs-parser.jay (non_expression_type): Add productions for pointer
22870         casts. 
22871
22872         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
22873         code.  We should not use force into static mode if the method is
22874         not virtual.  Fixes bug in MIS
22875
22876         * statement.cs (Do.Emit, While.Emit, For.Emit,
22877         Statement.EmitBoolExpression): Add support to Do and While to
22878         propagate infinite loop as `I do return' semantics.
22879
22880         Improve the For case to also test for boolean constants.
22881
22882         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
22883         to the list of attributes we can add.
22884
22885         Remove `EmitContext' argument.
22886
22887         * class.cs (Method.Define): Apply parameter attributes.
22888         (Constructor.Define): Apply parameter attributes.
22889         (MethodCore.LabelParameters): Move here the core of labeling
22890         parameters. 
22891
22892         * support.cs (ReflectionParameters.ParameterModifier,
22893         InternalParameters.ParameterModifier): Use IsByRef on the type and
22894         only return the OUT bit for these parameters instead of in/out/ref
22895         flags.
22896
22897         This is because I miss-understood things.  The ParameterInfo.IsIn
22898         and IsOut represent whether the parameter has the [In] and [Out]
22899         attributes set.  
22900
22901 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
22902
22903         * ecore.cs (FieldExpr.Emit): Release temporaries.
22904
22905         * assign.cs (LocalTemporary.Release): new function.
22906
22907         * codegen.cs (EmitContext.GetTemporaryStorage,
22908         EmitContext.FreeTemporaryStorage): Rework the way we deal with
22909         temporary storage.  Now we can "put back" localbuilders when we
22910         are done with them
22911
22912 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
22913
22914         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
22915         need to make a copy of the variable to generate verifiable code.
22916
22917 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
22918
22919         * driver.cs: Compute dynamically the system directory.
22920
22921         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
22922         Slower, but more generally useful.  Used by the abstract
22923         registering implementation. 
22924
22925         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
22926         the rules for the special rule on Type/instances.  First check if
22927         we have the same name, and if so, try that special static path
22928         rather than the instance path.
22929
22930 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
22931
22932         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
22933         for, while and if.
22934
22935         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
22936         Enum, ValueType, Delegate or Array for non-corlib compiles.
22937
22938         * cs-tokenizer.cs: Catch long identifiers (645)
22939
22940         * typemanager.cs (IndexerPropetyName): Ravi never tested this
22941         piece of code.
22942
22943         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
22944         fix, we were returning too early, so we were not registering
22945         pending methods from abstract classes.
22946
22947         Do not register pending methods if the class is abstract.
22948
22949         * expression.cs (Conditional.DoResolve): Report circular implicit
22950         conversions when we neecd to compute it for conditional
22951         expressions. 
22952
22953         (Is.DoResolve): If the expression is always of the provided type,
22954         flag warning 183.  If the expression can not ever be of the
22955         provided type flag warning 184.
22956
22957         * class.cs: Catch 169 as well.
22958
22959         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
22960         read. 
22961
22962 2002-01-18  Nick Drochak  <ndrochak@gol.com>
22963
22964         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
22965
22966 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
22967
22968         * interface.cs: (PopulateMethod): Check for pointers being defined
22969         only if the unsafe context is active.
22970         (PopulateProperty): ditto.
22971         (PopulateIndexer): ditto.
22972
22973         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
22974         specified.  If pointers are present, make sure that they are
22975         present in an unsafe context.
22976         (Constructor, Constructor.Define): ditto.
22977         (Field, Field.Define): ditto.
22978         (Property, Property.Define): ditto.
22979         (Event, Event.Define): ditto.
22980
22981         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
22982         hashtable if there are classes or structs defined.
22983
22984         * expression.cs (LocalVariableReference.DoResolve): Simplify this
22985         code, as the constant resolution moved.
22986
22987         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
22988         the metadata, so we can flag error 133. 
22989
22990         * decl.cs (MemberCore.UnsafeOK): New function to test that a
22991         pointer is being declared in an unsafe context.
22992
22993 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
22994
22995         * modifiers.cs (Modifiers.Check): Require a Location argument.
22996         Report error 227 for Unsafe use.
22997
22998         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
22999
23000         * statement.cs (For.Emit): If the test is null, then report that
23001         we do `return', as we wont reach anything afterwards.
23002
23003         (Switch.SwitchGoverningType): Track the expression that matched
23004         the conversion.
23005
23006         * driver.cs: Allow negative numbers as an error code to flag.
23007
23008         * cs-parser.jay: Handle 1551.
23009
23010         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
23011
23012 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23013
23014         * cs-parser.jay: Report 1518 (type declaration can only contain
23015         class, struct, interface, enum or delegate)
23016
23017         (switch_label): Report 1523 (keywords `case' or `default' must
23018         preced code)
23019
23020         (opt_switch_sections): Report 1522 (empty switch)
23021
23022         * driver.cs: Report 1515 (response file specified multiple times)
23023         Report 1516 (Source file specified multiple times).
23024
23025         * expression.cs (Argument.Resolve): Signal 1510
23026
23027         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
23028         access not allowed in static code)
23029
23030 2002-01-11  Ravi Pratap  <ravi@ximian.com>
23031
23032         * typemanager.cs (IsPointerType): Utility method which we are going
23033         to need a lot.
23034
23035         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
23036         the object type, so we take care of that.
23037
23038         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
23039
23040         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
23041         added to non-params parameters :-)
23042
23043         * typemanager.cs (CSharpName): Include 'void' type too. 
23044
23045         (void_ptr_type): Include in the set of core types.
23046
23047         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
23048         duplicating code.
23049
23050         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
23051         an unsafe context.
23052
23053         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
23054         completely forgotten about it.
23055
23056 2002-01-10  Ravi Pratap  <ravi@ximian.com>
23057
23058         * cs-parser.jay (pointer_type): Add. This begins our implementation
23059         of parsing rules for unsafe code.
23060
23061         (unsafe_statement): Implement.
23062
23063         (embedded_statement): Modify to include the above.
23064
23065         * statement.cs (Unsafe): Implement new class for unsafe blocks.
23066
23067         * codegen.cs (EmitContext.InUnsafe): Add. This determines
23068         if the current context is an unsafe one.
23069
23070         * cs-parser.jay (local_variable_pointer_type): Since local variable types
23071         are handled differently, we need separate rules for them.
23072
23073         (local_variable_declaration): Update to use local_variable_pointer_type
23074         to allow variable declarations of unmanaged pointer types.
23075
23076         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
23077         in unsafe contexts.
23078
23079         * ../errors/cs0214.cs : Add.
23080
23081 2002-01-16  Nick Drochak  <ndrochak@gol.com>
23082
23083         * makefile: remove 'response' file when cleaning.
23084
23085 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23086
23087         * cs-parser.jay: Report 1524.
23088
23089 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
23090
23091         * typemanager.cs (RegisterMethod): drop checking if we have
23092         registered this from here
23093
23094 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
23095
23096         * class.cs (Method.EmitDestructor): Implement calling our base
23097         destructor. 
23098
23099         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
23100         value of InFinally.
23101
23102         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
23103         this routine and will wrap the call in a try/catch block.  Deal
23104         with the case.
23105
23106 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
23107
23108         * ecore.cs (Expression.MemberLookup): instead of taking a
23109         parameter `same_type' that was used to tell whether we could
23110         access private members we compute our containing type from the
23111         EmitContext.
23112
23113         (FieldExpr): Added partial support for volatile fields.  This does
23114         not work for volatile fields exposed from assemblies, as I can not
23115         figure out how to extract the modreq from it.
23116
23117         Updated all the source files to use this.
23118
23119         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
23120         because it is referenced by MemberLookup very often. 
23121
23122 2002-01-09  Ravi Pratap  <ravi@ximian.com>
23123
23124         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
23125         TypeBuilder.GetCustomAttributes to retrieve what we need.
23126
23127         Get rid of redundant default_member_attr_type as this is the same as
23128         default_member_type which already exists.
23129
23130         * interface.cs, attribute.cs : Update accordingly.
23131
23132 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
23133
23134         * typemanager.cs: Enable IndexerPropertyName again.  It does not
23135         work for TYpeBuilders though.  Ravi, can you please fix this?
23136
23137         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
23138
23139         * expression.cs (Argument.Emit): Handle the case of ref objects
23140         being passed to ref functions;  
23141
23142         (ParameterReference.EmitLoad): Loads the content of the pointer
23143         without dereferencing.
23144
23145 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23146
23147         * cs-tokenizer.cs: Implemented the pre-processing expressions.
23148
23149 2002-01-08  Ravi Pratap  <ravi@ximian.com>
23150
23151         * class.cs (Indexer.DefineMethod): Incorporate the interface
23152         type in the name of the method if we are doing explicit interface
23153         implementation.
23154
23155         * expression.cs (ConversionExists): Remove as it is completely obsolete.
23156
23157         (BetterConversion): Fix extremely trivial bug where we were referring to
23158         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
23159         again !
23160
23161         * ../errors/bug16.cs : Add although we have fixed it.
23162
23163 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23164
23165         * expression.cs (BaseIndexer): Begin implementation.
23166
23167         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
23168
23169         * cs-parser.jay (indexer_declarator): Use qualified_identifier
23170         production directly to remove a shift/reduce, and implement
23171         explicit interface implementation.
23172
23173         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
23174         after a floating point suffix.
23175
23176         * expression.cs (DoNumericPromotions): Improved the conversion for
23177         uint/uint.  If we have a constant, we avoid doing a typecast to a
23178         larger type.
23179
23180         * class.cs (Indexer): Implement explicit interface implementation
23181         for indexers.
23182
23183 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
23184
23185         * class.cs: make the default instance constructor public and hidebysig.
23186
23187 2001-01-03  Ravi Pratap  <ravi@ximian.com>
23188
23189         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
23190         so we can call it from elsewhere.
23191
23192         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
23193         we emit it internally if the class has a defined indexer; otherwise the user
23194         emits it by decorating the class definition with the DefaultMemberAttribute.
23195
23196         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
23197         attribute is not used on a type which defines an indexer.
23198
23199         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
23200         character when we skip whitespace.
23201
23202         * ../errors/cs0646.cs : Add.
23203
23204 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
23205
23206         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
23207         again. 
23208
23209         * makefile: Add practical target `mcs3.exe' which builds the third
23210         generation compiler. 
23211
23212         * expression.cs (New): Fix structures constructor calling.
23213
23214         * class.cs (Property, Method, Indexer): Emit Final flag on the
23215         method if we are an interface implementation and we are not
23216         abstract. 
23217
23218         * ecore.cs (PropertyExpr): New public field `IsBase', tells
23219         whether this property is referencing a `base' method.
23220
23221         * expression.cs (Invocation.EmitCall): take an extra argument:
23222         is_base, this is used to determine whether the `call' or
23223         `callvirt' opcode should be used.
23224
23225
23226         * delegate.cs: update EmitCall.
23227
23228         * class.cs (Method.Define): Set NewSlot for the cases where we are
23229         not implementing an interface method.
23230
23231         (Property.Define): ditto.
23232
23233 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
23234
23235         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
23236         'r'.  Allows mcs to parse itself fully.
23237
23238 2002-01-02  Ravi Pratap  <ravi@ximian.com>
23239
23240         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
23241         of the number of initializers that require the InitializeArray method.
23242
23243         (CheckIndices): Store the Expression in all cases - not the plain value. Also
23244         update the above field where necessary.
23245
23246         (MakeByteBlob): Update accordingly.
23247
23248         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
23249         greater than 2.
23250
23251         (EmitDynamicInitializers): Update in accordance with the new optimization.
23252
23253         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
23254         same OpCode applies.
23255
23256         * cs-parser.jay : Fix some glaring errors I introduced.
23257
23258 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
23259
23260         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
23261         so that we can check for name clashes there too.
23262
23263         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
23264         for interface indexers.
23265
23266         * interfaces.cs (Define): Emit the default member attribute.
23267
23268         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
23269         variable was being referred to while setting the value ;-)
23270
23271 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
23272
23273         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
23274         byte-by-byte information when we know the data is zero.
23275
23276         Make the block always a multiple of 4, because
23277         DefineInitializedData has a bug.
23278
23279         * assign.cs: Fix, we should assign from the temporary, not from
23280         the source. 
23281
23282         * expression.cs (MakeByteBlob): Fix my incorrect code.
23283
23284 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
23285
23286         * typemanager.cs (EnumToUnderlying): This function is used to get
23287         the underlying type from an enumeration, because it does not
23288         always work. 
23289
23290         * constant.cs: Use the I4_S form for values between -128 and 127.
23291
23292         * statement.cs (Block.LookupLabel): Looks up a label.
23293         (Block): Drop support for labeled blocks.
23294
23295         (LabeledStatement): New kind of statement that represents a label
23296         only.
23297
23298         (Goto): Finally implement this bad boy.
23299
23300         * cs-parser.jay: Update to reflect new mechanism to implement
23301         labels.
23302
23303 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
23304
23305         * codegen.cs (EmitContext.This): a codegen property that keeps the
23306         a single instance of this instead of creating many different this
23307         instances. 
23308
23309         * delegate.cs (Delegate.DoResolve): Update to use the property;
23310
23311         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
23312
23313         * expression.cs (BaseAccess.DoResolve): Ditto.
23314
23315 2001-12-29  Ravi Pratap  <ravi@ximian.com>
23316
23317         * typemanager.cs (methodimpl_attr_type): Add to hold the type
23318         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
23319
23320         (InitCoreTypes): Update accordingly.
23321
23322         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
23323         so we can quickly store the state.
23324
23325         (ApplyAttributes): Set the correct implementation flags
23326         for InternalCall methods.
23327
23328 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
23329
23330         * expression.cs (EmitCall): if a method is not virtual, then do
23331         not use callvirt on it.
23332
23333         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
23334         user defined stuff) requires the use of stobj, which takes an
23335         address on the stack instead of an array and an index.  So emit
23336         the Ldelema operation for it.
23337
23338         (EmitStoreOpcode): Use stobj for valuetypes.
23339
23340         (UnaryMutator.EmitCode): Use the right 1 value depending on
23341         whether we are dealing with int64/uint64, float or doubles.
23342
23343         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
23344         constructors that I implemented last night.
23345
23346         (Constructor.IsDefault): Fix to work properly for static
23347         constructors.
23348
23349         * cs-parser.jay (CheckDef): report method signature errors.
23350         Update error number 103 to be 132.
23351
23352         * decl.cs: New AdditionResult enumeration value: MethodExists.
23353         Although we do this check for methods later on in the semantic
23354         analysis, catching repeated default constructors is so easy that
23355         we catch these here. 
23356
23357         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
23358         promotions code.
23359
23360         (ParameterReference.EmitAssign, Emit): handle
23361         bools as bytes.
23362
23363         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
23364         (ArrayAccess.EmitStoreOpcode): ditto.
23365
23366         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
23367
23368         * expression.cs (MakeByteBlob): Complete all the missing types
23369         (uint, short, ushort, byte, sbyte)
23370
23371         * class.cs: Only init instance field initializers on instance
23372         constructors. 
23373
23374         Rename `constructors' to instance_constructors. 
23375
23376         (TypeContainer.AddConstructor): Only add constructors to the list
23377         if it is not static.
23378
23379         Make sure that we handle default_static_constructor independently
23380         everywhere where we handle instance_constructors
23381
23382 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
23383
23384         * class.cs: Do not lookup or create a base initializer for a
23385         static constructor.
23386
23387         (ConstructorInitializer.Resolve): use the proper type to lookup
23388         for constructors.
23389
23390         * cs-parser.jay: Report error 1585 (modifiers between type and name).
23391
23392         * enum.cs, interface.cs: Remove CloseType, this is taken care by
23393         in DeclSpace. 
23394
23395         * decl.cs: CloseType is now an virtual method, the default
23396         implementation just closes this type.
23397
23398 2001-12-28  Ravi Pratap  <ravi@ximian.com>
23399
23400         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
23401         to PreserveSig by default. Also emit HideBySig on such methods.
23402
23403         Basically, set the defaults to standard values.
23404
23405         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
23406         argument, if candidate is better, it can't be worse than the best !
23407
23408         (Invocation): Re-write bits to differentiate between methods being
23409         applicable in their expanded form and their normal form - for params
23410         methods of course.
23411
23412         Get rid of use_standard everywhere as only standard conversions are allowed
23413         in overload resolution. 
23414
23415         More spec conformance.
23416
23417 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23418
23419         * driver.cs: Add --timestamp, to see where the compiler spends
23420         most of its time.
23421
23422         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
23423         `this' in static code.
23424
23425         (SimpleName.DoResolve): Implement in terms of a helper function
23426         that allows static-references to be passed upstream to
23427         MemberAccess.
23428
23429         (Expression.ResolveWithSimpleName): Resolve specially simple
23430         names when called by MemberAccess to implement the special
23431         semantics. 
23432
23433         (Expression.ImplicitReferenceConversion): Handle conversions from
23434         Null to reference types before others, as Null's type is
23435         System.Object. 
23436
23437         * expression.cs (Invocation.EmitCall): Handle the special case of
23438         calling methods declared on a reference type from a ValueType
23439         (Base classes System.Object and System.Enum)
23440
23441         (MemberAccess.Resolve): Only perform lookups on Enumerations if
23442         the left hand side is a TypeExpr, not on every enumeration. 
23443
23444         (Binary.Resolve): If types are reference types, then do a cast to
23445         object on operators != and == of both arguments.
23446
23447         * typemanager.cs (FindMembers): Extract instance and static
23448         members if requested.
23449
23450         * interface.cs (PopulateProperty): Use void_type instead of null
23451         as the return type for the setter method.
23452
23453         (PopulateIndexer): ditto.
23454
23455 2001-12-27  Ravi Pratap  <ravi@ximian.com>
23456
23457         * support.cs (ReflectionParameters): Fix minor bug where we
23458         were examining the wrong parameter for the ParamArray attribute.
23459
23460         Cope with requests for the type of the parameter at position
23461         greater than the params parameter's. We now return the element
23462         type of the params array as that makes more sense.
23463
23464         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
23465         accordingly as we no longer have to extract the element type
23466         ourselves.
23467
23468         (Invocation.OverloadResolve): Update.
23469
23470 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23471
23472         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
23473         against IEnumerator, test whether the return value is a descendant
23474         of the IEnumerator interface.
23475
23476         * class.cs (Indexer.Define): Use an auxiliary method to implement
23477         the other bits of the method definition.  Begin support for
23478         explicit interface implementation.
23479
23480         (Property.DefineMethod): Use TypeManager.void_type instead of null
23481         for an empty return value.
23482
23483 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
23484
23485         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
23486         dealing with a FieldExpr which is composed of a FieldBuilder, in
23487         the code path we did extract the constant, but we should have
23488         obtained the underlying value to be able to cast it (otherwise we
23489         end up in an infinite loop, this is what Ravi was running into).
23490
23491         (ArrayCreation.UpdateIndices): Arrays might be empty.
23492
23493         (MemberAccess.ResolveMemberAccess): Add support for section
23494         14.5.4.1 that deals with the special case of E.I when E is a type
23495         and something else, that I can be a reference to a static member.
23496
23497         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
23498         handle a particular array type to create byte blobs, it is just
23499         something we dont generate byteblobs for.
23500
23501         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
23502         arguments. 
23503
23504         * location.cs (Push): remove the key from the hashtable that we
23505         are about to add.   This happens for empty files.
23506
23507         * driver.cs: Dispose files after we have parsed them.
23508
23509         (tokenize): new function that only runs the tokenizer on its
23510         input, for speed testing.
23511
23512 2001-12-26  Ravi Pratap  <ravi@ximian.com>
23513
23514         * class.cs (Event.Define): Define the private field only if there
23515         are no accessors defined.
23516
23517         * expression.cs (ResolveMemberAccess): If there is no associated
23518         field with the event, that means we have an event defined with its
23519         own accessors and we should flag error cs0070 since transforming
23520         ourselves into a field is not valid in that case.
23521
23522         * ecore.cs (SimpleName.DoResolve): Same as above.
23523
23524         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
23525         and charset to sane values.
23526
23527 2001-12-25  Ravi Pratap  <ravi@ximian.com>
23528
23529         * assign.cs (DoResolve): Perform check on events only if they 
23530         are being accessed outside the declaring type.
23531
23532         * cs-parser.jay (event_declarations): Update rules to correctly
23533         set the type of the implicit parameter etc.
23534
23535         (add_accessor, remove_accessor): Set current local parameters.
23536
23537         * expression.cs (Binary): For delegate addition and subtraction,
23538         cast the return value from the method into the appropriate delegate
23539         type.
23540
23541 2001-12-24  Ravi Pratap  <ravi@ximian.com>
23542
23543         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
23544         of these as the workaround is unnecessary.
23545
23546         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
23547         delegate data - none of that is needed at all.
23548
23549         Re-write bits to extract the instance expression and the delegate method
23550         correctly.
23551
23552         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
23553         on delegates too.
23554
23555         * attribute.cs (ApplyAttributes): New method to take care of common tasks
23556         of attaching attributes instead of duplicating code everywhere.
23557
23558         * everywhere : Update code to do attribute emission using the above method.
23559
23560 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23561
23562         * expression.cs (IsParamsMethodApplicable): if there are not
23563         parameters, return immediately.
23564
23565         * ecore.cs: The 0 literal can be implicity converted to an enum
23566         type. 
23567
23568         (SimpleName.DoResolve): First lookup the type, then lookup the
23569         members. 
23570
23571         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
23572         want to get its address.  If the InstanceExpression is not
23573         addressable, store the result in a temporary variable, then get
23574         the address of it.
23575
23576         * codegen.cs: Only display 219 errors on warning level or above. 
23577
23578         * expression.cs (ArrayAccess): Make it implement the
23579         IMemoryLocation interface.
23580
23581         (Binary.DoResolve): handle the operator == (object a, object b)
23582         and operator != (object a, object b) without incurring into a
23583         BoxedCast (because 5 != o should never be performed).
23584
23585         Handle binary enumerator operators.
23586
23587         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
23588         value type, otherwise use Ldelem_ref.
23589
23590         Use precomputed names;
23591
23592         (AddressOf): Implement address of
23593
23594         * cs-parser.jay (labeled_statement): Fix recursive block
23595         addition by reworking the production.
23596
23597         * expression.cs (New.DoEmit): New has a special case:
23598                 
23599                  If we are dealing with a ValueType, we have a few
23600                  situations to deal with:
23601                 
23602                     * The target of New is a ValueType variable, that is
23603                       easy, we just pass this as the variable reference
23604                 
23605                     * The target of New is being passed as an argument,
23606                       to a boxing operation or a function that takes a
23607                       ValueType.
23608                 
23609                       In this case, we need to create a temporary variable
23610                       that is the argument of New.
23611
23612
23613 2001-12-23  Ravi Pratap  <ravi@ximian.com>
23614
23615         * rootcontext.cs (LookupType): Check that current_type is not null before
23616         going about looking at nested types.
23617
23618         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
23619         not implement the IAssignMethod interface any more.
23620
23621         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
23622         where we tranform them into FieldExprs if they are being resolved from within
23623         the declaring type.
23624
23625         * ecore.cs (SimpleName.DoResolve): Do the same here.
23626
23627         * assign.cs (DoResolve, Emit): Clean up code considerably. 
23628
23629         * ../errors/bug10.cs : Add.
23630
23631         * ../errors/cs0070.cs : Add.
23632
23633         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
23634
23635         * assign.cs : Get rid of EventIsLocal everywhere.
23636
23637 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23638
23639         * ecore.cs (ConvertIntLiteral): finished the implementation.
23640
23641         * statement.cs (SwitchLabel): Convert the value we are using as a
23642         key before looking up the table.
23643
23644 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23645
23646         * codegen.cs (EmitTopBlock): Require a Location argument now.
23647
23648         * cs-parser.jay (constructor_declarator): We need to setup
23649         current_local_parameters before we parse the
23650         opt_constructor_initializer, to allow the variables to be bound
23651         to the constructor arguments.
23652
23653         * rootcontext.cs (LookupType): First lookup nested classes in our
23654         class and our parents before we go looking outside our class.
23655
23656         * expression.cs (ConstantFold): Extract/debox the values at the
23657         beginnning. 
23658
23659         * rootcontext.cs (EmitCode): Resolve the constants first before we
23660         resolve the types.  This is not really needed, but it helps debugging.
23661
23662         * statement.cs: report location.
23663
23664         * cs-parser.jay: pass location to throw statement.
23665
23666         * driver.cs: Small bug fix.
23667
23668         * report.cs: Updated format to be 4-zero filled digits.
23669
23670 2001-12-22  Ravi Pratap  <ravi@ximian.com>
23671
23672         * expression.cs (CheckIndices): Fix minor bug where the wrong
23673         variable was being referred to ;-)
23674
23675         (DoEmit): Do not call EmitStaticInitializers when the 
23676         underlying type is System.Object.
23677
23678 2001-12-21  Ravi Pratap  <ravi@ximian.com>
23679
23680         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
23681         and do the usual workaround for SRE.
23682
23683         * class.cs (MyEventBuilder.EventType): New member to get at the type
23684         of the event, quickly.
23685
23686         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
23687
23688         * assign.cs (Assign.DoResolve): Handle the case when the target
23689         is an EventExpr and perform the necessary checks.
23690
23691         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
23692         interface.
23693
23694         (SimpleName.MemberStaticCheck): Include check for EventExpr.
23695
23696         (EventExpr): Set the type in the constructor itself since we 
23697         are meant to be born fully resolved.
23698
23699         (EventExpr.Define): Revert code I wrote earlier.
23700                 
23701         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
23702         instance expression is null. The instance expression is a This in that case
23703         or a null, depending on whether it is a static method or not.
23704
23705         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
23706         refers to more than one method.
23707
23708         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
23709         and accordingly flag errors.
23710
23711 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23712
23713         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
23714
23715 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23716
23717         * location.cs (ToString): Provide useful rutine.
23718
23719 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23720
23721         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
23722         objects, return the actual integral boxed.
23723
23724         * statement.cs (SwitchLabel): define an ILLabel for each
23725         SwitchLabel. 
23726
23727         (Switch.CheckSwitch): If the value is a Literal, extract
23728         the underlying literal.
23729
23730         Also in the unused hashtable we had, add the SwitchLabel so we can
23731         quickly look this value up.
23732
23733         * constant.cs: Implement a bunch of new constants.  Rewrite
23734         Literal based on this.  Made changes everywhere to adapt to this.
23735
23736         * expression.cs (Expression.MakeByteBlob): Optimize routine by
23737         dereferencing array only once, and also copes with enumrations.
23738
23739         bytes are two bytes wide, not one.
23740
23741         (Cast): Perform constant conversions.
23742
23743         * ecore.cs (TryImplicitIntConversion): Return literals instead of
23744         wrappers to the literals here.
23745
23746         * expression.cs (DoNumericPromotions): long literals can converted
23747         to ulong implicity (this is taken care of elsewhere, but I was
23748         missing this spot).
23749
23750         * ecore.cs (Expression.Literalize): Make the return type Literal,
23751         to improve type checking.
23752
23753         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
23754
23755 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23756
23757         * literal.cs: Revert code from ravi that checked the bounds.  The
23758         bounds are sane by the definition of the type itself. 
23759
23760         * typemanager.cs: Fix implementation of ImplementsInterface.  We
23761         need to actually look up in our parent hierarchy for interfaces
23762         implemented. 
23763
23764         * const.cs: Use the underlying type for enumerations
23765
23766         * delegate.cs: Compute the basename for the delegate creation,
23767         that should fix the delegate test case, and restore the correct
23768         Type Lookup semantics in rootcontext
23769
23770         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
23771         referencing a nested type with the Reflection API is using the "+"
23772         sign. 
23773
23774         * cs-parser.jay: Do not require EOF token at the end.
23775
23776 2001-12-20  Ravi Pratap  <ravi@ximian.com>
23777
23778         * rootcontext.cs (LookupType): Concatenate type names with
23779         a '.' instead of a '+' The test suite passes again.
23780
23781         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
23782         field of the enumeration.
23783
23784         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
23785         the case when the member is an EventExpr.
23786
23787         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
23788         static has an associated instance expression.
23789
23790         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
23791
23792         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
23793
23794         * class.cs (Event.Define): Register event and perform appropriate checks
23795         for error #111.
23796
23797         We define the Add and Remove methods even if the use provides none because
23798         in that case, we provide default implementations ourselves.
23799
23800         Define a private field of the type of the event. This is done by the CSC compiler
23801         and we should be doing it too ;-)
23802
23803         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
23804         More methods we use in code we generate.
23805
23806         (multicast_delegate_type, delegate_type): Two separate types since the distinction
23807         is important.
23808
23809         (InitCoreTypes): Update accordingly for the above.
23810
23811         * class.cs (Event.Emit): Generate code for default accessors that we provide
23812
23813         (EmitDefaultMethod): Do the job in the above.
23814
23815         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
23816         appropriate place.
23817
23818 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23819
23820         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
23821         builders even if we were missing one.
23822
23823         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
23824         pass the Basename as our class name instead of the Name.  The
23825         basename will be correctly composed for us.
23826
23827         * parameter.cs (Paramters): Now takes a Location argument.
23828
23829         * decl.cs (DeclSpace.LookupType): Removed convenience function and
23830         make all the code call directly LookupType in RootContext and take
23831         this chance to pass the Location information everywhere.
23832
23833         * Everywhere: pass Location information.
23834
23835 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
23836
23837         * class.cs (Constructor.Define): Updated way of detecting the
23838         length of the parameters.
23839
23840         (TypeContainer.DefineType): Use basename as the type name for
23841         nested types.
23842
23843         (TypeContainer.Define): Do not recursively define types here, as
23844         definition is taken care in order by the RootContext.
23845
23846         * tree.cs: Keep track of namespaces in a per-file basis.
23847
23848         * parameter.cs (Parameter.ComputeSignature): Update to use
23849         DeclSpace. 
23850
23851         (Parameters.GetSignature): ditto.
23852
23853         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
23854         instead of a TypeContainer.
23855
23856         (Interface.SemanticAnalysis): Use `this' instead of our parent to
23857         resolve names.  Because we need to be resolve in our context, not
23858         our parents.
23859
23860         * driver.cs: Implement response files.
23861
23862         * class.cs (TypeContainer.DefineType): If we are defined, do not
23863         redefine ourselves.
23864
23865         (Event.Emit): Emit the code for add/remove handlers.
23866         (Event.Define): Save the MethodBuilders for add/remove.
23867
23868         * typemanager.cs: Use pair here too.
23869
23870         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
23871         DictionaryEntry requires the first argument to be non-null.  
23872
23873         (enum_declaration): Compute full name for registering the
23874         enumeration.
23875
23876         (delegate_declaration): Instead of using
23877         formal_parameter_list, use opt_formal_parameter_list as the list
23878         can be empty.
23879
23880         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
23881         (EventParsing): New property that controls whether `add' and
23882         `remove' are returned as tokens or identifiers (for events);
23883
23884 2001-12-19  Ravi Pratap  <ravi@ximian.com>
23885
23886         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
23887         use MyEventBuilder only and let it wrap the real builder for us.
23888
23889         (MyEventBuilder): Revamp constructor etc.
23890
23891         Implement all operations that we perform on EventBuilder in precisely the same
23892         way here too.
23893
23894         (FindMembers): Update to use the EventBuilder member.
23895
23896         (Event.Emit): Update accordingly.
23897
23898 2001-12-18  Ravi Pratap  <ravi@ximian.com>
23899
23900         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
23901         by calling the appropriate methods.
23902
23903         (GetCustomAttributes): Make stubs as they cannot possibly do anything
23904         useful.
23905
23906         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
23907
23908 2001-12-17  Ravi Pratap  <ravi@ximian.com>
23909
23910         * delegate.cs (Delegate.Populate): Check that the return type
23911         and various parameters types are indeed accessible.
23912
23913         * class.cs (Constructor.Define): Same here.
23914
23915         (Field.Define): Ditto.
23916
23917         (Event.Define): Ditto.
23918
23919         (Operator.Define): Check that the underlying Method defined itself
23920         correctly - so it's MethodBuilder should not be null.
23921
23922         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
23923         expression happens to be null.
23924
23925         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
23926         members but as of now we don't seem to be able to do anything really useful with it.
23927
23928         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
23929         not the EventBuilder.
23930
23931 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
23932
23933         * cs-tokenizer.cs: Add support for defines.
23934         Add support for #if, #elif, #else, #endif
23935
23936         (eval_var): evaluates a variable.
23937         (eval): stubbed for evaluating functions.
23938
23939         * cs-parser.jay: Pass the defines information
23940
23941         * driver.cs: Add --define command line option.
23942
23943         * decl.cs: Move MemberCore here.
23944
23945         Make it the base class for DeclSpace.  This allows us to catch and
23946         report 108 and 109 for everything now.
23947
23948         * class.cs (TypeContainer.Define): Extract all the members
23949         before populating and emit the warning 108 (new keyword required
23950         to override) instead of having each member implement this.
23951
23952         (MemberCore.Define): New abstract method, we will be using this in
23953         the warning reporting engine in Populate.
23954
23955         (Operator.Define): Adjust to new MemberCore protocol. 
23956
23957         * const.cs (Const): This does not derive from Expression, it is a
23958         temporary object we use to create fields, it is a MemberCore. 
23959
23960         * class.cs (Method.Define): Allow the entry point to be in a
23961         specific class.
23962
23963         * driver.cs: Rewrite the argument handler to clean it up a bit.
23964
23965         * rootcontext.cs: Made it just an auxiliary namespace feature by
23966         making everything static.
23967
23968         * driver.cs: Adapt code to use RootContext type name instead of
23969         instance variable.
23970
23971         * delegate.cs: Remove RootContext argument.
23972
23973         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
23974         argument. 
23975
23976         * class.cs (Event.Define): The lookup can fail.
23977
23978         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
23979
23980         * expression.cs: Resolve the this instance before invoking the code.
23981
23982 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
23983
23984         * cs-parser.jay: Add a production in element_access that allows
23985         the thing to become a "type" reference.  This way we can parse
23986         things like "(string [])" as a type.
23987
23988         Note that this still does not handle the more complex rules of
23989         casts. 
23990
23991
23992         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
23993
23994         * ecore.cs: (CopyNewMethods): new utility function used to
23995         assemble the list of methods from running FindMembers.
23996
23997         (MemberLookup): Rework FindMembers so that 
23998
23999 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
24000
24001         * class.cs (TypeContainer): Remove Delegates who fail to be
24002         defined.
24003
24004         * delegate.cs (Populate): Verify that we dont get null return
24005         values.   TODO: Check for AsAccessible.
24006
24007         * cs-parser.jay: Use basename to emit error 574 (destructor should
24008         have the same name as container class), not the full name.
24009
24010         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
24011         possible representation.  
24012
24013         Also implements integer type suffixes U and L.
24014
24015 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
24016
24017         * expression.cs (ArrayCreation.DoResolve): We need to do the
24018         argument resolution *always*.
24019
24020         * decl.cs: Make this hold the namespace.  Hold the root context as
24021         well.
24022         (LookupType): Move here.
24023
24024         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
24025
24026         * location.cs (Row, Name): Fixed the code, it was always returning
24027         references to the first file.
24028
24029         * interface.cs: Register properties defined through interfaces.
24030
24031         * driver.cs: Add support for globbing on the command line
24032
24033         * class.cs (Field): Make it derive from MemberCore as well.
24034         (Event): ditto.
24035
24036 2001-12-15  Ravi Pratap  <ravi@ximian.com>
24037
24038         * class.cs (Event::Define): Check that the type of the event is a delegate
24039         type else flag error #66.
24040
24041         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
24042         same.
24043
24044         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
24045         values of EntryPoint, CharSet etc etc.
24046
24047         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
24048
24049         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
24050         be null and we should ignore this. I am not sure if this is really clean. Apparently,
24051         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
24052         which needs this to do its work.
24053
24054         * ../errors/cs0066.cs : Add.
24055
24056 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
24057
24058         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
24059         helper functions.
24060
24061         * class.cs: (MethodSignature.MethodSignature): Removed hack that
24062         clears out the parameters field.
24063         (MemberSignatureCompare): Cleanup
24064
24065         (MemberCore): New base class used to share code between MethodCore
24066         and Property.
24067
24068         (RegisterRequiredImplementations) BindingFlags.Public requires
24069         either BindingFlags.Instace or Static.  Use instance here.
24070
24071         (Property): Refactored code to cope better with the full spec.
24072
24073         * parameter.cs (GetParameterInfo): Return an empty array instead
24074         of null on error.
24075
24076         * class.cs (Property): Abstract or extern properties have no bodies.
24077
24078         * parameter.cs (GetParameterInfo): return a zero-sized array.
24079
24080         * class.cs (TypeContainer.MethodModifiersValid): Move all the
24081         method modifier validation to the typecontainer so we can reuse
24082         this on properties.
24083
24084         (MethodCore.ParameterTypes): return an empty sized array of types.
24085
24086         (Property.Define): Test property modifier validity.
24087
24088         Add tests for sealed/override too.
24089
24090         (Method.Emit): abstract or extern methods have no bodies.
24091
24092 2001-12-14  Ravi Pratap  <ravi@ximian.com>
24093
24094         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
24095         thing.
24096
24097         (Method::Define, ::Emit): Modify accordingly.
24098
24099         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
24100
24101         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
24102
24103         * makefile: Pass in /unsafe.
24104
24105 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
24106
24107         * class.cs (MakeKey): Kill routine.
24108
24109         * class.cs (TypeContainer.Define): Correctly define explicit
24110         method implementations (they require the full interface name plus
24111         the method name).
24112
24113         * typemanager.cs: Deply the PtrHashtable here and stop using the
24114         lame keys.  Things work so much better.
24115
24116         This of course broke everyone who depended on `RegisterMethod' to
24117         do the `test for existance' test.  This has to be done elsewhere.
24118
24119         * support.cs (PtrHashtable): A hashtable that avoid comparing with
24120         the object stupid Equals method (because, that like fails all over
24121         the place).  We still do not use it.
24122
24123         * class.cs (TypeContainer.SetRequiredInterface,
24124         TypeContainer.RequireMethods): Killed these two routines and moved
24125         all the functionality to RegisterRequiredImplementations.
24126
24127         (TypeContainer.RegisterRequiredImplementations): This routine now
24128         registers all the implementations required in an array for the
24129         interfaces and abstract methods.  We use an array of structures
24130         which can be computed ahead of time to reduce memory usage and we
24131         also assume that lookups are cheap as most classes will not
24132         implement too many interfaces.
24133
24134         We also avoid creating too many MethodSignatures.
24135
24136         (TypeContainer.IsInterfaceMethod): Update and optionally does not
24137         clear the "pending" bit if we find that there are problems with
24138         the declaration.
24139
24140         (TypeContainer.VerifyPendingMethods): Update to report errors of
24141         methods that look like implementations but are not.
24142
24143         (TypeContainer.Define): Add support for explicit interface method
24144         implementation. 
24145
24146 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
24147
24148         * typemanager.cs: Keep track of the parameters here instead of
24149         being a feature of the TypeContainer.
24150
24151         * class.cs: Drop the registration of parameters here, as
24152         InterfaceMethods are also interface declarations.
24153
24154         * delegate.cs: Register methods with the TypeManager not only with
24155         the TypeContainer.  This code was buggy.
24156
24157         * interface.cs: Full registation here.
24158
24159 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
24160
24161         * expression.cs: Remove reducer for binary expressions, it can not
24162         be done this way.
24163
24164         * const.cs: Put here the code that used to go into constant.cs
24165
24166         * constant.cs: Put here the code for constants, this is a new base
24167         class for Literals.
24168
24169         * literal.cs: Make Literal derive from Constant.
24170
24171 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
24172
24173         * statement.cs (Return.Emit): Report error 157 if the user
24174         attempts to return from a finally block.
24175
24176         (Return.Emit): Instead of emitting a return, jump to the end of
24177         the function.
24178
24179         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
24180         LocalBuilder to store the result of the function.  ReturnLabel is
24181         the target where we jump.
24182
24183
24184 2001-12-09  Radek Doulik  <rodo@ximian.com>
24185
24186         * cs-parser.jay: remember alias in current namespace
24187
24188         * ecore.cs (SimpleName::DoResolve): use aliases for types or
24189         namespaces
24190
24191         * class.cs (LookupAlias): lookup alias in my_namespace
24192
24193         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
24194         aliases hashtable
24195         (LookupAlias): lookup alias in this and if needed in parent
24196         namespaces
24197
24198 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
24199
24200         * support.cs: 
24201
24202         * rootcontext.cs: (ModuleBuilder) Made static, first step into
24203         making things static.  I need this to avoid passing the
24204         TypeContainer when calling ParameterType.
24205
24206         * support.cs (InternalParameters.ParameterType): Remove ugly hack
24207         that did string manipulation to compute the type and then call
24208         GetType.  Use Parameter.ParameterType instead.
24209
24210         * cs-tokenizer.cs: Consume the suffix for floating values.
24211
24212         * expression.cs (ParameterReference): figure out whether this is a
24213         reference parameter or not.  Kill an extra variable by computing
24214         the arg_idx during emission.
24215
24216         * parameter.cs (Parameters.GetParameterInfo): New overloaded
24217         function that returns whether a parameter is an out/ref value or not.
24218
24219         (Parameter.ParameterType): The type of the parameter (base,
24220         without ref/out applied).
24221
24222         (Parameter.Resolve): Perform resolution here.
24223         (Parameter.ExternalType): The full type (with ref/out applied).
24224
24225         * statement.cs (Using.Emit, Using.EmitExpression): Implement
24226         support for expressions on the using statement.
24227
24228 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
24229
24230         * statement.cs (Using.EmitLocalVariableDecls): Split the
24231         localvariable handling of the using statement.
24232
24233         (Block.EmitMeta): Keep track of variable count across blocks.  We
24234         were reusing slots on separate branches of blocks.
24235
24236         (Try.Emit): Emit the general code block, we were not emitting it. 
24237
24238         Check the type of the declaration to be an IDisposable or
24239         something that can be implicity converted to it. 
24240
24241         Emit conversions if required.
24242
24243         * ecore.cs (EmptyExpression): New utility class.
24244         (Expression.ImplicitConversionExists): New utility function.
24245
24246 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
24247
24248         * statement.cs (Using): Implement.
24249
24250         * expression.cs (LocalVariableReference): Support read only variables.
24251
24252         * statement.cs: Remove the explicit emit for the Leave opcode.
24253         (VariableInfo): Add a readonly field.
24254
24255 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
24256
24257         * ecore.cs (ConvCast): new class used to encapsulate the various
24258         explicit integer conversions that works in both checked and
24259         unchecked contexts.
24260
24261         (Expression.ConvertNumericExplicit): Use new ConvCast class to
24262         properly generate the overflow opcodes.
24263
24264 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24265
24266         * statement.cs: The correct type for the EmptyExpression is the
24267         element_type, not the variable type.  Ravi pointed this out.
24268
24269 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24270
24271         * class.cs (Method::Define): Handle PInvoke methods specially
24272         by using DefinePInvokeMethod instead of the usual one.
24273
24274         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
24275         above to do the task of extracting information and defining the method.
24276
24277 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24278
24279         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
24280         of the condition for string type.
24281
24282         (Emit): Move that here. 
24283
24284         (ArrayCreation::CheckIndices): Keep string literals in their expression
24285         form.
24286
24287         (EmitDynamicInitializers): Handle strings appropriately.
24288
24289 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24290
24291         * codegen.cs (EmitContext): Replace multiple variables with a
24292         single pointer to the current Switch statement.
24293
24294         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
24295         EmitContext.
24296
24297 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24298
24299         * statement.cs 
24300
24301         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
24302         default'.
24303
24304         (Foreach.Emit): Foreach on arrays was not setting
24305         up the loop variables (for break/continue).
24306
24307         (GotoCase): Semi-implented.
24308
24309 2001-12-03  Ravi Pratap  <ravi@ximian.com>
24310
24311         * attribute.cs (CheckAttribute): Handle system attributes by using
24312         Attribute.GetAttributes to examine information we need.
24313
24314         (GetValidPlaces): Same here.
24315
24316         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
24317
24318         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
24319
24320         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
24321
24322         (Method::Define): Set appropriate flags if we have a DllImport attribute.
24323
24324         (Method::Emit): Handle the case when we are a PInvoke method.
24325
24326 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24327
24328         * expression.cs: Use ResolveWithSimpleName on compound names.
24329
24330 2001-12-02  Ravi Pratap  <ravi@ximian.com>
24331
24332         * constant.cs (EmitConstant): Make sure we resolve the associated expression
24333         before trying to reduce it.
24334
24335         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
24336
24337         * constant.cs (LookupConstantValue): Implement.
24338
24339         (EmitConstant): Use the above in emitting the constant.
24340
24341         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
24342         that are user-defined by doing a LookupConstantValue on them.
24343
24344         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
24345         too, like above.
24346
24347 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
24348
24349         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
24350
24351         (BaseAccess.DoResolve): Implement.
24352
24353         (MemberAccess.DoResolve): Split this routine into a
24354         ResolveMemberAccess routine that can be used independently
24355
24356 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
24357
24358         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
24359         As that share bits of the implementation.  Is returns a boolean,
24360         while As returns the Type that is being probed.
24361
24362 2001-12-01  Ravi Pratap  <ravi@ximian.com>
24363
24364         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
24365         instead of a Literal - much easier.
24366
24367         (EnumInTransit): Remove - utterly useless :-)
24368
24369         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
24370
24371         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
24372
24373         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
24374         chain when we have no associated expression.
24375
24376 2001-11-30  Ravi Pratap  <ravi@ximian.com>
24377
24378         * constant.cs (Define): Use Location while reporting the errror.
24379
24380         Also emit a warning when 'new' is used and there is no inherited
24381         member to hide.
24382
24383         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
24384         populated.
24385
24386         (LookupEnumValue): Implement to lookup an enum member's value and define it
24387         if necessary.
24388
24389         (Populate): Re-write accordingly to use the above routine.
24390
24391 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
24392
24393         * expression.cs (This): Fix prototype for DoResolveLValue to
24394         override the base class DoResolveLValue.
24395
24396         * cs-parser.cs: Report errors cs574 and cs575 (destructor
24397         declarations) 
24398
24399         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
24400         (we need to load the address of the field here).  This fixes
24401         test-22. 
24402
24403         (FieldExpr.DoResolveLValue): Call the DoResolve
24404         function to initialize the Instance expression.
24405
24406         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
24407         correctly the GetEnumerator operation on a value type.
24408
24409         * cs-parser.jay: Add more simple parsing error catches.
24410
24411         * statement.cs (Switch): Add support for string switches.
24412         Handle null specially.
24413
24414         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
24415
24416 2001-11-28  Ravi Pratap  <ravi@ximian.com>
24417
24418         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
24419
24420         (declare_local_constant): New helper function.
24421
24422         * statement.cs (AddConstant): Keep a separate record of constants
24423
24424         (IsConstant): Implement to determine if a variable is a constant.
24425
24426         (GetConstantExpression): Implement.
24427
24428         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
24429
24430         * statement.cs (IsVariableDefined): Re-write.
24431
24432 2001-11-27  Ravi Pratap  <ravi@ximian.com>
24433
24434         * class.cs (TypeContainer::FindMembers): Look for constants
24435         in the case when we are looking for MemberTypes.Field
24436
24437         * expression.cs (MemberAccess::DoResolve): Check that in the
24438         case we are a FieldExpr and a Literal, we are not being accessed
24439         by an instance reference.
24440
24441         * cs-parser.jay (local_constant_declaration): Implement.
24442
24443         (declaration_statement): Implement for constant declarations.
24444
24445 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
24446
24447         * statement.cs (Switch): Catch double defaults.
24448
24449         (Switch): More work on the switch() statement
24450         implementation.  It works for integral values now, need to finish
24451         string support.
24452
24453
24454 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24455
24456         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
24457         integer literals into other integer literals.  To be used by
24458         switch. 
24459
24460 2001-11-24  Ravi Pratap  <ravi@ximian.com>
24461
24462         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
24463         some memory.
24464
24465         (EmitDynamicInitializers): Cope with the above since we extract data
24466         directly from ArrayData now.
24467
24468         (ExpectInitializers): Keep track of whether initializers are mandatory
24469         or not.
24470
24471         (Bounds): Make it a hashtable to prevent the same dimension being 
24472         recorded for every element in that dimension.
24473
24474         (EmitDynamicInitializers): Fix bug which prevented the Set array method
24475         from being found.
24476
24477         Also fix bug which was causing the indices to be emitted in the reverse
24478         order.
24479
24480 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24481
24482         * expression.cs (ArrayCreation): Implement the bits that Ravi left
24483         unfinished.  They do not work, because the underlying code is
24484         sloppy.
24485
24486 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24487
24488         * cs-parser.jay: Remove bogus fixme.
24489
24490         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
24491         on Switch statement.
24492
24493 2001-11-23  Ravi Pratap  <ravi@ximian.com>
24494
24495         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
24496         the same. 
24497
24498         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
24499         parameter. Apparently, any expression is allowed. 
24500
24501         (ValidateInitializers): Update accordingly.
24502
24503         (CheckIndices): Fix some tricky bugs thanks to recursion.
24504
24505         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
24506         I was being completely brain-dead.
24507
24508         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
24509         and re-write acordingly.
24510
24511         (DelegateInvocation): Re-write accordingly.
24512
24513         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
24514
24515         (MakeByteBlob): Handle types more correctly.
24516
24517         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
24518         initialization from expressions but it is incomplete because I am a complete
24519         Dodo :-|
24520
24521 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24522
24523         * statement.cs (If.Emit): Fix a bug that generated incorrect code
24524         on If.  Basically, we have to return `true' (ie, we do return to
24525         our caller) only if both branches of the if return.
24526
24527         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
24528         short-circuit operators, handle them as short circuit operators. 
24529
24530         (Cast.DoResolve): Resolve type.
24531         (Cast.Cast): Take an expression as the target type.
24532
24533         * cs-parser.jay (cast_expression): Remove old hack that only
24534         allowed a limited set of types to be handled.  Now we take a
24535         unary_expression and we resolve to a type during semantic
24536         analysis.
24537
24538         Use the grammar productions from Rhys to handle casts (this is
24539         not complete like Rhys syntax yet, we fail to handle that corner
24540         case that C# has regarding (-x), but we will get there.
24541
24542 2001-11-22  Ravi Pratap  <ravi@ximian.com>
24543
24544         * class.cs (EmitFieldInitializer): Take care of the case when we have a
24545         field which is an array type.
24546
24547         * cs-parser.jay (declare_local_variables): Support array initialization too.
24548
24549         * typemanager.cs (MakeKey): Implement.
24550
24551         (everywhere): Use the above appropriately.
24552
24553         * cs-parser.jay (for_statement): Update for array initialization while
24554         declaring variables.
24555
24556         * ecore.cs : The error message was correct, it's the variable's names that
24557         were misleading ;-) Make the code more readable.
24558
24559         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
24560         the correct type etc.
24561
24562         (ConvertExplicit): Handle Enum types by examining the underlying type.
24563
24564 2001-11-21  Ravi Pratap  <ravi@ximian.com>
24565
24566         * parameter.cs (GetCallingConvention): Always return
24567         CallingConventions.Standard for now.
24568
24569 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24570
24571         * expression.cs (Binary.ResolveOperator): Update the values of `l'
24572         and `r' after calling DoNumericPromotions.
24573
24574         * ecore.cs: Fix error message (the types were in the wrong order).
24575
24576         * statement.cs (Foreach.ProbeCollectionType): Need to pass
24577         BindingFlags.Instance as well 
24578
24579         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
24580         implicit int literal conversion in an empty cast so that we
24581         propagate the right type upstream.
24582
24583         (UnboxCast): new class used to unbox value types.
24584         (Expression.ConvertExplicit): Add explicit type conversions done
24585         by unboxing.
24586
24587         (Expression.ImplicitNumericConversion): Oops, forgot to test for
24588         the target type before applying the implicit LongLiterals to ULong
24589         literal cast.
24590
24591 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
24592
24593         * cs-parser.jay (for_statement): Reworked the way For works: now
24594         we declare manually any variables that are introduced in
24595         for_initializer to solve the problem of having out-of-band code
24596         emition (that is what got for broken).
24597
24598         (declaration_statement): Perform the actual variable declaration
24599         that used to be done in local_variable_declaration here.
24600
24601         (local_variable_declaration): Do not declare anything, just pass
24602         the information on a DictionaryEntry
24603
24604 2001-11-20  Ravi Pratap  <ravi@ximian.com>
24605
24606         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
24607         re-write of the logic to now make it recursive.
24608
24609         (UpdateIndices): Re-write accordingly.
24610
24611         Store element data in a separate ArrayData list in the above methods.
24612
24613         (MakeByteBlob): Implement to dump the array data into a byte array.
24614
24615 2001-11-19  Ravi Pratap  <ravi@ximian.com>
24616
24617         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
24618         into CheckIndices.
24619
24620         * constant.cs (Define): Implement.
24621
24622         (EmitConstant): Re-write fully.
24623
24624         Pass in location info.
24625
24626         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
24627         respectively.
24628
24629         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
24630         DictionaryEntry since we need location info too.
24631
24632         (constant_declaration): Update accordingly.
24633
24634         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
24635         code into another method : UpdateIndices.
24636
24637 2001-11-18  Ravi Pratap  <ravi@ximian.com>
24638
24639         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
24640         some type checking etc.
24641
24642 2001-11-17  Ravi Pratap  <ravi@ximian.com>
24643
24644         * expression.cs (ArrayCreation::ValidateInitializers): Implement
24645         bits to provide dimension info if the user skips doing that.
24646
24647         Update second constructor to store the rank correctly.
24648
24649 2001-11-16  Ravi Pratap  <ravi@ximian.com>
24650
24651         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
24652         and try to implement.
24653
24654         * ../errors/cs0150.cs : Add.
24655
24656         * ../errors/cs0178.cs : Add.
24657
24658 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
24659
24660         * statement.cs: Implement foreach on multi-dimensional arrays. 
24661
24662         * parameter.cs (Parameters.GetParameterByName): Also lookup the
24663         name of the params argument.
24664
24665         * expression.cs: Use EmitStoreOpcode to get the right opcode while
24666         initializing the array.
24667
24668         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
24669         we can use this elsewhere.
24670
24671         * statement.cs: Finish implementation of foreach for single
24672         dimension arrays.
24673
24674         * cs-parser.jay: Use an out-of-band stack to pass information
24675         around, I wonder why I need this.
24676
24677         foreach_block: Make the new foreach_block the current_block.
24678
24679         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
24680         function used to return a static Parameters structure.  Used for
24681         empty parameters, as those are created very frequently.
24682
24683         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
24684
24685 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24686
24687         * interface.cs : Default modifier is private, not public. The
24688         make verify test passes again.
24689
24690 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24691
24692         * support.cs (ReflectionParameters): Fix logic to determine
24693         whether the last parameter is a params one. Test 9 passes again.
24694
24695         * delegate.cs (Populate): Register the builders we define with
24696         RegisterParameterForBuilder. Test 19 passes again.
24697
24698         * cs-parser.jay (property_declaration): Reference $6 instead
24699         of $$ to get at the location.
24700
24701         (indexer_declaration): Similar stuff.
24702
24703         (attribute): Ditto.
24704
24705         * class.cs (Property): Register parameters for the Get and Set methods
24706         if they exist. Test 23 passes again.
24707
24708         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
24709         call to EmitArguments as we are sure there aren't any params arguments. 
24710         Test 32 passes again.
24711
24712         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
24713         IndexOutOfRangeException. 
24714
24715         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
24716         Test 33 now passes again.
24717
24718 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
24719
24720         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
24721         broke a bunch of things.  Will have to come up with a better way
24722         of tracking locations.
24723
24724         * statement.cs: Implemented foreach for single dimension arrays.
24725
24726 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24727
24728         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
24729         an error.  This removes the lookup from the critical path.
24730
24731         * cs-parser.jay: Removed use of temporary_loc, which is completely
24732         broken. 
24733
24734 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
24735
24736         * support.cs (ReflectionParameters.ParameterModifier): Report
24737         whether the argument is a PARAMS argument or not.
24738
24739         * class.cs: Set the attribute `ParamArrayAttribute' on the
24740         parameter argument.
24741
24742         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
24743         and cons_param_array_attribute (ConstructorInfo for
24744         ParamArrayAttribute)., 
24745
24746         * codegen.cs: Emit the return using the `Return' statement, that
24747         way we can report the error correctly for missing return values. 
24748
24749         * class.cs (Method.Emit): Clean up.
24750
24751         * expression.cs (Argument.Resolve): Take another argument: the
24752         location where this argument is used.  Notice that this is not
24753         part of the "Argument" class as to reduce the size of the
24754         structure (we know the approximate location anyways).
24755
24756         Test if the argument is a variable-reference, if not, then
24757         complain with a 206.
24758
24759         (Argument.Emit): Emit addresses of variables.
24760
24761         (Argument.FullDesc): Simplify.
24762
24763         (Invocation.DoResolve): Update for Argument.Resolve.
24764
24765         (ElementAccess.DoResolve): ditto.
24766
24767         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
24768         method should be virtual, as this method is always virtual.
24769
24770         (NewDelegate.DoResolve): Update for Argument.Resolve.
24771
24772         * class.cs (ConstructorInitializer.DoResolve): ditto.
24773
24774         * attribute.cs (Attribute.Resolve): ditto.
24775
24776 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
24777
24778         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
24779
24780         * expression.cs (ParameterReference): Drop IStackStorage and implement
24781         IAssignMethod instead. 
24782
24783         (LocalVariableReference): ditto.
24784
24785         * ecore.cs (FieldExpr): Drop IStackStorage and implement
24786         IAssignMethod instead. 
24787
24788 2001-11-13  Miguel de Icaza <miguel@ximian.com>
24789
24790         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
24791         enumerations that are used in heavily used structures derive from
24792         byte in a laughable and pathetic attempt to reduce memory usage.
24793         This is the kind of pre-optimzations that you should not do at
24794         home without adult supervision.
24795
24796         * expression.cs (UnaryMutator): New class, used to handle ++ and
24797         -- separatedly from the other unary operators.  Cleans up the
24798         code, and kills the ExpressionStatement dependency in Unary.
24799
24800         (Unary): Removed `method' and `Arguments' from this class, making
24801         it smaller, and moving it all to SimpleCall, so I can reuse this
24802         code in other locations and avoid creating a lot of transient data
24803         strucutres when not required.
24804
24805         * cs-parser.jay: Adjust for new changes.
24806
24807 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
24808
24809         * enum.cs (Enum.Populate): If there is a failure during
24810         definition, return
24811
24812         * cs-parser.jay (opt_enum_base): we used to catch type errors
24813         here, but this is really incorrect.  The type error should be
24814         catched during semantic analysis.
24815
24816 2001-12-11  Ravi Pratap  <ravi@ximian.com>
24817
24818         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
24819         current_local_parameters as expected since I, in my stupidity, had forgotten
24820         to do this :-)
24821
24822         * attribute.cs (GetValidPlaces): Fix stupid bug.
24823
24824         * class.cs (Method::Emit): Perform check on applicability of attributes.
24825
24826         (Constructor::Emit): Ditto.
24827
24828         (Field::Emit): Ditto.
24829
24830         (Field.Location): Store location information.
24831
24832         (Property, Event, Indexer, Operator): Ditto.
24833
24834         * cs-parser.jay (field_declaration): Pass in location for each field.
24835
24836         * ../errors/cs0592.cs : Add.
24837
24838 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24839
24840         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
24841
24842         (InitCoreTypes): Update accordingly.
24843
24844         (RegisterAttrType, LookupAttr): Implement.
24845
24846         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
24847         info about the same.
24848
24849         (Resolve): Update to populate the above as necessary.
24850
24851         (Error592): Helper.
24852
24853         (GetValidPlaces): Helper to the above.
24854
24855         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
24856
24857         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
24858
24859 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24860
24861         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
24862
24863         * ../errors/cs0617.cs : Add.
24864
24865 2001-11-11  Ravi Pratap  <ravi@ximian.com>
24866
24867         * enum.cs (Emit): Rename to Populate to be more consistent with what
24868         we expect it to do and when exactly it is called.
24869
24870         * class.cs, rootcontext.cs : Update accordingly.
24871
24872         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
24873         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
24874
24875         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
24876
24877         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
24878         of a fieldinfo using the above, when dealing with a FieldBuilder.
24879
24880 2001-11-10  Ravi Pratap  <ravi@ximian.com>
24881
24882         * ../errors/cs0031.cs : Add.
24883
24884         * ../errors/cs1008.cs : Add.
24885
24886         * ../errrors/cs0543.cs : Add.
24887
24888         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
24889         enum type.
24890
24891         (FindMembers): Implement.
24892
24893         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
24894         enums and delegates too.
24895
24896         (enum_types): Rename to builder_to_enum.
24897
24898         (delegate_types): Rename to builder_to_delegate.
24899
24900         * delegate.cs (FindMembers): Implement.
24901
24902 2001-11-09  Ravi Pratap  <ravi@ximian.com>
24903
24904         * typemanager.cs (IsEnumType): Implement.
24905
24906         * enum.cs (Emit): Re-write parts to account for the underlying type
24907         better and perform checking etc.
24908
24909         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
24910         of the underlying type.
24911
24912         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
24913         value
24914
24915         * enum.cs (error31): Helper to report error #31.
24916
24917         * cs-parser.jay (enum_declaration): Store location of each member too.
24918
24919         * enum.cs (member_to_location): New hashtable. 
24920
24921         (AddEnumMember): Update location hashtable.
24922
24923         (Emit): Use the location of each member while reporting errors.
24924
24925 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24926
24927         * cs-parser.jay: A for_initializer if is a
24928         local_variable_declaration really ammount to have an implicit
24929         block with the variable declaration and no initializer for for.
24930
24931         * statement.cs (For.Emit): Cope with null initializers.
24932
24933         This fixes the infinite loop on for initializers.
24934
24935 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
24936
24937         * enum.cs: More cleanup.
24938
24939         * ecore.cs: Remove dead code.
24940
24941         * class.cs (Property.Emit): More simplification.
24942         (Event.Emit): ditto.
24943
24944         Reworked to have less levels of indentation.
24945
24946 2001-11-08  Ravi Pratap  <ravi@ximian.com>
24947
24948         * class.cs (Property): Emit attributes.
24949
24950         (Field): Ditto.
24951
24952         (Event): Ditto.
24953
24954         (Indexer): Ditto.
24955
24956         (Operator): Ditto.
24957
24958         * enum.cs (Emit): Ditto.
24959
24960         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
24961         Enums too.
24962
24963         * class.cs (Field, Event, etc.): Move attribute generation into the
24964         Emit method everywhere.
24965
24966         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
24967         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
24968         as we had no way of defining nested enums !
24969
24970         * rootcontext.cs : Adjust code accordingly.
24971
24972         * typemanager.cs (AddEnumType): To keep track of enum types separately.
24973
24974 2001-11-07  Ravi Pratap  <ravi@ximian.com>
24975
24976         * expression.cs (EvalConstantExpression): Move into ecore.cs
24977
24978         * enum.cs (Enum): Rename some members and make them public and readonly
24979         according to our convention.
24980
24981         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
24982         nothing else.
24983
24984         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
24985
24986         (Enum::Emit): Write a simple version for now which doesn't try to compute
24987         expressions. I shall modify this to be more robust in just a while.
24988
24989         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
24990
24991         (TypeContainer::CloseType): Create the Enum types too.
24992
24993         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
24994
24995         * expression.cs (EvalConstantExpression): Get rid of completely.
24996
24997         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
24998         user-defined values and other cases.
24999
25000         (IsValidEnumLiteral): Helper function.
25001
25002         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
25003         out there in the case we had a literal FieldExpr.
25004
25005         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
25006
25007         (Literalize): Revamp a bit to take two arguments.
25008
25009         (EnumLiteral): New class which derives from Literal to wrap enum literals.
25010
25011 2001-11-06  Ravi Pratap  <ravi@ximian.com>
25012
25013         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
25014
25015         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
25016
25017         (Resolve): Use the above to ensure we have proper initializers.
25018
25019 2001-11-05  Ravi Pratap  <ravi@ximian.com>
25020
25021         * expression.cs (Expression::EvalConstantExpression): New method to 
25022         evaluate constant expressions.
25023
25024         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
25025
25026 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
25027
25028         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
25029         in an array.
25030
25031         (Binary.ResolveOperator): Handle operator != (object a, object b)
25032         and operator == (object a, object b);
25033
25034         (Binary.DoNumericPromotions): Indicate whether the numeric
25035         promotion was possible.
25036
25037         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
25038         Implement.  
25039
25040         Made the ArrayAccess implement interface IAssignMethod instead of
25041         IStackStore as the order in which arguments are passed reflects
25042         this.
25043
25044         * assign.cs: Instead of using expr.ExprClass to select the way of
25045         assinging, probe for the IStackStore/IAssignMethod interfaces.
25046
25047         * typemanager.cs: Load InitializeArray definition.
25048
25049         * rootcontext.cs (RootContext.MakeStaticData): Used to define
25050         static data that can be used to initialize arrays. 
25051
25052 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
25053
25054         * expression.cs: Handle operator== and operator!= for booleans.
25055
25056         (Conditioal.Reduce): Implement reducer for the ?: operator.
25057
25058         (Conditional.Resolve): Implement dead code elimination.
25059
25060         (Binary.Resolve): Catch string literals and return a new
25061         concatenated string.
25062
25063         (Unary.Reduce): Implement reduction of unary expressions.
25064
25065         * ecore.cs: Split out the expression core handling here.
25066
25067         (Expression.Reduce): New method used to perform constant folding
25068         and CSE.  This is needed to support constant-expressions. 
25069
25070         * statement.cs (Statement.EmitBoolExpression): Pass true and false
25071         targets, and optimize for !x.
25072
25073 2001-11-04  Ravi Pratap  <ravi@ximian.com>
25074
25075         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
25076         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
25077         set custom atttributes.
25078
25079         * literal.cs (Literal::GetValue): New abstract method to return the actual
25080         value of the literal, cast as an object.
25081
25082         (*Literal): Implement GetValue method.
25083
25084         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
25085         expressions to the arraylist but objects of type Argument.
25086
25087         * class.cs (TypeContainer::Emit): Emit our attributes too.
25088
25089         (Method::Emit, Constructor::Emit): Ditto.
25090
25091         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
25092         to be ignoring earlier.
25093
25094 2001-11-03  Ravi Pratap  <ravi@ximian.com>
25095
25096         * attribute.cs (AttributeSection::Define): Implement to do the business
25097         of constructing a CustomAttributeBuilder.
25098
25099         (Attribute): New trivial class. Increases readability of code.  
25100
25101         * cs-parser.jay : Update accordingly.
25102
25103         (positional_argument_list, named_argument_list, named_argument): New rules
25104
25105         (attribute_arguments): Use the above so that we are more correct.
25106
25107 2001-11-02  Ravi Pratap  <ravi@ximian.com>
25108
25109         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
25110         to perform all checks for a method with a params parameter.
25111
25112         (Invocation::OverloadResolve): Update to use the above method and therefore
25113         cope correctly with params method invocations.
25114
25115         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
25116         params too.
25117
25118         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
25119         constructors in our parent too because we can't afford to miss out on 
25120         protected ones ;-)
25121
25122         * attribute.cs (AttributeSection): New name for the class Attribute
25123
25124         Other trivial changes to improve readability.
25125
25126         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
25127         use the new class names.
25128
25129 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25130
25131         * class.cs (Method::Define): Complete definition for params types too
25132
25133         (Indexer::Define): Ditto.
25134
25135         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
25136         Cope everywhere with a request for info about the array parameter.
25137
25138 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25139
25140         * tree.cs (RecordNamespace): Fix up to check for the correct key.
25141
25142         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
25143         local_variable_type to extract the string corresponding to the type.
25144
25145         (local_variable_type): Fixup the action to use the new helper method.
25146
25147         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
25148         go.
25149
25150         * expression.cs : Clean out code which uses the above.
25151
25152 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25153
25154         * typemanager.cs (RegisterMethod): Check if we already have an existing key
25155         and bale out if necessary by returning a false.
25156
25157         (RegisterProperty): Ditto.
25158
25159         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
25160         and print out appropriate error messages.
25161
25162         * interface.cs (everywhere): Ditto.
25163
25164         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
25165         location to constructor.
25166
25167         * class.cs (Property, Event, Indexer): Update accordingly.
25168
25169         * ../errors/cs111.cs : Added.
25170
25171         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
25172         of a method, as laid down by the spec.
25173
25174         (Invocation::OverloadResolve): Use the above method.
25175
25176 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25177
25178         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
25179         now take a TypeContainer and a Parameters object.
25180
25181         (ParameterData): Modify return type of ParameterModifier method to be 
25182         Parameter.Modifier and not a string.
25183
25184         (ReflectionParameters, InternalParameters): Update accordingly.
25185
25186         * expression.cs (Argument::GetParameterModifier): Same here.
25187
25188         * support.cs (InternalParameters::ParameterType): Find a better way of determining
25189         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
25190         symbol in it at all so maybe this is only for now.
25191
25192 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25193
25194         * support.cs (InternalParameters): Constructor now takes an extra argument 
25195         which is the actual Parameters class.
25196
25197         (ParameterDesc): Update to provide info on ref/out modifiers.
25198
25199         * class.cs (everywhere): Update call to InternalParameters to pass in
25200         the second argument too.
25201
25202         * support.cs (ParameterData): Add ParameterModifier, which is a method 
25203         to return the modifier info [ref/out etc]
25204
25205         (InternalParameters, ReflectionParameters): Implement the above.
25206
25207         * expression.cs (Argument::ParameterModifier): Similar function to return
25208         info about the argument's modifiers.
25209
25210         (Invocation::OverloadResolve): Update to take into account matching modifiers 
25211         too.
25212
25213         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
25214         a new SetFormalParameters object which we pass to InternalParameters.
25215
25216 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25217
25218         * expression.cs (NewArray): Merge into the ArrayCreation class.
25219
25220 2001-10-29  Ravi Pratap  <ravi@ximian.com>
25221
25222         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
25223         NewUserdefinedArray into one as there wasn't much of a use in having
25224         two separate ones.
25225
25226         * expression.cs (Argument): Change field's name to ArgType from Type.
25227
25228         (Type): New readonly property which returns the proper type, taking into 
25229         account ref/out modifiers.
25230
25231         (everywhere): Adjust code accordingly for the above.
25232
25233         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
25234         whether we are emitting for a ref or out parameter.
25235
25236         * expression.cs (Argument::Emit): Use the above field to set the state.
25237
25238         (LocalVariableReference::Emit): Update to honour the flag and emit the
25239         right stuff.
25240
25241         * parameter.cs (Attributes): Set the correct flags for ref parameters.
25242
25243         * expression.cs (Argument::FullDesc): New function to provide a full desc.
25244
25245         * support.cs (ParameterData): Add method ParameterDesc to the interface.
25246
25247         (ReflectionParameters, InternalParameters): Implement the above method.
25248
25249         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
25250         reporting errors.
25251
25252         (Invocation::FullMethodDesc): Ditto. 
25253
25254 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
25255
25256         * cs-parser.jay: Add extra production for the second form of array
25257         creation. 
25258
25259         * expression.cs (ArrayCreation): Update to reflect the above
25260         change. 
25261
25262         * Small changes to prepare for Array initialization.
25263
25264 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
25265
25266         * typemanager.cs (ImplementsInterface): interface might be null;
25267         Deal with this problem;
25268
25269         Also, we do store negative hits on the cache (null values), so use
25270         this instead of calling t.GetInterfaces on the type everytime.
25271
25272 2001-10-28  Ravi Pratap  <ravi@ximian.com>
25273
25274         * typemanager.cs (IsBuiltinType): New method to help determine the same.
25275
25276         * expression.cs (New::DoResolve): Get rid of array creation code and instead
25277         split functionality out into different classes.
25278
25279         (New::FormArrayType): Move into NewBuiltinArray.
25280
25281         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
25282         quite useless.
25283
25284         (NewBuiltinArray): New class to handle creation of built-in arrays.
25285
25286         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
25287         account creation of one-dimensional arrays.
25288
25289         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
25290
25291         (NewUserdefinedArray::DoResolve): Implement.
25292
25293         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
25294
25295         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
25296         we maintain inside the TypeManager. This is necessary to perform lookups on the
25297         module builder.
25298
25299         (LookupType): Update to perform GetType on the module builders too.     
25300
25301         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
25302
25303         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
25304
25305 2001-10-23  Ravi Pratap  <ravi@ximian.com>
25306
25307         * expression.cs (New::DoResolve): Implement guts of array creation.
25308
25309         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
25310
25311 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
25312
25313         * expression.cs: Fix bug I introduced lsat night that broke
25314         Delegates. 
25315
25316         (Expression.Resolve): Report a 246 error (can not resolve name)
25317         if we find a SimpleName in the stream.
25318
25319         (Expression.ResolveLValue): Ditto.
25320
25321         (Expression.ResolveWithSimpleName): This function is a variant of
25322         ResolveName, this one allows SimpleNames to be returned without a
25323         warning.  The only consumer of SimpleNames is MemberAccess
25324
25325 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
25326
25327         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
25328         might arrive here.  I have my doubts that this is correct.
25329
25330         * statement.cs (Lock): Implement lock statement.
25331
25332         * cs-parser.jay: Small fixes to support `lock' and `using'
25333
25334         * cs-tokenizer.cs: Remove extra space
25335
25336         * driver.cs: New flag --checked, allows to turn on integer math
25337         checking. 
25338
25339         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
25340         Threading.Monitor.Exit 
25341
25342 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
25343
25344         * expression.cs (IndexerAccess::DoResolveLValue): Set the
25345         Expression Class to be IndexerAccess.
25346
25347         Notice that Indexer::DoResolve sets the eclass to Value.
25348
25349 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
25350
25351         * class.cs (TypeContainer::Emit): Emit code for indexers.
25352
25353         * assign.cs (IAssignMethod): New interface implemented by Indexers
25354         and Properties for handling assignment.
25355
25356         (Assign::Emit): Simplify and reuse code. 
25357
25358         * expression.cs (IndexerAccess, PropertyExpr): Implement
25359         IAssignMethod, clean up old code. 
25360
25361 2001-10-22  Ravi Pratap  <ravi@ximian.com>
25362
25363         * typemanager.cs (ImplementsInterface): New method to determine if a type
25364         implements a given interface. Provides a nice cache too.
25365
25366         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
25367         method.
25368
25369         (ConvertReferenceExplicit): Ditto.
25370
25371         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
25372         various methods, with correct names etc.
25373
25374         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
25375         Operator.UnaryNegation.
25376
25377         * cs-parser.jay (operator_declarator): Be a little clever in the case where
25378         we have a unary plus or minus operator.
25379
25380         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
25381         UnaryMinus.
25382
25383         * everywhere : update accordingly.
25384
25385         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
25386         respectively.
25387
25388         * class.cs (Method::Define): For the case where we are implementing a method
25389         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
25390         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
25391
25392 2001-10-21  Ravi Pratap  <ravi@ximian.com>
25393
25394         * interface.cs (FindMembers): Implement to work around S.R.E
25395         lameness.
25396
25397         * typemanager.cs (IsInterfaceType): Implement.
25398
25399         (FindMembers): Update to handle interface types too.
25400
25401         * expression.cs (ImplicitReferenceConversion): Re-write bits which
25402         use IsAssignableFrom as that is not correct - it doesn't work.
25403
25404         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
25405         and accordingly override EmitStatement.
25406
25407         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
25408         using the correct logic :-)
25409
25410 2001-10-19  Ravi Pratap  <ravi@ximian.com>
25411
25412         * ../errors/cs-11.cs : Add to demonstrate error -11 
25413
25414 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
25415
25416         * assign.cs (Assign::Resolve): Resolve right hand side first, and
25417         then pass this as a hint to ResolveLValue.
25418
25419         * expression.cs (FieldExpr): Add Location information
25420
25421         (FieldExpr::LValueResolve): Report assignment to readonly
25422         variable. 
25423
25424         (Expression::ExprClassFromMemberInfo): Pass location information.
25425
25426         (Expression::ResolveLValue): Add new method that resolves an
25427         LValue. 
25428
25429         (Expression::DoResolveLValue): Default invocation calls
25430         DoResolve. 
25431
25432         (Indexers): New class used to keep track of indexers in a given
25433         Type. 
25434
25435         (IStackStore): Renamed from LValue, as it did not really describe
25436         what this did.  Also ResolveLValue is gone from this interface and
25437         now is part of Expression.
25438
25439         (ElementAccess): Depending on the element access type
25440
25441         * typemanager.cs: Add `indexer_name_type' as a Core type
25442         (System.Runtime.CompilerServices.IndexerNameAttribute)
25443
25444         * statement.cs (Goto): Take a location.
25445
25446 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25447
25448         * delegate.cs (Delegate::VerifyDelegate): New method to verify
25449         if two delegates are compatible.
25450
25451         (NewDelegate::DoResolve): Update to take care of the case when
25452         we instantiate a delegate from another delegate.
25453
25454         * typemanager.cs (FindMembers): Don't even try to look up members
25455         of Delegate types for now.
25456
25457 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25458
25459         * delegate.cs (NewDelegate): New class to take care of delegate
25460         instantiation.
25461
25462         * expression.cs (New): Split the delegate related code out into 
25463         the NewDelegate class.
25464
25465         * delegate.cs (DelegateInvocation): New class to handle delegate 
25466         invocation.
25467
25468         * expression.cs (Invocation): Split out delegate related code into
25469         the DelegateInvocation class.
25470
25471 2001-10-17  Ravi Pratap  <ravi@ximian.com>
25472
25473         * expression.cs (New::DoResolve): Implement delegate creation fully
25474         and according to the spec.
25475
25476         (New::DoEmit): Update to handle delegates differently.
25477
25478         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
25479         because of which we were printing out arguments in reverse order !
25480
25481         * delegate.cs (VerifyMethod): Implement to check if the given method
25482         matches the delegate.
25483
25484         (FullDelegateDesc): Implement.
25485
25486         (VerifyApplicability): Implement.
25487
25488         * expression.cs (Invocation::DoResolve): Update to accordingly handle
25489         delegate invocations too.
25490
25491         (Invocation::Emit): Ditto.
25492
25493         * ../errors/cs1593.cs : Added.
25494
25495         * ../errors/cs1594.cs : Added.
25496
25497         * delegate.cs (InstanceExpression, TargetMethod): New properties.
25498
25499 2001-10-16  Ravi Pratap  <ravi@ximian.com>
25500
25501         * typemanager.cs (intptr_type): Core type for System.IntPtr
25502
25503         (InitCoreTypes): Update for the same.
25504
25505         (iasyncresult_type, asynccallback_type): Ditto.
25506
25507         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
25508         correct.
25509
25510         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
25511         too.
25512
25513         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
25514         the builders for the 4 members of a delegate type :-)
25515
25516         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
25517         type.
25518
25519         * expression.cs (New::DoResolve): Implement guts for delegate creation.
25520
25521         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
25522
25523 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
25524
25525         * statement.cs (Break::Emit): Implement.   
25526         (Continue::Emit): Implement.
25527
25528         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25529         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25530         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25531         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
25532         end loop
25533
25534         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
25535         properties that track the label for the current loop (begin of the
25536         loop and end of the loop).
25537
25538 2001-10-15  Ravi Pratap  <ravi@ximian.com>
25539
25540         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
25541         use of emitting anything at all.
25542
25543         * class.cs, rootcontext.cs : Get rid of calls to the same.
25544
25545         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
25546
25547         (Populate): Define the constructor correctly and set the implementation
25548         attributes.
25549
25550         * typemanager.cs (delegate_types): New hashtable to hold delegates that
25551         have been defined.
25552
25553         (AddDelegateType): Implement.
25554
25555         (IsDelegateType): Implement helper method.
25556
25557         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
25558
25559         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
25560         and accordingly handle it.
25561
25562         * delegate.cs (Populate): Take TypeContainer argument.
25563         Implement bits to define the Invoke method. However, I still haven't figured out
25564         how to take care of the native int bit :-(
25565
25566         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
25567         Qualify the name of the delegate, not its return type !
25568
25569         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
25570         conversion.
25571
25572         (StandardConversionExists): Checking for array types turns out to be recursive.
25573
25574         (ConvertReferenceExplicit): Implement array conversion.
25575
25576         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
25577
25578 2001-10-12  Ravi Pratap  <ravi@ximian.com>
25579
25580         * cs-parser.jay (delegate_declaration): Store the fully qualified
25581         name as it is a type declaration.
25582
25583         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
25584         readonly.
25585
25586         (DefineDelegate): Renamed from Define. Does the same thing essentially,
25587         as TypeContainer::DefineType.
25588
25589         (Populate): Method in which all the definition of the various methods (Invoke)
25590         etc is done.
25591
25592         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
25593         see.
25594
25595         (CloseDelegate): Finally creates the delegate.
25596
25597         * class.cs (TypeContainer::DefineType): Update to define delegates.
25598         (Populate, Emit and CloseType): Do the same thing here too.
25599
25600         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
25601         delegates in all these operations.
25602
25603 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
25604
25605         * expression.cs: LocalTemporary: a new expression used to
25606         reference a temporary that has been created.
25607
25608         * assign.cs: Handle PropertyAccess back here, so that we can
25609         provide the proper semantic access to properties.
25610
25611         * expression.cs (Expression::ConvertReferenceExplicit): Implement
25612         a few more explicit conversions. 
25613
25614         * modifiers.cs: `NEW' modifier maps to HideBySig.
25615
25616         * expression.cs (PropertyExpr): Make this into an
25617         ExpressionStatement, and support the EmitStatement code path. 
25618
25619         Perform get/set error checking, clean up the interface.
25620
25621         * assign.cs: recognize PropertyExprs as targets, and if so, turn
25622         them into toplevel access objects.
25623
25624 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
25625
25626         * expression.cs: PropertyExpr::PropertyExpr: use work around the
25627         SRE.
25628
25629         * typemanager.cs: Keep track here of our PropertyBuilders again to
25630         work around lameness in SRE.
25631
25632 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
25633
25634         * expression.cs (LValue::LValueResolve): New method in the
25635         interface, used to perform a second resolution pass for LValues. 
25636
25637         (This::DoResolve): Catch the use of this in static methods.
25638
25639         (This::LValueResolve): Implement.
25640
25641         (This::Store): Remove warning, assigning to `this' in structures
25642         is 
25643
25644         (Invocation::Emit): Deal with invocation of
25645         methods on value types.  We need to pass the address to structure
25646         methods rather than the object itself.  (The equivalent code to
25647         emit "this" for structures leaves the entire structure on the
25648         stack instead of a pointer to it). 
25649
25650         (ParameterReference::DoResolve): Compute the real index for the
25651         argument based on whether the method takes or not a `this' pointer
25652         (ie, the method is static).
25653
25654         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
25655         value types returned from functions when we need to invoke a
25656         method on the sturcture.
25657
25658
25659 2001-10-11  Ravi Pratap  <ravi@ximian.com>
25660
25661         * class.cs (TypeContainer::DefineType): Method to actually do the business of
25662         defining the type in the Modulebuilder or Typebuilder. This is to take
25663         care of nested types which need to be defined on the TypeBuilder using
25664         DefineNestedMethod.
25665
25666         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
25667         methods in RootContext, only ported to be part of TypeContainer.
25668
25669         (TypeContainer::GetInterfaceOrClass): Ditto.
25670
25671         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
25672
25673         * interface.cs (Interface::DefineInterface): New method. Does exactly
25674         what RootContext.CreateInterface did earlier, only it takes care of nested types 
25675         too.
25676
25677         (Interface::GetInterfaces): Move from RootContext here and port.
25678
25679         (Interface::GetInterfaceByName): Same here.
25680
25681         * rootcontext.cs (ResolveTree): Re-write.
25682
25683         (PopulateTypes): Re-write.
25684
25685         * class.cs (TypeContainer::Populate): Populate nested types too.
25686         (TypeContainer::Emit): Emit nested members too.
25687
25688         * typemanager.cs (AddUserType): Do not make use of the FullName property,
25689         instead just use the name argument passed in as it is already fully
25690         qualified.
25691
25692         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
25693         to TypeContainer mapping to see if a type is user-defined.
25694
25695         * class.cs (TypeContainer::CloseType): Implement. 
25696
25697         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
25698         the default constructor.
25699
25700         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
25701         twice.
25702
25703         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
25704
25705         * interface.cs (CloseType): Create the type here.
25706
25707         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
25708         the hierarchy.
25709
25710         Remove all the methods which are now in TypeContainer.
25711
25712 2001-10-10  Ravi Pratap  <ravi@ximian.com>
25713
25714         * delegate.cs (Define): Re-write bits to define the delegate
25715         correctly.
25716
25717 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
25718
25719         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
25720
25721         * expression.cs (ImplicitReferenceConversion): handle null as well
25722         as a source to convert to any reference type.
25723
25724         * statement.cs (Return): Perform any implicit conversions to
25725         expected return type.  
25726
25727         Validate use of return statement.  
25728
25729         * codegen.cs (EmitContext): Pass the expected return type here.
25730
25731         * class.cs (Method, Constructor, Property): Pass expected return
25732         type to EmitContext.
25733
25734 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
25735
25736         * expression.cs: Make DoResolve take an EmitContext instead of a
25737         TypeContainer.
25738
25739         Replaced `l' and `location' for `loc', for consistency.
25740
25741         (Error, Warning): Remove unneeded Tc argument.
25742
25743         * assign.cs, literal.cs, constant.cs: Update to new calling
25744         convention. 
25745
25746         * codegen.cs: EmitContext now contains a flag indicating whether
25747         code is being generated in a static method or not.
25748
25749         * cs-parser.jay: DecomposeQI, new function that replaces the old
25750         QualifiedIdentifier.  Now we always decompose the assembled
25751         strings from qualified_identifier productions into a group of
25752         memberaccesses.
25753
25754 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
25755
25756         * rootcontext.cs: Deal with field-less struct types correctly now
25757         by passing the size option to Define Type.
25758
25759         * class.cs: Removed hack that created one static field. 
25760
25761 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
25762
25763         * statement.cs: Moved most of the code generation here. 
25764
25765 2001-10-09  Ravi Pratap  <ravi@ximian.com>
25766
25767         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
25768         seem very right.
25769
25770         (ElementAccess): Remove useless bits for now - keep checks as the spec
25771         says.
25772
25773 2001-10-08  Ravi Pratap  <ravi@ximian.com>
25774
25775         * expression.cs (ElementAccess::DoResolve): Remove my crap code
25776         and start performing checks according to the spec.
25777
25778 2001-10-07  Ravi Pratap  <ravi@ximian.com>
25779
25780         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
25781         rank_specifiers instead.
25782
25783         (rank_specifiers): Change the order in which the rank specifiers are stored
25784
25785         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
25786
25787         * expression.cs (ElementAccess): Implement the LValue interface too.
25788
25789 2001-10-06  Ravi Pratap  <ravi@ximian.com>
25790
25791         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
25792         except that user defined conversions are not included.
25793
25794         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
25795         perform the conversion of the return type, if necessary.
25796
25797         (New::DoResolve): Check whether we are creating an array or an object
25798         and accordingly do the needful.
25799
25800         (New::Emit): Same here.
25801
25802         (New::DoResolve): Implement guts of array creation.
25803
25804         (New::FormLookupType): Helper function.
25805
25806 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
25807
25808         * codegen.cs: Removed most of the code generation here, and move the
25809         corresponding code generation bits to the statement classes. 
25810
25811         Added support for try/catch/finalize and throw.
25812
25813         * cs-parser.jay: Added support for try/catch/finalize.
25814
25815         * class.cs: Catch static methods having the flags override,
25816         virtual or abstract.
25817
25818         * expression.cs (UserCast): This user cast was not really doing
25819         what it was supposed to do.  Which is to be born in fully resolved
25820         state.  Parts of the resolution were being performed at Emit time! 
25821
25822         Fixed this code.
25823
25824 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25825
25826         * expression.cs: Implicity convert the result from UserCast.
25827
25828 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25829
25830         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
25831         prevented it from working correctly. 
25832
25833         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
25834         merely ConvertImplicit.
25835
25836 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25837
25838         * typemanager.cs: Make the LookupTypeContainer function static,
25839         and not per-instance.  
25840
25841         * class.cs: Make static FindMembers (the one that takes a Type
25842         argument). 
25843
25844         * codegen.cs: Add EmitForeach here.
25845
25846         * cs-parser.jay: Make foreach a toplevel object instead of the
25847         inline expansion, as we need to perform semantic analysis on it. 
25848
25849 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25850
25851         * expression.cs (Expression::ImplicitUserConversion): Rename to
25852         UserDefinedConversion.
25853
25854         (Expression::UserDefinedConversion): Take an extra argument specifying 
25855         whether we look for explicit user conversions too.
25856
25857         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
25858
25859         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
25860
25861         (ExplicitUserConversion): Make it a call to UserDefinedConversion
25862         with the appropriate arguments.
25863
25864         * cs-parser.jay (cast_expression): Record location too.
25865
25866         * expression.cs (Cast): Record location info.
25867
25868         (Expression::ConvertExplicit): Take location argument.
25869
25870         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
25871         to determine if we are doing explicit conversions.
25872
25873         (UserCast::Emit): Update accordingly.
25874
25875         (Expression::ConvertExplicit): Report an error if everything fails.
25876
25877         * ../errors/cs0030.cs : Add.
25878
25879 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
25880
25881         * modifiers.cs: If the ABSTRACT keyword is present, also set the
25882         virtual and newslot bits. 
25883
25884         * class.cs (TypeContainer::RegisterRequiredImplementations):
25885         Record methods we need.
25886
25887         (TypeContainer::MakeKey): Helper function to make keys for
25888         MethodBases, since the Methodbase key is useless.
25889
25890         (TypeContainer::Populate): Call RegisterRequiredImplementations
25891         before defining the methods.   
25892
25893         Create a mapping for method_builders_to_methods ahead of time
25894         instead of inside a tight loop.
25895
25896         (::RequireMethods):  Accept an object as the data to set into the
25897         hashtable so we can report interface vs abstract method mismatch.
25898
25899 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25900
25901         * report.cs: Make all of it static.
25902
25903         * rootcontext.cs: Drop object_type and value_type computations, as
25904         we have those in the TypeManager anyways.
25905
25906         Drop report instance variable too, now it is a global.
25907
25908         * driver.cs: Use try/catch on command line handling.
25909
25910         Add --probe option to debug the error reporting system with a test
25911         suite. 
25912
25913         * report.cs: Add support for exiting program when a probe
25914         condition is reached.
25915
25916 2001-10-03  Ravi Pratap  <ravi@ximian.com>
25917
25918         * expression.cs (Binary::DoNumericPromotions): Fix the case when
25919         we do a forcible conversion regardless of type, to check if 
25920         ForceConversion returns a null.
25921
25922         (Binary::error19): Use location to report error.
25923
25924         (Unary::error23): Use location here too.
25925
25926         * ../errors/cs0019.cs : Check in.
25927
25928         * ../errors/cs0023.cs : Check in.
25929
25930         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
25931         case of a non-null MethodInfo object with a length of 0 !
25932
25933         (Binary::ResolveOperator): Flag error if overload resolution fails to find
25934         an applicable member - according to the spec :-)
25935         Also fix logic to find members in base types.
25936
25937         (Unary::ResolveOperator): Same here.
25938
25939         (Unary::report23): Change name to error23 and make first argument a TypeContainer
25940         as I was getting thoroughly confused between this and error19 :-)
25941
25942         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
25943         (::FindMostEncompassedType): Implement.
25944         (::FindMostEncompassingType): Implement.
25945         (::StandardConversionExists): Implement.
25946
25947         (UserImplicitCast): Re-vamp. We now need info about most specific
25948         source and target types so that we can do the necessary conversions.
25949
25950         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
25951         mathematical union with no duplicates.
25952
25953 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25954
25955         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
25956         in order from base classes to child classes, so that we can in
25957         child classes look up in our parent for method names and
25958         attributes (required for handling abstract, virtual, new, override
25959         constructs: we need to instrospect our base class, and if we dont
25960         populate the classes in order, the introspection might be
25961         incorrect.  For example, a method could query its parent before
25962         the parent has any methods and would determine that the parent has
25963         no abstract methods (while it could have had them)).
25964
25965         (RootContext::CreateType): Record the order in which we define the
25966         classes.
25967
25968 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
25969
25970         * class.cs (TypeContainer::Populate): Also method definitions can
25971         fail now, keep track of this.
25972
25973         (TypeContainer::FindMembers): Implement support for
25974         DeclaredOnly/noDeclaredOnly flag.
25975
25976         (Constructor::Emit) Return the ConstructorBuilder.
25977
25978         (Method::Emit) Return the MethodBuilder. 
25979         Check for abstract or virtual methods to be public.
25980
25981         * rootcontext.cs (RootContext::CreateType): Register all the
25982         abstract methods required for the class to be complete and the
25983         interface methods that must be implemented. 
25984
25985         * cs-parser.jay: Report error 501 (method requires body if it is
25986         not marked abstract or extern).
25987
25988         * expression.cs (TypeOf::Emit): Implement.
25989
25990         * typemanager.cs: runtime_handle_type, new global type.
25991
25992         * class.cs (Property::Emit): Generate code for properties.
25993
25994 2001-10-02  Ravi Pratap  <ravi@ximian.com>
25995
25996         * expression.cs (Unary::ResolveOperator): Find operators on base type
25997         too - we now conform exactly to the spec.
25998
25999         (Binary::ResolveOperator): Same here.
26000
26001         * class.cs (Operator::Define): Fix minor quirk in the tests.
26002
26003         * ../errors/cs0215.cs : Added.
26004
26005         * ../errors/cs0556.cs : Added.
26006
26007         * ../errors/cs0555.cs : Added.
26008
26009 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26010
26011         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
26012         single integer which is really efficient
26013
26014 2001-10-01  Ravi Pratap  <ravi@ximian.com>
26015
26016         *  expression.cs (Expression::ImplicitUserConversion): Use location
26017         even in the case when we are examining True operators.
26018  
26019         * class.cs (Operator::Define): Perform extensive checks to conform
26020         with the rules for operator overloading in the spec.
26021
26022         * expression.cs (Expression::ImplicitReferenceConversion): Implement
26023         some of the other conversions mentioned in the spec.
26024
26025         * typemanager.cs (array_type): New static member for the System.Array built-in
26026         type.
26027
26028         (cloneable_interface): For System.ICloneable interface.
26029
26030         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
26031         we start resolving the tree and populating types.
26032
26033         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
26034  
26035 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26036
26037         * expression.cs (Expression::ExprClassFromMemberInfo,
26038         Expression::Literalize): Create literal expressions from
26039         FieldInfos which are literals.
26040
26041         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
26042         type casts, because they were wrong.  The test suite in tests
26043         caught these ones.
26044
26045         (ImplicitNumericConversion): ushort to ulong requires a widening
26046         cast. 
26047
26048         Int32 constant to long requires widening cast as well.
26049
26050         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
26051         for integers because the type on the stack is not i4.
26052
26053 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
26054
26055         * expression.cs (report118): require location argument. 
26056
26057         * parameter.cs: Do not dereference potential null value.
26058
26059         * class.cs: Catch methods that lack the `new' keyword when
26060         overriding a name.  Report warnings when `new' is used without
26061         anything being there to override.
26062
26063         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
26064
26065         * class.cs: Only add constructor to hashtable if it is non-null
26066         (as now constructors can fail on define).
26067
26068         (TypeManager, Class, Struct): Take location arguments.
26069
26070         Catch field instance initialization in structs as errors.
26071
26072         accepting_filter: a new filter for FindMembers that is static so
26073         that we dont create an instance per invocation.
26074
26075         (Constructor::Define): Catch errors where a struct constructor is
26076         parameterless 
26077
26078         * cs-parser.jay: Pass location information for various new
26079         constructs. 
26080
26081         * delegate.cs (Delegate): take a location argument.
26082
26083         * driver.cs: Do not call EmitCode if there were problesm in the
26084         Definition of the types, as many Builders wont be there. 
26085
26086         * decl.cs (Decl::Decl): Require a location argument.
26087
26088         * cs-tokenizer.cs: Handle properly hex constants that can not fit
26089         into integers, and find the most appropiate integer for it.
26090
26091         * literal.cs: Implement ULongLiteral.
26092
26093         * rootcontext.cs: Provide better information about the location of
26094         failure when CreateType fails.
26095
26096 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
26097
26098         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
26099         as well.
26100
26101         * expression.cs (Binary::CheckShiftArguments): Add missing type
26102         computation.
26103         (Binary::ResolveOperator): Add type to the logical and and logical
26104         or, Bitwise And/Or and Exclusive Or code paths, it was missing
26105         before.
26106
26107         (Binary::DoNumericPromotions): In the case where either argument
26108         is ulong (and most signed types combined with ulong cause an
26109         error) perform implicit integer constant conversions as well.
26110
26111 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26112
26113         * expression.cs (UserImplicitCast): Method should always be
26114         non-null. 
26115         (Invocation::BetterConversion): Simplified test for IntLiteral.
26116
26117         (Expression::ImplicitNumericConversion): Split this routine out.
26118         Put the code that performs implicit constant integer conversions
26119         here. 
26120
26121         (Expression::Resolve): Become a wrapper around DoResolve so we can
26122         check eclass and type being set after resolve.
26123
26124         (Invocation::Badness): Remove this dead function
26125
26126         (Binary::ResolveOperator): Do not compute the expensive argumnets
26127         unless we have a union for it.
26128
26129         (Probe::Emit): Is needs to do an isinst and then
26130         compare against null.
26131
26132         (::CanConvert): Added Location argument.  If the Location argument
26133         is null (Location.Null), then we do not report errors.  This is
26134         used by the `probe' mechanism of the Explicit conversion.  We do
26135         not want to generate an error for something that the user
26136         explicitly requested to be casted.  But the pipeline for an
26137         explicit cast first tests for potential implicit casts.
26138
26139         So for now, if the Location is null, it means `Probe only' to
26140         avoid adding another argument.   Might have to revise this
26141         strategy later.
26142
26143         (ClassCast): New class used to type cast objects into arbitrary
26144         classes (used in Explicit Reference Conversions).
26145
26146         Implement `as' as well.
26147
26148         Reverted all the patches from Ravi below: they were broken:
26149
26150                 * The use of `level' as a mechanism to stop recursive
26151                   invocations is wrong.  That was there just to catch the
26152                   bug with a strack trace but not as a way of addressing
26153                   the problem.
26154
26155                   To fix the problem we have to *understand* what is going
26156                   on and the interactions and come up with a plan, not
26157                   just get things going.
26158
26159                 * The use of the type conversion cache that I proposed
26160                   last night had an open topic: How does this work across
26161                   protection domains.  A user defined conversion might not
26162                   be public in the location where we are applying the
26163                   conversion, a different conversion might be selected
26164                   (ie, private A->B (better) but public B->A (worse),
26165                   inside A, A->B applies, but outside it, B->A will
26166                   apply).
26167
26168                 * On top of that (ie, even if the above is solved),
26169                   conversions in a cache need to be abstract.  Ie, `To
26170                   convert from an Int to a Short use an OpcodeCast', not
26171                   `To convert from an Int to a Short use the OpcodeCast on
26172                   the variable 5' (which is what this patch was doing).
26173
26174 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26175
26176         * expression.cs (Invocation::ConversionExists): Re-write to use
26177         the conversion cache
26178
26179         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
26180         cache all conversions done, not just user-defined ones.
26181
26182         (Invocation::BetterConversion): The real culprit. Use ConversionExists
26183         to determine if a conversion exists instead of acutually trying to 
26184         perform the conversion. It's faster too.
26185
26186         (Expression::ConvertExplicit): Modify to use ConversionExists to check
26187         and only then attempt the implicit conversion.
26188
26189 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26190
26191         * expression.cs (ConvertImplicit): Use a cache for conversions
26192         already found. Check level of recursion and bail out if necessary.
26193
26194 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26195
26196         * typemanager.cs (string_concat_string_string, string_concat_object_object):
26197         Export standard methods that we expect for string operations.
26198
26199         * statement.cs (Block::UsageWarning): Track usage of variables and
26200         report the errors for not used variables.
26201
26202         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
26203         operator. 
26204
26205 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26206
26207         * codegen.cs: remove unnneded code 
26208
26209         * expression.cs: Removed BuiltinTypeAccess class
26210
26211         Fix the order in which implicit conversions are
26212         done.  
26213
26214         The previous fixed dropped support for boxed conversions (adding a
26215         test to the test suite now)
26216
26217         (UserImplicitCast::CanConvert): Remove test for source being null,
26218         that code is broken.  We should not feed a null to begin with, if
26219         we do, then we should track the bug where the problem originates
26220         and not try to cover it up here.
26221
26222         Return a resolved expression of type UserImplicitCast on success
26223         rather than true/false.  Ravi: this is what I was talking about,
26224         the pattern is to use a static method as a "constructor" for
26225         objects. 
26226
26227         Also, do not create arguments until the very last minute,
26228         otherwise we always create the arguments even for lookups that
26229         will never be performed. 
26230
26231         (UserImplicitCast::Resolve): Eliminate, objects of type
26232         UserImplicitCast are born in a fully resolved state. 
26233
26234         * typemanager.cs (InitCoreTypes): Init also value_type
26235         (System.ValueType). 
26236
26237         * expression.cs (Cast::Resolve): First resolve the child expression.
26238
26239         (LValue): Add new method AddressOf to be used by
26240         the `&' operator.  
26241
26242         Change the argument of Store to take an EmitContext instead of an
26243         ILGenerator, because things like FieldExpr need to be able to call
26244         their children expression to generate the instance code. 
26245
26246         (Expression::Error, Expression::Warning): Sugar functions for
26247         reporting errors.
26248
26249         (Expression::MemberLookup): Accept a TypeContainer instead of a
26250         Report as the first argument.
26251
26252         (Expression::ResolvePrimary): Killed.  I still want to improve
26253         this as currently the code is just not right.
26254
26255         (Expression::ResolveMemberAccess): Simplify, but it is still
26256         wrong. 
26257
26258         (Unary::Resolve): Catch errors in AddressOf operators.
26259
26260         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
26261         index to a byte for the short-version, or the compiler will choose
26262         the wrong Emit call, which generates the wrong data.
26263
26264         (ParameterReference::Emit, ::Store): same.
26265
26266         (FieldExpr::AddressOf): Implement.
26267
26268         * typemanager.cs: TypeManager: made public variable instead of
26269         property.
26270
26271         * driver.cs: document --fatal.
26272
26273         * report.cs (ErrorMessage, WarningMessage): new names for the old
26274         Error and Warning classes.
26275
26276         * cs-parser.jay (member_access): Turn built-in access to types
26277         into a normal simplename
26278
26279 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26280
26281         * expression.cs (Invocation::BetterConversion): Fix to cope
26282         with q being null, since this was introducing a bug.
26283
26284         * expression.cs (ConvertImplicit): Do built-in conversions first.
26285
26286 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26287
26288         * expression.cs (UserImplicitCast::Resolve): Fix bug.
26289
26290 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26291
26292         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
26293         I had introduced long ago (what's new ?).
26294
26295         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
26296         the work of all the checking. 
26297         (ConvertImplicit): Call CanConvert and only then create object if necessary.
26298         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
26299
26300         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
26301         that is the right way. 
26302
26303         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
26304         overloading resolution. Use everywhere instead of cutting and pasting code.
26305
26306         (Binary::ResolveOperator): Use MakeUnionSet.
26307
26308         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
26309         we have to convert to bool types. Not complete yet.
26310
26311 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26312
26313         * typemanager.cs (TypeManager::CSharpName): support ushort.
26314
26315         * expression.cs (Expression::TryImplicitIntConversion): Attempts
26316         to provide an expression that performsn an implicit constant int
26317         conversion (section 6.1.6).
26318         (Expression::ConvertImplicitRequired): Reworked to include
26319         implicit constant expression conversions.
26320
26321         (Expression::ConvertNumericExplicit): Finished.
26322
26323         (Invocation::Emit): If InstanceExpression is null, then it means
26324         that we perform a call on this.
26325
26326 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26327
26328         * expression.cs (Unary::Emit): Remove some dead code.
26329         (Probe): Implement Resolve and Emit for `is'.
26330         (Expression::ConvertImplicitRequired): Attempt to do constant
26331         expression conversions here.  Maybe should be moved to
26332         ConvertImplicit, but I am not sure.
26333         (Expression::ImplicitLongConstantConversionPossible,
26334         Expression::ImplicitIntConstantConversionPossible): New functions
26335         that tell whether is it possible to apply an implicit constant
26336         expression conversion.
26337
26338         (ConvertNumericExplicit): Started work on explicit numeric
26339         conversions.
26340
26341         * cs-parser.jay: Update operator constants.
26342
26343         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
26344         (Parameters::GetSignature): Hook up VerifyArgs here.
26345         (Parameters::VerifyArgs): Verifies that no two arguments have the
26346         same name. 
26347
26348         * class.cs (Operator): Update the operator names to reflect the
26349         ones that the spec expects (as we are just stringizing the
26350         operator names).
26351
26352         * expression.cs (Unary::ResolveOperator): Fix bug: Use
26353         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
26354         previous usage did only work for our methods.
26355         (Expression::ConvertImplicit): Handle decimal implicit numeric
26356         conversions as well.
26357         (Expression::InternalTypeConstructor): Used to invoke constructors
26358         on internal types for default promotions.
26359
26360         (Unary::Emit): Implement special handling for the pre/post
26361         increment/decrement for overloaded operators, as they need to have
26362         the same semantics as the other operators.
26363
26364         (Binary::ResolveOperator): ditto.
26365         (Invocation::ConversionExists): ditto.
26366         (UserImplicitCast::Resolve): ditto.
26367
26368 2001-09-26  Ravi Pratap  <ravi@ximian.com>
26369
26370         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
26371         operator, return after emitting body. Regression tests pass again !
26372
26373         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
26374         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
26375         (Invocation::OverloadResolve): Ditto.
26376         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
26377
26378         * everywhere : update calls to the above methods accordingly.
26379
26380 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26381
26382         * assign.cs (Assign): Make it inherit from ExpressionStatement.
26383
26384         * expression.cs (ExpressionStatement): New base class used for
26385         expressions that can appear in statements, so that we can provide
26386         an alternate path to generate expression that do not leave a value
26387         on the stack.
26388
26389         (Expression::Emit, and all the derivatives): We no longer return
26390         whether a value is left on the stack or not.  Every expression
26391         after being emitted leaves a single value on the stack.
26392
26393         * codegen.cs (EmitContext::EmitStatementExpression): Use the
26394         facilties of ExpressionStatement if possible.
26395
26396         * cs-parser.jay: Update statement_expression.
26397
26398 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
26399
26400         * driver.cs: Change the wording of message
26401
26402 2001-09-25  Ravi Pratap  <ravi@ximian.com>
26403
26404         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
26405         the type of the expression to the return type of the method if
26406         we have an overloaded operator match ! The regression tests pass again !
26407         (Unary::ResolveOperator): Ditto.
26408
26409         * expression.cs (Invocation::ConversionExists): Correct the member lookup
26410         to find "op_Implicit", not "implicit" ;-)
26411         (UserImplicitCast): New class to take care of user-defined implicit conversions.
26412         (ConvertImplicit, ForceConversion): Take TypeContainer argument
26413
26414         * everywhere : Correct calls to the above accordingly.
26415
26416         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
26417         (ConvertImplicit): Do user-defined conversion if it exists.
26418
26419 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
26420
26421         * assign.cs: track location.
26422         (Resolve): Use implicit conversions on assignment.
26423
26424         * literal.cs: Oops.  Not good, Emit of short access values should
26425         pass (Bytes) or the wrong argument will be selected.
26426
26427         * expression.cs (Unary::Emit): Emit code for -expr.
26428
26429         (Unary::ResolveOperator): Handle `Substract' for non-constants
26430         (substract from zero from the non-constants).
26431         Deal with Doubles as well. 
26432
26433         (Expression::ConvertImplicitRequired): New routine that reports an
26434         error if no implicit conversion exists. 
26435
26436         (Invocation::OverloadResolve): Store the converted implicit
26437         expressions if we make them
26438
26439 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26440
26441         * class.cs (ConstructorInitializer): Take a Location argument.
26442         (ConstructorBaseInitializer): Same here.
26443         (ConstructorThisInitializer): Same here.
26444
26445         * cs-parser.jay : Update all calls accordingly.
26446
26447         * expression.cs (Unary, Binary, New): Take location argument.
26448         Update accordingly everywhere.
26449
26450         * cs-parser.jay : Update all calls to the above to take a location
26451         argument.
26452
26453         * class.cs : Ditto.
26454
26455 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26456
26457         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
26458         (Invocation::BetterConversion): Same here
26459         (Invocation::ConversionExists): Ditto.
26460
26461         (Invocation::ConversionExists): Implement.
26462
26463 2001-09-22  Ravi Pratap  <ravi@ximian.com>
26464
26465         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
26466         Also take an additional TypeContainer argument.
26467
26468         * All over : Pass in TypeContainer as argument to OverloadResolve.
26469
26470         * typemanager.cs (CSharpName): Update to check for the string type and return
26471         that too.
26472
26473         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
26474         a given method.
26475
26476 2001-09-21  Ravi Pratap  <ravi@ximian.com>
26477
26478         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
26479         (Invocation::BetterFunction): Implement.
26480         (Invocation::BetterConversion): Implement.
26481         (Invocation::ConversionExists): Skeleton, no implementation yet.
26482
26483         Okay, things work fine !
26484
26485 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
26486
26487         * typemanager.cs: declare and load enum_type, delegate_type and
26488         void_type. 
26489
26490         * expression.cs (Expression::Emit): Now emit returns a value that
26491         tells whether a value is left on the stack or not.  This strategy
26492         might be reveted tomorrow with a mechanism that would address
26493         multiple assignments.
26494         (Expression::report118): Utility routine to report mismatches on
26495         the ExprClass.
26496
26497         (Unary::Report23): Report impossible type/operator combination
26498         utility function.
26499
26500         (Unary::IsIncrementableNumber): Whether the type can be
26501         incremented or decremented with add.
26502         (Unary::ResolveOperator): Also allow enumerations to be bitwise
26503         complemented. 
26504         (Unary::ResolveOperator): Implement ++, !, ~,
26505
26506         (Invocation::Emit): Deal with new Emit convetion.
26507
26508         * All Expression derivatives: Updated their Emit method to return
26509         whether they leave values on the stack or not.
26510
26511         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
26512         stack for expressions that are statements. 
26513
26514 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26515
26516         * expression.cs (LValue): New interface.  Must be implemented by
26517         LValue objects.
26518         (LocalVariableReference, ParameterReference, FieldExpr): Implement
26519         LValue interface.
26520
26521         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
26522         interface for generating code, simplifies the code.
26523
26524 2001-09-20  Ravi Pratap  <ravi@ximian.com>
26525
26526         * expression.cs (everywhere): Comment out return statements in ::Resolve
26527         methods to avoid the warnings.
26528
26529 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26530
26531         * driver.cs (parse): Report error 2001 if we can not open the
26532         source file.
26533
26534         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
26535         not resolve it.
26536
26537         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
26538         object. 
26539
26540         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
26541         otherwise nested blocks end up with the same index.
26542
26543         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
26544
26545         * expression.cs:  Instead of having FIXMEs in the Resolve
26546         functions, throw exceptions so it is obvious that we are facing a
26547         bug. 
26548
26549         * cs-parser.jay (invocation_expression): Pass Location information.
26550
26551         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
26552         Use a basename for those routines because .NET does not like paths
26553         on them. 
26554
26555         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
26556         already defined.
26557
26558 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
26559
26560         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
26561         are loading the correct data types (throws an exception if not).
26562         (TypeManager::InitCoreTypes): Use CoreLookupType
26563
26564         * expression.cs (Unary::ResolveOperator): return the child
26565         expression for expressions which are just +expr.
26566         (Unary::ResolveOperator): Return negative literals for -LITERAL
26567         expressions (otherwise they are Unary {Literal}).
26568         (Invocation::Badness): Take into account `Implicit constant
26569         expression conversions'.
26570
26571         * literal.cs (LongLiteral): Implement long literal class.
26572         (IntLiteral): export the `Value' of the intliteral. 
26573
26574 2001-09-19  Ravi Pratap  <ravi@ximian.com>
26575
26576         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
26577
26578         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
26579         instead of 'Operator'
26580
26581         * expression.cs (Binary::ResolveOperator): Update accordingly.
26582         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
26583         and 'Minus'
26584
26585         * cs-parser.jay (unary_expression): Update to use the new names.
26586
26587         * gen-treedump.cs (GetUnary): Same here.
26588
26589         * expression.cs (Unary::Resolve): Implement.
26590         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
26591         operators are found instead of making noise ;-)
26592         (Unary::ResolveOperator): New method to do precisely the same thing which
26593         Binary::ResolveOperator does for Binary expressions.
26594         (Unary.method, .Arguments): Add.
26595         (Unary::OperName): Implement.   
26596         (Unary::ForceConversion): Copy and Paste !
26597
26598         * class.cs (Operator::Define): Fix a small bug for the case when we have 
26599         a unary operator.
26600
26601         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
26602         for the inbuilt operators. Only overloading works for now ;-)
26603
26604 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
26605
26606         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
26607         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
26608
26609         * expression.cs (This::Emit): Implement. 
26610         (This::Resolve): Implement.
26611         (TypeOf:Resolve): Implement.
26612         (Expression::ResolveSimpleName): Add an implicit this to instance
26613         field references. 
26614         (MemberAccess::Resolve): Deal with Parameters and Fields. 
26615         Bind instance variable to Field expressions.
26616         (FieldExpr::Instance): New field used to track the expression that
26617         represents the object instance.
26618         (FieldExpr::Resolve): Track potential errors from MemberLookup not
26619         binding 
26620         (FieldExpr::Emit): Implement.
26621
26622         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
26623         the last instruction contains a return opcode to avoid generating
26624         the last `ret' instruction (this generates correct code, and it is
26625         nice to pass the peverify output).
26626
26627         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
26628         initializer for static and instance variables.
26629         (Constructor::Emit): Allow initializer to be null in the case of
26630         static constructors.  Only emit initializer for instance
26631         constructors. 
26632
26633         (TypeContainer::FindMembers): Return a null array if there are no
26634         matches.
26635
26636         Also fix the code for the MemberTypes.Method branch, as it was not
26637         scanning that for operators (or tried to access null variables before).
26638
26639         * assign.cs (Assign::Emit): Handle instance and static fields. 
26640
26641         * TODO: Updated.
26642
26643         * driver.cs: Stop compilation if there are parse errors.
26644
26645         * cs-parser.jay (constructor_declaration): Provide default base
26646         initializer for non-static constructors.
26647         (constructor_declarator): Do not provide a default base
26648         initializers if none was specified.
26649         Catch the fact that constructors should not have parameters.
26650
26651         * class.cs: Do not emit parent class initializers for static
26652         constructors, that should be flagged as an error.
26653
26654 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26655
26656         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
26657         Move back code into TypeContainer::Populate.
26658
26659 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26660
26661         * class.cs (TypeContainer::AddConstructor): Fix the check to
26662         compare against Name, not Basename. 
26663         (Operator::OpType): Change Plus and Minus to Add and Subtract.
26664
26665         * cs-parser.jay : Update accordingly.
26666
26667         * class.cs (TypeContainer::FindMembers): For the case where we are searching
26668         for methods, don't forget to look into the operators too.
26669         (RegisterMethodBuilder): Helper method to take care of this for
26670         methods, constructors and operators.
26671         (Operator::Define): Completely revamp.
26672         (Operator.OperatorMethod, MethodName): New fields.
26673         (TypeContainer::Populate): Move the registering of builders into
26674         RegisterMethodBuilder.
26675         (Operator::Emit): Re-write.
26676
26677         * expression.cs (Binary::Emit): Comment out code path to emit method
26678         invocation stuff for the case when we have a user defined operator. I am
26679         just not able to get it right !
26680
26681 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26682
26683         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
26684         argument. 
26685
26686         (Expression::MemberLookup): Provide a version that allows to
26687         specify the MemberTypes and BindingFlags. 
26688
26689         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
26690         so it was not fetching variable information from outer blocks.
26691
26692         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
26693         Beforefieldinit as it was buggy.
26694
26695         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
26696         that Ravi put here.  
26697
26698         * class.cs (Constructor::Emit): Only emit if block is not null.
26699         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
26700         deal with this by semantically definining it as if the user had
26701         done it.
26702
26703         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
26704         constructors as we now "emit" them at a higher level.
26705
26706         (TypeContainer::DefineDefaultConstructor): Used to define the
26707         default constructors if none was provided.
26708
26709         (ConstructorInitializer): Add methods Resolve and Emit. 
26710
26711         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
26712
26713 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26714
26715         * class.cs (TypeContainer::EmitDefaultConstructor): Register
26716         the default constructor builder with our hashtable for methodbuilders
26717         to methodcores.
26718
26719         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
26720         and argument_count is 0 in which case we have a match.
26721         (Binary::ResolveOperator): More null checking and miscellaneous coding
26722         style cleanup.
26723
26724 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26725
26726         * rootcontext.cs (IsNameSpace): Compare against null.
26727
26728         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
26729
26730         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
26731         and Unary::Operator.
26732
26733         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
26734         accordingly.
26735
26736         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
26737         we have overloaded operators.
26738         (Binary::ResolveOperator): Implement the part which does the operator overload
26739         resolution.
26740
26741         * class.cs (Operator::Emit): Implement.
26742         (TypeContainer::Emit): Emit the operators we have too.
26743
26744         * expression.cs (Binary::Emit): Update to emit the appropriate code for
26745         the case when we have a user-defined operator.
26746
26747 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26748
26749         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
26750
26751 2001-09-16  Ravi Pratap  <ravi@ximian.com>
26752
26753         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
26754         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
26755         (Constructor::Emit): Implement.
26756         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
26757         if we have no work to do. 
26758         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
26759         Emit method.
26760
26761         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
26762         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
26763
26764         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
26765         of parent.parent.
26766
26767 2001-09-15  Ravi Pratap  <ravi@ximian.com>
26768
26769         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
26770         in the source.
26771         (Tree::RecordNamespace): Method to do what the name says ;-)
26772         (Tree::Namespaces): Property to get at the namespaces hashtable.
26773
26774         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
26775         keep track.
26776
26777         * rootcontext.cs (IsNamespace): Fixed it :-)
26778
26779 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
26780
26781         * class.cs (TypeContainer::FindMembers): Add support for
26782         constructors. 
26783         (MethodCore): New class that encapsulates both the shared aspects
26784         of a Constructor and a Method.  
26785         (Method, Constructor): Factored pieces into MethodCore.
26786
26787         * driver.cs: Added --fatal which makes errors throw exceptions.
26788         Load System assembly as well as part of the standard library.
26789
26790         * report.cs: Allow throwing exceptions on errors for debugging.
26791
26792         * modifiers.cs: Do not use `parent', instead use the real type
26793         container to evaluate permission settings.
26794
26795         * class.cs: Put Ravi's patch back in.  He is right, and we will
26796         have to cope with the
26797
26798 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26799
26800         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
26801         FamORAssem, not FamANDAssem.
26802
26803 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
26804
26805         * driver.cs: Added --parse option that only parses its input files
26806         and terminates.
26807
26808         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
26809         incorrect.  IsTopLevel is not used to tell whether an object is
26810         root_types or not (that can be achieved by testing this ==
26811         root_types).  But to see if this is a top-level *class* (not
26812         necessarly our "toplevel" container). 
26813
26814 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26815
26816         * enum.cs (Enum::Define): Modify to call the Lookup method on the
26817         parent instead of a direct call to GetType.
26818
26819 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26820
26821         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
26822         Modifiers.TypeAttr. This should just be a call to that method.
26823
26824         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
26825         object so that we can determine if we are top-level or not.
26826
26827         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
26828         TypeContainer too.
26829
26830         * enum.cs (Enum::Define): Ditto.
26831
26832         * modifiers.cs (FieldAttr): Re-write.
26833
26834         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
26835         (TypeContainer::HaveStaticConstructor): New property to provide access
26836         to precisely that info.
26837
26838         * modifiers.cs (MethodAttr): Re-write.
26839         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
26840
26841         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
26842         of top-level types as claimed.
26843
26844 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26845
26846         * expression.cs (MemberLookup): Fruitless attempt to lookup
26847         constructors.  Maybe I need to emit default constructors?  That
26848         might be it (currently .NET emits this for me automatically).
26849         (Invocation::OverloadResolve): Cope with Arguments == null.
26850         (Invocation::EmitArguments): new function, shared by the new
26851         constructor and us.
26852         (Invocation::Emit): Handle static and instance methods.  Emit
26853         proper call instruction for virtual or non-virtual invocations.
26854         (New::Emit): Implement.
26855         (New::Resolve): Implement.
26856         (MemberAccess:Resolve): Implement.
26857         (MethodGroupExpr::InstanceExpression): used conforming to the spec
26858         to track instances.
26859         (FieldExpr::Resolve): Set type.
26860
26861         * support.cs: Handle empty arguments.
26862                 
26863         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
26864         SimpleLookup): Auxiliary routines to help parse a qualifier
26865         identifier.  
26866
26867         Update qualifier_identifier rule.
26868
26869         * codegen.cs: Removed debugging messages.
26870
26871         * class.cs: Make this a global thing, this acts just as a "key" to
26872         objects that we might have around.
26873
26874         (Populate): Only initialize method_builders_to_methods once.
26875
26876         * expression.cs (PropertyExpr): Initialize type from the
26877         PropertyType. 
26878
26879         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
26880         Resolve pattern.  Attempt to implicitly convert value to boolean.
26881         Emit code.
26882
26883         * expression.cs: Set the type for the int32/int32 argument case.
26884         (Binary::ResolveOperator): Set the return type to boolean for
26885         comparission operators
26886
26887         * typemanager.cs: Remove debugging print code.
26888
26889         (Invocation::Resolve): resolve type.
26890
26891         * class.cs: Allocate a MemberInfo of the correct size, as the code
26892         elsewhere depends on the test to reflect the correct contents.
26893
26894         (Method::) Keep track of parameters, due to System.Reflection holes
26895
26896         (TypeContainer::Populate): Keep track of MethodBuilders to Method
26897         mapping here.
26898
26899         (TypeContainer::FindMembers): Use ArrayList and then copy an array
26900         of the exact size and return that.
26901
26902         (Class::LookupMethodByBuilder): New function that maps
26903         MethodBuilders to its methods.  Required to locate the information
26904         on methods because System.Reflection bit us again.
26905
26906         * support.cs: New file, contains an interface ParameterData and
26907         two implementations: ReflectionParameters and InternalParameters
26908         used to access Parameter information.  We will need to grow this
26909         as required.
26910
26911         * expression.cs (Invocation::GetParameterData): implement a cache
26912         and a wrapper around the ParameterData creation for methods. 
26913         (Invocation::OverloadResolve): Use new code.
26914
26915 2001-09-13  Ravi Pratap  <ravi@ximian.com>
26916
26917         * class.cs (TypeContainer::EmitField): Remove and move into 
26918         (Field::Define): here and modify accordingly.
26919         (Field.FieldBuilder): New member.
26920         (TypeContainer::Populate): Update accordingly.
26921         (TypeContainer::FindMembers): Implement.
26922
26923 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26924
26925         * statement.cs: (VariableInfo::VariableType): New field to be
26926         initialized with the full type once it is resolved. 
26927
26928 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
26929
26930         * parameter.cs (GetParameterInfo): Use a type cache to compute
26931         things only once, and to reuse this information
26932
26933         * expression.cs (LocalVariableReference::Emit): Implement.
26934         (OpcodeCast::Emit): fix.
26935
26936         (ParameterReference::Resolve): Implement.
26937         (ParameterReference::Emit): Implement.
26938
26939         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
26940         that are expressions need to stay as Expressions.
26941
26942         * typemanager.cs (CSharpName): Returns the C# name of a type if
26943         possible. 
26944
26945         * expression.cs (Expression::ConvertImplicit): New function that
26946         implements implicit type conversions.
26947
26948         (Expression::ImplicitReferenceConversion): Implements implicit
26949         reference conversions.
26950
26951         (EmptyCast): New type for transparent casts.
26952
26953         (OpcodeCast): New type for casts of types that are performed with
26954         a sequence of bytecodes.
26955
26956         (BoxedCast): New type used for casting value types into reference
26957         types.  Emits a box opcode.
26958
26959         (Binary::DoNumericPromotions): Implements numeric promotions of
26960         and computation of the Binary::Type.
26961
26962         (Binary::EmitBranchable): Optimization.
26963
26964         (Binary::Emit): Implement code emission for expressions.
26965
26966         * typemanager.cs (TypeManager): Added two new core types: sbyte
26967         and byte.
26968
26969 2001-09-12  Ravi Pratap  <ravi@ximian.com>
26970
26971         * class.cs (TypeContainer::FindMembers): Method which does exactly
26972         what Type.FindMembers does, only we don't have to use reflection. No
26973         implementation yet.
26974
26975         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
26976         typecontainer objects as we need to get at them.
26977         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
26978
26979         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
26980         typecontainer object.
26981
26982         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
26983         of just a Report object.
26984
26985 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26986
26987         * class.cs (Event::Define): Go back to using the prefixes "add_" and
26988         "remove_"
26989         (TypeContainer::Populate): Now define the delegates of the type too.
26990         (TypeContainer.Delegates): Property to access the list of delegates defined
26991         in the type.
26992
26993         * delegates.cs (Delegate::Define): Implement partially.
26994
26995         * modifiers.cs (TypeAttr): Handle more flags.
26996
26997 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26998
26999         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
27000         and not <=
27001         (Operator::Define): Re-write logic to get types by using the LookupType method
27002         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
27003         (Indexer::Define): Ditto.
27004         (Event::Define): Ditto.
27005         (Property::Define): Ditto.
27006
27007 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27008
27009         * class.cs (TypeContainer::Populate): Now define operators too. 
27010         (TypeContainer.Operators): New property to access the list of operators
27011         in a type.
27012         (Operator.OperatorMethodBuilder): New member to hold the method builder
27013         for the operator we are defining.
27014         (Operator::Define): Implement.
27015
27016 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27017
27018         * class.cs (Event::Define): Make the prefixes of the accessor methods
27019         addOn_ and removeOn_ 
27020
27021         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
27022         of the location being passed in too. Ideally, this should go later since all
27023         error reporting should be done through the Report object.
27024
27025         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
27026         (Populate): Iterate thru the indexers we have and define them too.
27027         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
27028         for the get and set accessors.
27029         (Indexer::Define): Implement.
27030
27031 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
27032
27033         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
27034         my previous implementation, did not work.
27035
27036         * typemanager.cs: Add a couple of missing types (the longs).
27037
27038         * literal.cs: Use TypeManager.bool_type instead of getting it.
27039
27040         * expression.cs (EventExpr): New kind of expressions.
27041         (Expressio::ExprClassFromMemberInfo): finish
27042
27043 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
27044
27045         * assign.cs: Emit stores to static fields differently.
27046
27047 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27048
27049         * Merge in changes and adjust code to tackle conflicts. Backed out my
27050         code in Assign::Resolve ;-) 
27051
27052 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27053
27054         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
27055         instead Report.Error and also pass in the location.
27056         (CSharpParser::Lexer): New readonly property to return the reference
27057         to the Tokenizer object.
27058         (declare_local_variables): Use Report.Error with location instead of plain 
27059         old error.
27060         (CheckDef): Ditto.
27061
27062         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
27063         (Operator.CheckBinaryOperator): Ditto.
27064
27065         * cs-parser.jay (operator_declarator): Update accordingly.
27066
27067         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
27068         (CheckBinaryOperator): Same here.
27069
27070         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
27071         on the name without any prefixes of namespace names etc. This is because we
27072         already might have something already fully qualified like 
27073         'System.Console.WriteLine'
27074
27075         * assign.cs (Resolve): Begin implementation. Stuck ;-)
27076
27077 2001-09-07  Ravi Pratap  <ravi@ximian.com>
27078
27079         * cs-tokenizer.cs (location): Return a string which also contains
27080         the file name.
27081
27082         * expression.cs (ElementAccess): New class for expressions of the
27083         type 'element access.'
27084         (BaseAccess): New class for expressions of the type 'base access.'
27085         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
27086         respectively.
27087
27088         * cs-parser.jay (element_access): Implement action.
27089         (base_access): Implement actions.
27090         (checked_expression, unchecked_expression): Implement.
27091
27092         * cs-parser.jay (local_variable_type): Correct and implement.
27093         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
27094
27095         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
27096
27097         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
27098         name and the specifiers.
27099
27100         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
27101
27102         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
27103         making them all public ;-)
27104
27105         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
27106         class anyways.
27107
27108 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
27109
27110         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
27111         PropertyExprs.
27112         (FieldExpr, PropertyExprs): New resolved expressions.
27113         (SimpleName::MemberStaticCheck): Perform static checks for access
27114         to non-static fields on static methods. Maybe this should be
27115         generalized for MemberAccesses. 
27116         (SimpleName::ResolveSimpleName): More work on simple name
27117         resolution. 
27118
27119         * cs-parser.jay (primary_expression/qualified_identifier): track
27120         the parameter index.
27121
27122         * codegen.cs (CodeGen::Save): Catch save exception, report error.
27123         (EmitContext::EmitBoolExpression): Chain to expression generation
27124         instead of temporary hack.
27125         (::EmitStatementExpression): Put generic expression code generation.
27126
27127         * assign.cs (Assign::Emit): Implement variable assignments to
27128         local variables, parameters and fields.
27129
27130 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
27131
27132         * statement.cs (Block::GetVariableInfo): New method, returns the
27133         VariableInfo for a variable name in a block.
27134         (Block::GetVariableType): Implement in terms of GetVariableInfo
27135
27136         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
27137         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
27138
27139 2001-09-06  Ravi Pratap  <ravi@ximian.com>
27140
27141         * cs-parser.jay (operator_declaration): Continue on my quest : update
27142         to take attributes argument.
27143         (event_declaration): Ditto.
27144         (enum_declaration): Ditto.
27145         (indexer_declaration): Ditto.
27146
27147         * class.cs (Operator::Operator): Update constructor accordingly.
27148         (Event::Event): Ditto.
27149
27150         * delegate.cs (Delegate::Delegate): Same here.
27151
27152         * enum.cs (Enum::Enum): Same here.
27153
27154 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27155
27156         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
27157
27158         * ../tests/cs0658.cs : New file to demonstrate error 0658.
27159
27160         * attribute.cs (Attributes): New class to encapsulate all attributes which were
27161         being passed around as an arraylist.
27162         (Attributes::AddAttribute): Method to add attribute sections.
27163
27164         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
27165         (struct_declaration): Update accordingly.
27166         (constant_declaration): Update.
27167         (field_declaration): Update.
27168         (method_header): Update.
27169         (fixed_parameter): Update.
27170         (parameter_array): Ditto.
27171         (property_declaration): Ditto.
27172         (destructor_declaration): Ditto.
27173
27174         * class.cs (Struct::Struct): Update constructors accordingly.
27175         (Class::Class): Ditto.
27176         (Field::Field): Ditto.
27177         (Method::Method): Ditto.
27178         (Property::Property): Ditto.
27179         (TypeContainer::OptAttribute): update property's return type.
27180
27181         * interface.cs (Interface.opt_attributes): New member.
27182         (Interface::Interface): Update to take the extra Attributes argument.
27183
27184         * parameter.cs (Parameter::Parameter): Ditto.
27185
27186         * constant.cs (Constant::Constant): Ditto.
27187
27188         * interface.cs (InterfaceMemberBase): New OptAttributes field.
27189         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
27190         the attributes as a parameter.
27191         (InterfaceProperty): Update constructor call.
27192         (InterfaceEvent): Ditto.
27193         (InterfaceMethod): Ditto.
27194         (InterfaceIndexer): Ditto.
27195
27196         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
27197         pass the attributes too.
27198         (interface_event_declaration): Ditto.
27199         (interface_property_declaration): Ditto.
27200         (interface_method_declaration): Ditto.
27201         (interface_declaration): Ditto.
27202
27203 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
27204
27205         * class.cs (Method::Define): Track the "static Main" definition to
27206         create an entry point. 
27207
27208         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
27209         EntryPoint if we find it. 
27210
27211         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
27212         (EmitContext::ig): Make this variable public.
27213
27214         * driver.cs: Make the default output file be the first file name
27215         with the .exe extension.  
27216
27217         Detect empty compilations
27218
27219         Handle various kinds of output targets.  Handle --target and
27220         rename -t to --dumper.
27221
27222         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
27223         methods inherited from Expression return now an Expression.  This
27224         will is used during the tree rewriting as we resolve them during
27225         semantic analysis.
27226
27227         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
27228         the spec.  Missing entirely is the information about
27229         accessability of elements of it.
27230
27231         (Expression::ExprClassFromMemberInfo): New constructor for
27232         Expressions that creates a fully initialized Expression based on
27233         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
27234         a Type.
27235
27236         (Invocation::Resolve): Begin implementing resolution of invocations.
27237
27238         * literal.cs (StringLiteral):  Implement Emit.
27239
27240 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27241
27242         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
27243         member.
27244
27245 2001-09-04  Ravi Pratap  <ravi@ximian.com>
27246
27247         * cs-parser.jay (attribute_arguments): Implement actions.
27248         (attribute): Fix bug in production. Implement action.
27249         (attribute_list): Implement.
27250         (attribute_target): Implement.
27251         (attribute_target_specifier, opt_target_specifier): Implement
27252         (CheckAttributeTarget): New method to check if the attribute target
27253         is valid.
27254         (attribute_section): Implement.
27255         (opt_attributes): Implement.
27256
27257         * attribute.cs : New file to handle attributes.
27258         (Attribute): Class to hold attribute info.
27259
27260         * cs-parser.jay (opt_attribute_target_specifier): Remove production
27261         (attribute_section): Modify production to use 2 different rules to 
27262         achieve the same thing. 1 s/r conflict down !
27263         Clean out commented, useless, non-reducing dimension_separator rules.
27264
27265         * class.cs (TypeContainer.attributes): New member to hold list
27266         of attributes for a type.
27267         (Struct::Struct): Modify to take one more argument, the attribute list.
27268         (Class::Class): Ditto.
27269         (Field::Field): Ditto.
27270         (Method::Method): Ditto.
27271         (Property::Property): Ditto.
27272
27273         * cs-parser.jay (struct_declaration): Update constructor call to
27274         pass in the attributes too.
27275         (class_declaration): Ditto.
27276         (constant_declaration): Ditto.
27277         (field_declaration): Ditto.
27278         (method_header): Ditto.
27279         (fixed_parameter): Ditto.
27280         (parameter_array): Ditto.
27281         (property_declaration): Ditto.
27282
27283         * constant.cs (Constant::Constant): Update constructor similarly.
27284         Use System.Collections.
27285
27286         * parameter.cs (Parameter::Parameter): Update as above.
27287
27288 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27289
27290         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
27291         (TypeContainer.delegates): New member to hold list of delegates.
27292
27293         * cs-parser.jay (delegate_declaration): Implement the action correctly 
27294         this time as I seem to be on crack ;-)
27295
27296 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
27297
27298         * rootcontext.cs (RootContext::IsNamespace): new function, used to
27299         tell whether an identifier represents a namespace.
27300
27301         * expression.cs (NamespaceExpr): A namespace expression, used only
27302         temporarly during expression resolution.
27303         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
27304         utility functions to resolve names on expressions.
27305
27306 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
27307
27308         * codegen.cs: Add hook for StatementExpressions. 
27309
27310         * class.cs: Fix inverted test for static flag in methods.
27311
27312 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27313
27314         * class.cs (Operator::CheckUnaryOperator): Correct error number used
27315         to make it coincide with MS' number.
27316         (Operator::CheckBinaryOperator): Ditto.
27317
27318         * ../errors/errors.txt : Remove error numbers added earlier.
27319
27320         * ../errors/cs1019.cs : Test case for error # 1019
27321
27322         * ../errros/cs1020.cs : Test case for error # 1020
27323
27324         * cs-parser.jay : Clean out commented cruft.
27325         (dimension_separators, dimension_separator): Comment out. Ostensibly not
27326         used anywhere - non-reducing rule.
27327         (namespace_declarations): Non-reducing rule - comment out.
27328
27329         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
27330         with TypeContainer::AddEnum.
27331
27332         * delegate.cs : New file for delegate handling classes.
27333         (Delegate): Class for declaring delegates.
27334
27335         * makefile : Update.
27336
27337         * cs-parser.jay (delegate_declaration): Implement.
27338
27339 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
27340
27341         * class.cs (Event::Define): Implement.
27342         (Event.EventBuilder): New member.
27343
27344         * class.cs (TypeContainer::Populate): Update to define all enums and events
27345         we have.
27346         (Events): New property for the events arraylist we hold. Shouldn't we move to using
27347         readonly fields for all these cases ?
27348
27349 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27350
27351         * class.cs (Property): Revamp to use the convention of making fields readonly.
27352         Accordingly modify code elsewhere.
27353
27354         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
27355         the Define method of the Property class.
27356
27357         * class.cs : Clean up applied patch and update references to variables etc. Fix 
27358         trivial bug.
27359         (TypeContainer::Populate): Update to define all the properties we have. Also
27360         define all enumerations.
27361
27362         * enum.cs (Define): Implement.
27363
27364 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27365
27366         * cs-parser.jay (overloadable_operator): The semantic value is an
27367         enum of the Operator class.
27368         (operator_declarator): Implement actions.
27369         (operator_declaration): Implement.
27370
27371         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
27372         validity of definitions.
27373         (Operator::CheckBinaryOperator): Static method to check for binary operators
27374         (TypeContainer::AddOperator): New method to add an operator to a type.
27375
27376         * cs-parser.jay (indexer_declaration): Added line to actually call the
27377         AddIndexer method so it gets added ;-)
27378
27379         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
27380         already taken care of by the MS compiler ?  
27381
27382 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27383
27384         * class.cs (Operator): New class for operator declarations.
27385         (Operator::OpType): Enum for the various operators.
27386
27387 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27388
27389         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
27390         ostensibly handle this in semantic analysis.
27391
27392         * cs-parser.jay (general_catch_clause): Comment out
27393         (specific_catch_clauses, specific_catch_clause): Ditto.
27394         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
27395         (catch_args, opt_catch_args): New productions.
27396         (catch_clause): Rewrite to use the new productions above
27397         (catch_clauses): Modify accordingly.
27398         (opt_catch_clauses): New production to use in try_statement
27399         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
27400         and re-write the code in the actions to extract the specific and
27401         general catch clauses by being a little smart ;-)
27402
27403         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
27404         Hooray, try and catch statements parse fine !
27405
27406 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27407
27408         * statement.cs (Block::GetVariableType): Fix logic to extract the type
27409         string from the hashtable of variables.
27410
27411         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
27412         I end up making that mistake ;-)
27413         (catch_clauses): Fixed gross error which made Key and Value of the 
27414         DictionaryEntry the same : $1 !!
27415
27416 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27417
27418         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
27419
27420         * cs-parser.jay (event_declaration): Correct to remove the semicolon
27421         when the add and remove accessors are specified. 
27422
27423 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27424
27425         * cs-parser.jay (IndexerDeclaration): New helper class to hold
27426         information about indexer_declarator.
27427         (indexer_declarator): Implement actions.
27428         (parsing_indexer): New local boolean used to keep track of whether
27429         we are parsing indexers or properties. This is necessary because 
27430         implicit_parameters come into picture even for the get accessor in the 
27431         case of an indexer.
27432         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
27433
27434         * class.cs (Indexer): New class for indexer declarations.
27435         (TypeContainer::AddIndexer): New method to add an indexer to a type.
27436         (TypeContainer::indexers): New member to hold list of indexers for the
27437         type.
27438
27439 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27440
27441         * cs-parser.jay (add_accessor_declaration): Implement action.
27442         (remove_accessor_declaration): Implement action.
27443         (event_accessors_declaration): Implement
27444         (variable_declarators): swap statements for first rule - trivial.
27445
27446         * class.cs (Event): New class to hold information about event
27447         declarations.
27448         (TypeContainer::AddEvent): New method to add an event to a type
27449         (TypeContainer::events): New member to hold list of events.
27450
27451         * cs-parser.jay (event_declaration): Implement actions.
27452
27453 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27454
27455         * cs-parser.jay (dim_separators): Implement. Make it a string
27456         concatenating all the commas together, just as they appear.
27457         (opt_dim_separators): Modify accordingly
27458         (rank_specifiers): Update accordingly. Basically do the same
27459         thing - instead, collect the brackets here.
27460         (opt_rank_sepcifiers): Modify accordingly.
27461         (array_type): Modify to actually return the complete type string
27462         instead of ignoring the rank_specifiers.
27463         (expression_list): Implement to collect the expressions
27464         (variable_initializer): Implement. We make it a list of expressions
27465         essentially so that we can handle the array_initializer case neatly too.
27466         (variable_initializer_list): Implement.
27467         (array_initializer): Make it a list of variable_initializers
27468         (opt_array_initializer): Modify accordingly.
27469
27470         * expression.cs (New::NType): Add enumeration to help us
27471         keep track of whether we have an object/delegate creation
27472         or an array creation.
27473         (New:NewType, New::Rank, New::Indices, New::Initializers): New
27474         members to hold data about array creation.
27475         (New:New): Modify to update NewType
27476         (New:New): New Overloaded contructor for the array creation
27477         case.
27478
27479         * cs-parser.jay (array_creation_expression): Implement to call
27480         the overloaded New constructor.
27481
27482 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
27483
27484         * class.cs (TypeContainer::Constructors): Return member
27485         constructors instead of returning null.
27486
27487 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
27488
27489         * typemanager.cs (InitCoreTypes): Initialize the various core
27490         types after we have populated the type manager with the user
27491         defined types (this distinction will be important later while
27492         compiling corlib.dll)
27493
27494         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
27495         on Expression Classification.  Now all expressions have a method
27496         `Resolve' and a method `Emit'.
27497
27498         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
27499         generation from working.     Also add some temporary debugging
27500         code. 
27501
27502 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
27503
27504         * codegen.cs: Lots of code generation pieces.  This is only the
27505         beginning, will continue tomorrow with more touches of polish.  We
27506         handle the fundamentals of if, while, do, for, return.  Others are
27507         trickier and I need to start working on invocations soon.
27508
27509         * gen-treedump.cs: Bug fix, use s.Increment here instead of
27510         s.InitStatement. 
27511
27512         * codegen.cs (EmitContext): New struct, used during code
27513         emission to keep a context.   Most of the code generation will be
27514         here. 
27515
27516         * cs-parser.jay: Add embedded blocks to the list of statements of
27517         this block.  So code generation proceeds in a top down fashion.
27518
27519 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
27520
27521         * statement.cs: Add support for multiple child blocks.
27522
27523 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
27524
27525         * codegen.cs (EmitCode): New function, will emit the code for a
27526         Block of code given a TypeContainer and its ILGenerator. 
27527
27528         * statement.cs (Block): Standard public readonly optimization.
27529         (Block::Block constructors): Link children. 
27530         (Block::Child): Child Linker.
27531         (Block::EmitVariables): Emits IL variable declarations.
27532
27533         * class.cs: Drop support for MethodGroups here, delay until
27534         Semantic Analysis.
27535         (Method::): Applied the same simplification that I did before, and
27536         move from Properties to public readonly fields.
27537         (Method::ParameterTypes): Returns the parameter types for the
27538         function, and implements a cache that will be useful later when I
27539         do error checking and the semantic analysis on the methods is
27540         performed.
27541         (Constructor::GetCallingConvention): Renamed from CallingConvetion
27542         and made a method, optional argument tells whether this is a class
27543         or a structure to apply the `has-this' bit.
27544         (Method::GetCallingConvention): Implement, returns the calling
27545         convention. 
27546         (Method::Define): Defines the type, a second pass is performed
27547         later to populate the methods.
27548
27549         (Constructor::ParameterTypes): implement a cache similar to the
27550         one on Method::ParameterTypes, useful later when we do semantic
27551         analysis. 
27552
27553         (TypeContainer::EmitMethod):  New method.  Emits methods.
27554
27555         * expression.cs: Removed MethodGroup class from here.
27556
27557         * parameter.cs (Parameters::GetCallingConvention): new method.
27558
27559 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
27560
27561         * class.cs (TypeContainer::Populate): Drop RootContext from the
27562         argument. 
27563
27564         (Constructor::CallingConvention): Returns the calling convention.
27565         (Constructor::ParameterTypes): Returns the constructor parameter
27566         types. 
27567
27568         (TypeContainer::AddConstructor): Keep track of default constructor
27569         and the default static constructor.
27570
27571         (Constructor::) Another class that starts using `public readonly'
27572         instead of properties. 
27573
27574         (Constructor::IsDefault): Whether this is a default constructor. 
27575
27576         (Field::) use readonly public fields instead of properties also.
27577
27578         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
27579         track of static constructors;  If none is used, turn on
27580         BeforeFieldInit in the TypeAttributes. 
27581
27582         * cs-parser.jay (opt_argument_list): now the return can be null
27583         for the cases where there are no arguments. 
27584
27585         (constructor_declarator): If there is no implicit `base' or
27586         `this', then invoke the default parent constructor. 
27587
27588         * modifiers.cs (MethodAttr): New static function maps a set of
27589         modifiers flags into a MethodAttributes enum
27590         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
27591         MethodAttr, TypeAttr to represent the various mappings where the
27592         modifiers are used.
27593         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
27594
27595 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
27596
27597         * parameter.cs (GetParameterInfo): Fix bug where there would be no
27598         method arguments.
27599
27600         * interface.cs (PopulateIndexer): Implemented the code generator
27601         for interface indexers.
27602
27603 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
27604
27605         * interface.cs (InterfaceMemberBase): Now we track the new status
27606         here.  
27607
27608         (PopulateProperty): Implement property population.  Woohoo!  Got
27609         Methods and Properties going today. 
27610
27611         Removed all the properties for interfaces, and replaced them with
27612         `public readonly' fields. 
27613
27614 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
27615
27616         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
27617         initialize their hashtables/arraylists only when they are needed
27618         instead of doing this always.
27619
27620         * parameter.cs: Handle refs and out parameters.
27621
27622         * cs-parser.jay: Use an ArrayList to construct the arguments
27623         instead of the ParameterCollection, and then cast that to a
27624         Parameter[] array.
27625
27626         * parameter.cs: Drop the use of ParameterCollection and use
27627         instead arrays of Parameters.
27628
27629         (GetParameterInfo): Use the Type, not the Name when resolving
27630         types. 
27631
27632 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
27633
27634         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
27635         and instead use public readonly fields.
27636
27637         * class.cs: Put back walking code for type containers.
27638
27639 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
27640
27641         * class.cs (MakeConstant): Code to define constants.
27642
27643         * rootcontext.cs (LookupType): New function.  Used to locate types 
27644
27645
27646 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
27647
27648         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
27649         this System.Reflection code is.  Kudos to Microsoft
27650
27651         * typemanager.cs: Implement a type cache and avoid loading all
27652         types at boot time.  Wrap in LookupType the internals.  This made
27653         the compiler so much faster.  Wow.  I rule!
27654
27655         * driver.cs: Make sure we always load mscorlib first (for
27656         debugging purposes, nothing really important).
27657
27658         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
27659         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
27660
27661         * rootcontext.cs: Lookup types on their namespace;  Lookup types
27662         on namespaces that have been imported using the `using' keyword.
27663
27664         * class.cs (TypeContainer::TypeAttr): Virtualize.
27665         (Class::TypeAttr): Return attributes suitable for this bad boy.
27666         (Struct::TypeAttr): ditto.
27667         Handle nested classes.
27668         (TypeContainer::) Remove all the type visiting code, it is now
27669         replaced with the rootcontext.cs code
27670
27671         * rootcontext.cs (GetClassBases): Added support for structs. 
27672
27673 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
27674
27675         * interface.cs, statement.cs, class.cs, parameter.cs,
27676         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
27677         Drop use of TypeRefs, and use strings instead.
27678
27679 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
27680
27681         * rootcontext.cs: 
27682
27683         * class.cs (Struct::Struct): set the SEALED flags after
27684         checking the modifiers.
27685         (TypeContainer::TypeAttr): new property, returns the
27686         TypeAttributes for a class.  
27687
27688         * cs-parser.jay (type_list): Oops, list production was creating a
27689         new list of base types.
27690
27691         * rootcontext.cs (StdLib): New property.
27692         (GetInterfaceTypeByName): returns an interface by type name, and
27693         encapsulates error handling here.
27694         (GetInterfaces): simplified.
27695         (ResolveTree): Encapsulated all the tree resolution here.
27696         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
27697         types. 
27698
27699         * driver.cs: Add support for --nostdlib, to avoid loading the
27700         default assemblies.
27701         (Main): Do not put tree resolution here. 
27702
27703         * rootcontext.cs: Beginning of the class resolution.
27704
27705 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
27706
27707         * rootcontext.cs: Provide better error reporting. 
27708
27709         * cs-parser.jay (interface_base): set our $$ to be interfaces.
27710
27711         * rootcontext.cs (CreateInterface): Handle the case where there
27712         are no parent interfaces.
27713
27714         (CloseTypes): Routine to flush types at the end.
27715         (CreateInterface): Track types.
27716         (GetInterfaces): Returns an array of Types from the list of
27717         defined interfaces.
27718
27719         * typemanager.c (AddUserType): Mechanism to track user types (puts
27720         the type on the global type hash, and allows us to close it at the
27721         end). 
27722
27723 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
27724
27725         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
27726         RecordInterface instead.
27727
27728         * cs-parser.jay: Updated to reflect changes above.
27729
27730         * decl.cs (Definition): Keep track of the TypeBuilder type that
27731         represents this type here.  Not sure we will use it in the long
27732         run, but wont hurt for now.
27733
27734         * driver.cs: Smaller changes to accomodate the new code.
27735
27736         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
27737         when done. 
27738
27739         * rootcontext.cs (CreateInterface):  New method, used to create
27740         the System.TypeBuilder type for interfaces.
27741         (ResolveInterfaces): new entry point to resolve the interface
27742         hierarchy. 
27743         (CodeGen): Property, used to keep track of the code generator.
27744
27745 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
27746
27747         * cs-parser.jay: Add a second production for delegate_declaration
27748         with `VOID'.
27749
27750         (enum_body): Put an opt_comma here instead of putting it on
27751         enum_body or enum_member_declarations so we can handle trailing
27752         commas on enumeration members.  Gets rid of a shift/reduce.
27753
27754         (type_list): Need a COMMA in the middle.
27755
27756         (indexer_declaration): Tell tokenizer to recognize get/set
27757
27758         * Remove old targets.
27759
27760         * Re-add the parser target.
27761
27762 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27763
27764         * cs-parser.jay: Add precendence rules for a number of operators
27765         ot reduce the number of shift/reduce conflicts in the grammar.
27766
27767 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
27768
27769         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
27770         and put it here.
27771
27772         Get rid of old crufty code.
27773
27774         * rootcontext.cs: Use this to keep track of the parsed
27775         representation and the defined types available to the program. 
27776
27777         * gen-treedump.cs: adjust for new convention.
27778
27779         * type.cs: Split out the type manager, and the assembly builder
27780         from here. 
27781
27782         * typemanager.cs: the type manager will live here now.
27783
27784         * cil-codegen.cs: And the code generator here. 
27785
27786 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
27787
27788         * makefile: Fixed up for easy making.
27789
27790 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27791
27792         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
27793         the 
27794
27795         (unary_expression): Expand pre_increment_expression and
27796         post_decrement_expression to reduce a shift/reduce.
27797
27798 2001-07-11  Simon Cozens
27799
27800         * cs-tokenizer.cs: Hex numbers should begin with a 0.
27801
27802         Improve allow_keyword_as_indent name.
27803
27804 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
27805
27806         * Adjustments for Beta2. 
27807
27808 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
27809
27810         * decl.cs: Added `Define' abstract method.
27811         (InTransit): new property, used to catch recursive definitions. 
27812
27813         * interface.cs: Implement `Define'. 
27814
27815         * modifiers.cs: Map Modifiers.constants to
27816         System.Reflection.TypeAttribute flags.
27817
27818         * class.cs: Keep track of types and user-defined types.
27819         (BuilderInit): New method for creating an assembly
27820         (ResolveType): New function to launch the resolution process, only
27821         used by interfaces for now.
27822
27823         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
27824         that are inserted into the name space. 
27825
27826 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
27827
27828         * ARGH.  I have screwed up my tree so many times due to the use of
27829         rsync rather than using CVS.  Going to fix this at once. 
27830
27831         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
27832         load types.
27833
27834 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
27835
27836         * Experiment successful: Use System.Type rather that our own
27837         version of Type.  
27838
27839 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
27840
27841         * cs-parser.jay: Removed nsAliases from here.
27842
27843         Use new namespaces, handle `using XXX;' 
27844
27845         * namespace.cs: Reimplemented namespace handling, use a recursive
27846         definition of the class.  Now we can keep track of using clauses
27847         and catch invalid using clauses.
27848
27849 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
27850
27851         * gen-treedump.cs: Adapted for all the renaming.
27852
27853         * expression.cs (Expression): this class now has a Type property
27854         which returns an expression Type.
27855
27856         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
27857         `Type', as this has a different meaning now in the base
27858
27859 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
27860
27861         * interface.cs, class.cs: Removed from all the sources the
27862         references to signature computation, as we can not do method
27863         signature computation during the parsing time, as we are not
27864         trying to solve at that point distinguishing:
27865
27866         class X {
27867                 void a (Blah x) {}
27868                 void a (NS.Blah x) {}
27869         }
27870
27871         Which depending on the context might be valid or not, as we do not
27872         know if Blah is the same thing as NS.Blah at that point.
27873
27874         * Redid everything so the code uses TypeRefs now instead of
27875         Types.  TypeRefs are just temporary type placeholders, that need
27876         to be resolved.  They initially have a pointer to a string and the
27877         current scope in which they are used.  This is used later by the
27878         compiler to resolve the reference to an actual Type. 
27879
27880         * DeclSpace is no longer a CIR.Type, and neither are
27881         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
27882         are all DeclSpaces, but no Types. 
27883
27884         * type.cs (TypeRefManager): This implements the TypeRef manager,
27885         which keeps track of all the types that need to be resolved after
27886         the parsing has finished. 
27887
27888 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
27889
27890         * ARGH.  We are going to have to store `foreach' as a class rather
27891         than resolving it, as we need to verify error 1579 after name
27892         resolution.   *OR* we could keep a flag that says `This request to
27893         IEnumerator comes from a foreach statement' which we can then use
27894         to generate the error.
27895
27896 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
27897
27898         * class.cs (TypeContainer.AddMethod): we now add methods to the
27899         MethodGroup instead of the method hashtable.  
27900
27901         * expression.cs: Add MethodGroup abstraction, which gets us one
27902         step closer to the specification in the way we handle method
27903         declarations.  
27904
27905         * cs-parser.jay (primary_expression): qualified_identifier now
27906         tried to match up an identifier to a local variable reference or
27907         to a parameter reference.
27908
27909         current_local_parameters is now a parser global variable that
27910         points to the current parameters for the block, used during name
27911         lookup.
27912
27913         (property_declaration): Now creates an implicit `value' argument to
27914         the set accessor.
27915
27916 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
27917
27918         * parameter.cs: Do not use `param' arguments as part of the
27919         signature, per the spec.
27920
27921 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
27922
27923         * decl.cs: Base class for classes, structs and interfaces.  This
27924         is the "Declaration Space" 
27925
27926         * cs-parser.jay: Use CheckDef for checking declaration errors
27927         instead of having one on each function.
27928
27929         * class.cs: Factor out some code for handling error handling in
27930         accordance to the "Declarations" section in the "Basic Concepts"
27931         chapter in the ECMA C# spec.
27932
27933         * interface.cs: Make all interface member classes derive from
27934         InterfaceMemberBase.
27935
27936 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
27937
27938         * Many things: all interfaces are parsed and generated in
27939         gen-treedump.  Support for member variables, constructors,
27940         destructors, properties, constants is there.
27941
27942         Beginning of the IL backend, but very little done, just there for
27943         testing purposes. 
27944
27945 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
27946
27947         * cs-parser.jay: Fix labeled statement.
27948
27949         * cs-tokenizer.cs (escape): Escape " and ' always.
27950         ref_line, ref_name: keep track of the line/filename as instructed
27951         by #line by the compiler.
27952         Parse #line.
27953
27954 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
27955
27956         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
27957         to match the values in System.CodeDOM.
27958
27959         Divid renamed to Divide.
27960
27961         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
27962         statements. 
27963         (Statements.set): remove.
27964
27965         * System.CodeDOM/CodeCatchClause.cs: always have a valid
27966         statements. 
27967
27968         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
27969         falseStatements always have valid values. 
27970
27971         * cs-parser.jay: Use System.CodeDOM now.
27972