2008-02-18 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2008-02-18  Marek Safar  <marek.safar@gmail.com>
2
3         A fix for bug #328136
4         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5         
6         * expression.cs: Do not fold immediately LogicalAnd operators when the left
7         side is a false constant, because we still need to evaluate the right-hand
8         side.
9         
10         * statement.cs (If): Emit two types of boolean constants (simple constant,
11         side-effect constant).
12         
13 2008-02-18  Marek Safar  <marek.safar@gmail.com>
14
15         A fix for bug #361457
16         * ecore.cs (IsApplicable): Params methods have lower priority.
17         
18         * support.cs: Return correct parameter modifier for params types.
19
20 2008-02-18  Marek Safar  <marek.safar@gmail.com>
21
22         * generic.cs (TypeParameter): Cache attribute target name.
23         
24         * support.cs: Removed unused variable.
25         
26         * typemanager.cs: Removed debugging leftover.
27         
28         * ecore.cs: Use local type instead of a property;
29         
30         * class.cs (VerifyMembers): Consider also parent to test whether type member
31         is local or public.
32         
33         * expression.cs (FullMethodDesc): Removed.
34         
35         * attribute.cs (IsValidArgumentType): Made static.
36         
37 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
38
39         Cleanup to be more readable.
40         * Makefile (GMCS_PROFILE): Remove.
41         (COMPILER_NAME): New helper.
42
43 2008-02-15  Miguel de Icaza  <miguel@novell.com>
44
45         * cs-tokenizer.cs: if a conditional expression happens inside a
46         (...) this also means that we do not need to de-ambiguate between
47         an parenthesized expression and a cast.  
48
49         Fixes 346484.
50
51         * constant.cs (SideEffectConstant): a constant value that happens
52         to have a side effect.   
53
54         Fixes the build regressions introduced by the fix for #359789
55
56 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
57
58         * expression.cs (Conditional.Emit): when emitting the ternary
59         operator, use local variables to generate code verifiable code. 
60
61         The verifier cannot infer that the type on stack before the
62         stloc.0 is executed is of type ParentB. This happens because the
63         stack merge algorithm uses only parent types when deciding which
64         is the common type.  This is described in Part III 1.8.1.3 of ECMA
65         335.
66
67         This code compiled with mcs is not verifiable under MS. The MS
68         verifier picks the first common interface of Foo and Bar, which is
69         wrong, but doesn't use a full join type of the 2 interfaces.
70
71         CSC uses a clever hack to compile such code in a verifiable
72         way. It stores the intermediate values in a local variable with
73         the expected type.
74
75         Fixes: #358102
76         
77 2008-02-14  Miguel de Icaza  <miguel@novell.com>
78
79         * expression.cs: Do not fold BitwiseAnd operators when the left
80         side is a false constant, because we still need to evaluate the
81         right-hand side.
82
83         Fixes #359789
84
85         * support.cs: Instead of throwing an InternalErrorException when
86         the position of the stream is outside the boundary of our buffer,
87         reset the state of the reader, and restart the reading from the
88         beginning of the file.
89
90 2008-02-14  Marek Safar  <marek.safar@gmail.com>
91
92         * generic.cs (TypeParameter.GetMembers): Is not supported operation. 
93         
94 2008-02-14  Marek Safar  <marek.safar@gmail.com>
95
96         A fix for bug #361686
97         * decl.cs: A protected types used inside a private class which parents 
98         derives from the protected class are accessible.
99
100 2008-02-13  Marek Safar  <marek.safar@gmail.com>
101
102         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
103         the parameterless constructor.
104
105 2008-02-13  Marek Safar  <marek.safar@gmail.com>
106
107         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
108         lookup methods to use standard member cache when doing member lookup.
109
110 2008-02-12  Marek Safar  <marek.safar@gmail.com>
111
112         * driver.cs: Don't report full path for referenced module as assembly error.
113
114 2008-02-12  Marek Safar  <marek.safar@gmail.com>
115
116         * Makefile: Fixed `qh' target to work on all machines.
117         
118         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
119         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
120         and HasElementType with TypeManager implementation.
121
122 2008-02-08  Marek Safar  <marek.safar@gmail.com>
123
124         A fix for bugs #325134, #359749
125         * expression.cs, ecore.cs: Try to resolve an extension method even if the
126         first binds point to non-method member expression.
127         
128 2008-02-08  Marek Safar  <marek.safar@gmail.com>
129
130         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
131
132 2008-02-08  Marek Safar  <marek.safar@gmail.com>
133
134         A fix for bugs #321394, #323028
135         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs: 
136         Reworked naive IsAccessibleAs implementation to handle nested types.
137
138 2008-02-05  Jb Evain  <jbevain@novell.com>
139
140         * class.cs: use generic type comparison for parameters
141         as well.
142
143 2008-02-05  Marek Safar  <marek.safar@gmail.com>
144
145         A fix for bug #325372
146         * class.cs: Use generic type comparison when testing method signatures.
147
148 2008-02-05  Marek Safar  <marek.safar@gmail.com>
149
150         A fix for bug #357047
151         * ecore.cs: Applied C# 3.0 changes to better conversion.
152
153 2008-02-05  Marek Safar  <marek.safar@gmail.com>
154
155         A fix for bug #358374
156         * cs-parser.jay: Correctly set modifiers for all constructor types.
157
158 2008-02-04  Marek Safar  <marek.safar@gmail.com>
159
160         A fix for bug #355251
161         * generic.cs: Added base class constraint based type inference.
162
163 2008-02-01  Marek Safar  <marek.safar@gmail.com>
164
165         A fix for bug #357255
166         * decl.cs: One more missing visibility check.
167
168 2008-02-01  Marek Safar  <marek.safar@gmail.com>
169
170         * support.cs: Fixed broken return.
171
172 2008-01-25  Marek Safar  <marek.safar@gmail.com>
173
174         * report.cs: Correctly reset warnings count after probing.
175         
176 2008-01-25  Martin Baulig  <martin@ximian.com>
177
178         * namespace.cs
179         (NamespaceEntry.SymbolFileID): Make this work again after
180         MemberName.ToString() is gone.
181
182 2008-01-25  Marek Safar  <marek.safar@gmail.com>
183
184         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
185         expressions.
186         
187 2008-01-25  Marek Safar  <marek.safar@gmail.com>
188
189         * generic.cs: Use full implicit conversion for type inference fixing.
190         
191 2008-01-24  Marek Safar  <marek.safar@gmail.com>
192
193         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
194         Fixed user operator conversions.
195         
196 2008-01-24  Marek Safar  <marek.safar@gmail.com>
197
198         * generic.cs: Do nullable type to null comparison optimization during
199         resolve phase.
200         
201 2008-01-24  Marek Safar  <marek.safar@gmail.com>
202
203         A fix for bug #355163
204         * generic.cs: Enabled l-value resolve on nullable expressions.
205         
206 2008-01-24  Marek Safar  <marek.safar@gmail.com>
207
208         A fix for bug #353986
209         * class.cs: Ingore static ctors with parameters for any further checks.
210         
211 2008-01-24  Marek Safar  <marek.safar@gmail.com>
212
213         A fix for bug #354310
214         * namespace.cs: Removed redundant check.
215
216 2008-01-24  Marek Safar  <marek.safar@gmail.com>
217
218         A fix for bug #354928
219         * expression.cs: ElementInitializers can be resolved only once.
220         
221 2008-01-24  Marek Safar  <marek.safar@gmail.com>
222
223         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
224         Condition expressions.
225         
226 2008-01-23  Marek Safar  <marek.safar@gmail.com>
227
228         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
229
230 2008-01-22  Marek Safar  <marek.safar@gmail.com>
231
232         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
233         not allowed.
234         
235         * generic.cs: Implemented coalesce expression.
236
237 2008-01-22  Marek Safar  <marek.safar@gmail.com>
238
239         A fix for bug #355145
240         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
241         expression tree type inference.
242
243 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
244
245         Fix #354663
246         * expression.cs (Binary.IsUnsignedType): Fix typo.
247         
248 2008-01-22  Marek Safar  <marek.safar@gmail.com>
249
250         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
251         
252 2008-01-22  Marek Safar  <marek.safar@gmail.com>
253
254         A fix for bug #355161
255         * ecore.cs, expression.cs: Wider range of extension method supported
256         expressions.
257  
258 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
259
260         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
261         AssemblyBuilder to operate in compiler context. Fixes mcs part of
262         bug #354970.
263
264 2008-01-22  Marek Safar  <marek.safar@gmail.com>
265
266         A fix for bug #355148
267         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
268         
269 2008-01-22  Miguel de Icaza  <miguel@novell.com>
270
271         * expression.cs (CreateExpressionTree): Add support for or and
272         logical or, and indent following the coding conventions.
273
274         * typemanager.cs (LinqExpression): renamed from
275         ExpressionTreeManager, for a shorter name.
276
277         Use TypeManager.CoreLookupType to lookup types from our core
278         assemblies and turn those into "Type" variables.
279
280         Consumers that previously used "Namespace" and "Type" from this
281         class should instead use the TypeExpression which is a type that
282         is fully resolved (without involving the regular C# resolution
283         rules). 
284
285         This typically looks like this:
286
287         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
288         new MemberAccess (texpr, name, type_arguments, loc)
289
290         This avoids the problem in: #355178
291
292 2008-01-21  Marek Safar  <marek.safar@gmail.com>
293
294         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
295         feature in parser only as we do in other cases.
296         
297 2008-01-21  Marek Safar  <marek.safar@gmail.com>
298
299         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
300         typemanager.cs: A refactoring of params arguments to reuse existing
301         expressions (params -> array initializer) to emit params argument instead
302         of specialized handling.
303         It was required by expression tree implementation and it has other benefits
304         as well, we now apply same optimization for params arguments as we do for
305         array initializers.
306         
307 2008-01-18  Marek Safar  <marek.safar@gmail.com>
308
309         A fix for bug #353526
310         * generic.cs: A type inference of params arguments may not required any
311         temporary array creation.
312         
313 2008-01-18  Marek Safar  <marek.safar@gmail.com>
314
315         A fix for bug #353534
316         * generic.cs, ecore.cs, expression.cs: A method group type inference is
317         supported for delegates only.
318         
319 2008-01-18  Marek Safar  <marek.safar@gmail.com>
320
321         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
322         type for more than 1 candidates.
323         
324 2008-01-18  Marek Safar  <marek.safar@gmail.com>
325
326         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
327         expressions.
328         
329 2008-01-16  Marek Safar  <marek.safar@gmail.com>
330
331         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
332         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
333         operator) expressions. 
334                 
335 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
336
337         * statement.cs: Avoid declaring an IL variable for this_variable since it is
338         not accessed from the generated IL.
339
340 2008-01-14  Marek Safar  <marek.safar@gmail.com>
341
342         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
343         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
344         statement.cs: The first expression tree implementation drop, mostly
345         infrastructure work.
346
347 2008-01-14  Marek Safar  <marek.safar@gmail.com>
348
349         * ecore.cs (IsNestedChild): Refactored.
350
351 2008-01-11  Marek Safar  <marek.safar@gmail.com>
352
353         * lambda.cs: Don't use a cast on unknown expression statement.
354
355 2008-01-10  Geoff Norton  <gnorton@novell.com>
356
357         * cs-tokenizer.cs: One more token to distinguish between method and lambda
358         arguments
359
360 2008-01-09  Marek Safar  <marek.safar@gmail.com>
361
362         * doc.cs: Report better /doc crash details.
363         
364 2008-01-09  Marek Safar  <marek.safar@gmail.com>
365
366         A fix for bug #352536
367         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
368
369 2008-01-08  Marek Safar  <marek.safar@gmail.com>
370
371         A fix for bug #352287
372         * ecore.cs, expression.cs: Do `this' access checking in all member access
373         expressions.
374         
375 2008-01-08  Marek Safar  <marek.safar@gmail.com>
376
377         * rootcontext.cs, driver.cs: Switch to linq mode by default.
378         
379         * report.cs: Reset message stacks.
380         
381 2008-01-08  Marek Safar  <marek.safar@gmail.com>
382
383         * generic.cs (InferInPhases): Correctly calculate params position.
384         
385 2008-01-08  Marek Safar  <marek.safar@gmail.com>
386
387         * cs-tokenizer.cs: No need to parse full string when parsing lambda
388         arguments.
389
390 2008-01-07  Marek Safar  <marek.safar@gmail.com>
391
392         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
393         
394         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
395         
396         * driver.cs: Updated --help option.
397         
398 2008-01-07  Marek Safar  <marek.safar@gmail.com>
399
400         * generic.cs (InferParamsTypeArguments): Removed.
401         (InferInPhases): Add params type inference.
402         (LowerBoundInference): Fixed scoring mechanism.
403         
404         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
405         
406 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
407
408         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
409         byte array for unsigned "baked" assemblies.
410
411 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
412
413         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
414         array for assemblies that are not strongnamed.
415
416 2008-01-04  Marek Safar  <marek.safar@gmail.com>
417
418         A fix for bug #351481
419         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
420         declaring type for nested generic types.
421         
422 2008-01-04  Marek Safar  <marek.safar@gmail.com>
423
424         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
425         instead of ToString.
426         
427 2008-01-03  Marek Safar  <marek.safar@gmail.com>
428
429         A fix for bug #351047
430         * expression.cs (Binary.ResolveOperator): Allow equality operators between
431         null and structs only when equality and inequality operators are defined
432         either as an user-operators or predefined operators.
433         
434 2008-01-03  Marek Safar  <marek.safar@gmail.com>
435
436         A fix for bug #351047
437         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
438         
439 2008-01-03  Marek Safar  <marek.safar@gmail.com>
440
441         A fix for bug #351257
442         * cs-tokenizer.cs: Advance line number for '\r' correctly.
443         
444 2008-01-03  Marek Safar  <marek.safar@gmail.com>
445
446         A fix for bug #351157
447         * class.cs (Using): Fixed yet another broken cloning.
448         
449         (Block): Put back more sensible default value for statements.
450         
451 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
452
453         * codegen.cs: Allow AssemblyVersion with only major version component.
454         Fixes bug #351055.
455
456 2007-12-29  Marek Safar  <marek.safar@gmail.com>
457
458         A fix for bug #324654
459         * class.cs: Use FullName property as member name.
460
461 2007-12-28  Marek Safar  <marek.safar@gmail.com>
462
463         A fix for bug #342117
464         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
465         constructor constraint.
466
467 2007-12-28  Marek Safar  <marek.safar@gmail.com>
468
469         A fix for bug #338273
470         * class.cs (ProbertyBase): Access modifier checks are required for overrides
471         only.
472
473 2007-12-28  Marek Safar  <marek.safar@gmail.com>
474
475         A fix for bug #350839
476         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
477
478 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
479
480         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
481         GHOP:
482         
483         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
484
485         * statement.cs: Changed some Hashtables to use HybridDictionaries
486         instead. It was observed that some HashTables only contained a few
487         items in the vast majority of cases. Since HybridDictionary is
488         more efficient on small sets (<10 elements), "known_variables"
489         from class ExplicitBlock as well as "labels" and "constants " from
490         class Block were changed to HybridDictionaries. 
491
492         Atsai results: (56216kb->54987kb)
493
494         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
495
496
497 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
498
499         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
500         GHOP:
501         
502         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
503         
504         * expression.cs: foreach loop to for loop, saved on allocation of
505         enumerator (59333kb->59141kb)
506
507         * statement.cs. Changed foreach loops to for loops, saved on
508         allocation of enumerator (59141kb->59006kb)
509
510         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
511         when constructed with no specified capacity. This was causing a
512         few ArrayLists to allocate more memory than they would potentially
513         need in the Block class and MemberCache class. Setting the
514         ArrayLists to construct with a capacity of 1 saves some
515         memory. (56216kb->55585kb)
516
517 2007-12-27  Marek Safar  <marek.safar@gmail.com>
518
519         A fix for bug #347189 (2nd issue)
520         * expression.cs (MemberAccess): Nested type can be found in base non-generic
521         type.
522
523 2007-12-27  Miguel de Icaza  <miguel@novell.com>
524         
525         * report.cs: Do not use colors if stdout and stderr are not a
526         terminal.
527
528 2007-12-27  Marek Safar  <marek.safar@gmail.com>
529
530         A fix for bug #346998
531         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
532         overloads.
533
534 2007-12-27  Marek Safar  <marek.safar@gmail.com>
535
536         A fix for bug #343465
537         * class.cs: Explicit method name for nested types uses dots only.
538
539 2007-12-27  Marek Safar  <marek.safar@gmail.com>
540
541         A fix for bug #343707
542         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
543
544 2007-12-27  Marek Safar  <marek.safar@gmail.com>
545
546         * ecore.cs: Report type inference errors only when arguments count matches
547         parameter count.
548         
549         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
550         
551         * expression.cs, report.cs: New warning.
552         
553         * typemanager.cs: Catch anonymous method type too.
554
555 2007-12-23  Marek Safar  <marek.safar@gmail.com>
556
557         A fix for bug #346379
558         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
559
560 2007-12-23  Marek Safar  <marek.safar@gmail.com>
561
562         A fix for bug #347359
563         * expression.cs (Invocation): Don't resolve already resolved expression.
564
565 2007-12-23  Marek Safar  <marek.safar@gmail.com>
566
567         A fix for bug #347189
568         * class.cs (FixedField): Use non-dependent code only in the define phase.
569
570 2007-12-23  Marek Safar  <marek.safar@gmail.com>
571
572         A fix for bug #348076
573         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
574
575 2007-12-22  Marek Safar  <marek.safar@gmail.com>
576
577         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
578         discovered extension methods.
579
580 2007-12-22  Marek Safar  <marek.safar@gmail.com>
581
582         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
583         method.
584
585 2007-12-21  Miguel de Icaza  <miguel@novell.com>
586
587         * report.cs (ErrorMessage): Add support for using colors on
588         terminals that support it. 
589
590 2007-12-21  Marek Safar  <marek.safar@gmail.com>
591
592         * ecore.cs: Use information about expanded params for error reporting.
593
594 2007-12-21  Marek Safar  <marek.safar@gmail.com>
595
596         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
597         and logic for params overloads.
598         
599 2007-12-15  Miguel de Icaza  <miguel@novell.com>
600
601         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
602         as this is also created from the parser.  Fixes #349034
603
604 2007-12-12  Miguel de Icaza  <miguel@novell.com>
605
606         * statement.cs (Throw.CloneTo): it is valid to have empty
607         expressions for throw. 
608
609 2007-12-03  Marek Safar  <marek.safar@gmail.com>
610
611         * cs-parser.jay: Set delegate constraint parsing region correctly.
612
613 2007-12-03  Marek Safar  <marek.safar@gmail.com>
614
615         A fix for bug #345467
616         * typemanager.cs (IsEqual): Compare generic parameters position only.
617         
618 2007-11-28  Marek Safar  <marek.safar@gmail.com>
619
620         * expression.cs (BaseAccess): Type arguments can be null.
621
622 2007-11-27  Raja R Harinath  <harinath@gmail.com>
623
624         * statement.cs (Block.Resolve): Ensure flow-branching tree is
625         consistent even when an error has occured.
626         (Switch.Resolve): Likewise.
627
628 2007-11-22  Marek Safar  <marek.safar@gmail.com>
629
630         A fix for bug #334505
631         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
632         overrides.
633         
634 2007-11-22  Marek Safar  <marek.safar@gmail.com>
635
636         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
637         refactorings required to resolve extension methods correctly when mixing
638         generics and non-generics members.
639         
640 2007-11-20  Marek Safar  <marek.safar@gmail.com>
641
642         A fix for bug #342584
643         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
644         conversion.
645         
646 2007-11-19  Marek Safar  <marek.safar@gmail.com>
647
648         A fix for bug #342512
649         * delegate.cs: Use delegate argument expression when is available. Don't
650         emit virtual call when class is sealed.
651         
652 2007-11-16  Marek Safar  <marek.safar@gmail.com>
653
654         A fix for bug #325423
655         * assign.cs (FieldInitializer): Use resolved expression for emit.
656         
657         * class.cs: Print less confusing error message.
658         
659 2007-11-16  Marek Safar  <marek.safar@gmail.com>
660
661         * cs-tokenizer.cs: Removed GMCS ifdefs.
662         
663         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
664         mcs.
665         
666         * cs-parser.jay: Disabled nullable check.
667         
668         * generic-mcs: Copied more generic stuff.
669                 
670 2007-11-16  Marek Safar  <marek.safar@gmail.com>
671
672         * gcs-parser.jay: Merged to cs-parser.jay.
673         
674         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
675         * *.csproj, *.sources: Updated to use only jay parser file.
676
677 2007-11-16  Marek Safar  <marek.safar@gmail.com>
678
679         * gcs-parser.jay: Added nullable and default expression feature checks.
680         
681 2007-11-16  Marek Safar  <marek.safar@gmail.com>
682
683         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
684         it fixes many TODOs and hidden bugs.
685         
686         * expression: Removed duplicate error check.
687
688 2007-11-15  Marek Safar  <marek.safar@gmail.com>
689
690         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
691         implicitly type local variable only when it is used in a declaration.
692
693 2007-11-15  Marek Safar  <marek.safar@gmail.com>
694
695         * attribute.cs: Use CS0612 for empty strings.
696
697 2007-11-14  Marek Safar  <marek.safar@gmail.com>
698
699         * lambda.cs, statement.cs: Contextual return may act as a statement.
700
701 2007-11-14  Marek Safar  <marek.safar@gmail.com>
702
703         A fix for a regression cause by #324222
704         * class.cs: Don't report unused even when it implements an interface.
705         
706 2007-11-13  Marek Safar  <marek.safar@gmail.com>
707
708         A fix for bug #341205
709         * ecore.cs, expression.cs: Method group expression cannot do static
710         method access with an instance reference check before overloading takes
711         a place.
712         
713 2007-11-13  Marek Safar  <marek.safar@gmail.com>
714
715         A fix for bug #325359
716         * class.cs: Use predictable name for automatically generated property.
717         
718 2007-11-12  Marek Safar  <marek.safar@gmail.com>
719
720         A fix for bug #324996
721         * expression.cs (Is): Handle case where D is nullable and T is not
722         correctly.
723         
724         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
725         
726 2007-11-12  Marek Safar  <marek.safar@gmail.com>
727
728         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
729         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
730         Flush small error reporting changes.
731         
732 2007-11-09  Marek Safar  <marek.safar@gmail.com>
733
734         A fix for bug #324996
735         * expression.cs: Rewrote Is expression implementation to work with
736         generics, nullable types, anonymous method. A const result expression 
737         uses existing infrastructure instead of custom not fully-featured one.
738         
739 2007-11-08  Marek Safar  <marek.safar@gmail.com>
740
741         A fix for bug #340202
742         * class.cs: Consider generics for volatile field.
743
744 2007-11-08  Marek Safar  <marek.safar@gmail.com>
745
746         A fix for bug #335594
747         * expression.cs: Use conversion rules when handling string addition.
748         
749 2007-11-07  Marek Safar  <marek.safar@gmail.com>
750
751         A fix for bug #336651
752         * expression.cs: Fixed a crash when probing is on.
753         
754 2007-11-07  Marek Safar  <marek.safar@gmail.com>
755
756         A fix for bug #324242
757         * covert.cs: Added a conversion from any nullable-type with an 
758         underlying enum-type to the type System.Enum.
759         
760 2007-11-07  Marek Safar  <marek.safar@gmail.com>
761
762         A fix for bug #324222
763         * class.cs: Report all non-used event fields.
764         
765 2007-11-07  Marek Safar  <marek.safar@gmail.com>
766
767         A fix for bug #325161
768         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
769         qualifier for generic types.
770         
771 2007-11-07  Marek Safar  <marek.safar@gmail.com>
772
773         A fix for bug #322971
774         * expression.cs, ecore.cs: Added intermediate result value check for
775         indexers. 
776         
777 2007-11-07  Marek Safar  <marek.safar@gmail.com>
778
779         A fix for bug #324754
780         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
781         when it was requested.
782
783 2007-11-07  Marek Safar  <marek.safar@gmail.com>
784
785         A fix for bug #325101
786         * expression.cs: Do type not value comparison for `is' expression.
787
788 2007-11-07  Marek Safar  <marek.safar@gmail.com>
789
790         A fix for bug #320236
791         * convert.cs: Don't apply user conversion on underlying target type.
792
793 2007-11-06  Marek Safar  <marek.safar@gmail.com>
794
795         * expression.cs: Don't use unresolved expression for error reporting.
796  
797 2007-11-06  Marek Safar  <marek.safar@gmail.com>
798
799         A fix for bugs #337712, #324490
800         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
801         overloading resolution too.
802         
803         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
804         the process consistent and more robust.
805         
806         * expression.cs, linq.cs, report.cs: Update.
807
808 2007-11-02  Marek Safar  <marek.safar@gmail.com>
809
810         A fix for bug #332909
811         * attribute.cs: Resolve attributes in correct context using error
812         handling procedure.
813         
814         * rootcontext.cs: Define Obsolete attribute members as core members.
815         
816 2007-11-02  Marek Safar  <marek.safar@gmail.com>
817
818         * statement.cs: Removed unused methods.
819         
820 2007-10-31  Wade Berrier  <wberrier@novell.com>
821
822         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
823         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
824         during 'make dist')
825
826 2007-10-31  Marek Safar  <marek.safar@gmail.com>
827
828         A fix for bug #338102
829         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
830         methods registered as non-generics.
831         
832 2007-10-31  Marek Safar  <marek.safar@gmail.com>
833
834         A fix for bugs #337712, #324490
835         * delegate.cs: Delegate covariance and contravariance is not allowed for
836         value types.
837         
838 2007-10-31  Marek Safar  <marek.safar@gmail.com>
839
840         A fix for bug #337719 
841         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
842         `from' keyword.
843         
844 2007-10-30  Marek Safar  <marek.safar@gmail.com>
845  
846         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
847
848 2007-10-29  Marek Safar  <marek.safar@gmail.com>
849  
850         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
851         query expressions.
852
853 2007-10-29  Raja R Harinath  <rharinath@novell.com>
854
855         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
856
857 2007-10-29  Marek Safar  <marek.safar@gmail.com>
858  
859         A fix for bug #334652
860         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
861         extension methods when we have not found the best candidate in normal
862         container.
863
864 2007-10-27  Marek Safar  <marek.safar@gmail.com>
865
866         * AssemblyInfo.cs: Keep up-to-date.
867
868 2007-10-27  Marek Safar  <marek.safar@gmail.com>
869
870         * Makefile: Fixed generics compiler name.
871         
872 2007-10-27  Marek Safar  <marek.safar@gmail.com>
873
874         * lambda.test: removed, lambda parsing is done differently.
875         
876         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
877
878 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
879
880         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
881
882 2007-10-27  Marek Safar  <marek.safar@gmail.com>
883
884         * Makefile, *.sources : All C# compilers are in mcs folder.
885         
886         * *.cs: Use existing 2_1 define for smcs.
887
888 2007-10-26  Marek Safar  <marek.safar@gmail.com>
889
890         A fix for bug #335847
891         * assign.cs, expression.cs: Couple of changes to avoid creating a
892         temporary variable for each object initializer assignment statement. It
893         simplifies struct initialization too, otherwise two temporary variables
894         would be required.
895         Implemented optimization of redundant default element initializers.
896         
897 2007-10-25  Marek Safar  <marek.safar@gmail.com>
898
899         A fix for bug #336766
900         * expression.cs (Class.CheckBase): Use generic name when method is
901         generic.
902         
903 2007-10-25  Marek Safar  <marek.safar@gmail.com>
904
905         A fix for bug #334737
906         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
907         variable and not variable argument for prepared copies.
908
909 2007-10-24  Marek Safar  <marek.safar@gmail.com>
910
911         A fix for bug #325110
912         * class.cs, expression.cs, attribute.cs: Use open generic method when
913         checking conditional attribute.
914         
915 2007-10-24  Marek Safar  <marek.safar@gmail.com>
916
917         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
918         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
919         FeatureIsNotAvailable.
920
921 2007-10-24  Marek Safar  <marek.safar@gmail.com>
922
923         ** C# 3.0 Partial methods
924         
925         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
926         methods support. Because of member cache issue with generics only
927         non-generics partial methods are fully supported.
928         
929 2007-10-23  Marek Safar  <marek.safar@gmail.com>
930         
931         * class.cs, decl.cs: Rewrote member overloads check to cope with 
932         generics and to use member cache for member checking. It also improves
933         performance and fixes remaining overloads issues.
934         
935 2007-10-20  Marek Safar  <marek.safar@gmail.com>
936         
937         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
938         roottypes.cs, typemanager.cs:
939                 
940         A member cache creation logic changed to add members immediately and
941         not rely on fallback. The member cache is now only prefered way
942         how to access and find type declaration members. It saves 5 MB of memory
943         during MWF compilation and makes code ready for more optimizations and
944         clean-ups, it's also a pre-requirement for partial methods.
945         
946 2007-10-18  Raja R Harinath  <harinath@gmail.com>
947
948         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
949         handling for generic parameters.
950
951 2007-10-15  Marek Safar  <marek.safar@gmail.com>
952         
953         * class.cs (FixedField): Removed redundant volatile check.
954         
955 2007-10-15  Marek Safar  <marek.safar@gmail.com>
956         
957         * class.cs, decl.cs: Fixed overload members verification to do only one
958         check per possible collision.
959         
960 2007-10-13  Marek Safar  <marek.safar@gmail.com>
961         
962         A fix for bug #325478
963         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
964         and create only one disposable flags container.
965         
966 2007-10-12  Marek Safar  <marek.safar@gmail.com>
967         
968         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
969         * statement.cs (Fixed): Fixed variables cloning.
970         
971 2007-10-12  Marek Safar  <marek.safar@gmail.com>
972         
973         A fix for bug #333342
974         * class.cs (EventField): Don't mark value type event as synchronized. 
975         
976 2007-10-12  Marek Safar  <marek.safar@gmail.com>
977         
978         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
979         inference to identify best candidate method correctly.
980         (ProperyExpr): A range variable is read only and cannot be modified.
981         
982 2007-10-11  Marek Safar  <marek.safar@gmail.com>
983         
984         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
985         logic to identify best candidate method correctly.
986         
987 2007-10-11  Marek Safar  <marek.safar@gmail.com>
988         
989         * location.cs (Equals, GetHashCode): Removed.
990         
991 2007-10-11  Marek Safar  <marek.safar@gmail.com>
992         
993         * report.cs: Implemented message recorder. It is used mainly for lambda
994         expressions to capture otherwise swallowed error messages.
995         
996         * anonymous.cs, lambda.cs.cs: Do full parameters check.
997
998         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
999         and not at the top.
1000         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
1001                 
1002         * expression.cs (MemberAccess): Always report lookup failure.
1003         
1004         * location.cs: Implemented Equals, GetHashCode.
1005         
1006         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
1007         
1008 2007-10-10  Jb Evain  <jbevain@novell.com>
1009
1010         * codegen.cs: re-enable assembly version check.
1011
1012 2007-10-09  Marek Safar  <marek.safar@gmail.com>
1013         
1014         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
1015         checks.
1016         
1017         * namespace.cs (UsingAlias): Do correct version check.
1018         
1019 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1020         
1021         * expresison.cs, ecore.cs: Issue extension method error message when
1022         appropriate.
1023         
1024         * rootcontext.cs: Added ISO_2 compiler mode option.
1025
1026 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1027         
1028         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
1029          message.
1030         
1031 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1032         
1033         * attribute.cs (GetString, GetBoolean): Work with both literal and
1034         constant.
1035         
1036         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
1037         Moved method overload specific methods to MethodGroupExpr.
1038         
1039         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
1040         it should be less memory consuming.
1041         
1042 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
1043
1044         * codegen.cs: remove the assembly version check until the buildbot is
1045         fixed.
1046
1047 2007-10-07  Jb Evain  <jbevain@novell.com>
1048
1049         * attribute.cs (Attribute.GetString): if the value
1050         expression is a StringConstant, return its string value.
1051
1052 2007-10-07  Jb Evain  <jbevain@novell.com>
1053
1054         * typemanager.cs: add `assembly_version_attribute_type`.
1055         * codegen.cs: on attribute emission, check that the
1056         AssemblyVersionAttribute doesn't overflow.
1057
1058 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1059         
1060         A fix for bug #324677
1061         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
1062         parent container of a scope container with currently resolved one. 
1063         
1064 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1065         
1066         A fix for bug #325534
1067         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
1068         only.
1069         
1070 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1071         
1072         A fix for bug #327504
1073         * class.cs (Operator.Define): Refactored implicit and explicit user
1074         operator conversion rules.
1075         
1076 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1077         
1078         A fix for bug #327520
1079         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
1080         
1081 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1082         
1083         A fix for bug #328022
1084         * class.cs (MethodData.Define): Use correct method to check whether
1085         a method implementents an accessor.
1086         
1087 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1088         
1089         A fix for bug #330069
1090         * statement.cs (Fixed.Resolve): Read the first array element only when
1091         an array is instantiated. 
1092         
1093 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1094         
1095         * expression.cs, assign.cs, generics.cs: Print correct operator when
1096         compound assignment is used.
1097         
1098 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1099         
1100         A fix for bug #325841
1101         * expression.cs (ArrayAccess): Use full argument cloning only for
1102         string compound concatenation.
1103         
1104 2007-10-03  Marek Safar  <marek.safar@gmail.com>
1105         
1106         A fix for bug #328774
1107         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
1108         assignment.
1109         (PropertyExpr.EmitAssign): Fixed string concatenation compound
1110         assignment.
1111
1112 2007-10-03  Raja R Harinath  <rharinath@novell.com>
1113
1114         Fix #328490
1115         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
1116         Event accessibility checks here.  Remove some bogus code that
1117         accidently made GenericMethods work.
1118         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
1119
1120 2007-09-25  Marek Safar  <marek.safar@gmail.com>
1121         
1122         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
1123         
1124         * statement.cs (Block): Refactored AddVariable to allow error handling
1125         customization.
1126         
1127         * generic.cs: New stub.
1128         
1129 2007-09-23  Marek Safar  <marek.safar@gmail.com>
1130         
1131         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
1132         flag.
1133         
1134 2007-09-17  Marek Safar  <marek.safar@gmail.com>
1135
1136         * class.cs: Use partial container to record whether any partial part
1137         contains static field initializer and therefore default contructor has
1138         to be defined.
1139         
1140 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1141
1142         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
1143         mono-list when only one of two partial parts has defined accessibility
1144         modifier.
1145         
1146 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1147
1148         A fix for bug #82845
1149         
1150         * class.cs (TypeContainer): Set correct resolve context for all field
1151         initializers.
1152         
1153 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1154
1155         * assign.cs: Fixed a crash when field is resolved twice with an error.
1156         
1157         * codegen.cs: Changed InFieldInitializer to be flag.
1158         
1159         * anonymous.cs, ecore.cs, expression.cs: Update after
1160         IsInFieldInitializer rename.
1161         
1162         * const.cs: Removed unused parameter.
1163         
1164         * class.cs: Changed the way how we resolve and emit field initializers.
1165         The field initilizers have to have access to contructor block to emit
1166         compiler generated code.
1167
1168 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1169
1170         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
1171         generics use TypeContainer instead.
1172         
1173 2007-09-12  Marek Safar  <marek.safar@gmail.com>
1174         
1175         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
1176
1177         * lambda.cs (ResolveParameters): Use more powerful
1178         InflateGenericArgument.
1179         
1180         * parameters.cs: Better exception message.
1181                 
1182 2007-09-10  Marek Safar  <marek.safar@gmail.com>
1183
1184         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
1185         correct expression block type. 
1186         
1187         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
1188         
1189         * expression.cs (Invocation): Extracted method group resolve to
1190         DoResolveOverload.
1191         
1192 2007-09-07  Marek Safar  <marek.safar@gmail.com>
1193
1194         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
1195         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
1196         
1197         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
1198         generic extension methods.
1199
1200 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1201
1202         A fix for bug #82676 (Do I get it right now?)
1203         * convert.cs (Binary.ResolveOperator): An interface is converted to the
1204         object before a standard conversion is applied.
1205         
1206 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1207
1208         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
1209         #82676.
1210         
1211 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1212
1213         A fix for bug #82676
1214         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
1215         non-generic interface types.
1216         
1217 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1218
1219         A fix for bug #82690
1220         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
1221         
1222 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1223
1224         A fix for bug #82571
1225         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
1226         modifier for container based methods.
1227         
1228 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1229
1230         A fix for bug #82676
1231         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
1232         any interface-type T means to any of interface type T.
1233
1234 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1235
1236         * namespace.cs: We have 2 versions of System.Core assembly.
1237
1238 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1239
1240         A fix for bug #82652
1241         * class.cs (Class.GetClassBases): Compare types and not expressions.
1242
1243 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1244
1245         A fix for bug #82620
1246         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
1247         actually never worked before.
1248         (IndexerAccess): Emit prepared arguments before they are modified.
1249         
1250 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1251
1252         A fix for bug #82563
1253         * assign.cs: Revert wrong fix.
1254         
1255         * expression.cs (VariableReference.EmitAssign): Handle ref reference
1256         correctly.
1257         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
1258         Instead of ldelema/stdind we have to use temporary variables to handle
1259         cases like String.Concat (params string[]).
1260         
1261 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1262
1263         * class.cs: EmitAttributes to Emit rename.
1264         
1265         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
1266         null.
1267         (MemberCore.HasClsCompliantAttribute): Don't depend on 
1268         GetClsCompliantAttributeValue execution.
1269         
1270 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1271
1272         * anonymous.cs: Use shorter type prefix.
1273         
1274         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
1275         when exist.
1276         
1277         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
1278         variables when probing is on.
1279         
1280         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
1281         unresolved variables.
1282         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
1283         handle transparent identifiers.
1284         
1285 2007-08-26  Marek Safar  <marek.safar@gmail.com>
1286
1287         * attribute.cs (IsClsCompliant): Add nullable types test.
1288         
1289 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
1290
1291         * doc.cs : catch other types of exception than XmlException to
1292           report CS1570. Fixed bug #82565.
1293
1294 2007-08-23  Marek Safar  <marek.safar@gmail.com>
1295
1296         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
1297         The number of delegate parameters has to match.
1298         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
1299         arrays.
1300
1301 2007-08-21  Marek Safar  <marek.safar@gmail.com>
1302
1303         * anonymous.cs (AnonymousMethod): Generate private anonymous method
1304         to fix problem with private arguments.
1305
1306 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1307
1308         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
1309         
1310         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
1311         
1312         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
1313         empty. Add cloning suport.
1314         
1315         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
1316
1317 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1318
1319         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
1320         to create EmptyCast. It handles EmptyConstantCast specialization for
1321         constants.
1322         
1323 2007-08-18  Marek Safar  <marek.safar@gmail.com>
1324
1325         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
1326         (EmitArrayArgument): One routine for array arguments.
1327         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
1328         
1329 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1330
1331         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
1332
1333 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1334
1335         * anonymous.cs: MemberLookupFinal update.
1336
1337         * class.cs (ConstructorInitializer): Is expression based.
1338         
1339         * delegate.cs: MethodGroupExpr update.
1340         
1341         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
1342         messages.
1343         (Error_MemberLookupFailed): Customizable error override.
1344         (MethodGroupExpr): Keep queried type for later usage.
1345         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
1346         resolve.
1347         
1348         * expression.cs: Error_MemberLookupFailed refactoring.
1349         (New.DoResolve): Resolve as much as possible.
1350         (ElementInitializer.Error_MemberLookupFailed): Object initializer
1351         customization for invalid member types.
1352
1353         * statement.cs: MethodGroupExpr update.
1354         
1355 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1356
1357         * modifier.cs (Check): Check all modifiers and not only accessibility
1358         ones.
1359
1360 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1361
1362         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
1363         type and not an expression.
1364
1365 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1366
1367         * statement.cs (Catch.Clone): Type and variable can be null.
1368
1369 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1370
1371         A fix for bug #81979
1372         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
1373         I am really not sure whether this is the best fix.
1374         
1375         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
1376         only once.
1377         
1378 2007-08-14  Marek Safar  <marek.safar@gmail.com>
1379
1380         ** C# 3.0 Object and collection initializers (major re-write)
1381         
1382         * assign.cs (DoResolve): Initializers are not assign related.
1383         
1384         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
1385         used during collection or object initialization.
1386         
1387         * expression.cs (Error_InvalidArguments): Add initializers specific
1388         messages. More will come later because it requires some general
1389         refactoring.
1390         (New.DoResolve): Better error handling for unsafe types.
1391         (EmptyExpressionStatement): New class.
1392         (ElementInitializer): An object initializer expression.
1393         (CollectionElementInitializer): A collection initializer expression.
1394         (CollectionOrObjectInitializers): A block of object or collection
1395         initializers.
1396         (NewInitialize): New expression with element/object initializers.
1397         
1398         * statement.cs: Reverted object/collection initializer hacks.
1399         
1400         * typemanager.cs (CSharpName): Filter __arglist type.
1401         
1402 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1403
1404         ** C# 3.0 Anonymous Types (update to the latest standard)
1405         
1406         * expression.cs (Binary.ResolveOperator): Threat all null based types
1407         same.
1408         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
1409         (AnonymousTypeParameter): Updated.
1410         
1411         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
1412         (AnonymousTypeClass): New anonymous type container.
1413         
1414         * class.cs (AddField): Return operation result.
1415         
1416         * generic.cs: Another empty TypeArguments overload.
1417         
1418         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
1419         are stored at top of normal hierarchy.
1420         
1421         * typemanager.cs (CSharpName): Filter anonymous types.
1422         
1423 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1424
1425         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
1426         as single Concat call. How could we miss that :-(
1427         
1428 2007-08-08  Marek Safar  <marek.safar@gmail.com>
1429
1430         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
1431         
1432 2007-08-07  Miguel de Icaza  <miguel@novell.com>
1433
1434         * expression.cs: Fix the previous commit, the creation of the
1435         arguments array list needs also to be conditional on the arguments
1436         not being null.
1437
1438         * class.cs: Add a little bit of help to help narrow down problems.
1439
1440         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
1441         not try to copy in that case. 
1442
1443         * driver.cs: When building SMCS, include a new different set of
1444         default assemblies here.   Do this here so we can control whether
1445         to include the default assemblies with /noconfig.
1446
1447 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1448
1449         A fix for bug #81979
1450         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
1451         only.
1452
1453 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1454
1455         A fix for bug #82300
1456
1457         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
1458         we are in probing scope.
1459
1460 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1461
1462         A fix for bug #82301
1463
1464         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
1465         (Statement.CloneTo): Clone and not map children blocks.
1466
1467 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1468
1469         A fix for bug #82299
1470
1471         * expression.cs (LocalVariableReference.CloneTo): Remap local info
1472         variable too.
1473         
1474         * statement.cs (Statement.CloneTo): Clone variables before statements
1475         to allow remaping of local variables.
1476
1477 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1478
1479         A fix for bug #82296
1480
1481         * anonymous.cs,
1482         * report.cs: Log crash details for future clone problems.
1483         
1484         * statement.cs (Return.Clone): Don't clone non-existent expression.
1485
1486 2007-08-03  Raja R Harinath  <harinath@gmail.com>
1487
1488         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
1489         (Class.AddBasesForPart): Move CS0537 check here from ...
1490         * cs-parser.jay (class_declaration): ... here.  Move calling of
1491         'AddBasesForPart' to ...
1492         (class_bases): ... here.
1493         (struct_declaration, interface_declaration): Update to changes.
1494
1495 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1496
1497         A fix for bug #81923
1498
1499         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
1500         conversion is allowed.
1501
1502 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1503
1504         A fix for bug #81564
1505
1506         * ecore.cs (EventExpr): Add IsBase handling.
1507
1508         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
1509         too.    
1510         
1511 2007-08-02  Raja R Harinath  <harinath@gmail.com>
1512
1513         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
1514         * cs-parser.jay: Some whitespace cleanups.
1515         (current_delegate): New.
1516         (type_name): New.
1517         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
1518         a dummy code block, and use 'type_name' instead of 'member_name'.
1519         (interface_declaration, class_declaration): Likewise.
1520         (delegate_declaration): Likewise.  Rearrange slightly and use
1521         'current_delegate'.
1522         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
1523         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
1524
1525 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1526
1527         A fix for bug #82039
1528
1529         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
1530         available.
1531
1532         * typemanager.cs (CSharpName): Split to string overload.
1533
1534 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1535
1536         * expression.cs,
1537         * report.cs: Updated warning CS0472.
1538
1539 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1540
1541         A fix for bug #82181
1542         * cs-parser.jay,
1543         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
1544
1545 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1546
1547         A fix for bug #82277
1548         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
1549
1550 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1551
1552         ** C# 3.0 Type Inference (major bits are working)
1553         
1554         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
1555         (.ImplicitStandardConversionExists): Uses compatible.
1556         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
1557         (.InferReturnType): New method.
1558         (.Compatible): Refactored.
1559         (.ResolveParameters): Uses factory to create resolved parameters.
1560         (.CompatibleMethod): Add probing mode support.
1561         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
1562         clearly distinguish between 2 different operations.
1563         (LambdaMethod): Moved to lambda.cs.
1564         (AnonymousMethod): Removed unused fields and methods.
1565         (AnonymousDelegate): Simplified.
1566         
1567         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
1568         
1569         * convert. cs (ImplicitConversionStandard): Compatible works differently.
1570         
1571         * delegate.cs (Delegate): New mehods to reduce code duplication.
1572         (.GetConstructor): New method.
1573         (.GetInvokeMethod): New method.
1574         (DelegateCreation): Updated.
1575         
1576         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
1577         does not exist.
1578         (OverloadResolve): Made probing little bit faster.
1579         
1580         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
1581         when probing is on.
1582         
1583         * generic.cs (TypeInferenceContext): Dummy implementation.
1584         
1585         * iterators.cs: Updated after Resolve/Define rename.
1586         
1587         * lambda.cs (LambdaExpression)
1588         (.ResolveParameters): Handles both type of arguments and type inference too.
1589         
1590         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
1591         (InflateTypes): Updated.
1592         
1593         * support.cs (InflateTypes): Changed signature and updated.
1594         
1595         * typemanager.cs (LookupMemberCache): Better dynamic type check.
1596         (MemberLookup_FindMembers): More MS tricks.
1597         (GetParameterData): Ditto.
1598         (GetDelegateParameters): Uses quick path for dynamic types.
1599         
1600 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1601
1602         * class.cs (MethodData.Define): EmitContext is required for generic stuff
1603         only.
1604
1605 2007-07-31  Marek Safar  <marek.safar@gmail.com>
1606
1607         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
1608         syntax.
1609         
1610 2007-07-26  Jb Evain  <jbevain@novell.com>
1611
1612         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
1613         which takes a boolean 'report_errors', similar to the GetMethod.
1614         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
1615         in .net 2.1, do not report errors here.
1616
1617         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
1618         System.Runtime.CompilerServices.RequiredAttributeAttribute and
1619         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
1620         in .net 2.1.
1621
1622         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
1623         of the type InternalsVisibleToAttribute before the first call
1624         to CoreLookupType which is allowed to fail (third boolean parameter
1625         to true). Because, during the resolution for a type that is not
1626         immediately found, we try to check if the type is not defined in
1627         a friend assembly, and to do so, we need the
1628         InternalVisibleToAttribute.
1629
1630 2007-07-23  Miguel de Icaza  <miguel@novell.com>
1631
1632         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
1633         feature that allows structs to be compared against null and inline
1634         the result as true or false.
1635
1636         Notice that the same code is not permitted inside a generic block
1637         of code that would do:
1638
1639         class Foo<T> where T : struct {
1640             bool Eval (T x)
1641             {
1642                  return x == null;
1643             }
1644         }
1645
1646         It is only allowed if the type of T is not bound (no where
1647         clause).   In my opinion, this CSC 2 behavior is broken but people
1648         seem to be using it (IronRuby does, a few bug reports on bugzilla
1649         have it and some people have complained about it).
1650
1651         All of the users that depend on this behavior have code that is
1652         very likely broken. 
1653         
1654         * report.cs (Warning, Error): make these take object arguments,
1655         not strings, as that allows us to take advantage of Format.
1656
1657 2007-07-20  William Holmes  <billholmes54@gmail.com>
1658
1659         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
1660           Left member variable for the Count.
1661         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
1662           MemberName.CountTypeArguments to avoid a NRE. 
1663
1664         This code is contributed under the MIT X11 license
1665
1666 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1667
1668         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
1669
1670 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1671
1672         * doc.cs : generic method arguments are written as ``x while generic
1673           type arguments are `x. Combined with the previous change, fixed bug
1674           #79706.
1675
1676 2007-07-18  Raja R Harinath  <rharinath@novell.com>
1677
1678         Fix #82120
1679         * expression.cs (Binary.ResolveOperator): When converting
1680         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
1681
1682 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1683
1684         * doc.cs : when T: or whatever x: is specified, it does not really
1685           check the doc comment's syntax correctness. Fixed bug #82006.
1686
1687 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1688
1689         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
1690         LambdaExpression better.
1691         
1692         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
1693         
1694         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
1695         
1696         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
1697         as it can be generated.
1698         
1699         * expression.cs (Invocation.Error_InvalidArguments): Show correct
1700         modifiers.
1701         
1702         * lambda.cs (LambdaExpression): Refactored to share same code with
1703         AnonymousMethodExpression.
1704         
1705 2007-07-17  Marek Safar  <marek.safar@gmail.com>
1706
1707         * anonymous.cs (MakeName): Include host name for easier debugging.
1708         (LambdaMethod): New class for lambda spcecific stuff.
1709         
1710         * attribute.cs: Set EmitContext return type.
1711
1712         * class.cs: Set EmitContext return type.
1713         
1714         * codegen.cs (EmitContext): Return type cannot be null to stop messing
1715         with null/void meaning.
1716         
1717         * iterators.cs (ContainerType): Implemented.
1718         
1719         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
1720         
1721         * statement.cs (Return): Updated to lambda expressions.
1722         (Block.CloneTo): Parent can be null.
1723                 
1724 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1725
1726         A fix for bug #81917
1727         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
1728         
1729         * class.cs (FixedField): Check whether field is in unsafe scope.
1730
1731         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
1732         (FieldExpr.Emit): Fixed buffers cannot be volatile.
1733
1734         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
1735         FieldExpr.
1736         
1737         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
1738                 
1739 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1740
1741         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
1742         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
1743         from Report class.
1744
1745 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1746
1747         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
1748         
1749 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1750
1751         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
1752         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
1753         
1754         * codegen.cs(EmitContext): Add ProbingMode flag.
1755         
1756         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
1757         
1758         * driver.cs: For now set both warning values.
1759         
1760         * ecore.cs (SimpleName): Name is readonly.
1761         (MethodGroup.OverloadResolve): One quick path for probing.
1762         
1763         * expression.cs (Unary): Set Oper r/o.
1764         (Binary): Set Oper r/o.
1765         (ParameterReference): Set few instance variables as r/o.
1766         (ParameterReference.DoResolveBase): Don't capture aruments when 
1767         the probing is on.
1768         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
1769         (Arglist): arguments are private.
1770         (SizeOf): type is private and r/o.
1771         (MemberAccess): arguments are private.
1772
1773         * report.cs: Enhanced reporting on/off capabilities.
1774         
1775         * lambda.cs: Uses ec.IsInProbingMode.
1776         (ContextualReturn): Derives from return.
1777         
1778         * rootcontext.cs: For now set both warning values.
1779         
1780         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
1781         copy if one exists.
1782         (Return.Resolve): Don't die immediately.
1783         (Block.Resolve): Speed-up probing.
1784         (Block.CloneTo): Clone only child blocks.
1785
1786 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
1787
1788         * iterators.cs: reverted Miguel's latest change (r81925) as it
1789         breaks the build in System.
1790
1791 2007-07-13  Miguel de Icaza  <miguel@novell.com>
1792
1793         * iterators.cs (Yield.CheckContext): Check for the iterator type
1794         also here as we can call into Yield even in codepaths that are not
1795         directly checked by
1796         (MethodOrOperator is the only path that was checked).
1797
1798         In addition to the standard check, use a more specific check for
1799         constructors to report a more verbose error. 
1800
1801 2007-07-12  Miguel de Icaza  <miguel@novell.com>
1802
1803         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
1804         report the warning and continue 
1805
1806         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
1807         values on the stack on the call to Emit.   Use EmitStatement if
1808         possible, or using Emit + Pop if not possible.   Fixes #82064
1809
1810 2007-07-12  Raja R Harinath  <rharinath@novell.com>
1811
1812         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
1813         avoid try...finally in some cases.
1814
1815 2007-07-10  Marek Safar  <marek.safar@gmail.com>
1816
1817         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
1818         
1819         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
1820         instead of method. Re-use standard error handling.
1821         (ConstructorInitializer.Emit): Simplified.
1822         
1823         * delegate.cs: Updated after Invocation.EmitCall change.
1824         
1825         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
1826         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
1827         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
1828         method and don't permanently changing input arguments.
1829         (MethodGroupExpr): Introduced resolved best_candidate, when method group
1830         is resolved it has one of the candidates is the best one which is later
1831         used to emit. Removed a few unused method.
1832         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
1833
1834         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
1835         (Binary.ResolveOperator): Ditto.
1836         (ConditionalLogicalOperator.DoResolve): Ditto.
1837         (Invocation): Uses method group.
1838         (Invocation.DoResolve): Simplified.
1839         (Invocation.EmitCall): Removed useless is_static.
1840         (Invocation.Emit): Delegate to method group.
1841         (Invocation.EmitStatement): Simplified.
1842         (New): Uses method group.
1843         (MemberAccess.DoResolve): Don't destroy original expression.
1844         
1845         * statement.cs (ForEach.Resolve): Use null for no method arguments.
1846         
1847 2007-07-04  Marek Safar  <marek.safar@gmail.com>
1848
1849         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
1850         
1851         * anonymous.cs,
1852         * lambda.cs: Add custom error message type.
1853
1854 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1855
1856         * lambda.cs: Simplified little bit.
1857         
1858         * parameter.cs: Introduced ImplicitLambdaParameter.
1859         (Parameters.CreateFullyResolved): New factory instead of ctor.
1860         
1861         * anonymous.cs,
1862         * class.cs,
1863         * delegate.cs: Updated parameter creation.
1864         
1865 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1866
1867         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
1868         arguments.
1869         
1870         * generic.cs: Synchronized with gmcs.
1871         
1872 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1873
1874         * class.cs (Indexer): Check return type as soon as possible.
1875         
1876         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
1877         members too.
1878         
1879         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
1880         
1881         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
1882         
1883         * parameter.cs (Parameter): Use expression type when it is available.
1884         
1885         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
1886         method modifier for the first parameter only.
1887
1888 2007-06-24  Marek Safar  <marek.safar@gmail.com>
1889
1890         A fix for bug #81938
1891         * typemanager.cs (ChangeType): Fixed couple of char conversions.
1892         
1893         * constant.cs: Tide up an exception message.
1894
1895 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1896
1897         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
1898         an uninitialized variable is used.
1899         
1900         * expression.cs (LocalVariableReference.DoResolve): Ditto.
1901
1902 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1903
1904         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
1905         not found error handling.
1906
1907         * expression.cs (ArrayCreation): Removed redundant fields and little bit
1908         simplified.
1909         (ArrayCreation.ResolveArrayElement): To be ready to customization.
1910         (ArrayCreation.DoResolve): Simplified.
1911         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
1912         its own resolve process.
1913         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
1914
1915 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1916
1917         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
1918         more error details.
1919         
1920 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1921
1922         * cs-tokenizer.cs: Removed var related stuff.
1923         
1924         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
1925         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
1926         a type and a keyword at same time.
1927         
1928         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
1929         matches to "var".
1930         
1931         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
1932         implicitly typed arrays, more changes will follow.
1933         
1934         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
1935         
1936 2007-06-19  Marek Safar  <marek.safar@gmail.com>
1937
1938         * ecore.cs (VarExpr): Removed Handled field.
1939         
1940         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
1941         build-in assign functionality.
1942         (ForEach.Resolve): Removed all implicitly typed local variable code and
1943         simplified.
1944         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
1945         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
1946
1947 2007-06-18  Marek Safar  <marek.safar@gmail.com>
1948
1949         * assign.cs: Removed implicitly typed local variable check.
1950         
1951         * expression.cs (LocalVariableReference.DoResolve): Add check for self
1952         referencing implicitly typed local variable.
1953         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
1954         variable here.
1955         
1956         * statement.cs (Fixed): Removed unsupported implicitly typed local
1957         variable code.
1958
1959 2007-06-15  Marek Safar  <marek.safar@gmail.com>
1960
1961         * decl.cs (MemberName): Moved all Unbound stuff to parser.
1962
1963 2007-06-14  Marek Safar  <marek.safar@gmail.com>
1964
1965         A fix for bugs #81855 and #76274
1966         * attribute.cs (AttachTo): Always set owner for global attributes to
1967         prefined owner.
1968         
1969         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
1970         usefull too.
1971         
1972         * cs-parser.jay: Assembly and module attributes must precede all other
1973         elements except using clauses and extern alias declarations.
1974
1975 2007-06-13  Marek Safar  <marek.safar@gmail.com>
1976
1977         A fix for bug #81748
1978         * cs-tokenizer.cs,
1979         * expression.cs: More checks for non ISO-1 features.
1980
1981 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1982
1983         A fix for bug #81807
1984         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
1985         present inside switch statement and it is required by nullable check.
1986
1987 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1988
1989         A fix for bug #81840
1990         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
1991         when type matching fails.
1992         
1993         * namespace.cs: Tiny error message change.
1994
1995 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1996
1997         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
1998         reporting. Added automatic property check.
1999         
2000         * class.cs: Updated after CheckAbstractAndExtern relocation.
2001         (AEventPropertyAccessor.GetSignatureForError): Customized.
2002         
2003 2007-06-11  Marek Safar  <marek.safar@gmail.com>
2004
2005         * class.cs (DefineBaseTypes): Base type can be undefined.
2006         
2007         * ecore.cs (TypeLookup): Minor refactoring.
2008         (DoResolveAsTypeStep): Removed redundant check.
2009
2010         * namespace.cs (Lookup): Removed redundant check.
2011                 
2012         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
2013         ResolveAsTypeTerminal step.
2014         (BootstrapCorlib_*): Simplified.
2015         (PopulateCoreType): Core types can be now external.
2016
2017 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2018
2019         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
2020          verification only.
2021          (InferTypeArguments): Infers anonymous expression type arguments.
2022          (Compatible): Split to Compatible and InferTypeArguments. 
2023         
2024         * lambda.cs: Updated.
2025
2026 2007-06-08  Marek Safar  <marek.safar@gmail.com>
2027
2028         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
2029
2030 2007-06-07  Raja R Harinath  <harinath@gmail.com>
2031
2032         Fix #80477, cs0135-2.cs, cs0135-3.cs
2033         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
2034         names to the "known" variables list.
2035         (Block.CheckInvariantMeaningInBlock): Handle the fact the
2036         parameter names are also "known".
2037         (Block.CheckError136): Remove.
2038         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
2039         null.
2040
2041 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2042
2043         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
2044
2045 2007-06-06  Marek Safar  <marek.safar@gmail.com>
2046
2047         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
2048         internal error not an user error.
2049          
2050         * expression.cs (IsApplicable): Refactored to make debugging easier.
2051
2052         * support.cs: More tricks for non-mono runtimes.
2053         
2054         * typemanager.cs (CoreLookupType): Made public.
2055         (InitSystemCore): All linq specific stuff moved to linq.cs
2056
2057 2007-06-05  Marek Safar  <marek.safar@gmail.com>
2058
2059         * typemanager.cs (CSharpSignature): One more missing build-in types
2060         replacement.
2061         More tricks for non-mono runtime.
2062
2063 2007-06-05  Raja R Harinath  <harinath@gmail.com>
2064
2065         * statement.cs (Block.CheckError136_InParents): Remove.
2066         (Block.AddVariable): Use GetParameterInfo instead.
2067         (ToplevelBlock.ProcessArguments): Likewise.
2068
2069 2007-06-04  Raja R Harinath  <rharinath@novell.com>
2070
2071         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
2072         information too.
2073         (ToplevelBlock.GetParameterInfo): Split out of ...
2074         (ToplevelBlock.GetParameterRefernce): ... this.
2075         (ToplevelBlock.ParameterMap): Remove.
2076         * expression.cs (ParameterReference): Update to use
2077         ToplevelParameterInfo.
2078
2079         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
2080         regression.
2081
2082         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
2083         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
2084
2085         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
2086         (ToplevelBlock.ProcessParameters) ... here.
2087         (ToplevelBlock..ctor): Invoke it.
2088
2089         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
2090         new parameters.
2091
2092         * statement.cs (IKnownVariable): New interface.
2093         (LocalInfo): Implement it.
2094         (ToplevelParameterInfo): New class.
2095         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
2096         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
2097         GetKnownVariableInfo.
2098
2099 2007-06-03  Raja R Harinath  <harinath@gmail.com>
2100
2101         Partly speed up CS0136 error checks.
2102         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
2103         'recurse' parameter.
2104         (Block.DoCheckError136): Only check errors in parameters.  Move
2105         local variable checks ...
2106         (Block.AddVariable): ... here, and ...
2107         (ToplevelBlock.ResolveMeta): ... here.
2108
2109 2007-06-02  Raja R Harinath  <harinath@gmail.com>
2110
2111         * statement.cs (Block.IsChildOf): Remove.
2112
2113         * statement.cs (Statement.Clone): Move special case code ...
2114         (Block.CloneTo): ... here.
2115
2116 2007-05-29  Raja R Harinath  <rharinath@novell.com>
2117
2118         * statement.cs (ToplevelBlock.container): Remove field.  It's
2119         redundant with 'Parent'.
2120         (ToplevelBlock.ContainerBlock): Remove accessor.
2121         (ToplevelBlock..ctor): Update to changes.  Register anonymous
2122         child with parent here, ...
2123         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
2124         current_block.
2125         (start_anonymous): Don't save current_block.
2126         (top_current_block): Remove.
2127
2128         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
2129         (Block.Resolve): Update to changes.
2130         (Block..ctor): Move setting of "correct" 'Toplevel'
2131         and 'Explicit' fields to ...
2132         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
2133
2134 2007-05-27  Raja R Harinath  <harinath@gmail.com>
2135
2136         Kill Block.Implicit
2137         * statement.cs (Block.Implicit): Remove.
2138         (Block): Update to changes.
2139         * flowanalysis.cs: Likewise.
2140
2141         Mildly speed up CheckInvariantMeaningInBlock
2142         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
2143         Recursively call AddKnownVariable to all enclosing blocks.
2144         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
2145         Remove recursive calls.
2146         (Block): Update to changes.
2147
2148         New ExplicitBlock invariants
2149         * statement.cs (Block.Explicit): New field.  It points to the
2150         immediately enclosing non-implicit block.
2151         (Block..ctor): Maintain the invariant.
2152         * cs-parser.jay: Take advantage of invariant.
2153
2154         Introduce ExplicitBlock
2155         * statement.cs (ExplicitBlock): New.
2156         (ToplevelBlock): Derive from it.
2157         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
2158         sense of flag.
2159         (Block.Implicit): Update to changes.
2160         * cs-parser.jay: Update to changes.
2161
2162         Remove unused field
2163         * codegen.cs (EmitContext.IsLastStatement): Remove.
2164         * statement.cs (Block.DoEmit): Update to changes.
2165
2166 2007-05-25  Raja R Harinath  <rharinath@novell.com>
2167
2168         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
2169         modifying current_block directly.
2170
2171 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
2172         
2173         * class.cs: Implemented automatic properties (C# 3.0)
2174           Thanks to Marek for the help.
2175
2176 2007-05-23  Raja R Harinath  <rharinath@novell.com>
2177
2178         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
2179         variable as assigned, note also that all its components are
2180         assigned too.
2181         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
2182
2183 2007-05-19  Marek Safar  <marek.safar@gmail.com>
2184
2185         * anonymous.cs, class.cs: Emit Compiler generated attribute when
2186         member is marked as compiler generated.
2187         
2188         * decl.cs (MemberCore): Refactored ModFlags into property.
2189
2190         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
2191         (Check): Check only accessibility modifiers.
2192
2193 2007-05-18  Raja R Harinath  <rharinath@novell.com>
2194
2195         Track all assignable slots in one bit array
2196         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
2197         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
2198         logic from VariableMap constructor here.  Use the same 'offset'
2199         variable that's later used for computing offsets of local
2200         variables.
2201         * flowanalysis.cs (UsageVector.parameters): Remove.
2202         (UsageVector): Update to changes.
2203         (VariableMap): Remove.
2204
2205         Avoid creating ParameterMap in every block
2206         * statement.cs (Block.ParameterMap): Move ...
2207         (ToplevelBlock.ParameterMap): ... here.
2208         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
2209         only once.
2210         * flowanalysis.cs (FlowBranching.param_map): Remove.
2211         (FlowBranching.UsageVector): Update to changes.
2212         (FlowBranchingToplevel.CheckOutParameters): Likewise.
2213
2214         * statement.cs (Block.CloneTo): Clone Toplevel field too.
2215
2216         * expression.cs (ParameterReference): Distinguish between block
2217         where parameter was referenced and declared.
2218
2219 2007-05-18  Marek Safar  <marek.safar@gmail.com>
2220
2221         * flowanalysis.cs, statement.cs: Put back improved error handling.
2222
2223 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
2224         
2225         * assign.cs:
2226         * expression.cs:
2227           Imporved object and collection initialization (C# 3.0).
2228
2229 2007-05-15  Marek Safar  <marek.safar@gmail.com>
2230
2231         A fix for bug #81380
2232         * expression.cs (Is.DoResolve): Only value types have constant `is'
2233         behaviour.
2234
2235 2007-05-15  Raja R Harinath  <rharinath@novell.com>
2236
2237         * statement.cs (ToplevelBlock.child): Remove.
2238
2239 2007-05-15  Raja R Harinath  <harinath@gmail.com>
2240
2241         Rationalize ResolveMeta: refactoring
2242         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
2243         out constant handling code into ...
2244         (Block.DoResolveConstants): ... this.
2245
2246         Rationalize ResolveMeta: kill local_map
2247         * statement.cs (Block.local_map, Block.LocalMap): Remove.
2248         (Block.AssignableSlots): New.
2249         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
2250         for locals -- move code from VariableMap here.  Avoid unnecessary
2251         allocations.
2252         * flowanalysis.cs (FlowBranching.local_map): Remove.
2253         (FlowBranching..ctor): Use Block.AssignableSlots.
2254         (VariableMap): Remove unused constructors.
2255
2256 2007-05-11  Raja R Harinath  <rharinath@novell.com>
2257
2258         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
2259
2260 2007-05-11  Marek Safar  <marek.safar@gmail.com>
2261
2262         * typemanager.cs (IsFriendAssembly): Should not be called for building
2263         assembly.
2264
2265 2007-05-09  Marek Safar  <marek.safar@gmail.com>
2266
2267         * literal.cs (NullConstant): Print null in all cases.
2268         
2269         * expression.cs (Binary.ResolveOperator): Implemented delegate
2270          comparison based on C# 2.0 changes.
2271
2272 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
2273
2274         This code is contributed under the MIT X11 license
2275         
2276         The following enables support for several C# 3.0 language features:
2277         
2278         * cs-tokenizer.cs: Added support for the "var" keyword.
2279         
2280         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
2281           Added VarExpr class to facilitate type inferencing.
2282         
2283         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
2284           to support anonymous types.
2285         
2286         * assign.cs: Added support for type inferencing and initialization.
2287         
2288         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
2289         
2290         * expression.cs: Added implicit array support to ArrayCreation.
2291           Added 5 types and 1 interface:
2292           
2293           IInitializable                Implementing classes can inject initializing
2294                                         statements after object instantiation.
2295           
2296           Initializer                   Stores data for object initialization.
2297           
2298           AnonymousType                 An expression for anonymous types.
2299           
2300           AnonymousTypeParameter        Stores data about an anonymous type's field.
2301           
2302           NewInitialize                 An expression for object initialization.
2303           
2304           CollectionInitialize          An expression for collection initialization.
2305         
2306         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
2307           statements.
2308
2309 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2310
2311         A fix for bug #81500
2312         * cs-tokenizer.cs: Add special handling for coalescing operator.
2313
2314 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2315
2316         A fix for bug #81529
2317         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
2318         its value from base class until it is redefined.
2319
2320 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2321
2322         Fix regression in cs0631-3.cs
2323         * cs-parser.jay (operator_declarator): Add opt_attributes to error
2324         fallback.  Make error fallback catch more cases.
2325
2326 2007-05-01  Miguel de Icaza  <miguel@novell.com>
2327
2328         * cs-parser.jay: Allow parameters in operator declarations to have
2329         attributes. 
2330
2331 2007-04-27  Miguel de Icaza  <miguel@novell.com>
2332
2333         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
2334         exists. 
2335
2336         * lambda.cs (ContextualReturn.Resolve): An expression is valid
2337         inside the ContextualReturn, it does not have to be an
2338         ExpressionStatement. 
2339
2340 2007-04-24  Miguel de Icaza  <miguel@novell.com>
2341
2342         * lambda.cs (ContextualReturn.Resolve): if the return type is not
2343         set, set it.
2344
2345 2007-04-23  Miguel de Icaza  <miguel@novell.com>
2346
2347         * anonymous.cs (AnonymousContainer): split the virtual Resolve
2348         method in two methods: ResolveNoDefine and Resolve.
2349
2350         ResolveNoDefine will stop just after ResolveTopBlock has been
2351         called.   
2352
2353         Resolve will then continue by creating a method and issuing the
2354         call to method.Define ().
2355
2356         (AnonymousMethod): Split and implement the new Resolve and
2357         ResolveNoDefine as well.
2358
2359         * lambda.cs (LambdaExpression): Split the anonymous method
2360         resolution code into a separate routine (CoreCompatibilityTest)
2361         from DoCompatibleTest.
2362
2363         (LambdaExpression.TryBuild): New method, this method tries to
2364         build the LambdaExpression with the given set of types to be used
2365         as the types for the various parameters of the lambda expression. 
2366
2367         If the compilation succeed with the given types, the infered type
2368         of the Anonymous method is returned, otherwise null is returned.
2369
2370 2007-04-23  Marek Safar  <marek.safar@gmail.com>
2371
2372         A fix for bug #81414
2373         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
2374
2375 2007-04-22  Miguel de Icaza  <miguel@novell.com>
2376
2377         * cs-tokenizer.cs: Change various identifiers here from the
2378         camelCasing to the recommended Linux-like style for instance
2379         variables from the Coding Guidelines. 
2380
2381 2007-04-19  Martin Baulig  <martin@ximian.com>
2382
2383         * convert.cs
2384         (Convert.ImplicitReferenceConversionCore): Allow conversions from
2385         System.Enum to System.ValueType.
2386
2387 2007-04-13  Martin Baulig  <martin@ximian.com>
2388
2389         Rewrote implicit reference conversions.  We need to distinguish
2390         between implicit reference conversions (13.1.4) and implicit
2391         boxing conversions (13.1.5).
2392
2393         According to the spec, there's an an implicit conversion
2394         "From a one-dimensional array-type S[] to IList<T> and base
2395         interfaces of this interface, provided there is an implicit
2396         reference conversion from S to T."  Note that this does not
2397         include boxing conversions.
2398
2399         * convert.cs
2400         (Convert.ImplicitTypeParameterBoxingConversion): New method.
2401         (Convert.ImplicitReferenceConversion): Split into
2402         ImplicitReferenceConversionCore() and
2403         ImplicitBoxingConversionExist().
2404         (Convert.ImplicitReferenceConversionExists): Use the new
2405         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
2406
2407 2007-04-12  Martin Baulig  <martin@ximian.com>
2408
2409         * convert.cs (Convert.ImplicitReferenceConversion): Move the
2410         `TypeManager.null_type' checks up to the top of the method.
2411
2412 2007-04-11  Marek Safar  <marek.safar@gmail.com>
2413
2414         A fix for bug #81350
2415         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
2416         extension methods.
2417
2418 2007-04-11  Martin Baulig  <martin@ximian.com>
2419
2420         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
2421         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
2422         to make this work for generic classes; fixes #79561.
2423
2424 2007-04-11  Martin Baulig  <martin@ximian.com>
2425
2426         * expression.cs (As): Add support for nullable types; fixes #79371.
2427
2428 2007-04-11  Martin Baulig  <martin@ximian.com>
2429
2430         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
2431         `type.FullName' is null; fixes #80243.
2432
2433 2007-04-11  Martin Baulig  <martin@ximian.com>
2434
2435         * expression.cs (Invocation.IsApplicable): Don't modify the method
2436         if type inference succeeded, but the method was not applicable.
2437         Fixes #81250.
2438
2439 2007-04-10  Marek Safar  <marek.safar@gmail.com>
2440
2441         A fix for bug #81324
2442         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
2443         internal and external namespaces containers.
2444
2445 2007-04-10  Martin Baulig  <martin@ximian.com>
2446
2447         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
2448         TypeManager.DropGenericMethodArguments() so we also call
2449         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
2450
2451 2007-04-10  Martin Baulig  <martin@ximian.com>
2452
2453         * iterators.cs (Iterator.CreateIterator): Don't crash if
2454         `method.ReturnType' is null.  This happens if something went wrong
2455         while resolving that typ (we already reported an error in this case).
2456
2457 2007-04-10  Martin Baulig  <martin@ximian.com>
2458
2459         * expression.cs (New.DoResolve): Don't call CheckComImport() on
2460         generic interfaces; report the CS0144 directly.
2461
2462 2007-04-10  Martin Baulig  <martin@ximian.com>
2463
2464         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
2465         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
2466
2467 2007-04-10  Martin Baulig  <martin@ximian.com>
2468
2469         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
2470
2471 2007-04-09  Raja R Harinath  <rharinath@novell.com>
2472
2473         A better fix
2474         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
2475         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
2476
2477         Fix #81338
2478         * statement.cs (For.Resolve): If resolution fails, use
2479         KillFlowBranching.
2480
2481 2007-04-08  Marek Safar  <marek.safar@gmail.com>
2482
2483         * anonymous.cs (MakeName): Make faster and zero-based.
2484         (VerifyExplicitParameterCompatibility): Back to mode where generic
2485         parameter is ignored.
2486         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
2487
2488         * class.cs (EmitType): Method can emit another new method.
2489
2490         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
2491
2492         * driver.cs: Updated.
2493
2494         * lambda.cs: Reuse predefined empty parameters.
2495
2496         * parameter.cs: Updated
2497
2498         * support.cs: Implemented InflateTypes.
2499
2500         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
2501         (InitSystemCore): Introduced to isolate 3.0 dependencies.
2502
2503 2007-04-03  Martin Baulig  <martin@ximian.com>
2504
2505         Fix #80632.
2506
2507         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
2508         version of TypeManager.IsOverride() which also works with generic
2509         types.  
2510
2511 2007-04-03  Martin Baulig  <martin@ximian.com>
2512
2513         Fix #81044.
2514
2515         * convert.cs
2516         (Convert.ExplicitReferenceConversion): We need to cast when
2517         converting from IList<T> to S[].
2518
2519 2007-04-01  Marek Safar  <marek.safar@gmail.com>
2520
2521         * decl.cs (FindExtensionMethods): Consider all candidates with same name
2522         at this level.
2523         
2524         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
2525
2526 2007-03-31  Marek Safar  <marek.safar@gmail.com>
2527
2528         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
2529         argument and return type inferring.
2530
2531         * codegen.cs (InferReturnType): Flag whether return can be inferred.
2532         (ReturnType): Turned to property.
2533
2534         * statement.cs (Return): Implemented return type inferring.
2535
2536         * support.cs (ReflectionParameters): Use local types if possible.
2537
2538 2007-03-30  Raja R Harinath  <rharinath@novell.com>
2539
2540         * flowanalysis.cs (FlowBranching.Reachability): Remove.
2541         (FlowBranching.UsageVector): Update to changes.
2542
2543         Prepare to kill 'Reachability'
2544         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
2545         argument of constructor.
2546
2547 2007-03-29  Raja R Harinath  <rharinath@novell.com>
2548
2549         Prepare to kill 'Reachability'
2550         * flowanalysis.cs (UsageVector.is_unreachable): New.
2551         (UsageVector): Update to maintain 'is_unreachable' in parallel to
2552         'reachability', and verify they're consistent.
2553
2554         Fix #81121
2555         * expression.cs (New.EmitStatement): Handle type parameters here too.
2556
2557 2007-03-29  Martin Baulig  <martin@ximian.com>
2558
2559         Fix #79148.
2560
2561         * anonymous.cs
2562         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
2563         CompilerGeneratedClass.
2564         (ScopeInfo.EmitScopeInstance): Make this protected.
2565         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
2566         `ec.CurrentAnonymousMethod.Scope == Scope'.
2567
2568         * statement.cs (Block.ScopeInfo): Make this a property.
2569
2570 2007-03-27  Raja R Harinath  <harinath@gmail.com>
2571
2572         Prepare to kill 'Reachability'
2573         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
2574         (FlowBranching.UsageVector.Reachability): Remove property.
2575         (FlowBranching.UsageVector.IsUnreachable): New property.
2576         (FlowBranching.UsageVector.ResetBarrier): New.
2577         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
2578         * codegen.cs, statement.cs: Update to changes.
2579
2580 2007-03-27  Martin Baulig  <martin@ximian.com>
2581
2582         Fix #81209.
2583
2584         * decl.cs
2585         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
2586         generic types.
2587
2588 2007-03-26  Raja R Harinath  <rharinath@novell.com>
2589
2590         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
2591         instead of TriState.  Remove all mention of TriState.
2592
2593         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
2594         replaced by a boolean.  Add boolean 'is_unreachable' field, check
2595         and maintain invariants.
2596
2597 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2598
2599         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
2600
2601 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2602
2603         * expression.cs: Stop using obsolete 2.0 opcodes.
2604
2605 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2606
2607         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
2608         one of the latests Martin's fixes.
2609
2610 2007-03-23  Miguel de Icaza  <miguel@novell.com>
2611
2612         * expression.cs: On BigEndian systems, swap the bytes, temporary
2613         solution until we get a new bitconverter class.
2614
2615 2007-03-23  Martin Baulig  <martin@ximian.com>
2616
2617         Fix #81158.
2618
2619         * decl.cs (MemberCache.AddMembers): Add generic methods both as
2620         "Method" and "Method`1".  Normally, a cache lookup is done on the
2621         "Method" form (ie. without the generic arity), but this one makes
2622         lookups on the full form work as well.
2623
2624 2007-03-22  Raja R Harinath  <rharinath@novell.com>
2625
2626         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
2627         unused properties.
2628
2629 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
2630         * class.cs: 
2631         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
2632         ordered_member_list, to TypeBuilder to store members to be defined
2633         in the order they were parsed in.
2634         - ordered_explicit_member_list contains all properties indexers
2635           and methods that are defined as explicit implementation of an
2636           interface or base class.
2637         - ordered_member_list contains all properties indexers and methods
2638           that are not defined as explicit implementation of an interface
2639           or base class.
2640
2641         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
2642         functionality in these removed classes has been replaced with 
2643         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
2644         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
2645
2646         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
2647         to CheckForDuplications inside GetMethod and SetMethod Define Method
2648         to handle method property and indexer name conflicts.
2649
2650         Fixes #79434
2651
2652         All code is contributed under the MIT/X11 license.
2653
2654 2007-03-20  Martin Baulig  <martin@ximian.com>
2655
2656         * class.cs (TypeContainer.Interfaces): Removed; they're now
2657         included in `TypeContainer.Types'.
2658
2659 2007-03-20  Martin Baulig  <martin@ximian.com>
2660
2661         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
2662
2663         * class.cs (TypeContainer.CreateType): New public method.  This is
2664         now called before DefineType() to create the TypeBuilders.
2665         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
2666         has already been created by CreateType().
2667         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
2668         don't resolve our base classes here; this has been moved into
2669         DefineBaseTypes().  We're now called from CreateType().
2670         (TypeContainer.DefineBaseTypes): New private method; resolve our
2671         base classes here.  We're now called from DefineType().
2672
2673         * rootcontext.cs
2674         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
2675         our types first to create all the TypeBuilders.  After that, call
2676         TypeContainer.DefineType() on all the types which'll resolve their
2677         base classes and setup the resolve order.
2678
2679 2007-03-20  Martin Baulig  <martin@ximian.com>
2680
2681         * class.cs (TypeContainer.Enums): Removed; they're now included in
2682         `TypeContainer.Types'.  
2683
2684 2007-03-20  Martin Baulig  <martin@ximian.com>
2685
2686         * class.cs
2687         (TypeContainer.DefineType): Don't call ResolveMembers() here.
2688         (TypeContainer.DoResolveMembers): Call DefineType() on our
2689         `compiler_generated' classes; moved here from DefineNestedTypes().
2690
2691         * rootcontext.cs
2692         (RootContext.ResolveTree): Call ResolveMembers() on all
2693         TypeContainer's in the `type_container_resolve_order'.
2694
2695 2007-03-19  Marek Safar  <marek.safar@gmail.com>
2696
2697         * class.cs: Use corlib to handle InternalMethodImplAttribute.
2698
2699 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2700
2701         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
2702         implementation flags.
2703
2704 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2705
2706         * class.cs: More optimizations for type parameters.
2707
2708 2007-03-15  Marek Safar  <marek.safar@gmail.com>
2709
2710         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
2711
2712         * ecore.cs, parameter.cs: More common code for both corlibs.
2713
2714         * typemanager.cs (IsGenericMethod): Simplified.
2715
2716 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2717
2718         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2719         'returns'.
2720         * statement.cs, iterators.cs, lambda.cs: Update to changes.
2721
2722         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
2723         unconditionally.  Simplify explanation.
2724         (Try.Resolve, Using.Resolve): Likewise.
2725
2726 2007-03-15  Martin Baulig  <martin@ximian.com>
2727
2728         Fix #80731.
2729
2730         * decl.cs (DeclSpace): If we're a partial class, use our
2731         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
2732
2733 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2734
2735         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2736         'throws'.
2737         (FlowBranching.UsageVector): Update to changes.
2738         (FlowBranching.MergeSiblings): Likewise.
2739         * statement.cs: Likewise.
2740
2741 2007-03-15  Martin Baulig  <martin@ximian.com>
2742
2743         Fix #79302.
2744
2745         * decl.cs
2746         (MemberCache): Added a special .ctor for type parameters.
2747
2748         * typemanager.cs
2749         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
2750         `MemberCache'.  
2751
2752 2007-03-09  Martin Baulig  <martin@ximian.com>
2753
2754         * enum.cs (Enum): Make this a TypeContainer.
2755         (EnumMember): Derive from `Const'.
2756
2757         * const.cs
2758         (Const.DoResolveValue): New protected virtual method; move most of
2759         the functionality of ResolveValue() here so we can override it in
2760         `EnumMember'.
2761         (Const.CreateConstantReference): Make this virtual.
2762
2763         * class.cs (Kind): Add `Kind.Enum'.
2764         (TypeContainer.Emit): Don't emit the enums here; they're already
2765         in the `RootContext.typecontainer_resolve_order'.
2766
2767         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
2768         here; they're already in the `typecontainer_resolve_order'.
2769
2770         * ecore.cs (EnumConstant.ConvertImplicitly): Add
2771         TypeManager.DropGenericTypeArguments().
2772
2773         * typemanager.cs
2774         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
2775         (TypeManager.IsEnumType): Likewise.
2776         (TypeManager.EnumToUnderlying): Likewise.
2777         (TypeManager.IsEqual): Add support for enums.
2778
2779 2007-03-12  Raja R Harinath  <rharinath@novell.com>
2780
2781         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
2782         DefaultParameterValueAttribute to be undefined, say if System.dll
2783         is not referenced.
2784
2785 2007-03-11  Marek Safar  <marek.safar@gmail.com>
2786
2787         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
2788         any mscorlib.
2789
2790 2007-03-10  Marek Safar  <marek.safar@gmail.com>
2791
2792         * class.cs, parameter.cs: Unified parameters verification.
2793
2794 2007-03-08  Martin Baulig  <martin@ximian.com>
2795
2796         * cs-parser.jay (constructor_header): Pass the location to the
2797         newly created TopLevelBlock.
2798
2799 2007-03-07  Martin Baulig  <martin@ximian.com>
2800
2801         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
2802
2803 2007-03-06  Miguel de Icaza  <miguel@novell.com>
2804
2805         * convert.cs (ExplicitReferenceConversionExists): Sync this method
2806         with the changes from David, fixes the build.
2807
2808 2007-03-05  David Mitchell  <dmitchell@logos.com>
2809
2810         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
2811         and its base interfaces to a one-dimensional array type S[],
2812         provided there is an implicit or explicit reference conversion
2813         from S to T.
2814
2815 2007-03-03  Marek Safar  <marek.safar@gmail.com>
2816
2817         * cs-tokenizer.cs: Implemented basic linq grammar.
2818
2819         * driver.cs: Set linq lang version on demand.
2820
2821 2007-02-26  Marek Safar  <marek.safar@gmail.com>
2822
2823         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
2824
2825 2007-02-25  Marek Safar  <marek.safar@gmail.com>
2826
2827         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
2828         (Fixes #80455)
2829
2830         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
2831         here.
2832         Check property and event extern attributes.
2833
2834         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
2835         charset.
2836
2837 2007-02-24  Marek Safar  <marek.safar@gmail.com>
2838
2839         A fix for bug #80407
2840         * ecore.cs: Don't report ambiguity error when methods have same parent.
2841
2842 2007-02-23  Marek Safar  <marek.safar@gmail.com>
2843
2844         A fix for bug #80878
2845         * class.cs, cs-parser.jay: Event property can host anonymous methods.
2846
2847 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2848
2849         * attribute.cs: Enable ExtensionAttribute presence test.
2850
2851 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2852
2853         * class.cs: Warn about missing GetHashCode only when Equals is override.
2854
2855         * decl.cs: Check accessibility of type arguments.
2856
2857         * typemanager.cs: Correctly report nullable array.
2858
2859 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2860
2861         * class.cs, report.cs: Capture more details when things go wrong.
2862
2863 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2864
2865         A fix for bug #80650
2866         * cs-parser.jay: Anonymous container starts at constructor declaration
2867         and not at block beginning because it has to be usable in constructor
2868         initializer.
2869
2870         * statement.cs: Use context location and not block one for error reporting.
2871
2872 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2873
2874         A fix for bug #78712
2875         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
2876         too.
2877
2878 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2879
2880         A fix for bug #80493 by Atsushi Enomoto
2881         * cs-parser.jay: Ignore invalid attribute target.
2882
2883 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2884  
2885         * cs-tokenizer.cs: Ignore '\0' as white space character.
2886
2887 2007-02-17  Miguel de Icaza  <miguel@novell.com>
2888
2889         * cs-parser.jay: Add support for lambda expressions to the mcs
2890         compiler as well.
2891
2892         * lambda.cs: Only clone when we are probing, not on the final call
2893         (Compatible is the final call). 
2894
2895         * statement.cs (CloneContext): Introduce class to provide block
2896         remapping during clone.
2897
2898         All statements Clone themselves now.
2899
2900         (Clone): special handling for blocks, when we clone a block, we
2901         register the block inside this routine, as children of the block
2902         might trigger a lookup. 
2903         
2904         * expression.cs: Add support for CloneContext in all expressions. 
2905         
2906 2007-02-17  Marek Safar  <marek.safar@gmail.com>
2907  
2908         A fix for bug #80493
2909         * statement.cs: Report ambiguous warning when interfaces are not related.
2910
2911 2007-02-15  Marek Safar  <marek.safar@gmail.com>
2912
2913         C# 3.0 extension methods.
2914
2915         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
2916         cannot be used directly.
2917
2918         * class.cs (Class.Emit): Emit extension attribute if any class method
2919         is extension method.
2920         (Method.Define): Add basic extension method validation conditions.
2921         (Method.Emit): Emit extension attribute for method.
2922
2923         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
2924         extension method exists. Currently we follow same approach as Microsoft
2925         does, emit even if a method or a class are private but this can change
2926         later.
2927
2928         * cs-parser.jay: Add handling of `this' keyword in method parameters
2929         context.
2930
2931         * decl.cs (DeclSpace.IsStaticClass): New property.
2932         (MemberCache.FindExtensionMethods): Looks for extension methods with
2933         defined name and extension type.
2934
2935         * doc.cs: Updated after OverloadResolve changes.
2936
2937         * driver.cs: Add new soft reference to System.Core.dll.
2938
2939         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
2940         (ExtensionMethodGroupExpr): Represents group of extension methods.
2941
2942         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
2943         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
2944         to MethodGroupExpr and made non-static for easier customization.
2945         (Invocation.DoResolve): Add extension method lookup when no standard
2946         method was found.
2947         (MemberAccess.DoResolve): Try extension methods if no member exists.
2948
2949         * modifiers.cs: Add METHOD_EXTENSION modifier.
2950
2951         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
2952         as well as candidate extension type.
2953         (ComputeNamespaces): When assembly constains extension methods registers
2954         them.
2955         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
2956         extension method lookup.
2957         (Namespace.LookupExtensionMethod): Looks for extension method in this
2958         namespace.
2959         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
2960         find a method which matches name and extensionType.
2961
2962         * parameter.cs (Parameter): Add This modifer.
2963         (HasExtensionMethodModifier): New property.
2964         (Resolve): Add extension parameter check.
2965         (ModFlags): turned to property to exclude this modifier as it is not real
2966         parameter modifier.
2967         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
2968
2969         * support.cs (ParameterData): Add ExtensionMethodType.
2970         (ReflectionParameters): Implemented ExtensionMethodType interface property.
2971
2972         * typemanager.cs: Add type and ctor extension attribute type.
2973
2974 2007-02-15  Miguel de Icaza  <miguel@novell.com>
2975
2976         * report.cs (DisableErrors, EnableErrors): used to prevent error
2977         output when we are "trying" to compile various methods with
2978         different types. 
2979
2980         * ecore.cs (Expression): Add Clone method that calls the virtual
2981         CloneTo method.  The current CloneTo method in Expression throws
2982         an exception so we can track down all the places where this must
2983         be implemented (not using abstract, because that would be a lot of
2984         up-front-work before we can start testing the implementation
2985         idea). 
2986
2987         Important: we only need Clone capabilities for expressions created
2988         by the parser, as the expressions we will be cloning are
2989         expressions in the pre-resolved state.   This vastly simplifies
2990         the work required. 
2991         
2992         (SimpleName): Add CloneTo that does nothing.
2993         (EmptyCast): Add CloneTo.
2994         
2995         * expression.cs (Binary): Implement CloneTo.
2996         (Invocation.IsApplicable): Store the current ec in
2997         EmitContext.TempEc and restore it on return.  This is used so we
2998         do not have to sprinkle hundres of methods with an extra
2999         EmitContext, we know that the only user is the lambda expression
3000         ImplicitConversionExists code. 
3001         
3002         (Argument): Add Cloning capabilities.
3003         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
3004         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
3005         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
3006         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
3007         IndexerAccess): Add Clone capability.
3008
3009         (LocalVariableReference, This): TODO: needs cloned Block mapping.
3010
3011         (Argument): Add cloning capability.
3012
3013         * assign.cs (Assign): Implement CloneTo.
3014
3015         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
3016         
3017         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
3018         version by calling Convert with the EmitContext (that we are
3019         currently storing in ec, this is not great, but will do for now,
3020         to avoid passing EmitContext parameters to hundreds of functions
3021         that do not need them now).
3022
3023         (SetExpression): Remove, it is not needed.
3024         
3025         (ContextualReturn): Implement CloneTo.
3026
3027         * statement.cs (Statement): Implement cloning infrastructure,
3028         similar to expressions.
3029
3030         (Block): Partial implementation of Clone for statements.
3031
3032         (Return): Implement clone.
3033         
3034         * constant.cs (Constant.CloneTo): New method, does nothing.
3035
3036         * codegen.cs (TempEc): Add a static EmitContext as a temporary
3037         solution, until we decide how to exactly do this.  
3038         
3039 2007-02-14  Marek Safar  <marek.safar@gmail.com>
3040  
3041         A fix for bug #80493
3042         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
3043         a property is override we need to use second accessor.
3044
3045 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3046  
3047         A fix for bug #80418
3048         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
3049         methods.
3050
3051 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3052
3053         Another fix for bug #80749
3054         * pending.cs: Abstract class has priority over interfaces.
3055
3056 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3057
3058         Another fix for bug #80749
3059         * pending.cs: Abstract class has priority over interfaces.
3060
3061 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3062
3063         Another fix for bug #80749
3064         * pending.cs: Abstract class has priority over interfaces.
3065
3066 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3067
3068         Another fix for bug #80749
3069         * pending.cs: Abstract class has priority over interfaces.
3070
3071 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3072
3073         * class.cs Better error message.
3074
3075         * driver.cs: Add shorter versions of -optimize option.
3076
3077 2007-02-13  Martin Baulig  <martin@ximian.com>
3078
3079         * class.cs (Constructor.Emit): Check the return value of
3080         ec.ResolveTopBlock() and return on error.
3081
3082 2007-02-13  Raja R Harinath  <rharinath@novell.com>
3083
3084         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
3085         message to fix error message regression.
3086
3087 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3088
3089         * delegate.cs: Delegate creation expression cannot be of Nullable type.
3090
3091 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3092
3093         A fix for bug #80749
3094         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
3095         its parent container.
3096
3097         * class.cs (DefineFieldInitializers): Each initializer can has different
3098         resolve context.
3099
3100         * const.cs: Updated.
3101
3102 2007-02-11  Miguel de Icaza  <miguel@novell.com>
3103
3104         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
3105         now all the heavy lifting to check that embedded statements or
3106         expressions have the right form is done in the ContextualReturn.
3107
3108         (ContextualReturn): New class.  
3109
3110         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
3111         method that can be invoked to report 201, so we do not replicate
3112         this everywhere.
3113
3114         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
3115         
3116         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
3117         treating tabs as spaces. 
3118
3119 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3120
3121         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
3122         * assign.cs: Use full implicit conversion for right side check.
3123
3124 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3125
3126         * statement.cs (Switch): Switch over boolean type is not standardized.
3127
3128 2007-02-08  Marek Safar  <marek.safar@gmail.com>
3129
3130         A fix for bug #80755
3131         * decl.cs (FindBaseEvent): Don't use method cache for events.
3132
3133 2007-02-07  Marek Safar  <marek.safar@gmail.com>
3134
3135         * cs-parser.jay: Better syntax error handling.
3136
3137         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
3138         instead of underlying type value.
3139
3140 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3141
3142         * driver.cs: Check define identifier before is registered.
3143
3144         * namespace.cs: Use existing error message.
3145
3146         * report.cs: New warning.
3147
3148 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3149
3150         A fix for bug #80742
3151         * expression.cs: Delegate Invoke method can be called directly.
3152
3153 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3154
3155         A fix for bug #80676
3156         * class.cs (IsEntryPoint): The Main method can have params modifier.
3157
3158 2007-02-04  Miguel de Icaza  <miguel@novell.com>
3159
3160         * parameter.cs (Parameter, Parameters): Add Clone method.
3161
3162         * anonymous.cs (Compatible): Turn method into virtual method, so
3163         LambdaExpression can implement a different behavior.
3164
3165         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
3166         out the basic checking here, so it can be used by
3167         LambdaExpressions.
3168         
3169         * lambda.cs: Introduce "Compatible" function that will do the
3170         heavy lifting.
3171
3172 2007-02-02  Marek Safar  <marek.safar@gmail.com>
3173
3174         * attribute.cs: Unified one error message.
3175
3176         * class.cs (Class): Use type attributes and not properties to test static
3177         class.
3178         (IsEntryPoint): Don's pass local variable.
3179
3180         * convert.cs: Removed duplicate check.
3181
3182         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
3183
3184         * driver.cs: Don't crash when soft reference does not exist.
3185
3186         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
3187         (UsingEntry): Removed redundant allocation.
3188
3189         * parameter.cs: Add fast path for type parameters.
3190
3191         * support.cs: Don't allocate attribute when it's not used.
3192
3193 2007-01-30  Miguel de Icaza  <miguel@novell.com>
3194
3195         * anonymous.cs
3196         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
3197         this into a virtual method, so we can override it in LambdaExpression.
3198
3199         * driver.cs: Improve diagnostics in case of failure. 
3200
3201         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
3202         write a function that is slightly more complex and that parses:
3203
3204         type identifier [, type identifier]* )
3205
3206         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
3207         this expression:
3208
3209                 (canEmpty ? i >= 0 : i > 0)
3210
3211 2007-01-30  Raja R Harinath  <rharinath@novell.com>
3212
3213         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
3214         exception on possibly valid code.
3215
3216 2007-01-29  Raja R Harinath  <rharinath@novell.com>
3217
3218         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
3219         Push/PopPosition.
3220         (parse_opt_type_arguments): Remove.  It's almost the same as
3221         parse_less_than.
3222         (parse_namespace_or_typename): Use parse_less_than.
3223
3224 2007-01-28  Miguel de Icaza  <miguel@novell.com>
3225
3226         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
3227         this bug took a few hours to find, because the state saved and
3228         restored by PushPosition and PopPosition was ignoring the state of
3229         parse_generic_less_than.
3230
3231         I can also now remove the handling of OP_LT and OP_GT, this solves
3232         the big mistery.
3233         
3234         * cs-tokenizer.cs: store the location for the ARROW token, we use
3235         that in the parser.
3236
3237         (PushPosition, PopPosition): save/restore also `current_token',
3238         restore `parse_generic_less_than' (was missing).
3239
3240         (parse_opt_type_arguments): use parse_type, not
3241         parse_namespace_or_typename to parse types.
3242
3243         * lambda.cs: Empty new file, will eventually have the lambda
3244         expression implementation.
3245
3246         * lambda.test: used to test the internal tokenizer. 
3247
3248         * report.cs (FeatureIsNotISO1): Rename from
3249         FeatureIsNotStandardized, because it was about the language level
3250         (1 vs 2) it was not about standarization.
3251
3252         (FeatureRequiresLINQ): New.
3253
3254         * support.cs (SeekableStreamReader): Only require that the reader
3255         is a TextReader, not a StreamReader, so we can plug StringReader. 
3256
3257         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
3258         given position in the input stream the following tokens can be
3259         parsed as a type followed by an identifier.
3260
3261         (is_punct): after a '(' if parse_type_and_parameter returns true,
3262         then return a special token OPEN_PARENS_LAMBDA which is used to
3263         avoid reduce/reduce errors in the grammar for the
3264         lambda_expression rules.
3265
3266         (parse_type): implement a type parser inside the
3267         tokenizer, the parser only returns true or false depending on
3268         whether the input at a given position can be parsed as a type.
3269
3270         (peek_token): new method used during type parsing.
3271
3272 2007-01-28  Raja R Harinath  <rharinath@novell.com>
3273
3274         Fix #80531
3275         * anonymous.cs (ScopeInfo.InflateParameters): New.
3276         (AnonymousContainer.Resolve): Use it to redirect types of
3277         delegate parameters.
3278
3279 2007-01-27  Raja R Harinath  <rharinath@novell.com>
3280
3281         Fix #80530
3282         * expression.cs (Error_InvalidArguments): Don't use two different
3283         messages for CS1503.  Use ExtraInformation and
3284         SymbolRelatedToPreviousError instead.
3285
3286         Fix #80358
3287         * decl.cs (DeclSpace.initialize_type_params): Don't access
3288         'type_params' of a partial class directly.
3289
3290 2007-01-26  Miguel de Icaza  <miguel@novell.com>
3291
3292         * constant.cs: Removed a handful of out-of-range checks that were
3293         not necessary. 
3294
3295 2007-01-25  Marek Safar  <marek.safar@gmail.com>
3296
3297         * expression.cs (CheckUselessComparison): Add additional check for char
3298         constants.
3299
3300         * namespace.cs: Fixed typo.
3301
3302 2007-01-23  Miguel de Icaza  <miguel@novell.com>
3303
3304         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
3305         gone, instead we inline the test, preventing the needless casts to
3306         longs, ulongs and doubles for the parameters, avoiding calls to
3307         methods that overchecked stuff, and instead inlined things
3308         nicely. 
3309
3310 2007-01-20  Marek Safar  <marek.safar@gmail.com>
3311
3312         * cs-parser.jay: Better parameter error handling.
3313
3314 2007-01-17  Marek Safar  <marek.safar@gmail.com>
3315
3316         A fix for bug #80368, #80522
3317         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
3318         whether array initializer contains constants only.
3319         (ArrayCreation.Emit): Use better formula to decide when
3320         are array initializers for static initialization.
3321         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
3322         have to emit even constants otherwise they are pre-initialized.
3323
3324 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
3325             Raja R Harinath  <rharinath@novell.com>
3326
3327         Fix emit order of 'get' vs. 'set'.
3328         * support.cs (Accessors): New.
3329         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
3330         Note the order in which accessors are declared in the source.
3331         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
3332         Refactored from Property.Define and Indexer.Define.
3333         (PropertyBase.DefineAccessors): New helper that calls the above in
3334         appropriate order as noted by the parser.
3335         (Property.Define, Indexer.Define): Update to changes.
3336         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
3337
3338 2007-01-17  Raja R Harinath  <rharinath@novell.com>
3339
3340         Fix cs0029-6.cs and gcs0029-2.cs (regression)
3341         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
3342         there's an implicit conversion from the current type to the target
3343         type before converting the underlying constant.
3344
3345 2007-01-16  Marek Safar  <marek.safar@gmail.com>
3346
3347         * const.cs (ResolveValue): Updated after constant conversion was made more
3348         generic.
3349
3350         * constant.cs (GetAttributableValue): constant to object conversion is
3351         used for attributes only.
3352         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
3353         constant conversions.
3354         (LongConstant.ConvertImplicitly): Ditto.
3355
3356         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
3357         (ImplicitConversionStandard): Handle constant conversion as extra step.
3358         It solves the issue when constant conversion was called indirectly like
3359         inside array initializer and constant folding was skipped.
3360
3361         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
3362         this change.
3363
3364         * statement.cs(ImplicitConversionStandard): Updated after constant
3365         conversion was made more generic.
3366
3367 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
3368
3369         * expression.cs (As.DoResolve): Use GenericConstraints instead of
3370         Constraints, solves the problem where the compiler incorrectly
3371         reported that a type parameter was not constrained to a class (Bug
3372         80518)
3373
3374 2007-01-14  Marek Habersack  <grendello@gmail.com>
3375
3376         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
3377
3378 2007-01-14  Marek Safar  <marek.safar@gmail.com>
3379
3380         A fix for bug #80368
3381         * assign.cs (FieldInitializer): New class implements field
3382         initializer statement.
3383
3384         * attribute.cs: Update after FieldMember rename.
3385
3386         * class.cs (PropertyBasedMember): New common class for property based
3387         types.
3388         (InterfaceMemberBase): New base class for all members which can be used as
3389         an interface members.
3390         (MethodCore): Moved really common code to InterfaceMemberBase.
3391         (Method.Define): Equal and GetHasCode detection is relevant for methods
3392         only.
3393         (MethodData.Define): Don't assume that public event implements an
3394         interface automatically.
3395         (MethodData.DefineMethodBuilder): Issue an error even if only extern
3396         modifier is used.
3397         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
3398         (FieldMember): Merged with FieldBase.
3399         (EventProperty.AEventPropertyAccessor): New specialization to check whether
3400         event extern modifier can be used.
3401         (EventField.EventFieldAccessor): Moved event field specific code here.
3402         (Event.AllowedModifiers): Even event can be extern.
3403         (Event.FindOutBaseMethod): New override specific to events.
3404         (Indexer.parameters): Reintroduce parameters because base class holds
3405         only properties common data.
3406         (Indexer.CheckForDuplications): Indexers are threated as methods so we
3407         need do extra parameters check.
3408
3409         * const.cs: Update after FieldMember rename.
3410
3411         * decl.cs (MemberCache.FindBaseEvent): New method.
3412
3413         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
3414         to reflect that indexer is now derived from PropertyBased.
3415
3416         * ecore.cs (GetMemberType): Made public.
3417         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
3418         obsolete event.
3419
3420         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
3421         
3422         * typemanager.cs (CSharpSignature): Correctly print event accessors.
3423         (RegisterEvent): Removed.
3424         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
3425         (GetPrivateFieldOfEvent): Renamed to GetEventField.
3426
3427 2007-01-11  Raja R Harinath  <rharinath@novell.com>
3428
3429         Fix #80249
3430         * statement.cs (CollectionForeach.TryType): Prefer generic
3431         GetEnumerator over non-generic variant.  Fix code to follow comments.
3432
3433 2007-01-09  Raja R Harinath  <rharinath@novell.com>
3434
3435         Fix #80446
3436         * support.cs (ReflectionParameter): Don't use an invalid index on
3437         the generic parameter data.
3438
3439 2007-01-08  Miguel de Icaza  <miguel@novell.com>
3440
3441         * driver.cs: Just add a tiny bit of infrastructure.
3442
3443 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3444
3445         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
3446         where field type is struct from current assembly.
3447         
3448         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
3449         it is possible.
3450
3451 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3452
3453         A fix for bug #80381
3454         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
3455         the core types.
3456
3457         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
3458         messages.
3459         (Namespace.LookupType): Always use core types from corlib when speficied.
3460
3461         * report.cs: A new warning.
3462
3463         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
3464         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
3465         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
3466
3467         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
3468         (InitCoreTypes): Set expression type of object_type and value_type
3469         immediately after lookup.
3470
3471 2007-01-01  Miguel de Icaza  <miguel@novell.com>
3472
3473         * cs-tokenizer.cs: Accept Pc class characters (Connector
3474         Punctuation) as valid identifiers.  Fixes #78259
3475
3476         * expression.cs (Invocation.DoResolve): Moved the check for the
3477         use of `this' for doing method calls to the Invocation resolution
3478         step, after overload resolution has taken place instead of doing
3479         the check at the low-level `This.DoResolve' level.
3480
3481         The `This.DoResolve'(appens before overload resolution, so it has
3482         no way of knowing if the method that will be called will be
3483         instace or static, triggering an erroneous report for cs0188 (Bug
3484         78113).
3485
3486         We now do the check for instance method invocations after we know
3487         what method will be called.
3488
3489         (This.CheckThisUsage): Move the actual use of this structure
3490         checking into its own method and expose it. 
3491
3492         * Everywhere that called Error_ValueCannotBeConverted: pass a new
3493         EmitContext.
3494
3495         Exceptions: Null.ConvertImplicitly,
3496         Constant.ImplicitConversionRequired as there are too many call
3497         sites for passing the ec. 
3498
3499         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
3500         EmitContext, if the value is null, then we do not try to provide
3501         the extra information from the error (If a userdefined conversion
3502         exists, as UserDefinedConversion requires a non null-EmitContext).
3503
3504         Fixes: #80347
3505
3506 2006-12-30  Raja R Harinath  <rharinath@novell.com>
3507
3508         * flowanalysis.cs (MyBitVector): Document some invariants.
3509         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
3510         introduced below, and add a couple of others, 
3511
3512 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3513
3514         * attribute.cs (GetMethodObsoleteAttribute): Uses new
3515         GetPropertyFromAccessor and GetEventFromAccessor.
3516         
3517         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
3518         overrides non-obsolete one.
3519         (Indexer.Define): Error message has been moved to the parser.
3520
3521         * cs-parser.jay: Better syntax errors handling.
3522
3523         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
3524         when an invocation has no arguments.
3525
3526         * ecore.cs: Removed not used caching.
3527
3528         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
3529         implementation.
3530
3531         * report.cs: Add a new warning.
3532
3533         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
3534
3535         * typemanager.cs (enumeration_type): Removed.
3536         (CSharpSignature): Reuses IsSpecialMethod.
3537         (IsEqual): Hack for MS BCL.
3538         (GetPropertyFromAccessor): New method.
3539         (GetEventFromAccessor): New method.
3540         (IsSpecialMethod): Fixed to handle more cases.
3541
3542 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3543
3544         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
3545         Made white spaces array static.
3546
3547         * ecore.cs (RemoveGenericArity): Optimized.
3548
3549         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
3550         10 times faster).
3551         (MyBitVector.initialize_vector): Simplified.
3552
3553 2006-12-22  Miguel de Icaza  <miguel@novell.com>
3554
3555         * ecore.cs: Am not entirely happy with this hack, but it seems to
3556         address the issue in 80257 (a small test case for
3557         CreativeDocs.NET). 
3558
3559         I set the MethodGroupExpr.Type to an internal compiler type
3560         (itself in this case) to force the resolution to take place.   Why
3561         it does not take place with a null is beyond me.
3562
3563 2006-12-20  Marek Safar  <marek.safar@gmail.com>
3564
3565         A fix for bug #80288
3566         * expression.cs (ResolveOperator): Consider user defined conversion for
3567         logical and operator too.
3568         (EmitBranchable): Optimization for logical and when full constant folding
3569         could not be applied but one operand is constant.
3570
3571 2006-12-19  Marek Safar  <marek.safar@gmail.com>
3572
3573         * class.cs (GetClassBases): Write 5 times every day, will never use
3574         FullName for error reporting.
3575
3576         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
3577
3578 2006-12-19  Martin Baulig  <martin@ximian.com>
3579
3580         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
3581         the symbol file info here.
3582
3583 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3584
3585         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
3586         of `elseif' is taking then following sections are not taking.
3587         Fixes an issue reported on mono mailing list.
3588
3589 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3590
3591         A fix for bug #80300
3592         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
3593         a caller is not taking.
3594
3595 2006-12-18  Raja R Harinath  <rharinath@novell.com>
3596
3597         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
3598         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
3599         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
3600         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
3601         * class.cs: Update to changes.
3602
3603 2006-12-17  Marek Safar  <marek.safar@gmail.com>
3604
3605         A fix for bug #79934
3606         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
3607         partial container.
3608
3609         * class.cs (ResolveMembers): Register an iterator in current container and
3610         not in shared one.
3611
3612 2006-12-16  Raja R Harinath  <rharinath@novell.com>
3613
3614         Fix test-543.cs
3615         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
3616         satisfy a params annotated parameter.
3617
3618 2006-12-16  Marek Safar  <marek.safar@gmail.com>
3619
3620         A fix for bug #77014
3621         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
3622         paramters correctly and not rely on hacks in Parameters class.
3623         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
3624         at any possition.
3625         (Invocation.VerifyArgumentsCompat): Ditto.
3626         (Invocation.EmitArguments): Changed to correctly emit params arguments at
3627         any possition.
3628
3629         * parameter.cs (HasParams): Don't assume that params is the last one.
3630
3631         * support.cs (ReflectionParameters.ctor): Look for params attribute
3632         correctly.
3633         (ReflectionParameters.ParameterType): Removed hack when we returned last
3634         parameter for out of range parameters.
3635         (ParameterName, ParameterModifier): Ditto.
3636
3637 2006-12-14  Marek Safar  <marek.safar@gmail.com>
3638
3639         A fix for bug #79987
3640         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
3641         when assembly is not CLS compliant but type is. I have no idea why is this
3642         allowed.
3643
3644         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
3645
3646 2006-12-13  Miguel de Icaza  <miguel@novell.com>
3647
3648         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
3649         in struct constructors, they are basically no-ops.
3650
3651 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3652
3653         * cs-tokenizer.cs (Position): Save preprocessor status too.
3654
3655 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3656
3657         A fix for bug #77794
3658         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
3659
3660 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3661
3662         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
3663         Fixes #69299.
3664         (pp_expr): Report error for an invalid expression.
3665         (handle_preprocessing_directive): Simplified; add more error checking.
3666
3667 2006-12-11  Marek Safar  <marek.safar@gmail.com>
3668
3669         A fix for bug #74939
3670         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
3671         directives handling.
3672
3673 2006-12-10  Marek Safar  <marek.safar@gmail.com>
3674
3675         A fix for bugs #80093, and #75984
3676         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
3677         logic, it seems to me as it worked before "by coincidence".
3678         (xtoken): Simplified to use reworked handle_preprocessing_directive.
3679         (cleanup): Enabled endif check.
3680
3681 2006-12-09  Marek Safar  <marek.safar@gmail.com>
3682
3683         A fix for bug #80162
3684         * statement.cs (CollectionForeach.TryType): Generics and non-generics
3685         enumerators are never ambiguous.
3686
3687 2006-12-08  Raja R Harinath  <rharinath@novell.com>
3688
3689         Fix #80060
3690         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
3691
3692 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3693
3694         A fix for bug #80144
3695         * class.cs (EventProperty.Define): Explicit implementation means
3696         that an even is used.
3697
3698 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3699
3700         Fixes the operators implementation (part II)
3701
3702         * cfold.cs (DoConstantNumericPromotions): Renamed to
3703         DoBinaryNumericPromotions and simplified.
3704         (BinaryFold): Couple of conversion fixes; simplified.
3705
3706         * constant.cs, ecore.cs, literal.cs
3707         (ToType): Renamed to ConvertImplicitly.
3708         (Reduce): Renamed to ConvertExplicitly.
3709
3710         * class.cs, convert.cs: Updated.
3711
3712         * expression.cs: TryReduce doesn't throw an exception.
3713
3714 2006-12-01  Marek Safar  <marek.safar@gmail.com>
3715
3716         A fix for bug #80108
3717         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
3718         compatible.
3719
3720 2006-11-30  Marek Safar  <marek.safar@gmail.com>
3721
3722         Fixes unary operators implementation (part I)
3723         Also fixes #80026
3724
3725         * cfold.cs (Error_CompileTimeOverflow): Made internal
3726
3727         * const.cs (IConstant): Changed to use reference to constant and
3728         not constant itself.
3729         Updated IConstant implementations.
3730
3731         * constant.cs (CreateConstant): New factory method.
3732         Updated IConstant implementation.
3733
3734         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
3735
3736         * ecore.cs: Updated to use CreateConstantReference.
3737
3738         * enum.cs: Reflects IConstant changes.
3739
3740         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
3741
3742         * literal.cs (NullConstant): Change to be independently usable.
3743
3744 2006-11-29  Martin Baulig  <martin@ximian.com>
3745
3746         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
3747         we need to emit the scope initializer before calling the base .ctor.
3748
3749         * anonymous.cs: Merged back from the new anonymous methods branch.
3750         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
3751
3752         * expression.cs (ParameterReference.DoResolveBase): Create a
3753         "normal" ScopeInfo when capturing parameters rather than using the
3754         root scope; this makes things work with anonymous methods having
3755         parameters.
3756
3757         * statement.cs
3758         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
3759
3760 2006-11-22  Marek Safar  <marek.safar@gmail.com>
3761
3762         A fix for bug #79987
3763         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
3764         check to a base class.
3765         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
3766         only when assembly has missing attribute.
3767         * report.cs: Update.
3768
3769 2006-11-21  Marek Safar  <marek.safar@gmail.com>
3770
3771         * cs-tokenizer.cs: Merged with gmcs version.
3772
3773 2006-11-20  Marek Safar  <marek.safar@gmail.com>
3774
3775         * cs-tokenizer.cs,
3776         * cs-parser.jay: Better error message when partial keyword is misplaced.
3777
3778 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
3779
3780         A fix for bug #79810
3781         report.cs: CS1058 only applies to 2.0 profile (gmcs).
3782         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
3783         a RuntimeWrappedException by default.
3784
3785 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3786
3787         A fix for bug #79843
3788         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
3789         implementation.
3790         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
3791
3792 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3793
3794         * driver.cs, namespace.cs: Uses faster IndexOf version.
3795
3796 2006-11-17  Marek Safar  <marek.safar@gmail.com>
3797
3798         A fix for bug #79941
3799         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
3800         operators.
3801         (Operator.Define): Implicit/Explicit operator of same type is duplicate
3802         even if internal name is different.
3803         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
3804         (UserDefinedConversion): Simplified as the operators cannot be internal.
3805         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
3806         conversions.
3807         (MethodLookup): Replaced EmitContext with parentType.
3808         * expression.cs: Updated.
3809
3810 2006-11-09  Raja R Harinath  <rharinath@novell.com>
3811
3812         * driver.cs (BadAssembly): Handle all the ugliness of
3813         DefineDynamicAssembly.
3814
3815 2006-11-08  Raja R Harinath  <rharinath@novell.com>
3816
3817         Address parts of #58244 -- most of what's left is in the runtime
3818         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
3819         CS1509 error checks, and handle them for all assembly loads, not
3820         just the first invocation.
3821         (LoadModule): Likewise.  Move handling of 'adder_method' ...
3822         * codegen.cs (AssemblyClass.AddModule): ... here.
3823
3824 2006-11-02  Marek Safar  <marek.safar@gmail.com>
3825
3826         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
3827         IEnumerable<T> is ambiguous.
3828
3829 2006-10-31  Marek Safar  <marek.safar@gmail.com>
3830
3831         A fix for bug #67689
3832         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
3833         GetEnumerator is ambiguous.
3834
3835         * report.cs: Add new warning.
3836
3837 2006-10-29  Marek Safar  <marek.safar@gmail.com>
3838
3839         A fix for bug #78602
3840         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3841         to protected member can be nested type.
3842
3843 2006-10-28  Marek Safar  <marek.safar@gmail.com>
3844
3845         A fix for bug #78965
3846         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3847         to protected member must derive from current type.
3848
3849 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3850
3851         assign.cs: Reuses error method.
3852
3853         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
3854         instead of type for constants.
3855         (Expression.Error_ValueAssignment): Common error method.
3856
3857         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
3858         for any assignment.
3859
3860 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3861
3862         A fix for bug #79081
3863         * expression.cs (MemberAccess.DoResolve): Check nested type
3864         accessibility.
3865
3866 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
3867
3868         * doc.cs : nested delegates were not handled. Fixed bug #79754.
3869
3870 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3871
3872         A fix for bug #76591
3873         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
3874
3875 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3876
3877         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
3878         type forwarder of the same type multiple times.
3879
3880 2006-10-26  Raja R Harinath  <rharinath@novell.com>
3881
3882         Fix #78820
3883         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
3884         instance as an rvalue, even when we later resolve as an lvalue.
3885
3886 2006-10-25  Martin Baulig  <martin@ximian.com>
3887
3888         * anonymous.cs: Fix #79673.
3889
3890 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
3891
3892         A fix for bug #79666
3893         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
3894         ignored when is optimized (= default value) as its value is already set.
3895
3896 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3897
3898         A fix for bug #79724
3899         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
3900         TypeContainer for type lookup.
3901
3902 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3903
3904         A fix for bug #79231
3905         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
3906         * expression.cs (OverloadResolve): Always convert type name for
3907         an error message.
3908         (ResolveNamespaceOrType): Don't confuse a nested type with any 
3909         other member.
3910
3911 2006-10-18  Martin Baulig <martin@ximian.com>
3912
3913         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
3914
3915 2006-10-17  Miguel de Icaza  <miguel@novell.com>
3916
3917         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
3918         an int32, but requesting an int64 from the conversion
3919
3920 2006-10-12  Martin Baulig  <martin@ximian.com>
3921
3922         * anonymous.cs
3923         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
3924         
3925 2006-10-12  Martin Baulig  <martin@ximian.com>
3926
3927         * statement.cs
3928         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
3929
3930 2006-10-11  Miguel de Icaza  <miguel@novell.com>
3931
3932         * convert.cs: Remove broken code: I was doing the "Existance"
3933         tests for Implicit conversions.
3934
3935 2006-10-10  Miguel de Icaza  <miguel@novell.com>
3936
3937         * convert.cs: Added one missing case in
3938         ImplicitStandardConversionExists uint64 to intptr.
3939
3940         Fixes #59800
3941         
3942         * typemanager.cs (uintptr_type): another core known type.   
3943
3944         * ecore.cs (OperatorCast): routine used to do cast operations that
3945         depend on op_Explicit.  We could change some of the Decimal
3946         conversions to use this.
3947
3948         This one has a probe mechanism that checks both types for an op_
3949         which it coudl be used to eliminate two classes: CastToDecimal
3950         and CastFromDecimal.
3951
3952         * convert.cs: Implement the conversions documented in #59800
3953         
3954 2006-10-10  Martin Baulig  <martin@ximian.com>
3955
3956         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
3957         before RootScope.ResolveMembers().
3958
3959         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
3960         `CurrentType' if appropriate.
3961
3962 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
3963
3964         A fix for bug #78568
3965         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
3966         when contains binary operators.
3967         * cs-parser.jay: Updated.
3968
3969 2006-10-09  Martin Baulig  <martin@ximian.com>
3970
3971         * delegate.cs
3972         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
3973         moved that into Define() and also do the other type parameter
3974         checks there.  Fixes #79094.  Added gtest-292.cs.
3975
3976         * expression.cs
3977         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
3978         since that doesn't include type parameters; don't use `Ldelema'
3979         for type parameters.  Fixes #78980.  Added gtest-293.cs.
3980
3981 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
3982
3983         A fix for #77796
3984         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
3985         conversion is allowed.
3986
3987 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3988
3989         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
3990         error reporting when no error occurs.
3991
3992 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3993
3994         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
3995         does not exist.
3996
3997 2006-10-06  Raja R Harinath  <rharinath@novell.com>
3998
3999         Fix #79584
4000         * class.cs (DefineTypeBuilder): Check circular dependencies before
4001         setting the parent of the TypeBuilder.
4002         (CheckRecursiveDefinition): Don't use 'BaseType', since
4003         it may not be valid until after DefineTypeBuilder.  Use
4004         'base_type' instead.
4005
4006 2006-10-04  Martin Baulig  <martin@ximian.com>
4007
4008         Merged the Anonymous Methods patch.
4009
4010         * anonymous.cs, iterators.cs: The new anonymous methods code.
4011
4012         * statement.cs (Variable): New public abstract class.
4013         (LocalInfo.Variable): New public property.
4014         (LocalInfo.ResolveVariable): New public method.
4015         (Block.Flags): Add `IsIterator'.
4016         (Block.AddVariable): Improved the CS0136 check.
4017         (Block.AnonymousChildren): New public property.
4018         (Block.AddAnonymousChild): New public method.
4019         (ToplevelBlock): Update to use the new anonymous method framework.
4020         (ToplevelBlock.ctor): `container' is now a `Block' and not a
4021         `ToplevelBlock'; this is required to correctly implement the
4022         CS0136 check.
4023         (Fixed, Using): Use `TemporaryVariable' instead of directly
4024         creating the `LocalBuilder'.
4025
4026         * parameter.cs (Parameter.ResolveVariable): New public method.
4027         (Parameters.ResolveVariable): Likewise.
4028
4029         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
4030
4031         * class.cs (TypeContainer): Replaced the `iterators' list and
4032         corresponding methods with a list of `CompilerGeneratedClass'es.
4033         (TypeContainer.ResolveMembers): New public method.
4034         (Method): `IIteratorContainer' has been replaced by
4035         `IAnonymousHost'.
4036
4037         * expression.cs (VariableReference): New public abstract base
4038         class for `LocalVariableReference', `ParameterReference' and
4039         `This'.
4040
4041         * codegen.cs (EmitContext): Removed `capture_context',
4042         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
4043         (EmitContext.EmitThis): Removed.
4044
4045         * cs-parser.jay: Replace `iterator_container' with
4046         `anonymous_host'.       
4047
4048 2006-10-04  Martin Baulig  <martin@ximian.com>
4049
4050         * generic.cs (GenericMethod): Don't make this abstract.
4051         (Constraints.Clone): Added dummy implementation.
4052
4053 2006-10-04  Raja R Harinath  <harinath@gmail.com>
4054
4055         Fix #79577
4056         * namespace.cs (LookForAnyGenericType): Avoid nullref on
4057         'declspaces'.  Avoid allocating arrays willy-nilly.
4058
4059         Fix #79553
4060         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
4061         cases out of the switch.
4062
4063 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4064
4065         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
4066         message when non-generic type is used with the type arguments.
4067         * expression.cs: Updated.
4068
4069 2006-09-28  Raja R Harinath  <rharinath@novell.com>
4070
4071         Fix #79013
4072         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
4073         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4074         Change semantics slightly.  Don't insist on having only one
4075         temporary EmptyExpression -- just throttle the creation of new ones.
4076
4077         Fix #79451
4078         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
4079         non-interfaces too.  If no methods are found, don't try to create
4080         a MethodGroupExpr.
4081
4082 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4083
4084         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
4085         generic type.
4086
4087         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
4088         us produce better error message.
4089
4090 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
4091
4092         * expression.cs (Binary.ResolveOperator): Warn about a side effect
4093         of the `|' operator.
4094
4095         * report.cs: A new warning added.
4096
4097 2006-09-27  Martin Baulig  <martin@ximian.com>
4098
4099         * generic.cs (GenericMethod): Don't make this abstract.
4100
4101 2006-09-27  Martin Baulig  <martin@ximian.com>
4102
4103         * report.cs
4104         (InternalErrorException): Added overloaded ctor taking a params array.
4105
4106 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
4107
4108         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
4109         Fixed the cases when same error was reported twice.
4110
4111         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
4112         now report symbol information.
4113
4114 2006-09-25  Martin Baulig  <martin@ximian.com>
4115
4116         * class.cs: Completely unified with the gmcs version.
4117
4118 2006-09-25  Martin Baulig  <martin@ximian.com>
4119
4120         * typemanager.cs (TypeManager.IsNullableType): New public function.
4121         (TypeManager.IsNullableTypeOf): Likewise.
4122         (TypeManager.IsNullableValueType): Likewise.
4123
4124         * class.cs (MethodCore): Added the `GenericMethod' argument from
4125         gmcs and also unified all classes derived from `MethodCore' with gmcs.
4126
4127 2006-09-24  Raja R Harinath  <harinath@gmail.com>
4128
4129         * convert.cs: Unify with gmcs version.
4130
4131 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4132
4133         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
4134         verify them as well.
4135
4136         * report.cs: New warning.
4137
4138 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4139
4140         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
4141         for anonymous block with out argument.
4142
4143 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4144
4145         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
4146         not used private events only.
4147
4148 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
4149
4150         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
4151
4152         * const.cs (Const.Define): Check for constant type.
4153         (Const.IsConstantTypeValid): Looks for valid constant types.
4154
4155         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
4156
4157         * ecore.cs (EmptyConstantCast): New common class for all constant based
4158         EmptyCast(s).
4159
4160         * expression.cs (Is.DoResolve): Handle null constant especially.
4161         (New.DoResolve): Check for new void().
4162         (MemberAccess.DoResolve): Cope with all kind of nulls.
4163
4164         * literal.cs (NullConstant): Uses EmptyConstantCast.
4165         (NullDefault): Based on EmptyConstantCast.
4166         (NullLiteral): Uses EmptyConstantCast.
4167
4168         * statement.cs (Block.ResolveMeta): Check for constant type.
4169
4170 2006-09-22  Martin Baulig  <martin@ximian.com>
4171
4172         * delegate.cs, attribute.cs: Merged with the gmcs versions.
4173
4174 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4175
4176         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
4177         not the null type.
4178
4179         Fix part of #79451
4180         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
4181         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
4182         code slightly.
4183
4184 2006-09-22  Martin Baulig  <martin@ximian.com>
4185
4186         * ecore.cs: Merged with the gmcs version.
4187
4188         * generic.cs (ConstructedType): New dummy class.
4189         (TypeArguments): Don't make this abstract.
4190
4191         * typemanager.cs
4192         (TypeManager.IsGenericTypeDefinition): New method.
4193         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
4194
4195 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4196
4197         * expression.cs (ComposedCast): Check for arrays of TypedReference
4198         before creating the type, not after.
4199
4200 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
4201
4202         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
4203         after ToType change.
4204
4205         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
4206         when constant must be implicitly convertible.
4207
4208         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
4209
4210         * ecore.cs (NullCast): Derives from NullConstant.
4211
4212         * expression.cs (Is.DoResolve): Removed useless variables.
4213         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
4214         (New.Constantify): Add enum support.
4215         (MemberAccess.DoResolve): Add warning when accessing null constant or
4216         variable.
4217
4218         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
4219         property.
4220
4221         * literal.cs (NullConstant): New abstract class with common
4222         functionality for all null specializations.
4223         (NullDefault): Represents default(X) when result can be
4224         reduced to null.
4225         (NullLiteral): Updated.
4226
4227         * report.cs: Add new warning.
4228
4229 2006-09-21  Martin Baulig  <martin@ximian.com>
4230
4231         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
4232
4233 2006-09-21  Martin Baulig  <martin@ximian.com>
4234
4235         * generic.cs (GenericConstraints): New dummy class.
4236         (Constraints): Likewise.
4237         (TypeParameter): Likewise.
4238         (TypeParameterName): Likewise.
4239         (GenericMethod): Likewise.
4240
4241         * typemanager.cs (TypeManager.GetGenericArguments): New method.
4242
4243         * decl.cs: Merged with the gmcs version.
4244
4245 2006-09-21  Raja R Harinath  <rharinath@novell.com>
4246
4247         * generic.cs (TypeParameter): Implement IMemberContainer.
4248         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
4249
4250         * rootcontext.cs: Unify with gmcs version.
4251
4252         * report.cs: Unify with gmcs version.
4253         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
4254         from gmcs/generics.cs.
4255         * generics.cs (TypeParameter): New dummy class.
4256
4257         * support.cs: Unify with gmcs version.
4258
4259 2006-09-20  Raja R Harinath  <rharinath@novell.com>
4260
4261         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
4262         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
4263
4264         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
4265         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
4266         * mcs.exe.sources: Add generic.cs.
4267
4268         * codegen.cs: Unify with gmcs version.
4269
4270         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
4271         (EmitContext): Add GenericDeclContainer implementation.
4272         * decl.cs (MemberCore, DeclSpace): Likewise.
4273         * namespace.cs: Remove #ifdef GMCS_SOURCE.
4274
4275         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
4276         MCS TypeManager has a corresponding dummy method.
4277
4278 2006-09-19  Martin Baulig  <martin@ximian.com>
4279
4280         * expression.cs: Completely merged with the gmcs version.
4281
4282 2006-09-19  Martin Baulig  <martin@ximian.com>
4283
4284         * expression.cs (Invocation): Merged with the gmcs version.
4285         (ArrayAccess.GetStoreOpcode): Likewise.
4286
4287 2006-09-19  Martin Baulig  <martin@ximian.com>
4288
4289         * typemanager.cs
4290         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
4291         (TypeManager.IsGenericMethodDefinition): Likewise.
4292
4293 2006-09-19  Martin Baulig  <martin@ximian.com>
4294
4295         * typemanager.cs
4296         (TypeManager.IsEqual): Moved the gmcs implementation here.
4297         (TypeManager.DropGenericTypeArguments): Likewise.
4298         (TypeManager.DropGenericMethodArguments): Likewise.
4299         (TypeManager.GetTypeArguments): Moved here from gmcs.
4300         (TypeManager.HasGenericArguments): Likewise.
4301
4302 2006-09-19  Martin Baulig  <martin@ximian.com>
4303
4304         * expression.cs (Binary): Merged with the gmcs version.
4305
4306 2006-09-19  Martin Baulig  <martin@ximian.com>
4307
4308         * expression.cs (Probe, As, Is): Merged with the gmcs version.
4309
4310 2006-09-19  Martin Baulig  <martin@ximian.com>
4311
4312         * typemanager.cs: Merged with the gmcs version.
4313
4314 2006-09-16  Raja R Harinath  <rharinath@novell.com>
4315
4316         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
4317         * driver.cs: Likewise.
4318
4319 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
4320
4321         A fix for #79401
4322         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
4323         only if parent type is class.
4324         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
4325         update.
4326
4327 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
4328
4329         * cs-parser.jay,
4330         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
4331         keywords are used.
4332         * typemanager.cs(CSharpName): Converts NullType to null.
4333
4334 2006-09-15  Martin Baulig  <martin@ximian.com>
4335
4336         * typemanager.cs
4337         (TypeManager.GetMethodName): Added mcs implementation.
4338         (TypeManager.IsEqual): Likewise.
4339
4340         * ecore.cs
4341         (SimpleName.RemoveGenericArity): Added dummy implementation.
4342
4343         * pending.cs: Merged with the gmcs version.     
4344
4345 2006-09-15  Martin Baulig  <martin@ximian.com>
4346
4347         * statement.cs: Merge with the gmcs version.
4348
4349 2006-09-15  Martin Baulig  <martin@ximian.com>
4350
4351         * statement.cs (Switch): Merge with the gmcs implementation
4352         (without nullables), which is newer.
4353
4354 2006-09-15  Martin Baulig  <martin@ximian.com>
4355
4356         * statement.cs (Block.Variables): Make this public.
4357         (ToplevelBlock.Parameters): Make this a property.
4358         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
4359
4360 2006-09-15  Martin Baulig  <martin@ximian.com>
4361
4362         * namespace.cs: Merge with the gmcs version.
4363
4364 2006-09-15  Martin Baulig  <martin@ximian.com>
4365
4366         * decl.cs (MemberName): Minor code cleanups.
4367
4368 2006-09-15  Martin Baulig  <martin@ximian.com>
4369
4370         * parameter.cs: Merge with the gmcs version.
4371
4372 2006-09-15  Martin Baulig  <martin@ximian.com>
4373
4374         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
4375         and an error in mcs.
4376
4377 2006-09-15  Martin Baulig  <martin@ximian.com>
4378
4379         * flowanalysis.cs: Merged from GMCS; added the generics code into
4380         a `GMCS_SOURCE' conditional so we can share this file.
4381
4382 2006-09-08  Martin Baulig  <martin@ximian.com>
4383
4384         * typemanager.cs (TypeManager.interlocked_type): New public field.
4385         (TypeManager.int_interlocked_compare-exchange): New public field.
4386         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
4387         enumerator types here and call InitGenericCoreTypes().
4388         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
4389         after calling InitEnumUnderlyingTypes().
4390
4391         * rootcontext.cs
4392         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
4393         `classes_second_stage'. 
4394
4395 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
4396
4397         * assign.cs, ecore.cs, expression.cs: Share error message text.
4398         * class.cs (FieldMember.Define): Check for varible of static type.
4399         * driver.cs (LoadAssembly): Uses error output for errors.
4400         * statement.cs: Updated.
4401
4402 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
4403
4404         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
4405         type instance.
4406
4407 2006-09-07  Martin Baulig  <martin@ximian.com>
4408
4409         * driver.cs
4410         (MainDriver): Revert r62663 from Marek; see #70506 for details.
4411
4412 2006-08-29  Miguel de Icaza  <miguel@novell.com>
4413
4414         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4415         
4416 2006-08-17  Miguel de Icaza  <miguel@novell.com>
4417
4418         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
4419         #52019 and #79064, the use of the \uXXXX sequence in source code
4420         to represent unicode characters.
4421
4422 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
4423
4424         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
4425         support.
4426         * class.cs, ecore.cs, statement.cs: Merged to one error message.
4427
4428 2006-08-13  Miguel de Icaza  <miguel@novell.com>
4429
4430         * assign.cs: Catch attempts to assign to a method groups in += and
4431         report as 1656
4432
4433 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
4434
4435         A fix for #79056
4436         * cs-parser.jay: Don't destroy current array type by typeof of array's.
4437
4438 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
4439
4440         * class.cs (Method.Define): Issue a warning when generic method looks like
4441         an entry point.
4442         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
4443         as well.
4444
4445 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
4446  
4447         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
4448         looking for ctor.
4449         * decl.cs (MemberCache.FindMembers): When container is interface we need to
4450         search all base interfaces as a member can be ambiguous.
4451         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
4452         Constructor member type filter. 
4453         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
4454         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
4455         reporting for returned memberinfos.
4456         * report.cs: Updated.
4457         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
4458         version to work on all runtimes.
4459         (TypeManager.RealMemberLookup): Removed members filtering.
4460
4461 2006-08-08  Raja R Harinath  <rharinath@novell.com>
4462
4463         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
4464         (PropertyExpr.EmitAssign): Likewise.
4465         * expression.cs (Indirection.EmitAssign): Likewise.
4466         (LocalVariableReference.EmitAssign): Likewise.
4467         (ParameterReference.EmitAssign): Likewise.
4468         (Invocation.EmitArguments): Likewise.
4469         (ArrayAccess.EmitAssign): Likewise.
4470         (IndexerAccess.EmitAssign): Likewise.
4471         (This.EmitAssign): Likewise.
4472         (ConditionalLogicalOperator.Emit): Likewise.
4473
4474         Fix #79026
4475         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
4476         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
4477         leave it in after returning it.
4478         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
4479
4480 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
4481
4482         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
4483         message.
4484
4485 2006-08-03  Raja R Harinath  <rharinath@novell.com>
4486
4487         Fix cs0146-3.cs and cs0146-4.cs.
4488         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
4489         enclosing types don't depend on the current type.
4490
4491 2006-08-02  Raja R Harinath  <rharinath@novell.com>
4492
4493         Fix #77963
4494         * class.cs (TypeContainer.DoDefineMembers): Use
4495         FindBaseMemberWithSameName on Parent, since we're interested in
4496         whether we hide inherited members or not.
4497         (FindBaseMemberWithSameName): Make slightly more robust.
4498
4499         Fix the non-generic testcase from #77396
4500         * decl.cs (DeclSpace.DeclContainer): Remove override.
4501
4502         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
4503         declspaces for doppelgangers too.
4504         (UsingEntry): Implement IResolveContext.
4505         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
4506         'this' as the resolve context.
4507         (LocalAliasEntry): Likewise.
4508
4509         Implement parts of #77403
4510         * roottypes.cs (RootDeclSpace): New.  Used to represent the
4511         toplevel declaration space.  Each namespace declaration introduces
4512         a "partial" root declaretion space.
4513         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
4514         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
4515         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
4516         from 'current_namespace.SlaveDeclSpace'.
4517         (namespace_declaration): Likewise.
4518         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
4519         check.  It can't happen now.
4520         * decl.cs (DeclSpace.LookupType): Likewise.
4521         * driver.cs (MainDriver): Sanity check.
4522
4523 2006-08-01  Raja R Harinath  <rharinath@novell.com>
4524
4525         * decl.cs (DeclSpace.FindNestedType): Remove.
4526         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
4527         LookupTypeContainer to get the container of the nested type.
4528         * class.cs (TypeContainer.FindNestedType): Make non-override.
4529
4530 2006-07-31  Raja R Harinath  <rharinath@novell.com>
4531
4532         * decl.cs (DeclSpace.PartialContainer): Move field from ...
4533         * class.cs (TypeContainer.PartialContainer): ... here.
4534         (TypeContainer.AddBasesForPart): New helper.
4535         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
4536         instead.
4537         * cs-parser.jay (current_class): Convert to DeclSpace.
4538         (struct_declaration, interface_declaration, class_declaration):
4539         Use AddBasesForPart instead of .Bases directly.
4540         * const.cs, iterators.cs: Update to changes.
4541
4542 2006-07-28  Raja R Harinath  <rharinath@novell.com>
4543
4544         * class.cs (TypeContainer.AddMemberType): Rename from
4545         AddToTypeContainer.
4546         (TypeContainer.AddMember): Rename from AddToMemberContainer.
4547         (AddTypeContainer): New.  Combine AddClassOrStruct and
4548         AddInterface.
4549         (AddPartial): Update.  Add 'is_partial' argument.
4550         * roottypes.cs: Update to changes.
4551         * cs-parser.jay (push_current_class): New helper for handling
4552         current_container and current_class.
4553         (struct_declaration, interface_declaration, class_declaration):
4554         Use it.
4555
4556 2006-07-26  Raja R Harinath  <rharinath@novell.com>
4557
4558         * roottypes.cs: Rename from tree.cs.
4559
4560         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
4561         * tree.cs (Tree, ITreeDump): Remove types.
4562         * rootcontext.cs (tree, Tree): Remove fields.
4563         (root, ToplevelTypes): New.
4564         * *.cs: Update to rename.
4565
4566         * tree.cs (Tree.RecordDecl): Remove.
4567         (RootTypes.AddToTypeContainer): Record the toplevel type in its
4568         namespace here.
4569         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
4570
4571 2006-07-23  Raja R Harinath  <harinath@gmail.com>
4572
4573         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
4574         DoFlowAnalysis and OmitStructFlowAnalysis here.
4575         (ec.With): Rename from WithUnsafe and generalize.
4576         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
4577         (ec.WithFlowAnalyis): New.
4578         * ecore.cs, expression.cs, statement.cs: Update.
4579
4580 2006-07-22  Raja R Harinath  <harinath@gmail.com>
4581
4582         * statement.cs (Block.ResolveMeta): Simplify slightly.
4583
4584         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
4585         multiple boolean fields.  Convert InUnsafe, constant_check_state,
4586         check_state to flags.
4587         (CheckState, ConstantCheckState): Update.
4588         (InUnsafe): New read-only property.
4589         (FlagsHandle): Rename from CheckStateHandle and convert to handle
4590         arbitrary flags.
4591         (WithUnsafe): New helper similar to WithCheckState.
4592         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
4593         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
4594
4595 2006-07-21  Raja R Harinath  <rharinath@novell.com>
4596
4597         Make comparisons use the same IL irrespective of whether they're
4598         in a 'checked' or 'unchecked' context: one of the issues in #78899
4599         * codegen.cs (EmitContext.CheckState): Make read-only property.
4600         (EmitContext.ConstantCheckState): Likewise.
4601         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
4602         helper that implement a save/restore stack for CheckState
4603         values.  This is the only way to change check-state.
4604         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
4605         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
4606         (CheckedExpr.EmitBranchable): New forwarding method.
4607         (UnCheckedExpr): Likewise.
4608         * statement.cs (Block.ResolveMeta): Use WithCheckState.
4609         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
4610         (Checked.Resolve, checked.DoEmit): Likewise.
4611
4612 2006-07-20  Miguel de Icaza  <miguel@novell.com>
4613
4614         * anonymous.cs: Cache the resolved anonymous delegate, and return
4615         this so that the ResolveTopBlock is only triggered once, not
4616         twice.
4617
4618         Currently we trigger ResolvetopBlock twice due to a first pass of
4619         argument check compatibility, and a second pass that does the
4620         actual resolution.   
4621         
4622 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4623
4624         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
4625         modifiers.
4626         * rootcontext.cs (Reset): Add helper_classes.
4627
4628 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4629
4630         A fix for #78860
4631         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
4632         correctly.
4633
4634 2006-07-13  Miguel de Icaza  <miguel@novell.com>
4635
4636         * statement.cs (Lock): Handle expressions of type
4637         TypeManager.null_type specially.  Fixes #78770
4638
4639 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4640
4641         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
4642         to an event.
4643
4644 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4645
4646         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
4647         for accessors as well.
4648         * ecore.cs (EventExpr): Add AccessorTable.
4649
4650 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
4651
4652         A fix for #78738
4653         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
4654         for CS0122 where appropriate.
4655         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
4656         level attributes.
4657         (Filter): Assembly can be null in the case of top level attributes.
4658
4659 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
4660
4661         A fix for #78690
4662
4663         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
4664         is done at global level.
4665
4666 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4667
4668         A fix for #77002, Implemented TypeForwarder support.
4669
4670         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
4671         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
4672         * typemanager.cs (): Add type_forwarder_attr_type.
4673
4674 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4675
4676         * report.cs: Add CS0469 warning.
4677
4678 2006-06-21  Martin Baulig  <martin@ximian.com>
4679
4680         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
4681         the `try'-block, so we also report CS0016 etc. there.
4682
4683 2006-06-21  Martin Baulig  <martin@ximian.com>
4684
4685         * delegate.cs
4686         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
4687
4688 2006-06-21  Martin Baulig  <martin@ximian.com>
4689
4690         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
4691         also report CS1686 for parameters.
4692
4693 2006-06-21  Martin Baulig  <martin@ximian.com>
4694
4695         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
4696         instead of an error if the value is not implicitly convertible to
4697         the switch types; fixes #77964.
4698
4699 2006-06-21  Raja R Harinath  <rharinath@novell.com>
4700
4701         Fix #78673
4702         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
4703         FieldBuilder is null.
4704
4705         Fix #78662
4706         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
4707         'left' and 'right' before error-checking.
4708
4709 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
4710
4711         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
4712         Fixed bug #78601.
4713         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
4714         (FieldExpr.DoResolve): likewise.
4715         (PropertyExpr.InstanceResolve): likewise.
4716         (EventExpr.InstanceResolve): likewise. 
4717
4718 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
4719
4720         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
4721         attribute applicable tests for attribute argument.
4722
4723 2006-06-02  Raja R Harinath  <rharinath@novell.com>
4724
4725         Fix #78079
4726         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
4727         (Binary.OverloadResolve_PredefinedIntegral): New.
4728         (Binary.OverloadResolve_PredefinedFloating): New.
4729         (Binary.OverloadResolve_PredefinedString): New.
4730         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
4731         Follow the standard more closely, and treat numeric promotions in
4732         terms of overload resolution.
4733         (Binary.CheckShiftArguments): Simplify.
4734
4735 2006-06-01  Raja R Harinath  <rharinath@novell.com>
4736
4737         * flowanalysis.cs (MyBitVector): Simplify representation.
4738         (MyBitVector.Clone): Avoid allocating BitArray.
4739         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
4740         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
4741         (*): Update.  Change all references to MyBitVector.And and
4742         MyBitVector.Or to &= and |=.
4743
4744 2006-05-29  Raja R Harinath  <rharinath@novell.com>
4745
4746         Fix cs0231-[34].cs.
4747         * cs-parser.jay (formal_parameter_list): Extend the pattern below
4748         to param arguments too.
4749
4750 2006-05-26  Miguel de Icaza  <miguel@novell.com>
4751
4752         * cs-parser.jay: Catch another parsing form for arglist being
4753         followed by other arguments.  Fixes #78313.
4754
4755 2006-05-24  Raja R Harinath  <rharinath@novell.com>
4756
4757         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
4758         checking of out parameters to ...
4759         (FlowBranchingToplevel.Merge): ... here.
4760         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
4761         set, propagate the origin upward, and only complain if there was
4762         no other error.
4763         (FlowBranchingException.AddContinueOrigin): Likewise.
4764         (FlowBranchingException.AddReturnOrigin): Likewise.
4765         (FlowBranchingException.AddGotoOrigin): Likewise.       
4766
4767 2006-05-23  Raja R Harinath  <rharinath@novell.com>
4768
4769         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
4770         unreachable, skip it.
4771         (FlowBranchingException.Merge): Always propagate jumps, even if
4772         the finally block renders subsequent code unreachable.
4773
4774 2006-05-18  Raja R Harinath  <rharinath@novell.com>
4775
4776         Fix #77601
4777         * statement.cs (Goto.Resolve): Move responsibility for resolving
4778         'goto' to FlowBranching.AddGotoOrigin.
4779         (Goto.SetResolvedTarget): New.  Callback to set the
4780         LabeledStatement that's the target of the goto.
4781         (Goto.DoEmit): Use Leave instead of Br when crossing an
4782         unwind-protect boundary.
4783         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
4784         LookupLabel and adjust to new semantics.
4785         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
4786         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
4787         Goto.SetResolvedTarget to update target.
4788         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
4789         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
4790         AddBreakOrigin & co.  Delay propagation until ...
4791         (FlowBranchingException.Merge): ... this.
4792
4793         * statement.cs (Block.Resolve): Always depend on flow-branching to
4794         determine unreachability.  Kill workaround that originally emitted
4795         only one statement after an "unreachable" label (see infloop in
4796         test-515.cs).
4797
4798         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
4799         This is still "wrong", but anything better would probably need a
4800         multi-pass algorithm.
4801         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
4802         usage vector.  Force current usage vector to be reachable, to
4803         optimistically signify backward jumps.
4804         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
4805         detected.
4806         (FlowBranchingLabeled.Merge): New.  If no backward jump was
4807         detected, return the original salted-away usage vector instead,
4808         updated with appropriate changes.  Print unreachable warning if
4809         necessary.
4810         * statement.cs (Block.Resolve): Don't print unreachable warning on
4811         a labeled statement.
4812
4813 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
4814
4815         * driver.cs: Pass filename without path to AssemblyBuilder's 
4816         AddResourceFile. Fixes bug #78407.
4817
4818 2006-05-17  Raja R Harinath  <rharinath@novell.com>
4819
4820         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
4821         * flowanalysis.cs (FlowBranchingLabeled): ... here.
4822         (FlowBranching.MergeChild): Overwrite
4823         reachability information from Labeled branchings too.
4824
4825 2006-05-16  Raja R Harinath  <rharinath@novell.com>
4826
4827         * statement.cs (Goto.Resolve): Merge jump origins here ...
4828         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
4829
4830         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
4831         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
4832         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
4833         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
4834         here, ...
4835         * statement.cs (Goto.Resolve): ... not here.
4836         (Goto.Emit): Remove CS1632 check.
4837
4838 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
4839
4840         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
4841         error message.
4842
4843 2006-05-11  Raja R Harinath  <rharinath@novell.com>
4844
4845         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
4846         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
4847         (FlowBranchingException.Label): Likewise.
4848
4849         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
4850         given value.
4851         (MyBitVector.Or): Use it to avoid losing information (Count).
4852         (FlowBranching.MergeOrigins): Likewise.
4853
4854         * flowanalysis.cs (UsageVector.IsDirty): Remove.
4855         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
4856         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
4857         (UsageVector.ToString): Simplify.
4858         (UsageVector.MergeSiblings): Move here from ...
4859         (FlowBranching.Merge): ... here.
4860         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
4861         not a MyBitVector.
4862
4863 2006-05-10  Raja R Harinath  <rharinath@novell.com>
4864
4865         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
4866         null bitvector is treated as all-true.
4867
4868         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
4869         (MyBitVector): Rationalize invariants.  'vector != null' implies
4870         that we have our own copy of the bitvector.  Otherwise,
4871         'InheritsFrom == null' implies all inherited bits are true.
4872
4873 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
4874
4875         * statement.cs (LocalInfo): Add IsConstant.
4876         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
4877         local variable for constants.
4878
4879 2006-05-09  Raja R Harinath  <rharinath@novell.com>
4880
4881         * flowanalysis.cs (MyBitVector.Empty): New.
4882         (MyBitVector): Don't allow InheritedFrom to be null.
4883         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
4884         (UsageVector, FlowBranching): Update to changes.
4885
4886         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
4887         recursion.  The 'Parent == null' condition isn't sufficient for
4888         anonymous methods.
4889         (FlowBranching.AddBreakOrigin): Likewise.
4890         (FlowBranching.AddContinueOrigin): Likewise.
4891         (FlowBranching.AddReturnOrigin): Likewise.
4892         (FlowBranching.StealFinallyClauses): Likewise.
4893         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
4894         (FlowBranching.CheckOutParameters): Likewise.
4895         (FlowBranchingToplevel): Terminate all the above recursions here.
4896         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
4897         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
4898
4899         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
4900         toplevel block.
4901         (FlowBranchingToplevel): New.  Empty for now.
4902         (FlowBranching.MergeTopBlock): Update.
4903         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
4904         branching for the anonymous delegate.
4905         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
4906
4907         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
4908         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
4909         information at the start of the merge.  Reorganize.
4910
4911 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4912
4913         * class.cs (MethodData.Define): Method cannot implement interface accessor.
4914
4915 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4916
4917         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
4918         to newly introduced ctor.
4919
4920         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
4921         message to one place.
4922         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
4923         global namespace.
4924
4925 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4926
4927         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
4928
4929         * ecore.cs (Expression.ResolveAsConstant): Updated.
4930
4931         * statement.cs (ResolveMeta): Updated.
4932
4933 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4934
4935         * cs-parser.jay: __arglist cannot be used in initializer.
4936
4937 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4938
4939         A fix for #77879
4940         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
4941         private types.
4942
4943 2006-05-05  Raja R Harinath  <rharinath@novell.com>
4944
4945         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
4946         (LabeledStatement): Add 'name' parameter.
4947         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
4948         (Block.AddLabel): Update to changes.
4949         * cs-parser.jay (labeled_statement): Likewise.
4950
4951         * flowanalysis.cs (BranchingType.Labeled): New.
4952         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
4953         (FlowBranchingLabeled): New.  Does nothing for now, but will
4954         eventually handle 'goto' flows.
4955         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
4956         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
4957         that's terminated ...
4958         (Block.Resolve): ... here.
4959
4960         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
4961         (UsageVector.MergeFinallyOrigins): Likewise.
4962         (FlowBranching.InTryOrCatch): Likewise.
4963         (FlowBranching.AddFinallyVector): Likewise.
4964         (FlowBranchingException): Update to changes.
4965
4966         Fix #78290
4967         * statement.cs (Return.Resolve): Move error checking to ...
4968         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
4969         (FlowBranchingException): Handle return origins like break and
4970         continue origins.
4971         (FlowBranching.UsageVector.CheckOutParameters): Remove.
4972
4973 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4974
4975         A fix for #76122
4976         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
4977         filter.
4978
4979 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4980
4981         A fix for #77543
4982         * class.cs (MethodData.Define): Do public accessor check only when method
4983         implements an interface.
4984
4985 2006-05-04  Raja R Harinath  <rharinath@novell.com>
4986
4987         Remove special handling of 'break'
4988         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
4989         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
4990         (UsageVector.Break): Remove.
4991         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
4992         reachability.
4993         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
4994
4995         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
4996         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
4997
4998 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
4999
5000         A fix for #75726
5001         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
5002         be the interface member.
5003
5004 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
5005
5006         A fix for #60069
5007         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
5008         for emitting small (int) values.
5009
5010 2006-05-03  Raja R Harinath  <rharinath@novell.com>
5011
5012         Fix #59427
5013         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
5014         control-flow passes through the 'finally' after merging-in all the
5015         control-flows from 'try' and the 'catch' clauses.
5016
5017         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
5018         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
5019         always true at the only non-recursive entry point.
5020         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
5021         FlowBranchingBreakable.
5022         (FlowBranchingLoop): Remove.
5023         * statement.cs (Return.DoResolve): Update to changes.
5024
5025         Fix #76471, #76665
5026         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
5027         (FlowBranching.CreateBranching): Handle it: create a
5028         FlowBranchingContinuable.
5029         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
5030         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
5031         except that it handles the 'continue' command.
5032         (FlowBranching.UsageVector.MergeOrigins): Rename from
5033         MergeBreakOrigins.
5034         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
5035         except that it overrides AddContinueOrigin.
5036         (FlowBranchingException): Override AddContinueOrigin, similar to
5037         AddBreakOrigin.
5038         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
5039         Create a new branching around the embedded statement.
5040         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
5041         control flow after the embedded statement.
5042         (Continue.Resolve): Move all error checking to AddContinueOrigin.
5043
5044         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
5045         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
5046         FlowBranchingBreakable.
5047         (FlowBranchingSwitch): Remove.
5048
5049         Fix test-503.cs
5050         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
5051         error reporting to ...
5052         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
5053         Rename from 'AddBreakVector'.  Add new location argument.  Return
5054         a bool indicating whether the 'break' crosses an unwind-protect.
5055         (FlowBranchingException.AddBreakOrigin): Add.
5056         (FlowBranchingException.Merge): Propagate 'break's to surrounding
5057         flowbranching after updating with the effects of the 'finally'
5058         clause.
5059         (FlowBranchingBreakable): New common base class for
5060         FlowBranchingLoop and FlowBranchingSwitch.
5061
5062         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
5063         embedded statement.
5064         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
5065
5066 2006-05-02  Raja R Harinath  <rharinath@novell.com>
5067
5068         * statement.cs (Do.Resolve): If the loop is infinite, set the
5069         barrier.
5070         (While.Resolve, For.Resolve): Set a barrier after the embedded
5071         statement.  There's no direct control flow that goes from the end
5072         of the embedded statement to the end of the loop.
5073         * flowanalysis.cs (FlowBranching.Infinite): Remove.
5074         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
5075         above ensure that the reachability is correctly computed.
5076
5077         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
5078         (UsageVector.MergeBreakOrigins): If the current path is
5079         unreachable, treat it as if all parameters/locals are initialized.
5080         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
5081         infinite loops before merging-in break origins.
5082
5083         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
5084         (Reachability.Reachable): Split part into ...
5085         (Reachability.Unreachable): ... this.  Simplify.
5086         (Reachability.IsUnreachable): Use 'Unreachable' instead.
5087
5088         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
5089         (Reachability.SetThrowsSometimes): Likewise.
5090         (FlowBranchingBlock.MergeTopBlock): Don't compare against
5091         TriState.Always, use corresponding property.
5092         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
5093         (Block.Resolve): Likewise.  Remove some redundant checks.
5094
5095 2006-05-02  Raja R Harinath  <harinath@gmail.com>
5096
5097         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
5098         (Reachability.Meet): Don't bother checking AlwaysThrows --
5099         barrier is always set.
5100         (FlowBranchingBlock.Merge): Likewise.
5101
5102 2006-05-01  Raja R Harinath  <harinath@gmail.com>
5103
5104         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
5105         checks for unreachable.
5106
5107 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
5108
5109         A fix for #77980
5110         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
5111
5112         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
5113         whether field is really assigned.
5114
5115 2006-04-30  Raja R Harinath  <harinath@gmail.com>
5116
5117         * flowanalysis.cs (Reachability): Make 4-argument constructor
5118         private.
5119         (Reachability.Meet): Rename from 'And'.  Remove static variant.
5120         (Reachability.Always): Rename from the highly misleading
5121         'Reachability.Never'.
5122         (FlowBranching.Merge): Update to changes.  Mark an impossible
5123         situation with a 'throw'.
5124         (*): Update to changes.
5125
5126 2006-04-29  Raja R Harinath  <harinath@gmail.com>
5127
5128         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
5129         Remove 'Undefined'.
5130         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
5131         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
5132         (*): Update to changes.
5133         * statement.cs: Update to changes.
5134
5135 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
5136
5137         A fix for #78049
5138         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
5139
5140 2006-04-28  Raja R Harinath  <harinath@gmail.com>
5141
5142         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
5143         dummy UsageVector.
5144
5145         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
5146         argument to two arguments: an usage-vector and a bool.  Move call
5147         to FlowBranching.Merge () ...
5148         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
5149
5150         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
5151         handling of loop and switch reachability to ...
5152         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
5153
5154 2006-04-27  Raja R Harinath  <harinath@gmail.com>
5155
5156         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
5157         handling to FlowBranchingLoop.InLoop.
5158         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
5159
5160 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
5161
5162         A fix for #78115
5163         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
5164         anonymous method is allowed from AnonymousContainer here.
5165
5166         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
5167
5168 2006-04-24  Raja R Harinath  <rharinath@novell.com>
5169
5170         Fix #78156
5171         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
5172
5173 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
5174
5175         A fix for #49011.
5176         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
5177         (DoubleConstant.Reduce): Ditto.
5178
5179 2006-04-23  Raja R Harinath  <rharinath@novell.com>
5180
5181         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
5182         Remove 'lvalue_right_side' argument.  Move parts to ...
5183         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
5184         (LocalVariable.DoResolveLValue): ... these.
5185
5186 2006-04-21  Raja R Harinath  <rharinath@novell.com>
5187
5188         Fix cs1655.cs
5189         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
5190         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
5191         (LocalVariableReference.DoResolveBase): Use it to implement new
5192         CS1655 check.
5193         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
5194         (Argument.Resolve): Simplify.  Move CS1510 check ...
5195         * ecore.cs (Expression.ResolveLValue): ... here.
5196         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
5197         (PropertyExpr.DoResolveLValue): Likewise.
5198         (FieldExpr.Report_AssignToReadonly): Likewise.
5199         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
5200         LValueMemberAccess or LValueMemberOutAccess on instance depending
5201         on it.
5202         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
5203         DoResolve as appropriate.
5204
5205 2006-04-20  Raja R Harinath  <rharinath@novell.com>
5206
5207         Fix #75800
5208         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
5209         implicit conversions on 'out' and 'ref' arguments.
5210
5211         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
5212         improve clarity.  Remove dead code.
5213
5214         Fix #66031
5215         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
5216         (Catch.Resolve): Resolve VarBlock if it exists.
5217
5218 2006-04-19  Miguel de Icaza  <miguel@novell.com>
5219
5220         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
5221         twice, this was some residual code, the enumerator was emitted
5222         properly in the two branche of if later.
5223
5224 2006-04-19  Raja R Harinath  <rharinath@novell.com>
5225
5226         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
5227         cast is never an lvalue.
5228         (Cast.DoResolve, Cast.ResolveRest): Combine.
5229         (Argument.Emit): Simplify slightly.  Move 'Expr is
5230         IMemoryLocation' check ...
5231         (Argument.Resolve): ... here.
5232         (Argument.Error_LValueRequired): Remove.  Inline into only user.
5233
5234         Simplifications.  Fix cs0191-2.cs
5235         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
5236         CS1649 and CS1651 to ...
5237         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
5238         the actual selection of the error code and message to a lookup
5239         table.  Add a dummy return value to simplify callsites.
5240         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
5241         readonly fields of other instances of the same type.  Move CS0197
5242         warning from ...
5243         * expression.cs (Argument.Resolve): ... here.  Simplify code.
5244         Ensure that ec.InRefOutArgumentResolving is only set during LValue
5245         resolution of an out or ref argument.  The code simplification
5246         above uses this invariant.
5247
5248 2006-04-18  Raja R Harinath  <rharinath@novell.com>
5249
5250         Possibly fix #77752.  Fix cs1690-[4-7].cs.
5251         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
5252         CheckMarshallByRefAccess.  Drop parameter.
5253         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
5254         warning.
5255         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
5256         InstanceExpression.
5257         * report.cs (AllWarnings): Add CS1690.
5258         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
5259         for ref access too.
5260         (LocalVariableReference.DoResolveBase): Update.
5261
5262 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5263
5264         * class.cs (MethodOrOperator): Moved common parts from method class.
5265         detect obsolete attributes.
5266         (Method.Define): Simplified as it reuses code from base.
5267         (Constructor.ValidAttributeTargets): Fixed issue found during
5268         refactoring.
5269         (Destructor.ValidAttributeTargets): Fixed issue found during
5270         refactoring.
5271         (Operator): Finished refactoring set off by #78020. Operator class is now
5272         ordinary method class.
5273
5274         * anonymous.cs: Updated.
5275
5276         * decl.cs (DeclSpace): Add IsGeneric
5277
5278 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5279
5280         * class.cs (Constructor.Emit): Don't emit the attributes twice.
5281
5282 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5283
5284         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
5285         detect obsolete attributes.
5286         (Method.CreateEmitContext): Moved to MethodOrOperator.
5287
5288 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5289
5290         A fix for #78048.
5291         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
5292         customized exception to make crash detection easier.
5293         (MethodOrOperator): Started to work on new base class for methods and
5294         operators.
5295         (Method): Derives from MethodOrOperator.
5296         (Constructor.Emit): Emits its own attributes.
5297         (AbstractPropertyEventMethod.Emit): Ditto.
5298         (Operator): Derives from MethodOrOperator, will refactor fully in extra
5299         patch.
5300         (Operator.Emit): It's temporary more tricky than should be.
5301         
5302         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
5303
5304         * report.cs (InternalErrorException): Add ctor with inner exception.
5305
5306 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
5307
5308         A fix for #76744.
5309         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
5310         only not visible.
5311
5312 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
5313
5314         A fix for #77916.
5315         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
5316         array.
5317
5318 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5319
5320         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
5321         attribute is present and Guid not.
5322         (Interface.ApplyAttributeBuilder): Ditto.
5323
5324         * attribute.cs: Add error message.
5325
5326 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5327
5328         A fix for #78020.
5329
5330         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
5331         sources (it's composite) so hold them in extra array as they are used in
5332         Emit phase only. It worked in the previous versions by mistake.
5333         (Attribute.Emit): Emit attribute for more owners when exist.
5334
5335         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
5336         it has now different behaviour.
5337
5338 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
5339
5340         * constant.cs (Constant.IsDefaultInitializer): New method.
5341
5342         * class.cs: Updated.
5343
5344         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
5345         re-initialize default values. It saves KBs almost for every assembly.
5346         Thanks Zoltan for the idea.
5347         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
5348         (ArrayCreation.DoResolve): Resolve only once.
5349         (ArrayCreation.Emit): Emit static initializer only when it is faster.
5350         (ArrayCreation.GetAttributableValue): Cope with optimized values.
5351
5352 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
5353
5354         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
5355         From #77961.
5356
5357 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5358
5359         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
5360         in an embedded statement too.
5361
5362 2006-04-01  Raja R Harinath  <rharinath@novell.com>
5363
5364         Fix #77958
5365         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
5366
5367 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5368
5369         A fix for #77966.
5370
5371         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
5372         was not specified.
5373
5374         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
5375
5376 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
5377
5378         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
5379         phase.
5380
5381         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
5382         LocalTemporary change.
5383
5384         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
5385         TypeContainer.
5386         (ClassOrStruct.DefineFieldInitializers): Implemented static field
5387         initializers optimization.
5388         (ClassOrStruct.TypeAttr): Moved from modifiers.
5389         (Constructor.CheckBase): Don't crash when static ctor has parameters.
5390         (FieldBase.ResolveInitializer): Resolves initializer.
5391         (FieldBase.HasDefaultInitializer): New property.
5392
5393         * cs-parser.jay: Removed message.
5394
5395         * expression.cs (CompilerGeneratedThis): New specialization.
5396
5397         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
5398
5399 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
5400
5401         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
5402
5403 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5404
5405         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
5406         be now EnumConstants only.
5407
5408 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5409
5410         * attribute.cs, driver.cs: Reset more caches.
5411
5412 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5413
5414         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
5415
5416 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5417
5418         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
5419         for easier reuse. Updated all overrides.
5420         (IntegralConstant): New base class for all integral constants.
5421         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
5422         of the constant range, report custom error.
5423         (UIntConstant.Reduce): Fixed uint conversion.
5424
5425         * ecore.cs, literal.cs: Reduce updates.
5426
5427 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5428
5429         A fix for #75813.
5430
5431         * class.cs (Constructor.Define): Removed extra if for default ctors.
5432         A patch from Atsushi Enomoto.
5433
5434 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5435
5436         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
5437         GetAttributableValue.
5438
5439         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
5440         when required.
5441
5442         * convert.cs (ImplicitConversionRequired): Error message moved to
5443         DoubleLiteral.
5444
5445         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
5446         automatic implicit conversion of an output value.
5447         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
5448
5449         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
5450         conversion.
5451         (TypeOf.GetAttributableValue): Add extra handling for object type.
5452
5453         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
5454         special error message.
5455
5456 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
5457
5458         * class.cs (Constructor.Emit): Don't crash when struct ctor is
5459         InternalCall.
5460         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
5461         compatible with MS runtime.
5462
5463 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
5464
5465         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
5466         attribute arguments here.
5467
5468         * class.cs (Indexer.Define): The check was moved to attribute class.
5469
5470 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
5471
5472         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
5473         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
5474         easier.
5475
5476 2006-03-22  Raja R Harinath  <rharinath@novell.com>
5477
5478         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
5479         mcs to keep code differences small.
5480         * attribute.cs (Attribute.GetParameterDefaultValue): New.
5481         * typemanager.cs (parameter_default_value_attribute_type): New.
5482         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
5483         CS1908 check.
5484
5485 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5486
5487         * expression.cs (StringConcat.Append): Reverted back to no warning state.
5488
5489 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5490
5491         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
5492
5493         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
5494         the blocks too.
5495
5496 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
5497
5498         * doc-bootstrap.cs : fix build.
5499
5500 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5501
5502         * expression.cs (StringConcat.Append): Issue a warning when empty string
5503         is going to append.
5504
5505 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5506
5507         * assign.cs (CompoundAssign.ResolveSource): Removed.
5508
5509         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
5510         clean up.
5511
5512         * class.cs (TypeContainer.FindMethods): Removed.
5513         (TypeContainer.CheckMemberUsage): Made static.
5514
5515         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
5516
5517         * constant.cs (CheckRange): Removed unused type argument.
5518         (CheckUnsigned): Removed unused type argument.
5519
5520         * cs-parser.jay: Updated after MemberAccess clean up.
5521         Uses Length for empty string test.
5522
5523         * cs-tokenizer.cs: Uses Length for empty string test.
5524         (IsCastToken): Made static.
5525         (is_hex): Made static.
5526         (real_type_suffix): Made static.
5527
5528         * decl.cs (SetupCache): Made static.
5529         (OnGenerateDocComment): Removed unused ds argument.
5530
5531         * delegate.cs (VerifyDelegate): Removed unused argument.
5532
5533         * doc.cs: Uses Length for empty string test.
5534
5535         * driver.cs: Uses Length for empty string test.
5536
5537         * enum.cs (IsValidEnumType): Made static
5538
5539         * expression.cs (EnumLiftUp): Removed unused argument.
5540         (ResolveMethodGroup): Ditto.
5541         (BetterConversion): Ditto.
5542         (GetVarargsTypes): Ditto.
5543         (UpdateIndices): Ditto.
5544         (ValidateInitializers): Ditto.
5545         (MemberAccess.ctor): Ditto.
5546         (GetIndexersForType): Ditto.
5547
5548         * flowanalysis.cs: (MergeFinally): Removed unused argument.
5549
5550         * iterators.cs: Updated after MemberAccess clean up.
5551
5552         * location.cs: Uses Length for empty string test.
5553
5554         * namespace.cs: Uses Length for empty string test.
5555
5556          * report.cs (CheckWarningCode): Made static.
5557
5558         * statement.cs (LabeledStatement): Removed unused argument.
5559
5560         * typemanager.cs (FilterNone): Removed.
5561
5562 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5563
5564         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
5565         obsolete.
5566
5567         * class.cs: Updated.
5568
5569 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5570
5571         * cs-parser.jay.cs: __arglist is not allowed for delegates.
5572
5573 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5574
5575         A fix for #77822.
5576
5577         * expression.cs (VerifyArgumentsCompat): Reverted to double error
5578         reporting, it's more tricky than I thought.
5579
5580 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5581
5582         A fix for #77816.
5583
5584         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
5585         host container.
5586         (AnonymousMethod.ImplicitStandardConversionExists): New method.
5587         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
5588         Add more error reporting; Fixed issue with params.
5589
5590         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
5591
5592         * cs-parser.jay: AnonymousMethod requires host container.
5593
5594         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
5595
5596 2006-03-18  Raja R Harinath  <harinath@gmail.com>
5597
5598         * class.cs: Change 'TypeContainer ds' constructor argument to
5599         'DeclSpace parent'.  Some classes were missed below due to
5600         different naming convention.
5601
5602         * class.cs (MemberCore.Parent): Delete.  This makes the
5603         ParentContainer changes below enforceable by the compiler.
5604
5605         Treat pointers to enclosing declaration space as 'DeclSpace', not
5606         'TypeContainer'.
5607         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
5608         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
5609
5610         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
5611         of TypeContainer.
5612         (Block.AddThisVariable): Likewise.
5613         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
5614         (AbstractPropertyEventMethod.Emit): Likewise.
5615         (AbstractPropertyEventMethod.EmitMethod): Likewise.
5616         (GetMethod.Define, SetMethod.Define): Likewise.
5617         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
5618         (DelegateMethod.EmitMethod): Likewise.
5619
5620         Fix regression test-partial-13.cs.
5621         Rationalize use of PartialContainer.  Ensure that the partial
5622         class semantics can be tied to type-correctness, i.e., any
5623         violation will cause a compile error.
5624         * class.cs, const.cs: Access all fields that belong to class
5625         TypeContainer via ParentContainer.  Arguments of EmitContexts and
5626         Resolve()-like functions still use 'Parent'.
5627
5628         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
5629         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
5630         (PropertyMethod.CheckModifiers): Remove unused argument.
5631         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
5632         DeclSpace.
5633
5634 2006-03-17  Raja R Harinath  <harinath@gmail.com>
5635
5636         Make semantics of PartialContainer simpler.
5637         * decl.cs (DeclSpace.IsPartial): Remove.
5638         * class.cs (TypeContainer.IsPartial): Likewise.
5639         (TypeContainer..ctor): Set PartialContainer to point to self.
5640         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
5641         (TypeContainer.FindNestedType): Likewise.
5642         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
5643
5644 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
5645
5646         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
5647
5648 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5649
5650         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
5651         classes.
5652
5653 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5654
5655         * class.cs (Operator.Define): An error for base conversion was not
5656         reported correctly.
5657
5658 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
5659
5660         * iterator.cs : yield break is allowed in try statement which has
5661           catch clauses. Fixed bug #77767.
5662
5663 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
5664
5665         A fix for #77593, #77574.
5666
5667         * class.cs (MethodCore.CheckBase): Another if for operator.
5668
5669 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
5670
5671         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
5672         were not resolved
5673
5674         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
5675         (DelegateCreation.ImplicitStandardConversionExists): New method for just
5676         conversion test.
5677         
5678         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
5679         not needed.
5680
5681         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
5682         Updated after another emitcontext usage was clean up. It should help us to
5683         synchronize with gmcs easier.
5684
5685 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
5686
5687         A fix for #77353.
5688
5689         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
5690         (Event.Define): ditto
5691         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
5692
5693         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
5694         Removed redundant code and set NewSlot for Invoke method too.
5695
5696         * parameter.cs (Parameters.ctor): Add custom, type ctor.
5697         (Parameters.MergeGenerated): New method. Use this method when you merge
5698         compiler generated argument with user arguments.
5699
5700 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
5701
5702         * attribute.cs (ResolveAsTypeTerminal): Removed.
5703
5704         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
5705         specialization for predefined types; 30% speed up.
5706         Finally placed obsolete check to right place.
5707         (Expression.ResolveType): Removed.
5708
5709         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
5710         Updated after ResolveType was removed.
5711
5712         * expression.cs (Cast.ctor): Check void cast.
5713         (Binary.ResolveAsTypeTerminal): Is never type.
5714         (Conditional.ResolveAsTypeTerminal): Is never type.
5715
5716         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
5717
5718 2006-03-01  Raja R Harinath  <rharinath@novell.com>
5719
5720         Fix #77679.
5721         * expression.cs (ParameterReference.DoResolveBase): Change return
5722         type to bool.
5723         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
5724         Update.
5725
5726         Fix #77628.
5727         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
5728
5729         Fix #77642.
5730         * typemanager.cs (GetFullNameSignature): Don't nullref on
5731         protected accessors.
5732
5733 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
5734
5735         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
5736         these two separated members to simplify the code.
5737         (Attribute.Resolve): Refactored to use new fields and methods.
5738         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
5739         implemented obsolete attribute checking.
5740         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
5741         implemented obsolete checking again. It look line never ending quest ;-)
5742         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
5743
5744         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
5745
5746         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
5747
5748         *class.cs (Property.Define): Add RegisterProperty call.
5749
5750         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
5751         argument groups (only 2).
5752
5753         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
5754         encoding expression to arguments.
5755         (Expression.ExprClassToResolveFlags): Just turned to property.
5756
5757         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
5758         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
5759         optimized as well as implemented support for zero-length attributes.
5760
5761         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
5762         Add caching of PropertyInfo's.
5763
5764 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5765
5766         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
5767         error multiple times.
5768
5769 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5770
5771         New partial class implementation.
5772         A fix for #77027, #77029, #77403
5773
5774         * attribute.cs (Attributable): Made attributes protected.
5775
5776         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
5777         the replacements of ClassPart and PartialContainer.
5778         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
5779         (TypeContainer.AddInterface): Ditto.
5780         (TypeContainer.AddPartial): The main method for partial classes. It checks
5781         for errors and merges ModFlags and attributes. At the end class is added to
5782         partial_parts list.
5783         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
5784         required here.
5785         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
5786         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
5787         from the rest of partial classes.
5788         (TypeContainer.GetClassBases): Simplified.
5789         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
5790         DefineType.
5791         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
5792         (TypeContainer.HasExplicitLayout): Uses Flags now.
5793         (PartialContainer): Removed.
5794         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
5795         (StaticClass): Was merged with Class.
5796         (Class.GetClassBases): class and static class bases are verified here.
5797         (Class.TypeAttr): Added static attributes when class is static.
5798         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
5799         (MemberBase): In some cases we need to call parent container for partial
5800         class. It should be eliminated but it's not easy now.
5801
5802         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
5803
5804         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
5805         partial classed to accumulate class comments.
5806         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
5807
5808         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
5809
5810         * driver.cs (MainDriver): Tree.GetDecl was removed.
5811
5812         * modifiers.cs (Modifiers): Add partial modifier.
5813
5814         * tree.cs (Tree.decl): Removed.
5815         (RootTypes): Started to use this class more often for root types
5816         specializations.
5817
5818 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5819
5820         A fix for #77615
5821
5822         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
5823         external interface does not have an attribute.
5824
5825 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5826
5827         Another prerequisites for new partial classs implementation.
5828         
5829         * attribute.cs (Attribute.Equal): Implemented.
5830         (Attribute.Emit): Changed as attributes can be applied more than twice.
5831         (Attributes.Emit): Check for duplicate attributes here.
5832
5833         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
5834         as a parameter, clean-up.
5835
5836 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5837
5838         A fix for #77485
5839
5840         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
5841         contains obsolete attribute check which can in some cases look for base
5842         type of current class which is not initialized yet.
5843         (TypeContainer.BaseType): Replacement of ptype.
5844
5845         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
5846
5847 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5848
5849         First of prerequisites for new partial classs implemention.
5850         
5851         * attribute.cs (Attributable): Extended by ResolveContext;
5852         Attributes finally have correct context for resolving in all cases.
5853         (AttachTo): Attribute owner is assigned here.
5854
5855         * codegen.cs (IResolveContext): Introduce new interface to hold
5856         all information needed in resolving phase.
5857         (EmitContext): Implements IResolveContext; more clean-up needed here.
5858         
5859         * decl.cs (MemberCore): Implemented IResolveContext.
5860
5861         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
5862         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
5863         parameter.cs, statement.cs, tree.cs, typemanager.cs:
5864         Refactored to use new IResolveContext instead of EmitContext; cleanup
5865
5866 2006-02-06  Miguel de Icaza  <miguel@novell.com>
5867
5868         * codegen.cs (EmitScopeInitFromBlock): check here the
5869         capture_context, there is no need to make two calls to the
5870         EmitContext. 
5871
5872         * anonymous.cs: Add some debugging messages that might help me
5873         track other instances of this problem in the future (the
5874         regression of test 467).
5875
5876         * cs-parser.jay: track the variable block, as we need to initalize
5877         any captured variables declared in this block for the "catch"
5878         portion of the "Try" statement.
5879
5880         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
5881         scope initialization for captured variables. 
5882
5883         Also, move the emit for the variables after the block location has
5884         been marked.
5885
5886 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
5887
5888         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
5889
5890 2006-02-02  Miguel de Icaza  <miguel@novell.com>
5891
5892         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
5893         commit yesterday, the initialization for the roots is necessary.
5894         What is not necessary is the scope activation.
5895
5896 2006-02-02  Raja R Harinath  <rharinath@novell.com>
5897
5898         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
5899         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
5900         CS0206 checks.
5901         (Argument.Resolve): Remove CS0206 checks.
5902
5903 2006-02-01  Miguel de Icaza  <miguel@novell.com>
5904
5905         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
5906         scopes for all the roots, the scopes will now be emitted when the
5907         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
5908
5909         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
5910         code.  This reduces a lot of existing cruft.
5911         
5912         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
5913         that the ScopeInfo is generated as we enter the scope, not at the
5914         time of use, which is what we used to do before.
5915
5916         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
5917         every time a Block is about to be emitted if we have a
5918         CaptureContext. 
5919
5920 2006-02-01  Raja R Harinath  <rharinath@novell.com>
5921
5922         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
5923         (Reset): Update.
5924         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
5925
5926         * typemanager.cs (cons_param_array_attribute): Make private.
5927         (Reset): Set it to null.
5928         (InitCoreHelpers): Don't initialize it.
5929         (ConsParamArrayAttribute): New.  Initialize it as needed.
5930         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
5931
5932 2006-01-31  Miguel de Icaza  <miguel@novell.com>
5933
5934         * expression.cs: There might be errors reported during the
5935         selection of applicable methods.  If there are errors, do not
5936         continue execution as it will lead the compiler to crash.
5937
5938 2006-01-30  Miguel de Icaza  <miguel@novell.com>
5939
5940         * expression.cs: Member access is not allowed on anonymous
5941         methods.  Fixes #77402.
5942
5943 2006-01-30  Raja R Harinath  <rharinath@novell.com>
5944
5945         Fix #77401
5946         * cs-parser.jay (VariableDeclaration): Don't set
5947         current_array_type to null.
5948         (field_declaration, event_declaration, declaration_statement):
5949         Set it to null here.
5950
5951 2006-01-28  Raja R Harinath  <harinath@gmail.com>
5952
5953         * typemanager.cs (GenericParameterPosition): New.
5954         * doc.cs: Use it.
5955
5956 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
5957
5958         * doc.cs : To process "include" elements, first we should create
5959           another list than XmlNodeList, because it could result in node
5960           removal, which could result in that the XmlNodeList gives up
5961           yielding next node.
5962
5963           (Also made code identical to gmcs again.)
5964
5965 2006-01-25  Miguel de Icaza  <miguel@novell.com>
5966
5967         * ecore.cs: Introduce an error report that we were not catching
5968         before, if not silent, we must report the error.  Gonzalo ran into
5969         it.
5970
5971 2006-01-23  Miguel de Icaza  <miguel@novell.com>
5972
5973         A fix for bug: #76957
5974         
5975         * iterators.cs (MoveNextMethod.CreateMethodHost): call
5976         ComputeMethodHost before creating the method, this is a new
5977         requirement. 
5978
5979         * anonymous.cs (AnonymousContainer): Now we track all the scopes
5980         that this method references (RegisterScope).  The actual scope
5981         where the method is hosted is computed with the ComputeMethodHost
5982         before we create the method.
5983
5984         Moved the Deepest routine here.
5985
5986         (AnonymousContainer.ComputeMethodHost): New routine used to
5987         compute the proper ScopeInfo that will host the anonymous method.
5988
5989         (ScopeInfo): Deal with multiple roots.  The problem was that we
5990         did not have a unique root where all ScopeInfos could be hanged
5991         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
5992         of roots.  
5993
5994         Remove AdjustMethodScope which is now computed at the end.  Remove
5995         LinkScope which did a partial link, instead link all ScopeInfos
5996         before code generation from the new "LinkScopes" routine. 
5997
5998         Simplify all the Add* routines as they no longer need to maintain
5999         the tree, they just need to record that they are using variables
6000         from a ScopeInfo.
6001
6002         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
6003         routines to produce the forest of ScopeInfo trees.
6004
6005         * class.cs (TypeContainer.AppendMethod): This is just like
6006         AddMethod, but ensures that an interface implementation method
6007         (IEnumerable.XXX) is not inserted at the beginning of the queue of
6008         methods, but at the end.
6009
6010         We use this functionality to ensure that the generated MoveNext
6011         method in the iterator class is resolved/emitted before the
6012         enumerator methods created.   
6013
6014         This is required because the MoveNext method computes the right
6015         ScopeInfo for the method.  And the other methods will eventually
6016         need to resolve and fetch information computed from the anonymous
6017         method. 
6018
6019 2006-01-21  Raja R Harinath  <harinath@gmail.com>
6020             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
6021
6022         Fix rest of #76995.
6023         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
6024         the 'aliases' hash.
6025         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
6026         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
6027
6028 2006-01-18  Raja R Harinath  <rharinath@novell.com>
6029
6030         Fix #76656, cs0231-2.cs.
6031         * cs-parser.jay (formal_parameter_list): Make error case catch
6032         more issues.
6033         (parenthesized_expression_0): Add CS1026 check.
6034         (invocation_expression): Remove unused { $$ = lexer.Location }.
6035
6036 2006-01-17  Raja R Harinath  <rharinath@novell.com>
6037
6038         Fix #76824.
6039         * cs-parser.jay (statement_expression): Don't list out the
6040         individual statement-expressions.  Convert syntax error into
6041         CS0201 check.
6042
6043 2006-01-16  Raja R Harinath  <rharinath@novell.com>
6044
6045         Fix #76874.
6046         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
6047         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
6048         CheckIntermediateModification.
6049         (FieldExpr.DoResolve): Add new two-argument version that
6050         allows us to resolve the InstanceExpression as an lvalue.
6051         The one-argument variant is now just a wrapper.
6052         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
6053         Resolve the lhs as an lvalue if the it has a value type.
6054         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
6055         from Assign.DoResolve.
6056         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
6057         resolved as an lvalue.
6058         (PropertyExpr.DoResolve): Update.
6059         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
6060         has a value type.  Move CS1612 check here from
6061         CheckIntermediateModification.
6062         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
6063         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
6064         'right_side' of a ResolveLValue on an 'out' argument.
6065         (EmptyExpression.LValueMemberAccess): New.  Used as the
6066         'right_side' of a propagated ResolveLValue on a value type.
6067         (LocalVariableReference.DoResolveBase): Recognize
6068         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
6069         Add CS1654 check.
6070         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
6071         EmptyExpression.Null.
6072
6073 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
6074
6075         * typemanager.cs : added IsGenericParameter(). In mcs it always
6076           return false.
6077         * doc.cs : for generic parameters, use GenericParameterPosition,
6078           not FullName.
6079
6080 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
6081
6082         * expression.cs: Fix Console.WriteLine ((this = x).foo);
6083
6084 2006-01-12  Miguel de Icaza  <miguel@novell.com>
6085
6086         This fixes the problem where we used ldfld instead of ldflda to
6087         load the "THIS" pointer on captured parameters, when THIS is a
6088         value type.  See bug #77205.
6089         
6090         * iterators.cs (CapturedThisReference.Emit): Pass false to
6091         EmitThis (we do not need the address).
6092
6093         * codegen.cs (EmitThis): it needs to know whether we need the
6094         address of `this' or not.  This is used by value types.  
6095
6096         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
6097         every other call passes false.
6098
6099 2006-01-12  Raja R Harinath  <rharinath@novell.com>
6100
6101         Fix #77221.
6102         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
6103         GetOverride.
6104         * expression.cs (Invocation.OverloadResolve): Update.
6105         (Invocation.DoResolve): Avoid double resolution of invocation.
6106
6107 2006-01-11  Raja R Harinath  <rharinath@novell.com>
6108
6109         Fix #77180.
6110         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
6111         unary negation of floating point types as 0-expr; negation cannot
6112         overflow in floating point types.
6113
6114         Fix #77204.
6115         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
6116         on operands of 'void' type.
6117
6118         Fix #77200.
6119         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
6120         and ExclusiveOr for boolean constants too.
6121
6122 2006-01-09  Raja R Harinath  <rharinath@novell.com>
6123
6124         Fix #75636.
6125         * expression.cs (Invocation.OverloadResolve): Replace reflected
6126         override methods with their base virtual methods, rather than
6127         skipping over them.
6128         * typemanager.cs (TypeManager.GetOverride): New.
6129
6130 2006-01-05  Jb Evain  <jbevain@gmail.com>
6131
6132         * class.cs (Property.Define, Indexer.Define): do not tag the
6133         properties as SpecialName | RTSpecialName.
6134
6135 2006-01-04  Miguel de Icaza  <miguel@novell.com>
6136
6137         * class.cs (MethodCore.IsDuplicateImplementation): This method was
6138         doing a low-level comparission of parameter types.  It was lacking
6139         a check for __argslist. 
6140
6141 2005-12-30  Miguel de Icaza  <miguel@novell.com>
6142
6143         * expression.cs (ParameterReference.DoResolveBase): Allow
6144         reference parameters if they are local to this block. 
6145
6146         This allows the ref and out parameters of a delegate to be used in
6147         an anonymous method, for example:
6148
6149         delegate void set (out int x);
6150
6151         set s = delegate (out int x){
6152                 x = 0;
6153         };
6154
6155         This is used by functionality introduced late in the C# language.
6156         
6157         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
6158         method that take ref and out parameters. 
6159
6160         Fixes #77119 which was a late change in the spec.
6161
6162 2005-12-23  Miguel de Icaza  <miguel@novell.com>
6163
6164         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
6165         parent if its the same scope.  Fixes #77060.
6166
6167 2005-12-21  Miguel de Icaza  <miguel@novell.com>
6168
6169         * driver.cs: Report the case of no source files and no -out:
6170         argument provided.
6171
6172 2005-12-20  Raja R Harinath  <rharinath@novell.com>
6173
6174         Fix #77035.
6175         * expression.cs (ComposedCast.GetSignatureForError): Define.
6176
6177 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
6178
6179         Fix #76995
6180
6181         * namespace.cs (NamespaceEntry): Add extern_aliases as a
6182         ListDictionary, to contain the ExternAliasEntry entries (in
6183         addition to the NamespaceEntry.aliases hashtable). This field is
6184         shared between the original entry and its doppelganger (bodyless 
6185         copy of it).
6186         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
6187         extern_aliases field.
6188         (NamespaceEntry.Lookup): Move the IsImplicit check after the
6189         lookup in extern_aliases.
6190
6191 2005-12-16  Raja R Harinath  <rharinath@novell.com>
6192
6193         Fix #77006.
6194         * class.cs (TypeContainer.Mark_HasEquals): New.
6195         (TypeContainer.Mark_HasGetHashCode): New.
6196         (ClassPart): Override them.
6197         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
6198
6199         Fix #77008.
6200         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
6201         'parent' argument to the base constructor.
6202
6203         Remove all mention of TypeContainer from decl.cs.
6204         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
6205         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
6206         (DeclSpace.DeclSpace): Likewise.
6207         (DeclSpace.DefineMembers): Remove unused argument.
6208         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
6209         debugging check -- we don't care if the debug code throws an
6210         InvalidCastException instead of an InternalErrorException.
6211         * class.cs (TypeContainer.DefineMembers): Update to changes.
6212         (TypeContainer.DoDefineMembers): Likewise.
6213         (TypeContainer.GetMethods): Likewise.
6214         (PropertyMember.Define): Likewise.
6215         (MemberBase.Parent): New property that forwards to
6216         MemberCore.Parent, but ensures that we get a TypeContainer.
6217         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
6218         (RootContext.PopulateTypes): Likewise.  Remove special case code
6219         for !RootContext.StdLib: DefineMembers is idempotent.
6220
6221 2005-12-14  Miguel de Icaza  <miguel@novell.com>
6222
6223         * convert.cs (ExplicitConversionCore): Check the return value from
6224         ExplicitConversionCore which can return null on failure.  Fixes #76914
6225
6226 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
6227
6228         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
6229
6230 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
6231
6232         * doc.cs : The search for referenced namespace was insufficient to
6233           get global one as it used to do. Fixed bug #76965.
6234
6235 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
6236
6237         * doc.cs : check name in cref in the last phase that whether it is
6238           namespace or not.
6239
6240 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6241
6242         * cs-tokenizer.cs : reverted the latest change: it somehow broke
6243           Mono.C5.
6244
6245 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6246
6247         * doc.cs : so it turned out that we cannot skip override check for 
6248           interface members. Fixed bug #76954.
6249
6250 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6251
6252         * cs-tokenizer.cs : fixed bug #75984:
6253           - #warning and #error should not be handled when the source line
6254             is disabled.
6255           - #line is not checked strictly when the source line is disabled.
6256           - #define and #undef is on the other hand checked strictly at any
6257             state.
6258
6259 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
6260
6261         * cs-tokenizer.cs : missing Location (actually, filename) in one of
6262           CS1027 report.
6263
6264 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6265
6266         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
6267
6268         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
6269         event initializers.
6270         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
6271         (FieldBase.Initializer): Initializer is now optional.
6272         (EventField.Define): Only event field can have initializer.
6273
6274         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
6275
6276         * const.cs (Const): Reuse initializer.
6277
6278         * cs-parser.jay: Updated after FieldBase changes.
6279         Added current_array_type to simplify array initializers.
6280
6281         * ecore.cs (NullCast.IsDefaultValue): Implemented.
6282
6283         * expression.cs, iterators.cs: Updated.
6284
6285         * namespace.cs (NamespaceEntry): Made UsingFound private.
6286
6287 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6288
6289         * parameterCollection.cs: Obsolete, removed.
6290         * parser.cs: Obsolete, removed.
6291
6292 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6293
6294         Fix #76849.
6295         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
6296
6297         * enum.cs (Enum.Define): Set obsolete context here.
6298
6299 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6300
6301         * doc.cs :
6302           - FindDocumentedMember() now expects 1) paramList as null
6303             when "we don't have to check the number of parameters" and
6304             2) Type.EmptyTypes when "there is no arguments".
6305           - Introduced FoundMember struct to hold the exact type which was
6306             used to find the documented member (the above change broke
6307             test-xml-044; it might be better just to use DeclaringType than
6308             what MS does, like this change does, but it depends on usage.)
6309
6310 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6311
6312         * doc.cs : documented member might be from DeclaringType for nested
6313           types. Fixed bug #76782.
6314
6315 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
6316
6317         * anonymous.cs: Have the param code handle leaving copies on the
6318         stack etc. Allows anonymous params to take part in the assignment
6319         code (++, +=, etc). Fixes bug #76550
6320
6321         * expression.cs: Handle the prepare_for_load/leave_copy by passing
6322         it down to the anon code.
6323
6324         * iterators.cs: Use dummy var here
6325
6326         * codegen.cs: Handle new vars
6327
6328 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6329
6330         Fix #76849.
6331         * class.cs (MethodData.Define): Set proper Obsolete context.
6332
6333         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
6334         obsolete context.
6335         (FieldExpr.DoResolve): Ditto.
6336
6337 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6338
6339         Fix #76849.
6340         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
6341         parent is not obsolete.
6342
6343 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
6344
6345         * doc.cs : (FindDocumentedMember) find parameterless members first
6346           and get CS0419 in the early stage. Fixed first case of bug #76727.
6347
6348 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
6349
6350         Fix #76859.
6351         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
6352         no error was reported.
6353
6354         *expression.cs (Binary.DoResolve): left can be null.
6355
6356 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
6357
6358         Fix #76783.
6359         * class.cs (MethodData.Emit): Parameters should be labeled first.
6360
6361 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
6362
6363         Fix #76761.
6364         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
6365
6366 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
6367
6368         * attribute.cs (AreParametersCompliant): Moved to Parameter.
6369
6370         * class.cs (MethodCore): Parameter clean up.
6371         (IMethodData): Added ParameterInfo.
6372         (MethodData): Parameter clean up.
6373         (Indexer.Define): Parameter clean up.
6374
6375         * anonymous.cs,
6376         * codegen.cs,
6377         * cs-parser.jay,
6378         * decl.cs,
6379         * doc.cs,
6380         * ecore.cs,
6381         * flowanalysis.cs,
6382         * iterators.cs,
6383         * pending.cs,
6384         * statement.cs,
6385         * typemanager.cs: Parameter clean up.
6386
6387         * delegate.cs (Define): Get rid of duplicated code.
6388
6389         * expression.cs (ParameterReference): Removed useless parameters
6390         and simplified.
6391         (Invocation): Ditto.
6392
6393         * parameter.cs (ParamsParameter): New class, params specialization.
6394         (ArglistParameter): Attemp to separate arglist.
6395         (Parameter): Refactored to be reusable and faster.
6396         (Parameter.Modifier): Made understandable.
6397         (Parameters): Changed to be used as a class for `this' assembly
6398         parameters. Refactored to use new specialized classes.
6399
6400         * support.cs (ParameterData): Added Types property.
6401         (InternalParameters): Deleted.
6402
6403 2005-08-20  Martin Baulig  <martin@ximian.com>
6404
6405         Merging this patch from GMCS to fix #75867.
6406
6407         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6408         scope if we don't already have it.
6409
6410 2005-11-17  Martin Baulig  <martin@ximian.com>
6411
6412         * anonymous.cs
6413         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
6414         inherit the scope from our parent.  Fixes #76653.
6415
6416 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6417
6418         * doc.cs : the previous patch does not actually fix the bug.
6419           PropertyInfo override check is now implemented and really fixed it.
6420         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
6421
6422 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6423
6424         * doc.cs : apply "override filter" also to properties.
6425           Fixed bug #76730.
6426
6427 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6428
6429         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
6430           no need to check overrides. For classes, omit those results from 
6431           interfaces since they must exist in the class. Fixed bug #76726.
6432
6433 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6434
6435         * typemanager.cs : (GetFullNameSignature) differentiate indexers
6436           with different parameters. Fixed the second problem in #76685.
6437
6438 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6439
6440         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
6441           get expected 'protected' access in CheckValidFamilyAccess()).
6442           Fixed bug #76692.
6443
6444 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6445
6446         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
6447           Fixed bug #76705.  CS1569 was incorrectly commented out.
6448
6449 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6450
6451         * doc.cs : use Invocation.IsOverride() to do real override check.
6452         * expression.cs : made Invocation.IsOverride() internal.
6453
6454 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6455
6456         * doc.cs : use TypeManager.FindMembers() instead of (possible)
6457           TypeBuilder.FindMembers() and filter overriden base members out.
6458           Fixed bug #76990.
6459
6460 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6461
6462         * doc.cs : ref/out parameters are represented as '@' (instead of
6463           '&' in type FullName). Fixed bug #76630 (additionally crefs).
6464
6465 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6466
6467         * doc.cs : when there was no '.' in cref to methods in doc comment,
6468           then parameters were missing in the output. Fixed bug #76691.
6469
6470 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6471
6472         * driver.cs : don't output docs when there is an error.
6473           Fixed bug #76693.
6474
6475 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6476
6477         * doc.cs :
6478           Now it should detect indexers. Fixed primary concern in bug #76685.
6479           Fixed CS0419 message to not show the identical member signature in
6480           the message.
6481
6482 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6483
6484         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
6485           instead of Type.FindMembers() since it does not handle events.
6486           Fixed bug #71604.
6487
6488 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
6489
6490         * codegen.cs: Fixed typo (speficied -> specified).
6491
6492 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6493
6494         Fix #76369.
6495         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
6496
6497 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6498
6499         * attribute.cs: Changed error message.
6500
6501         * cs-tokenizer.cs: One more check.
6502
6503 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6504
6505         * statement.cs (Block.Resolve): Ignore empty statement.
6506
6507 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6508
6509         * report.cs: Made error/warning methods more strict to avoid
6510         their misuse.
6511
6512         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
6513         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
6514         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
6515         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
6516
6517 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
6518
6519         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
6520         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
6521
6522         * class.cs (TypeContainer.IsComImport): New property.
6523         (Constructor.Define): Create proper ctor for ComImport types.
6524
6525         * expression.cs (New.CheckComImport): Fixed.
6526
6527 2005-11-07  Miguel de Icaza  <miguel@novell.com>
6528
6529         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
6530         that a parameter has been captured does not mean that we do not
6531         have to do the rest of the processing.  This fixes the second part
6532         of #76592.  If there was another anonymous method capturing
6533         values in the past, the Scope would never be set for the second
6534         method that captured the same parameter.
6535
6536         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
6537         properly manipulate the stack.   Second part of fix for #76592.
6538
6539         * expression.cs (New): Add support for invoking "new" on
6540         interfaces that have been flagged with the ComImport attribute and
6541         the CoClass.  Fixes #76637 
6542
6543         * statement.cs (Try.DoEmit): When a variable is captured, do not
6544         try to emit the vi.LocalBuilder variable as it has been captured.
6545         Create a temporary variable and store the results on the
6546         FieldBuilder.  Fixes #76642
6547
6548 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
6549
6550         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
6551
6552         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
6553
6554         * expression.cs (Binary.DoResolve): Added && optimalization.
6555     
6556         * typemanager.cs (AddUserType): Removed useless argument.
6557
6558 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
6559
6560         * statement.cs (Block.variables): Uses ListDictionary.
6561
6562 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6563
6564         Fix #75969.
6565         * class.cs (PartialContainer.EmitType): Customized to emit
6566         security attributes.
6567         (ClassPart.ApplyAttributeBuilder): Transform security attribute
6568         for partial classes.
6569
6570 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6571
6572         Fix #76599.
6573         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
6574         access has to be fixed.
6575         
6576         * typemanager.cs (IsUnmanagedType): Wrong common field type.
6577
6578 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
6579
6580         Fix #76590.
6581         * ecore.cs (NullCast.Reduce): Implemented.
6582
6583         * expression.cs (ArrayCreation.CheckIndices): Correcly check
6584         constant type.
6585         
6586         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
6587         properly.
6588         (Foreach.Resolve): Catch null properly.
6589
6590 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6591  
6592         * cs-tokenizer.cs: Warning text fix.
6593
6594         * driver.cs: AllWarningNumbers exposed on public interface.
6595
6596         * report.cs (): Reviewed warning numbers.
6597         (IsValidWarning): Use binary search.
6598
6599 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6600  
6601         * driver.cs: Implemeted resource visibility.
6602         (Resources): New class for code sharing between /res: and
6603         /linkres:
6604  
6605 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
6606
6607         Fix #76568.
6608         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
6609         folding.
6610         
6611         * convert (Convert.ImplicitReferenceConversion): NullCast holds
6612         contants only.
6613         
6614         * ecore.cs (NullCast): Child is contant only.
6615         
6616         * literal.cs (NullLiteral.Reduce): null can be converted to any
6617         reference type.
6618
6619 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
6620
6621         * driver.cs: Use Encoding.Default as default code page instead
6622           of ISO-28591.
6623
6624 2005-10-27  Raja R Harinath  <rharinath@novell.com>
6625
6626         Fix #76085.
6627         * expression.cs (Invocation.Error_InvalidArguments): Handle
6628         __arglist parameters.
6629         (Invocation.VerifyArgumentsCompat): Likewise.
6630         * support.cs (ReflectionParameters.GetSignatureForError): Print
6631         __arglist parameters.
6632         (InternalParamters.GetSignatureForError): Likewise.
6633         * parameter.cs (Parameters.GetSignatureForError): Likewise.
6634
6635 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
6636
6637         * attribute.cs (GetPropertyValue): Made public.
6638
6639         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
6640         Resolve.
6641         Add new property WrapNonExceptionThrows to handle 2.0 assembly
6642         attribute.
6643         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
6644         is not defined.
6645         
6646         * driver.cs: Reflect method name change.
6647         
6648         * statement.cs (Try.Resolve): Warn when try has both general
6649         exception handlers.
6650         
6651         * typemanager.cs: runtime_compatibility_attr_type new predefined
6652         type.
6653
6654 2005-10-26  Raja R Harinath  <harinath@gmail.com>
6655
6656         Fix #76419.
6657         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
6658         treat it as an empty parameter list.
6659
6660 2005-10-26  Raja R Harinath  <rharinath@novell.com>
6661
6662         Fix #76271.     
6663         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
6664         ResolveAsTypeStep silent.
6665         * statement.cs (Block.AddConstant): Mark block as used.
6666         (Block.ResolveMeta): Avoid piling on error messages
6667         if a constant initializer resolution fails.
6668
6669 2005-10-25  Raja R Harinath  <rharinath@novell.com>
6670
6671         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
6672         Remove.
6673         (NamespaceEntry.VerifyAllUsing): New.
6674         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
6675         behaviour.  Delegates actual resolution of alias to ...
6676         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
6677         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
6678         Update.
6679         * driver.cs (Driver.MainDriver): Update.
6680         
6681         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
6682         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
6683         property.
6684         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
6685         Remove.
6686         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
6687         RootNamespace.DefineNamespacesForAll.
6688
6689 2005-10-24  Raja R Harinath  <harinath@gmail.com>
6690
6691         * typemanager.cs (assemblies, external_aliases, modules)
6692         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
6693         (ComputeNamespaces, GetRootNamespace): Remove extra staging
6694         overhead.  Move resposibility ...
6695         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
6696         * driver.cs, attribute.cs, codegen.cs: Update to changes.
6697
6698 2005-10-23  Raja R Harinath  <harinath@gmail.com>
6699
6700         * namespace.cs (RootNamespace.all_namespaces): Renamed from
6701         cached_namespaces.  Improve usage.
6702         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
6703         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
6704         Move from GlobalRootNamespace and simplify.
6705         (RootNamespace.Global): Make instance variable.
6706         (RootNamespace.RootNamespace): Add "alias name" parameter.
6707         (GlobalRootNamespace): Simplify drastically.
6708         (Namespace.Lookup): Don't use GetNamespace.
6709         * typemanager.cs (GetRootNamespace): Rename from
6710         ComputeNamespaceForAlias.
6711         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
6712
6713 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6714
6715         * anonymous.cs (AnonymousContainer): Don't crash when container
6716         doesn't exist.
6717
6718 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6719
6720         * expression.cs (Binary.DoResolve): Warn when comparing same
6721         values.
6722
6723 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6724
6725         Fix #76486.
6726         * expression.cs (Binary.DoResolve): It looks like there are no
6727         convetsion rules in enum context.
6728
6729 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
6730
6731         Add support for extern alias qualifiers.
6732         * typemanager.cs: Move some LookupTypeReflection code
6733         to namespace.cs, to have cleaner code. Added some methods
6734         to help us keep track of the extern aliased references.
6735         * driver.cs: Add suport for extern alias assemblies on command
6736         line and check for their warnings/errors. Also keep track of the
6737         extern aliased assemblies.
6738         * namespace.cs: Move the global functionality of Namespace
6739         to GlobalRootNamespace/RootNamespace. Now the global namespace
6740         is GlobalRootNamespace.Globa. Also the code moved from 
6741         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
6742         Finally added LocalAliasEntry (AliasEntry before) and
6743         ExternAliasEntry, to handle alias statements.
6744         * cs-parser.jay: Add support in the grammar for extern alias
6745         statement.
6746         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
6747         Update callings to Namespace (now in GlobalRootNamespace).
6748
6749 2005-10-18  Raja R Harinath  <rharinath@novell.com>
6750
6751         Fix #76371.
6752         * class.cs (TypeContainer.DefineType): Move updating of
6753         topological sort earlier in the code.
6754         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
6755
6756 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
6757
6758         Fix #76273.
6759         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
6760         
6761         * constant.cs (Constant.TryReduce): Moved from Cast class.
6762         (Reduce): Made little bit more OO and fixed missing conversions.
6763         
6764         * ecore.cs (Reduce): Implemented.
6765         (Binary.EnumLiftUp): New method to upgrade values to enum values.
6766         
6767         * literal.cs (Reduce): Implemented.
6768         
6769         * class.cs: Reverted Miguel's wrong commit.
6770
6771 2005-10-14  Miguel de Icaza  <miguel@novell.com>
6772
6773         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
6774
6775 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
6776
6777         * cs-parser.jay, expression.cs : CS0214 was missing error location
6778           for constants. Fixed bug #76404.
6779
6780 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
6781
6782         Fix #76370.
6783         * convert.cs (ExplicitConversionCore): Fixed object->enum
6784         conversion.
6785
6786 2005-10-10  Raja R Harinath  <rharinath@novell.com>
6787
6788         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
6789         InstanceExpression.
6790         (PropertyExpr.EmitCall): Likewise.
6791         * expression.cs (Invocation.EmitArguments): Handle case where
6792         arguments == null.
6793         (Invocation.EmitCall): Avoid allocating temporary variable if
6794         there are no arguments.
6795
6796 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6797
6798         Fix #76323.
6799         * convert.cs (ImplicitConversionStandard): Move conversion of
6800         void* to arbitrary pointer types ...
6801         (ExplicitConversionStandard): .. here.
6802         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
6803         error to always print typenames.
6804
6805 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6806
6807         * convert.cs (GetConversionOperator): Rename from
6808         GetConversionOperators.  Move operator selection code from ...
6809         (UserDefinedConversion): ... here.
6810
6811 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
6812
6813         * convert.cs (ExplicitConversionCore): Removed duplicate enum
6814         conversion.
6815
6816 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
6817
6818         * assign.cs (Assign.DoResolve): Error method changed.
6819
6820         * cfold.cs (DoConstantNumericPromotions): Error method changed.
6821         
6822         * const.cs (ResolveValue): Reset in_transit immediately.
6823         
6824         * constant.cs: Error method changed.
6825         
6826         * convert.cs: Removed useless location parameter.
6827         (ExplicitNumericConversion): Don't do double enum check.
6828         (ExplicitConversionCore): Renamed from ExplicitConversion.
6829         (ExplicitUnsafe): Extracted from ExplicitConversion.
6830         (ExplicitConversion): Uses for error reporting.
6831         
6832         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
6833         error messages.
6834         (ResolveBoolean): Uses common error method.
6835         (CastToDecimal): Get rid of ec.
6836         (CastFromDecimal): Optimized.
6837         (ConvCast): Get rid of ec.
6838         
6839         * enum.cs (ResolveValue): Reset in_transit immediately.
6840         (Emit): Return after first error.
6841         
6842         * expression.cs: Convert changes.
6843         
6844         * literal.cs: Error method changed.
6845         
6846         * statement.cs: Error method changed.
6847
6848 2005-10-03  Raja R Harinath  <rharinath@novell.com>
6849
6850         * support.cs (SeekableStreamReader.Position): Don't error out when
6851         the requested position is just beyond the end of the current
6852         buffered data.
6853
6854 2005-09-28  Raja R Harinath  <rharinath@novell.com>
6855
6856         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
6857         try to keep in sync with the byte count of the underlying Stream.
6858         However, this limits us to a window size of 2048 characters: i.e.,
6859         the maximum lookahead of our lexer/parser can be 2048 characters.
6860
6861 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
6862
6863         Fix #76255.
6864         * driver.cs: Fix compilation files with full root path.
6865
6866 2005-09-25  Miguel de Icaza  <miguel@novell.com>
6867
6868         * report.cs (SymbolRelatedToPreviousError): Format the output so
6869         it does not use an open parenthesis that is never closed. 
6870
6871         * driver.cs: Follow coding guidelines
6872
6873 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6874
6875         Fix #72930.
6876         * const.cs (Const.ResolveValue): Check for assigning non-null
6877         value to reference type.
6878
6879 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6880
6881         * anonymous.cs: Implemented ExprClassName.
6882         
6883         * assign.cs (Assign.DoResolve): Don't chrash when type is not
6884         delegate.
6885         
6886         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
6887         check.
6888         
6889         * class.cs (StaticClass.DefineContainerMembers): Report protected
6890         members as error.
6891         
6892         * codegen.cs: if(ed) PRODUCTION.
6893         
6894         * convert.cs (Error_CannotImplicitConversion): Better error
6895         distinction.
6896         
6897         * cs-parser.jay: More error checks.
6898         
6899         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
6900         
6901         * driver.cs (CSCParseOption): Enabled wrong option check.
6902         
6903         * ecore.cs (Expression.ExprClassName): Turned to property.
6904         (MemberExpr.CheckIntermediateModification): For checking boxed
6905         value types     modification.
6906         
6907         * statement.cs (Fixed.Resolve): Expression type must be
6908         convertible to fixed type.
6909         (CollectionForeach.GetEnumeratorFilter,TryType):
6910         Small refactoring for easier error checking.
6911
6912 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
6913
6914         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
6915         attributes.
6916         
6917         * class.cs (GeneratedBaseInitializer): New class for customization
6918         compiler generated initializers.
6919         (MemberBase.DoDefine): Check Obsolete attribute here.
6920         (FieldMember.DoDefine): Ditto.
6921         
6922         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
6923         constants.
6924         
6925         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
6926         (MemberCore.GetObsoleteAttribute): Removed argument.
6927         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
6928         (MemberCore.CheckObsoleteType): New helper.
6929         
6930         * delegate.cs,
6931         * enum.cs,
6932         * statement.cs: Updates after MemberCore changes.
6933         
6934         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
6935         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
6936         
6937         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
6938         obsolete attribute for compiler construct.
6939         (As.DoResolve): Cache result.
6940         
6941         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
6942
6943 2005-09-26  Raja R Harinath  <rharinath@novell.com>
6944
6945         Fix #76133.
6946         * expression.cs (This.VerifyFixed): In a value type T, the type of
6947         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
6948         value type R, 'this' is treated as a value parameter.
6949
6950 2005-09-22  Miguel de Icaza  <miguel@novell.com>
6951
6952         * statement.cs (Lock): Use the TemporaryVariable class instead of
6953         manually using local variables as those do not work when variables
6954         are captured.
6955
6956         * ecore.cs: Moved the TemporaryVariable class from being a nested
6957         class inside Foreach to be a public class that can be employed in
6958         other places. 
6959
6960 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
6961
6962         * cs-parser.jay: interface_accessors replaced by
6963         accessor_declarations.
6964
6965         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
6966         location.
6967         
6968         * statement.cs (GotoCase.Resolve): Convert null constant to
6969         null case.
6970         (SwitchLabel.ResolveAndReduce): Ditto.
6971         (SwitchLabel.NullStringCase): Custom null stamp.
6972         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
6973         
6974         typemanager.cs (CSharpSignature): Don't skip first argument
6975         for full names.
6976
6977 2005-09-18  Miguel de Icaza  <miguel@novell.com>
6978
6979         * driver.cs: Set InEmacs based on the environment variable EMACS. 
6980
6981         * location.cs (InEmacs): in this mode, do not report column
6982         location as it confuses Emacs.
6983
6984 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
6985
6986         * cfold.cs, constant.cs, convert.cs, ecore.cs,
6987         expression.cs, iterators.cs, literal.cs: Store constants and
6988         literals location.
6989         
6990         * class.cs (MemberBase.ShortName): Pass location.
6991         
6992         * cs-parser.jay: Some location fixes.
6993         
6994         * ecore.cs (Expression.Location): Made virtual.
6995
6996 2005-09-05  Miguel de Icaza  <miguel@novell.com>
6997
6998         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
6999         if the underlying types are the same, otherwise we need to produce
7000         code that will do the proper cast.
7001
7002         This was exposed by Marek's constant rewrite which produced
7003         invalid code for the call site:
7004
7005         enum X : long { a }
7006         void Method (X v) {}
7007
7008         Method ((X) 5)
7009
7010         This fixes test-49.cs
7011
7012 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7013
7014         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
7015           Type/Object should be allowed as well. Fixed bug #75968.
7016
7017 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7018
7019         * expression.cs : (Binary.DoResolve): when one is enum constant and
7020           another is constant 0, then return enum one *as enum type*.
7021           Fixed bug 74846.
7022
7023 2005-09-02  Raja R Harinath  <rharinath@novell.com>
7024
7025         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
7026         internal.
7027
7028         Fix #75941.
7029         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
7030         flow-branching for LocalVariableReferences in case we were invoked
7031         from a MemberAccess.
7032         * expression.cs (LocalVariableReference.VerifyAssigned): New.
7033         Carved out of ...
7034         (LocalVariableReference.DoResolveBase): ... this.
7035         (MemberAccess.Resolve): Do the check that was disabled during
7036         SimpleNameResolve.
7037
7038 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7039
7040         * class.cs :
7041           (PartialContainer.Create): check abstract/sealed/static strictly
7042           but abstract/sealed can exist only at one side. Fixed bug #75883.
7043
7044 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
7045
7046         Fix #75945.
7047         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
7048         specified, don't default to UnmanagedType.I4.
7049
7050 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7051
7052         * expression.cs : conditional operator should check possibly
7053           incorrect assign expression. Fixed bug #75946.
7054
7055 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7056
7057         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
7058           Reverting the change. gmcs is much complex than mcs on this matter.
7059
7060 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7061
7062         * cs-tokenizer.cs : To read another token ahead of the actual 
7063           consumption, use new SavedToken and cache token instead of moving
7064           back the stream with SeekableStreamReader (it seemed problematic).
7065         * cs-parser.jay,
7066           driver.cs : Thus use StreamReader directly.
7067         * support.cs : Thus removed SeekableStreamReader.
7068
7069 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7070
7071         Fix #75934.
7072         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
7073         (ScopeInfo.EmitScopeType): Use it to construct field names from
7074         names of captured locals.
7075
7076         Fix #75929.
7077         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
7078         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
7079         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
7080         (ExplicitConversion): Remove enum cases already handled by
7081         implicit conversion.  Move implicit conversion check to the beginning.
7082         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
7083         * expression.cs (ArrayCreation.EmitDynamicInitializers):
7084         Don't treat System.Enum as a struct.
7085
7086 2005-08-30  Jb Evain  <jbevain@gmail.com>
7087
7088         * attribute.cs: handles as expression in parameters.
7089
7090 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7091
7092         Fix #75802.
7093         * class.cs (TypeContainer.VerifyClsName): Don't use a
7094         PartialContainer when verifying CLS compliance.
7095         (AbstractPropertyEventMethod): Set Parent here, ...
7096         (PropertyMethod): ... not here.
7097
7098 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
7099
7100         * attribute.cs : escaped attribute name should not be allowed to be
7101           resolved (e.g. @class as classAttribute). Fixed bug #75930.
7102
7103 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7104
7105         Fix #75927.
7106         * convert.cs (ImplicitStandardConversionExists): Allow zero also
7107         when converting a long constant to unsigned long.
7108         * expression.cs (Invocation.OverloadResolve): Add sanity check to
7109         detect where IsApplicable and VerifyArgumentsCompat disagree.
7110
7111 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7112         and Carlos Alberto Cortez  <carlos@unixmexico.org>
7113
7114         Fix #75848.
7115         * class.cs (TypeContainer.CanElideInitializer): New helper.
7116         (TypeContainer.EmitFieldInitializers): Use it to determine if we
7117         can safely emitting the initializer of a field.
7118
7119 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7120
7121         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
7122           allowed inside a switch (without loop). Fixed bug #75433.
7123
7124 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
7125
7126         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
7127         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
7128
7129 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7130
7131         * driver.cs : kinda reverting the default encoding changes (not exact 
7132           revert since I noticed that "codepage:reset" might not work fine).
7133
7134 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7135
7136         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
7137           Location. Now getter and setter store location correctly.
7138           (errors/cs0111-12.cs now reports the expected location.)
7139
7140 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7141
7142         * driver.cs : Use default encoding on the environment.
7143           Removed (now that) extra parameter for SeekableStreamReader.
7144         * support.cs : (SeekableStreamReader) third .ctor() argument for
7145           StreamReader is not required (always true). preamble size could
7146           be acquired in simpler and safe way.
7147
7148 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
7149
7150         * cs-parser.jay: report CS0642 at warning level 3
7151           and report CS0642 for an if else statement also
7152           fixes bug #74745. Patch by John Luke (and a bit
7153           modified by me).
7154           Removed extra CS0642 warning check for "while",
7155           "for" and "fixed".
7156         * statement.cs: In Block.Resolve(), CS0642 check
7157           is reimplemented to check a sequence of an empty
7158           statement and a block.
7159
7160           Both fix bug #66777.
7161
7162 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
7163
7164         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
7165         detection until I fix it.
7166         
7167         * cs-tokenizer.cs: Changed error message.
7168         
7169         * cs-parser.jay: Fixed 2 error locations.
7170         
7171         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
7172         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
7173         properties.
7174         
7175         * enum.cs (GetSignatureForError): Fixed.
7176         
7177         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
7178         method detection.
7179         
7180         * class.cs,
7181         * typemanager.cs (RegisterProperty): Removed.
7182         
7183         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
7184
7185 2005-08-24  Raja R Harinath  <rharinath@novell.com>
7186
7187         Fix #75874.
7188         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
7189         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
7190
7191 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7192
7193         * expression.cs : tiny fix is required for not warning positive ulong.
7194           See test-441.cs.
7195
7196 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7197
7198         * expression.cs : add CS0652 check for constant and integral
7199           expression. Fixed bug #53974.
7200
7201 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7202
7203         * expression.cs : in DoNumericPromotions(), check if there is implicit
7204           conversion overload for string (to check CS0034). Fixed bug #52492.
7205
7206 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7207
7208         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
7209
7210 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7211
7212         * ecore.cs : report location when it is *not* Null.
7213
7214 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7215
7216         * codegen.cs,
7217           ecore.cs,
7218           flowanalysis.cs,
7219           expression.cs:
7220           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
7221           correctly. Fixed bug #75721.
7222
7223 2005-08-23  Raja R Harinath  <rharinath@novell.com>
7224
7225         * support.cs (SeekableStreamReader.Position): Avoid an expensive
7226         loop that performs 'min (pos, char_count)'.
7227
7228         Fix #75862.
7229         * expression.cs (Unary.ResolveOperator): Don't discard implicit
7230         converted value in Operator.OnesComplement.
7231
7232 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
7233
7234         * anonymous.cs: If the anon method is pulled into a helper class,
7235         it needs to be `internal' not `private'. Fixes runtime behavior on
7236         msft. bug #75704
7237
7238 2005-08-20  Martin Baulig  <martin@ximian.com>
7239
7240         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
7241         scope if we don't already have it.
7242
7243         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
7244         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
7245         fixes #75867.
7246
7247 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
7248
7249         Fix #75803
7250         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
7251         is a partial class.
7252
7253 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
7254
7255         The big constants rewrite
7256         Fix #75746, #75685 and more
7257         As a side effect saved 1MB for MWF ;-)
7258         
7259         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
7260         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
7261         enum based for corlib compilation.
7262         
7263         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
7264         subtractions.
7265         
7266         * class.cs (FixedField.Define): Use ResolveAsConstant.
7267         
7268         * const.cs (IConstant): Interface constants and enums.
7269         (Const.ResolveValue): New method for constant resolvning.
7270         (ExternalConstant): Constants from imported assemblies.
7271         
7272         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
7273         conversion; like enums.
7274         (Constant.ToType): Converts this constant to different type.
7275         (Constant.Increment): Adds 1.
7276         
7277         * convert.cs (ImplicitConversionRequired): Simplified.
7278         
7279         * cs-parser.jay: Create EnumMember directly.
7280         
7281         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
7282         
7283         * doc.cs (GenerateEnumDocComment): Removed.
7284         
7285         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
7286         (ConvertIntLiteral): Removed.
7287         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
7288         
7289         * enum.cs (EnumMember): Implement IConstant.
7290         (Enum.IsValidEnumConstant): Removed.
7291         (Enum.GetNextDefaultValue): Removed.
7292         (Enum.FindMembers): Updated.
7293         (Enum.GenerateDocComment): Iterate enum members.
7294         
7295         * expression.cs (Cast.TryReduce): Handle enums correctly.
7296         (New.Constantify): Made public.
7297         (MemberAccess.DoResolve): Removed contant specific if(s).
7298         
7299         * literal.cs (NullLiteral): Implement new abstract methods.
7300         
7301         * statement.cs (GotoCase.Resolve): Use new constant methods.
7302         (SwitchLabel.ResolveAndReduce): Use new constant methods.
7303         
7304         * typemanager.cs (LookupEnum): Removed.
7305         (IsEnumType): Fixed to work with corlib.
7306         (RegisterConstant): Removed.
7307         (LookupConstant): Removed.
7308         (GetConstant): Changed to work with IConstant.
7309
7310 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
7311
7312         * location.cs : Fixed overflown (>255) column number.
7313
7314 2005-08-03  Raja R Harinath  <rharinath@novell.com>
7315
7316         First cut of the qualified-alias-member feature.
7317         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
7318         token.
7319         * cs-parser.jay (DOUBLE_COLON): New token.
7320         (namespace_or_type_name): Add rule for recognizing
7321         qualified-alias-members.
7322         (primary_expression): Likewise.
7323         (element_access): Allow QualifiedAliasMember as a possible
7324         type-bearing expression.
7325         (local_variable_type, local_variable_pointer_type): Likewise.
7326         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
7327         aliases in the current and enclosing namespace declarations.
7328         (NamespaceEntry.UsingAlias): Add CS0440 warning.
7329         * decl.cs (MemberName.is_double_colon): New.
7330         (MemberName.MemberName): Add new constructor for alias-member.
7331         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
7332         * expression.cs (QualifiedAliasMember): New expression type.
7333
7334 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7335
7336         * location.cs : it borked when no argument was specified.
7337
7338 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7339
7340         * location.cs : tiny ToString() format fix.
7341
7342 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7343
7344         * statement.cs : oops, it was missing.
7345
7346 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7347
7348         A set of fixes for precise line/column location.
7349
7350         * location.cs :
7351           "token" field now holds a file/line "delta", a line number offset 
7352           from the segment, and a column number. See also:
7353           http://lists.ximian.com/pipermail/mono-devel-list/2004-
7354           December/009508.html
7355           Removed static IsNull. Use instance IsNull property instead.
7356         * cs-tokenizer.cs :
7357           For some tokens it stores Location. For Identifier it stores
7358           LocatedToken which is a pair of string name and location.
7359           Column numbers are adjusted only at getChar().
7360         * report.cs :
7361           Use Location.ToString() for reporting (it now contains column).
7362         * cs-parser.jay :
7363           Largely modified to use LocatedToken instead of
7364           string (IDENTIFIER), and to acquire Location from some tokens.
7365         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
7366           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
7367           codegen.cs :
7368           Now MemberName holds Location. DeclSpace.ctor() receives Location
7369           as a parameter. Removed extra parameters to all derived classes.
7370           Replaced Location.IsNull() with instance property.
7371         * assign.cs, expression.cs :
7372           Added .ctor() overload that omits Location.
7373         * attribute.cs :
7374           Added "nameEscaped" flag that indicates the identifier was escaped
7375           in the source file. This fixes bug #57047.
7376
7377 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
7378
7379         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
7380         New method, looking for lo-case imported cls type.
7381
7382         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
7383         here.
7384
7385         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
7386
7387         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
7388
7389         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
7390         all_imported_types.
7391         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
7392
7393         Optimized to save 3.5 MB for SWF compilation.
7394
7395 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7396
7397         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
7398         (PartialContainer.Create): Moved logic AddToContainer.
7399         (PartialContainer.MarkForDuplicationCheck): Shares name.
7400         
7401         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
7402         place.
7403         
7404         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
7405         initialization.
7406         (Namespace.GetSignatureForError): New method.
7407         
7408         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
7409         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
7410
7411 2005-08-01  Raja R Harinath  <rharinath@novell.com>
7412
7413         Fix #75669.
7414         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
7415         member lookup rather than qualifier_type, since qualifier_type can
7416         be null.
7417
7418 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7419
7420         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
7421         enum member.
7422
7423 2005-07-31  Miguel de Icaza  <miguel@novell.com>
7424
7425         * statement.cs: Copy the local exception into the exception
7426         captured local.  Fixes 75674
7427
7428 2005-07-31  Raja R Harinath  <harinath@gmail.com>
7429
7430         Fix #75658.
7431         * expression.cs (Invocation.OverloadResolve): Don't report error
7432         CS1501 if error CS1502 has been reported.
7433         (New.DoResolve): Delegate CS1501 reporting to
7434         Invocation.OverloadResolve.
7435
7436         Fix #75656.
7437         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
7438         invariant-meaning-in-block property in an enclosing block if
7439         necessary.
7440
7441 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
7442
7443         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
7444         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
7445         (Switch.CheckSwitch): Just save 50kb for SWF.
7446
7447 2005-07-27  Martin Baulig  <martin@ximian.com>
7448
7449         * anonymous.cs (CaptureContext.AddField): Added
7450         `AnonymousContainer am' argument; compute its toplevel scope if
7451         it's not already computed.  Fixes #75649.
7452
7453 2005-07-26  Raja R Harinath  <rharinath@novell.com>
7454
7455         Fix #75628.
7456         * class.cs (Constructor.Emit): Reset block to null if the block
7457         resolve fails.
7458
7459 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7460
7461         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
7462
7463 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7464
7465         * class.cs (MethodData.Define): Check whether accessor implementing
7466         interface is public.
7467
7468         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
7469
7470 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
7471
7472         Fix #57245
7473         * namespace.cs (LookupType): Moved same type check to...
7474         
7475         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
7476         with the same name.
7477
7478 2005-07-21  Raja R Harinath  <rharinath@novell.com>
7479
7480         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
7481         already found a typebuilder.
7482         * class.cs (MethodCore.IsDuplicateImplementation): Compare
7483         MemberNames, not strings.
7484
7485         * const.cs (Error_ExpressionMustBeConst): 
7486         Rename from Error_EpressionMustBeConst.
7487         * const.cs, class.cs, statement.cd: Update.
7488
7489 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
7490
7491         Fix #65573
7492
7493         * const.cs (Const.LookupConstantValue): Report missing contant expression
7494         everytime.
7495         (Error_EpressionMustBeConstant): Only one error method.
7496
7497         * class.cs, statement.c: Updated.
7498
7499 2005-07-20  Raja R Harinath  <rharinath@novell.com>
7500
7501         * statement.cs (Block.Flags): Add back HasVarargs.
7502         (Block.flags): Make protected.
7503         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
7504
7505         * typemanager.cs (types, typecontainers, user_types): Remove.
7506         (UserTypes, TypeContainers): Likewise.
7507         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
7508         (CleanUp, Reset): Update.
7509         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
7510         (GetNestedType): Use Type.GetNestedType.
7511         (CoreLookupType): Take two arguments, the namespace and the
7512         basename of the type.  Update to use the Namespace.Lookup
7513         mechanism.
7514         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
7515         (RealMemberLookup): Use IsNestedChildOf instead of playing with
7516         string concatenation and substring matches.
7517         * class.cs, enum.cs, delegate.cs: Update to changes.
7518
7519 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
7520
7521         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
7522         Expression and made virtual.
7523
7524         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
7525         (ImplicitStandardConversionExists): Fixed `byte' typo ?
7526
7527         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
7528
7529         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
7530         error message.
7531
7532         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
7533         change.
7534
7535 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
7536
7537         Fix #57707
7538         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
7539         AssemblyCultureAttribute is not used on executable.
7540
7541         * rootcontext.cs,
7542         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
7543
7544 2005-07-16  Raja R Harinath  <rharinath@novell.com>
7545
7546         Fix #60638.
7547         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
7548         New.  Reports CS0252/CS0253.
7549         Mostly taken from preliminary patch by Duncak Mak.
7550         (Binary.DoResolveOperator): Store results of operator lookup.
7551         Use them to detect if we need to warn about unintended reference
7552         comparisons.
7553
7554 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7555
7556         Fix #72969.
7557         * namespace.cs (Namespace.Lookup): Add back location parameter.
7558         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
7559         * delegate.cs, ecore.cs, expression.cs: Update to changes.
7560
7561         * codegen.cs (EmitContext.DeclSpace): Make readonly.
7562         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
7563         (Namespace.LookupType): ... this.
7564         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
7565         of namespaces.
7566         * typemanager.cs (LookupTypeReflection): Remove buggy code that
7567         purported to handle pointers.
7568         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
7569         CoreLookupType.
7570
7571 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
7572
7573         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
7574         type as namespace.
7575
7576 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7577
7578         * namespace.cs (Namespace.Lookup): Drop location parameter.
7579         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
7580         (NamespaceEntry.Lookup): ... this.
7581         (NamespaceEntry.Error_AmbiguousTypeReference):
7582         Move here from DeclSpace.
7583         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
7584         names ...
7585         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
7586         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
7587         Move to NamespaceEntry.
7588         * delegate.cs, expression.cs: Update to changes.
7589
7590 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
7591
7592         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
7593         CheckAttributeType and refactored.
7594         (Attribute.ResolvePossibleAttributeType): Changed to reuse
7595         ResolveAsTypeTerminal error handling.
7596         (ResolveAsTypeTerminal): Introduced because of global attributes extra
7597         handling.
7598         (GetSignatureForError): Print errors in same way.
7599
7600         * class.cs,
7601         * codegen.cs: Reflect attribute GetSignatureForError change.
7602
7603         * ecore.cs,
7604         * expression.cs: Add silent parameter to ResolveAsTypeStep.
7605
7606         * namespace.cs (UsingEntry): Refactored to make fields private.
7607
7608         * assign.cs,
7609         statement.cs: Error_UnexpectedKind has extra parameter.
7610
7611 2005-07-14  Raja R Harinath  <rharinath@novell.com>
7612
7613         * ecore.cs (IAlias): Remove.
7614         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
7615         that implement the interface.
7616         * namespace.cs (Namespace): Likewise.
7617         (Namespace.declspaces): Renamed from 'defined_names'.
7618         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
7619         DeclSpace instead of an IAlias.
7620         * tree.cs (Tree.AddDecl): Update.
7621
7622 2005-07-12  Raja R Harinath  <rharinath@novell.com>
7623
7624         * statement.cs (Block.Flags); Remove HasVarargs.
7625         (Block.HasVarargs): Move to ToplevelBlock.
7626         (Block.ThisVariable, Block.AddThisVariable): Likewise.
7627         (Block.Variables): Make protected.  Initialize variable hashtable
7628         if necessary.
7629         (Block.AddVariable): Update.
7630         (Block.Resolve): Update to changes.
7631         (ToplevelBlock.HasVarargs): New boolean.
7632         (ToplevelBlock.ThisVariable): Move here from Block.
7633         (ToplevelBlock.AddThisVariable): Likewise.
7634         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
7635         * expression.cs (This.ResolveBase): Update to changes.
7636         (ArglistAccess.DoResolve): Likewise.
7637
7638 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7639
7640         Fix #75321
7641         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
7642
7643         * class.cs (TypeContainer.VerifyMembers): Distinguish between
7644         not used and not used & assigned.
7645         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
7646
7647 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7648
7649         Fix #75053
7650         * expression.cs (Is.DoResolve): null is never provided type.
7651
7652 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
7653
7654         Fix #52496
7655         * cs-parser.jay: Less strict event error rule to catch more errors.
7656
7657 2005-07-08  Martin Baulig  <martin@ximian.com>
7658
7659         Fix test-iter-10.cs - distinguish whether we `yield' in a property
7660         gettter (allowed) or setter (not allowed).
7661
7662         * class.cs (Accessor): Implement IIteratorContainer.
7663         (Accessor.Yields): New public field.
7664         (PropertyBase.PropertyMethod.Define): Handle iterators on a
7665         per-accessor basis.
7666
7667         * cs-parser.jay
7668         (get_accessor_declaration, set_accessor_declaration): Set the
7669         `yields' flag on the accessor, not the property.
7670         (property_declaration): Do the iterators check on a per-accessor
7671         basis and not for the whole property.
7672
7673 2005-07-08  Martin Baulig  <martin@ximian.com>
7674
7675         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
7676         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
7677
7678 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
7679
7680         Fix #74975
7681         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
7682         (ExtractSecurityPermissionSet): Cope with self referencing security
7683         attributes properly.
7684
7685         * driver.cs (SetOutputFile): Made public property OutputFile.
7686
7687 2005-07-07  Raja R Harinath  <rharinath@novell.com>
7688
7689         Fix #75486.
7690         * class.cs (TypeContainer.first_nonstatic_field): Rename from
7691         has_nonstatic_fields.  Make into a FieldBase pointer.
7692         (TypeContainer.AddField): Add CS0282 check.
7693         (TypeContainer.EmitType): Update.
7694
7695 2005-07-06  Miguel de Icaza  <miguel@novell.com>
7696
7697         * cs-tokenizer.cs (consume_identifier): Do not create strings to
7698         compare if they start with __.
7699
7700 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7701
7702         * statement.cs (Switch.SwitchGoverningType): Only look at
7703         UserCasts that don't need implicit standard conversions to one of
7704         the allowed switch types (Fixes test-322.cs).
7705         (LocalInfo.Resolve): Re-enable sanity-test.
7706
7707 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
7708
7709         * cs-tokenizer.cs (consume_identifier): Detect double undescores
7710         
7711         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
7712         
7713         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
7714
7715 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7716
7717         Fix #75472.
7718         * ecore.cs (SimpleName.GetSignatureForError): Add.
7719         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
7720         (MemberAccess.GetSignatureForError): Add.
7721
7722 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
7723  
7724         The big error and warning messages review.
7725         
7726         * anonymous.cs,
7727         * assign.cs,
7728         * attribute.cs,
7729         * class.cs,
7730         * codegen.cs,
7731         * convert.cs,
7732         * cs-parser.jay,
7733         * cs-tokenizer.cs,
7734         * decl.cs,
7735         * delegate.cs,
7736         * doc.cs,
7737         * driver.cs,
7738         * ecore.cs,
7739         * enum.cs,
7740         * expression.cs,
7741         * flowanalysis.cs,
7742         * iterators.cs,
7743         * literal.cs,
7744         * location.cs,
7745         * modifiers.cs,
7746         * namespace.cs,
7747         * parameter.cs,
7748         * pending.cs,
7749         * report.cs,
7750         * rootcontext.cs,
7751         * statement.cs,
7752         * support.cs,
7753         * tree.cs,
7754         * typemanager.cs: Updated.
7755         
7756         * class.cs: (MethodCore.SetYields): Moved here to share.
7757         (PropertyMethod.Define): Moved iterator setup here.
7758         
7759         * iterators.cs: Add orig_method to have full access to parent
7760         container.
7761
7762 2005-07-05  Raja R Harinath  <rharinath@novell.com>
7763
7764         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
7765         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
7766         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
7767         variable of struct type.
7768         * expression.cs (Unary.ResolveOperator): Update to change.
7769         (Indirection.VerifyFixed): Likewise.
7770         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
7771         (ParameterReference.VerifyFixed): Value parameters are fixed.
7772         (This.VerifyFixed): Treat 'this' as a value parameter.
7773         * statement.cs (LocalInfo.IsFixed): Remove.
7774
7775 2005-07-01  Martin Baulig  <martin@ximian.com>
7776
7777         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
7778         `ec.EmitThis ()' to get the correct scope.
7779
7780 2005-07-01  Martin Baulig  <martin@ximian.com>
7781
7782         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
7783         instance is a ParameterReference; fixes #75299.
7784
7785 2005-07-01  Martin Baulig  <martin@ximian.com>
7786
7787         Reverted Marek's latest patch (r46725):
7788         - it contains structural changes which are neither mentioned in
7789           the ChangeLog nor explained anywhere; for example the additional
7790           argument of EmitContext's and Iterator's .ctor's and the
7791           TypeContainer.DefineMembers() change.
7792         - structural changes like this should go in in seperate patches
7793           and not be hidden in a huge patch which just seems to affect
7794           warnings and errors.
7795           a big and hard to understand patch.
7796         - it breaks iterators and causes regressions, for instance in
7797           test-iter-03.cs.      
7798
7799 2005-06-30  Raja R Harinath  <rharinath@novell.com>
7800
7801         Fix #75412.
7802         * expression.cs (Indexers.map): Remove.
7803         (Indexers.Append): Filter out inaccessible setters and getters.
7804         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
7805
7806         Fix #75283.
7807         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
7808         Refactored from ...
7809         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
7810         (FieldExpr.Emit, PropertyExpr.Emit): Update.
7811         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
7812         * expression.cs (Invocation.EmitCall): Add CS0120 check.
7813
7814 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
7815
7816         Fix #75322
7817         * class.cs (FieldBase.GetInitializerExpression): One more field
7818         for backup.
7819
7820 2005-06-28  Miguel de Icaza  <miguel@novell.com>
7821
7822         * pending.cs: Do not define a proxy if the base method is virtual,
7823         it will be picked up by the runtime (bug 75270).
7824
7825 2005-06-08  Martin Baulig  <martin@ximian.com>
7826
7827         The big Iterators rewrite :-)
7828
7829         * iterators.cs: Rewrite this to use the anonymous methods framework.
7830
7831         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
7832         before the TypeContainers; see 2test-21.cs.
7833
7834         * class.cs
7835         (TypeContainer.DefineType): Don't create a new EmitContext if we
7836         already have one (this only happens if we're an Iterator).
7837         (TypeContainer.Define): Also call Define() on all our iterators.
7838         (Method.CreateEmitContext): Added support for iterators.
7839
7840         * anonymous.cs
7841         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
7842         (AnonymousContainer.CreateMethodHost): Moved here from
7843         AnonymousMethod and made abstract.
7844         (AnonymousContainer.CreateScopeType): New abstract method.
7845         (AnonymousContainer.IsIterator): New public property.
7846         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
7847         get the ScopeTypeBuilder rather than manually defining it here. 
7848         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
7849         iterators here.
7850
7851         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
7852         before RootContext.DefineTypes().
7853
7854         * codegen.cs (EmitContext.RemapToProxy): Removed.
7855         (EmitContext.CurrentAnonymousMethod): Changed type from
7856         AnonymousMethod -> AnonymousContainer.
7857         (EmitContext.ResolveTopBlock): Protect from being called twice.
7858         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
7859         (EmitContext.EmitThis): Removed the iterators hacks; use the
7860         anonymous methods framework for that.
7861
7862         * statement.cs
7863         (ToplevelBlock.Container): Make this a property, not a field.
7864         (ToplevelBlock.ReParent): New public method; move the
7865         ToplevelBlock into a new container.
7866         (Foreach.TemporaryVariable): Simplify.
7867
7868 2005-06-05  Martin Baulig  <martin@ximian.com>
7869
7870         * statement.cs (LocalInfo.CompilerGenerated): New flag.
7871         (Block.AddTemporaryVariable): New public method; creates a new
7872         `LocalInfo' for a temporary variable.
7873         (Block.EmitMeta): Create the LocalBuilders for all the temporary
7874         variables here.
7875         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
7876         non-iterator variables.
7877
7878 2005-06-05  Martin Baulig  <martin@ximian.com>
7879
7880         * statement.cs (Foreach.TemporaryVariable): Create the
7881         LocalBuilder in the Emit phase and not in Resolve since in some
7882         situations, we don't have an ILGenerator during Resolve; see
7883         2test-19.cs for an example.
7884
7885 2005-06-04  Martin Baulig  <martin@ximian.com>
7886
7887         **** Merged r45395 from GCS ****
7888
7889         The big Foreach rewrite - Part II.
7890
7891         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
7892         with `PropertyInfo ienumerator_getcurrent'.
7893
7894         * codegen.cs (VariableStorage): Removed.
7895
7896         * statement.cs
7897         (Foreach): Derive from Statement, not ExceptionStatement.
7898         (Foreach.CollectionForeach): New nested class.  Moved all the code
7899         dealing with collection foreach here.
7900         (Foreach.ForeachHelperMethods): Removed.
7901         (Foreach.TemporaryVariable): Implement IMemoryLocation.
7902
7903 2005-05-23  Martin Baulig  <martin@ximian.com>
7904
7905         * statement.cs (Try.DoResolve): Don't create a `finally' if we
7906         don't need to.  Fix #75014.
7907
7908 2005-05-20  Martin Baulig  <martin@ximian.com>
7909
7910         Merged r44808 from GMCS.
7911
7912         * class.cs (TypeContainer.CircularDepException): Removed.
7913         (TypeContainer.DefineType): Removed the `InTransit' stuff.
7914         (TypeContainer.CheckRecursiveDefinition): Check for circular class
7915         (CS0146) and interface (CS0529) dependencies here.
7916
7917 2005-06-21  Raja R Harinath  <rharinath@novell.com>
7918
7919         * expression.cs (Invocation.EmitCall): Fix initialization
7920         'this_call' to reflect current behaviour.  Fix indentation.
7921
7922         * convert.cs (FindMostEncompassedType): Add two trivial special
7923         cases (number_of_types == 0 || number_of_types == 1).
7924         (FindMostEncompasingType): Likewise.
7925
7926 2005-06-17  Raja R Harinath  <rharinath@novell.com>
7927
7928         Some cleanups preparing for the fix of #75283.
7929         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
7930         error testing.
7931         (EventExpr.InstanceResolve): Likewise.
7932         (EventExpr.DoResolve): Remove redundant checks.
7933
7934 2005-06-10  Duncan Mak  <duncan@novell.com>
7935
7936         * cs-tokenizer.cs (process_directives): New flag for controlling
7937         the processing of preprocessor directives.
7938         (x_token): After seeing a '#', return Token.NONE instead of going
7939         to handle_preprocessing_directive() when not processing
7940         directives. This avoids unnecessary processing during the token peek in
7941         is_punct().
7942
7943         This fixes #74939.
7944
7945         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
7946         the existing error reporting methods instead of Report.Error.
7947
7948         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
7949         after Raja's rewrite.
7950
7951 2005-06-08  Miguel de Icaza  <miguel@novell.com>
7952
7953         * class.cs: Small fix.
7954
7955 2005-06-08  Raja R Harinath  <rharinath@novell.com>
7956
7957         Fix #75160.
7958         * class.cs (GetPartialBases): Fix return value check of
7959         part.GetClassBases.
7960
7961 2005-06-07  Raja R Harinath  <rharinath@novell.com>
7962
7963         Ensure that partial classes are registered in their enclosing
7964         namespace.  Initial part of fix of #75160.
7965         * tree.cs (Tree.RecordDecl): Add new namespace argument.
7966         Register declspace with namespace here, not in
7967         DeclSpace.RecordDecl.
7968         * cs-parser.jay: Pass namespace to RecordDecl.
7969         * class.cs (PartialContainer.Create): Likewise.
7970         (ClassPart.DefineType): New sanity-check.  Throws an exception if
7971         called.
7972         * decl.cs (Declspace.RecordDecl): Remove.
7973         * namespace.cs (NamespaceEntry.DefineName): Remove.
7974
7975 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
7976
7977         * rootcontext.cs: Reset TargetExt as well.
7978
7979 2005-06-03  Raja R Harinath  <rharinath@novell.com>
7980
7981         * ecore.cs (Expression.Resolve): Emit CS0654 error when
7982         -langversion:ISO-1.
7983
7984 2005-06-02  Raja R Harinath  <rharinath@novell.com>
7985
7986         Fix #75080, cs0119.cs.
7987         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
7988         of ...
7989         (Expression.Resolve): ... this.  Use it.  Remove bogus code
7990         allowing ExprClass.Type and ExprClass.Namespace for
7991         ResolveFlags.VariableOrValue.
7992         (Expression.Resolve) [1-argument variant]: Change default resolve
7993         flags based on language version.
7994         (Expression.Error_UnexpectedKind): Use a simple string array
7995         rather than an ArrayList.
7996         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
7997         not ExprClass.Type.
7998         (TypeOfVoid.DoResolve): Likewise.
7999         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
8000         flags argument -- it always has the same value.
8001
8002 2005-05-31  Raja R Harinath  <rharinath@novell.com>
8003
8004         Fix #75081.
8005         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
8006         Use it in the error message.
8007         * assign.cs, expression.cs, statement.cs: Update.
8008
8009 2005-05-30  Raja R Harinath  <rharinath@novell.com>
8010
8011         Fix #75088.
8012         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
8013         the "almostMatchedMember" case too.
8014         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
8015         that failed the accessibility checks to 'almost_match'.
8016
8017 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
8018
8019         * attribute.cs: Use internal MethodBuilder methods to set
8020         ExactSpelling and SetLastError on PInvoke methods, instead
8021         of passing them via charset.  Fixes #75060.
8022
8023 2005-05-27  Raja R Harinath  <rharinath@novell.com>
8024
8025         * parameter.cs (Parameter): Remove TODO comment.
8026         (Parameter.DefineParameter): Remove Location parameter.
8027         (Parameters.LabelParameters): Likewise.
8028         * class.cs (Constructor.Emit): Update to change.
8029         (MethodData.Emit): Likewise.
8030         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
8031         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
8032
8033 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
8034
8035         * parameter.cs,
8036           Removed Parameters.Location and added Parameter.Location instead.
8037           Removed Location parameter from Emit() and GetSignature().
8038         * anonymous.cs,
8039           class.cs,
8040           cs-parser.jay,
8041           delegate.cs,
8042           iterators.cs,
8043           statement.cs :
8044           Modified all related calls.
8045
8046 2005-05-26  Raja R Harinath  <rharinath@novell.com>
8047
8048         Improve user-defined conversion handling.
8049         * convert.cs (GetConversionOperators): Rewrite.  Return only the
8050         applicable operators.
8051         (AddConversionOperators): New.  Helper for GetConversionOperators.
8052         (FindMostEncompassedType, FindMostEncompassingType): Verify that
8053         there is only one most encompassed/encompassing type.
8054         (FindMostSpecificSource, FindMostSpecificTarget): Remove
8055         "applicable operator" handling.
8056         (UserConversion): Move cache here from GetConversionOperators.
8057         Directly cache the chosen operator, rather than the whole
8058         MethodGroup.
8059         (ExplicitNumericConversion): Fix buggy implementation of Decimal
8060         case.  Allow conversion of decimal to sbyte and byte too.
8061         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8062         New static methods.  Used to avoid allocating EmptyExpressions in
8063         convert.cs.
8064
8065 2005-05-24  Duncan Mak  <duncan@novell.com>
8066
8067         * ecore.cs (CastFromDecimal): New class for casting a decimal to
8068         another class, used in Convert.ExplicitNumericConversion.
8069         (CastToDecimal): New class, similar to above, but casts to
8070         System.Decimal, used in Convert.ImplicitNumericConversion and also
8071         in explicit convesion from double/float to decimal.
8072
8073         * convert.cs (ImplicitNumericConversion): Handle implicit
8074         conversions to System.Decimal.
8075         (ExplicitNumericConversion): handle explicit conversions to
8076         System.Decimal.
8077
8078         This fixes #68711.
8079         
8080 2005-05-20  Miguel de Icaza  <miguel@novell.com>
8081
8082         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
8083         know the type at this stage, just break through.   Fixes #75008 
8084
8085 2005-05-19  Martin Baulig  <martin@ximian.com>
8086
8087         * delegate.cs
8088         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
8089         to disable error reporting.
8090
8091         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
8092         here since we don't want to report an error; see the new test-336.cs.
8093
8094 2005-05-19  Raja R Harinath  <rharinath@novell.com>
8095
8096         * statement.cs (ToplevelBlock.GetParameterReference)
8097         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
8098         Move here from class Block.
8099         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
8100         * expression.cs (ParameterReference.DoResolveBase): Likewise.
8101
8102 2005-05-18  Martin Baulig  <martin@ximian.com>
8103
8104         Fix #74978.
8105
8106         * flowanalysis.cs
8107         (FlowBranching.Reachability): Add non-static public And() and Or()
8108         methods.
8109         (FlowBranchingSwitch): New class; do the `break_origins' thing
8110         like in FlowBranchingLoop.
8111         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
8112         reachability, not just locals and parameters.
8113         (FlowBranching.MergeChild): Remove some of the hacks for loop and
8114         switch; MergeBreakOrigins() now takes care of that.
8115
8116 2005-05-18  Martin Baulig  <martin@ximian.com>
8117
8118         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
8119         a loop and may leave it, reset the barrier; fixes #74974.
8120
8121 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
8122         
8123         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
8124         is back.
8125         
8126         * cs-parser.jay: Catch more lexical errors.
8127         
8128         * report.cs: Add one more Error method.
8129         
8130         * rootcontext.cs,
8131         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
8132
8133 2005-05-17  Martin Baulig  <martin@ximian.com>
8134
8135         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
8136         #70970. 
8137
8138 2005-05-16  Raja R Harinath  <rharinath@novell.com>
8139
8140         Fix test-382.cs.  Emit values of decimal constants.
8141         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
8142         Carved out of ...
8143         (TypeContainer.AddField): ... this.
8144         (TypeContainer.EmitFieldInitializers): Allow the list of fields
8145         with initializers to include 'Const's.
8146         (ClassPart.RegisterFieldForInitialization): Forward to
8147         PartialContainer.
8148         * const.cs (Const.Const): Pass initializer to base class.
8149         (Const.Define): In case of decimal constants, register them for
8150         initialization in a static constructor.
8151
8152 2005-05-14  Martin Baulig  <martin@ximian.com>
8153
8154         * statement.cs (Block.Resolve): Correctly handle unreachable code;
8155         do not call ResolveUnreachable() on unreachable statements in
8156         here, see the comment in the source code.
8157
8158 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8159
8160         Fix #74934.
8161         * expression.cs (BinaryResolveOperator): If one of the operands of
8162         an equality comparison is 'null' and the other is a pointer type,
8163         convert the null to a NullPointer.
8164         * convert.cs (ImplicitReferenceConversion): If the expression is a
8165         NullLiteral and the target type is a pointer type, return a
8166         NullPointer instead.
8167         (ImplicitConversionStandard): Likewise.
8168
8169 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
8170         
8171         * cs-parser.jay: Set readonly context based on special constructs.
8172         
8173         * expression.cs (LocalVariableReference.DoResolveBase): Improved
8174         readonly variable error handling.
8175         
8176         * rootcontext.cs (EmitCode): Don't verify members when error
8177         occurred.
8178         
8179         * statement.cs (LocalInfo): Add reaodnly context information.
8180         (SetReadOnlyContext, GetReadOnlyContext): New methods.
8181
8182 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8183
8184         * statement.cs (Block.Resolve): Revert change below.  Modify fix
8185         for #74041 to initialize 'resolved' to false only for explicit
8186         blocks.  Fixes #74873.
8187
8188 2005-05-12  Raja R Harinath  <harinath@gmail.com>
8189
8190         Fix #74920.
8191         * typemanager.cs (unmanaged_enclosing_types): New.
8192         (IsUnmanagedType): Avoid infloops by using
8193         'unmanaged_enclosing_types' to talk with recursive invocations.
8194
8195 2005-05-13  Martin Baulig  <martin@ximian.com>
8196
8197         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
8198         instance variable, not a local.  Fix #74873.
8199         (Block.ResolveUnreachable): Set it to true here.
8200
8201 2005-05-11  Duncan Mak  <duncan@novell.com>
8202
8203         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
8204         continuing to process for 'arg'.
8205         (handle_preprocessing_directive): Check the argument of the #endif
8206         directive and report error CS1025 if there are any trailing
8207         characters.
8208
8209         According to the C# spec, having even whitespace after the #endif
8210         directive is illegal; however, because we call arg.TrimEnd ()
8211         beforehand, we have the same behavior as csc, allowing whitespace
8212         after the directive.
8213
8214         Fixes #74892.
8215
8216 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
8217
8218         Fix #74863.
8219         
8220         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
8221         (Constructor.GetObsoleteAttribute): Implemented correctly.
8222
8223 2005-05-10  Martin Baulig  <martin@ximian.com>
8224
8225         * support.cs (ReflectionParameters.ParameterModifier): Use
8226         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
8227         and `ParameterAttributes.In'.  Fixes #74884.
8228
8229 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
8230
8231         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
8232         
8233         * expression.cs (Argument.GetParameterModifier): Turned to property.
8234         (Invocation.Error_InvalidArguments): Add more descriptive errors.
8235         
8236         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
8237         its C# equivalent.
8238         
8239 2005-05-09  Raja R Harinath  <rharinath@novell.com>
8240
8241         Fix #74852.
8242         * decl.cs (MemberCache.AddMethods): Register override methods,
8243         rather than non-override methods.
8244         * typemanager.cs (RegisterOverride): New.
8245         (IsOverride): Update.
8246
8247 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
8248
8249         Fix #73105.
8250         
8251         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
8252         recursive declaration.
8253         
8254         * statement.cs (Block.ResolveMeta): Report any error in resolving.
8255         
8256 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
8257
8258         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
8259         
8260         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
8261
8262 2005-05-05  Raja R Harinath  <rharinath@novell.com>
8263
8264         Fix #74797.
8265         * decl.cs (DeclSpace.FamilyAccessible): 
8266         Use TypeManager.IsNestedFamilyAccessible.
8267
8268         Fix reopened #64812.
8269         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
8270         internal'.
8271
8272 2005-05-04  Raja R Harinath  <rharinath@novell.com>
8273             Abin Thomas  <projectmonokochi@rediffmail.com>
8274             Anoob V E  <projectmonokochi@rediffmail.com>
8275             Harilal P R  <projectmonokochi@rediffmail.com>
8276
8277         Fix #64812.
8278         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
8279         allow access to all static members.
8280
8281 2005-05-04  Martin Baulig  <martin@ximian.com>
8282
8283         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
8284
8285 2005-05-04  Martin Baulig  <martin@ximian.com>
8286
8287         Fix #74655.
8288
8289         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
8290         section at the end; make things work if `default' is not the last
8291         section.        
8292
8293 2005-05-04  Martin Baulig  <martin@ximian.com>
8294
8295         Fix #70400.
8296
8297         * statement.cs (Switch): Replaced the `got_default' field with a
8298         `default_section' one.
8299         (Switch.CheckSwitch): Set `default_section' here.
8300         (Switch.Resolve): If we're a constant switch and the constant is
8301         not found, use the default section.
8302
8303 2005-05-03  Martin Baulig  <martin@ximian.com>
8304
8305         * expression.cs (ArrayAccess.EmitGetLength): New public method.
8306
8307         * statement.cs (Foreach.ArrayForeach): New nested class.
8308         (Foreach.TemporaryVariable): New nested class.
8309         (Foreach.EmitArrayForeach): Removed; this is now in the new
8310         ArrayForeach class.
8311
8312 2005-05-03  Raja R Harinath  <rharinath@novell.com>
8313
8314         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
8315         more conservative.
8316         (VerifyPendingMethods): Revert change below.
8317
8318         * typemanager.cs (IsOverride, RegisterNonOverride): New.
8319         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
8320         that used to trigger warning -28.  Remove warning -28.
8321         * expression.cs (Invocation.OverloadResolve): Use
8322         TypeManager.IsOverride to distinguish override methods.
8323
8324         Fix #74773.
8325         * pending.cs (VerifyPendingMethods): If a base type implements the
8326         requested interface, don't bother checking individual methods of
8327         the base type.  As a side-effect, this prevents the creation of
8328         unnecessary proxies.
8329
8330 2005-05-02  Martin Baulig  <martin@ximian.com>
8331
8332         Fix #70182.
8333
8334         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
8335         Also `And' the locals if the old vector is null.
8336         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
8337         null; in this case we basically reset all the variables.        
8338
8339 2005-05-02  Martin Baulig  <martin@ximian.com>
8340
8341         Fix #74529.
8342
8343         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
8344         Added `FlowBranching branching' argument; always `and' the
8345         variables instead of `or'ing them unless we're an infinite loop.
8346
8347         * statement.cs (While.Resolve): Create a new sibling unless we're
8348         infinite.       
8349
8350 2005-05-02  Martin Baulig  <martin@ximian.com>
8351
8352         Fix #70140.
8353
8354         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
8355         arguments; use it instead of creating a new TopLevelBlock.
8356         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
8357         our ConstructorInitializer.
8358
8359         * statement.cs
8360         (TopLevelBlock.TopLevelBranching): New public property.
8361         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
8362         and create our `TopLevelBranching'.
8363
8364         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
8365         anonymous method host, use `block.TopLevelBranching' rather than
8366         creating a new branching.
8367
8368 2005-04-20  Miguel de Icaza  <miguel@novell.com>
8369
8370         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
8371         a ScopeInfo, if any of the current children is a child of the new
8372         entry, move those children there.
8373
8374 2005-04-30  Martin Baulig  <martin@ximian.com>
8375
8376         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
8377         at the beginning of a SwitchSection.  Fix #73335.
8378
8379 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
8380
8381         Fix #74378
8382         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
8383         
8384         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
8385         (FieldExpr.DoResolve): Obsolete members are ignored for field
8386         initializers.
8387         
8388 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
8389
8390         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
8391         of arrays detection.
8392
8393         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
8394         verification.
8395         (Field.VerifyClsCompliance): Volatile fields are not compliant.
8396
8397         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
8398         arrays report.
8399
8400 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
8401
8402         * cs-parser.jay: Use the prefered version of -unsafe in error
8403         message.
8404
8405 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
8406
8407         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
8408         circumstances.
8409
8410 2005-04-20  John Luke  <john.luke@gmail.com>
8411
8412         * driver.cs: fix typo in error message, --outout to --output
8413
8414 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
8415
8416         * codegen.cs (InRefOutArgumentResolving): New field.
8417         
8418         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
8419         fields outside contructor.
8420         
8421         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
8422         
8423 2005-04-19  Miguel de Icaza  <miguel@novell.com>
8424
8425         * anonymous.cs (CaptureContext.EmitParameterInstance): The
8426         parameter code was not completed ever, so it was not as up-to-date
8427         as local variables.  Must finish it.
8428
8429         The bug fix was to compare the Toplevel of the block, not the
8430         current block.  Thanks for Ben for pointing this out. 
8431
8432 2005-04-19  Raja R Harinath  <rharinath@novell.com>
8433
8434         * decl.cs (AddMethods): Use the declaring type of the problem
8435         method to determine if we want to squash a warning.
8436
8437 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
8438
8439         * attribute.cs: Removed debug output.
8440
8441         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
8442         
8443         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
8444         Report.Stderr.
8445         
8446 2005-04-18  Raja R Harinath  <rharinath@novell.com>
8447
8448         Fix #74481.
8449         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
8450         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
8451         all null comparisons against reference types.
8452
8453 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
8454
8455         Fix# 74565
8456         * class.cs (TypeContainer.CircularDepException) New nested
8457         exception class.
8458         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
8459         (TypeContainer.DefineType): Removed error, reset InTransit before
8460         exit.
8461         (Class.DefineType): Throw exception when is in Transit.
8462         Catch exception and report error.
8463         (Struct.DefineType): Throw exception when is in Transit.
8464         Catch exception and report error.
8465         (Interface.DefineType): Throw exception when is in Transit.
8466         Catch exception and report error.
8467
8468         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
8469         handle nested exception handlers.
8470
8471         * flowanalysis.cs (InTryWithCatch): New method, search for try with
8472         a catch.
8473
8474         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
8475         InFinally and InCatch storage.
8476
8477         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
8478         (Catch.Resolve): Set and Restore ec.InCatch.
8479         (Try.Resolve): Set and Restore ec.InFinally.
8480         (Try.HasCatch): True when try has catch.
8481
8482 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
8483
8484         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
8485           for the same event member, so exclude such cases from warning 419.
8486           Fixed bug #74633.
8487
8488 2005-04-16  Miguel de Icaza  <miguel@novell.com>
8489
8490         * expression.cs (Binary.ResolveOperator): Apply patch from John
8491         Luke to fix bug 59864: operators &, | and ^ on enumerations
8492         require that the same enum type on both sides.
8493
8494         * driver.cs: Add warnings to old flag usage, this is to assist
8495         people who produce Makefiles and hope that the Makefiles will be
8496         used on Windows.
8497
8498         * class.cs (TypeContainer.EmitType): Moved the definition of the
8499         special $PRIVATE$ field from the resolve phase to the Emit phase.
8500         During resolve we do not know if we are a struct with
8501         HasExplicitLayout, we know this only after the attributes for the
8502         type are emitted.
8503
8504         Set the FieldOffset to zero on the dummy field that we create for
8505         the class.   Fixes 74590.
8506
8507 2005-04-16  Raja R Harinath  <rharinath@novell.com>
8508
8509         Fix #73834.
8510         * ecore.cs (PropertyExpr.resolved): New.
8511         (DoResolve): Use it to handle a case of double resolution here.
8512         Handle a case of identical-name-and-type-name.
8513         * expression.cs (ArrayCreation.CheckIndices): Avoid double
8514         resolution by storing the results of expression resolution back
8515         into the "probes" array.
8516
8517 2005-04-15  Raja R Harinath  <rharinath@novell.com>
8518
8519         Fix cs0208-7.cs and cs0208-8.cs.
8520         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
8521         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
8522         error reporting to point out the reason a struct is not unmanaged.
8523
8524 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8525
8526         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
8527           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
8528
8529 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8530
8531         Fix #74528.
8532         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
8533         IdenticalNameAndTypeName here.
8534         (EventExpr.InstanceResolve): Likewise.
8535
8536 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
8537
8538         C# 2.0 DefaultCharSetAttribute implementation
8539         
8540         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
8541         which allows us to set GlobalNamespace for every resolve.
8542         (Attribute.ResolveArguments): Cut from Resolve.
8543         (Attribute.GetCharSetValue): Returns CharSet named argument.
8544         (Attribute.DefinePInvokeMethod): Gets default charset from
8545         module settings.
8546         (GlobalAttribute.ResolveAsTypeStep): Override.
8547         (GlobalAttribute.ResolveArguments): Override.
8548         
8549         * class.cs (TypeAttr): Is protected.
8550         
8551         * codegen.cs (ModuleClass.DefaultCharSet): New member.
8552         (ModuleClass.DefaultCharSetType): New memeber.
8553         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
8554         
8555         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
8556         charset from module.
8557         
8558         * delegate.cs (TypeAttr): Override.
8559         (Delegate.DefineType): Use this TypeAttr.
8560         
8561         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
8562         at very early stage (before types are defined) to resolve model
8563         module attributes. It will probably not work with corlib but it
8564         should be ok.
8565         
8566         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
8567         charset from module.
8568         
8569         * typemanager.cs (default_charset_type): New type.
8570
8571 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8572
8573         * decl.cs (MemberCache.AddMethods): Don't warn if
8574         System.Object.Finalize has buggy MethodAttributes.
8575
8576         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
8577         removed below.
8578
8579 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8580
8581         * doc.cs : detect ambiguous reference to overloaded members.
8582           Fixed bug #71603. MS 1.1 csc does not detect it.
8583
8584 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8585
8586         * doc.cs : delegates must not be referenced with parameters.
8587           Fixed bug #71605.
8588
8589 2005-04-12  Miguel de Icaza  <miguel@novell.com>
8590
8591         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
8592
8593 2005-04-10  Miguel de Icaza  <miguel@novell.com>
8594
8595         * driver.cs (MainDriver): Stop processing if the CLS stage found
8596         errors. 
8597
8598         (CompilerCallableEntryPoint.InvokeCompiler): Always
8599         reset after execution;   Take a TextWriter argument for the
8600         output.
8601
8602         * report.cs: Use the error stream instead of hardcoding stderr. 
8603
8604 2005-04-09  Miguel de Icaza  <miguel@novell.com>
8605
8606         * class.cs: Reduce code paths to test, too small of an
8607         optimization to make it worth the extra testing.  Always perform
8608         it. 
8609
8610 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8611
8612         Fix #74510.
8613         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
8614         operators that had errors reported on them.
8615
8616 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
8617
8618         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
8619         argument types.
8620         (Attribute.Resolve): Add named argument type checking.
8621         
8622         * class.cs (FixedField.Define): Use IsPrimitiveType
8623         
8624         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
8625         
8626         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
8627         unsafe parameter types.
8628         
8629         * statement.cs (Using.ResolveExpression): Add better error description.
8630         
8631         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
8632         
8633 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8634
8635         Fix #74484.
8636         * attribute.cs (Attribute.GetAttributeUsage): Resolve
8637         AttributeUsageAttribute in the emitcontext of the attribute class,
8638         not in the emitcontext of the attributable entity it was attached to.
8639         * cs-parser.jay: Use 'current_class', not 'current_container',
8640         when creating a GlobalAttribute.
8641
8642 2005-04-08  Alp Toker  <alp@atoker.com>
8643
8644         * pending.cs: The fix to #58413 failed to compile methods implementing
8645         interfaces with/without params modifiers and vice versa, even though
8646         params modifiers aren't part of the signature. Make the modifier check
8647         less strict as in csc.
8648
8649 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
8650             Anoob V E  <projectmonokochi@rediffmail.com>
8651             Harilal P R  <projectmonokochi@rediffmail.com>
8652
8653         Fix #58413.
8654         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
8655         modifiers of pending methods.
8656         (PendingImplementation.PendingImplementation): Initialize it.
8657         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
8658         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
8659         with ParameterData.  Add check for modifiers.
8660         * class.cs (MethodData.Define): Update to changes.
8661
8662 2005-04-07  Raja R Harinath  <rharinath@novell.com>
8663
8664         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
8665
8666 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
8667
8668         * class.cs (PropertyMethod.Define): Check private accessor in abstract
8669         property.
8670         
8671         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
8672         
8673         * rootcontext.cs,
8674         * typemanager.cs: Registered RequiredAttributeAttribute.
8675         
8676 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
8677
8678         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
8679         Warning CS0169 is back at level 3.
8680         (IMethodData.SetMemberIsUsed): New method.
8681         
8682         * decl.cs (IsUsed): New value; moved from FieldBase.Status
8683         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
8684         
8685         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
8686
8687         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
8688         contants.
8689         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
8690         is used.
8691         
8692         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
8693         is used.
8694         
8695         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
8696         to avoid the problems with nested types.
8697
8698 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
8699             Anoob V.E  <projectmonokochi@rediffmail.com>
8700             Harilal P.R  <projectmonokochi@rediffmail.com>
8701             Raja R Harinath  <rharinath@novell.com>
8702
8703         Fix #73820.
8704         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
8705         attribute.
8706         * typemanager (GetConstructor): Make public.
8707
8708 2005-04-05  John Luke  <john.luke@gmail.com>
8709             Raja R Harinath  <rharinath@novell.com>
8710
8711         Fix #62232.
8712         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
8713         struct too.  Return false quicker in a few cases.
8714         (VerifyUnManaged): Use it.
8715
8716 2005-04-05  Raja R Harinath  <rharinath@novell.com>
8717
8718         Fix #74041.
8719         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
8720         not 'unreachable_seen'.
8721
8722 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
8723
8724         * attribute.cs (Attribute.GetValue): Removed unused.
8725         
8726         * codegen.cs (CodeGen.TrimExt): Removed unused.
8727         
8728         * cs-parser.jay (output): Removed unused.
8729         
8730         * cs-tokenizer.cs (hex_digits): Removed unused.
8731         
8732         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
8733         
8734         * expression.cs (Indirection.LoadExprValue): Removed unused.
8735         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
8736         
8737         * iterators.cs (Iterator.param_types): Removed unused.
8738         
8739         * statement.cs (Goto.block): Removed unused.
8740         (ToplevelBlock.did): Removed unused.
8741         (Switch.ResolveConstantSwitch): Removed unused.
8742
8743 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
8744
8745         * rootcontext.cs: Allow mcs to bootstrap with the compilation
8746         resetting thingy.
8747
8748 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8749
8750         Fix #74232 and cs0208-3.cs.
8751         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
8752         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
8753         unmanaged type.  Don't use FieldBuilders when 't' is a
8754         TypeBuilder.  Use ModFlags and MemberType fields.
8755         * class.cs (MemberBase.member_type): Rename from MemberType.
8756         (MemberBase.MemberType): New property.  Determines member_type on
8757         demand.
8758         (MemberBase.DoDefine): Don't initialize MemberType here.
8759         (FieldMember.Define): Likewise.
8760
8761 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
8762
8763         Fix #74241
8764         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
8765         Attributes are emitted there.
8766         
8767 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8768
8769         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
8770         keyword in 'partial enum' too.
8771         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
8772         is not allowed).
8773         Report from Kamil Skalski <nazgul@omega.pl>.
8774
8775         Fix #74309.
8776         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
8777         have partial containers too.
8778
8779         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
8780         in block' checks to Block.CheckInvariantMeaningInBlock.
8781         * statement.cs (Block.GetKnownVariableInfo): Make private.
8782         (Block.IsVariableUsedInChildBlock): Remove.
8783         (Block.IsVariableUsedInBlock): Likewise.
8784         (Block.CheckInvariantMeaningInBlock): New.  Show location of
8785         conflicting declaration.
8786         (Block.AddVariable): Make error messages less long-winded and more
8787         specific.  Show location of conflicting declaration.
8788         * parameter.cs (Parameters.Location): New readonly property.
8789
8790 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8791
8792         Clean up semantics of invoking ResolveMemberAccess.
8793         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
8794         can have an instance, ensure that we pass in a non-TypeExpression
8795         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
8796         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
8797         argument.  Update to changes and simplify.
8798         (FieldExpr.Emitinstance): Remove CS0120 check.
8799         (PropertyExpr.EmitInstance): Likewise.
8800         * expression.cs (Argument.Resolve): Likewise.
8801         (Invocation.DoResolve): Update to changes in semantics of
8802         InstanceExpression.
8803
8804 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
8805
8806         Fix #74241
8807         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
8808         customization.
8809         
8810         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
8811
8812 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8813
8814         Fix difference in behaviour with commandline invocation.
8815         * driver.cs (Driver.Reset): New.
8816         (CompilerCallableEntryPoint): Call it.
8817
8818         * statement.cs (If.Resolve): Avoid spurious "uninitialized
8819         variable" warnings if the boolean expression failed to resolve.
8820
8821 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
8822
8823         * attribute.cs: Fix the union of several permissions when some of them
8824         are unrestricted (so the result isn't an unrestricted permission set).
8825         Fix #74036.
8826
8827 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8828
8829         * ecore.cs (MemberExpr): New class.  Convert from interface
8830         IMemberExpr.
8831         (MemberExpr.ResolveMemberAccess): Refactor and move here from
8832         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
8833         error checks.
8834         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
8835         (MethodGroupExpr.IsExplicitImpl): Remove.
8836         (Expression.GetFieldFromEvent): Remove.
8837         (SimpleName.MemberStaticCheck): Remove.
8838         (SimpleName.DoSimpleNameResolve): Update to changes.
8839         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
8840         (MemberAccess.IdenticalNameAndTypeName): Remove.
8841         (MemberAccess.error176): Move to MemberExpr.
8842         (MemberAccess.DoResolve): Update to changes.
8843         (BaseAccess.DoResolve): Likewise.
8844
8845 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
8846
8847         C# 2.0 Conditional attribute class implementation
8848         
8849         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
8850         Analyzes class whether it has attribute which has ConditionalAttribute
8851         and its condition is not defined.
8852         
8853         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
8854         (Class.IsExcluded): New method. Search for at least one defined
8855         condition in ConditionalAttribute of attribute class.
8856
8857 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8858
8859         * ecore.cs (PropertyExpr): Derive from Expression, not
8860         ExpressionStatement.
8861         (PropertyExpr.EmitStatement): Remove.
8862
8863 2005-03-29  Raja R Harinath  <rharinath@novell.com>
8864
8865         Fix #74060.
8866         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
8867         internal field "value__" of an enum be private.  The examples for
8868         "value__" that I found on MSDN all used FieldAttributes.Private.
8869
8870         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
8871         Don't mention IL method attribute names.
8872
8873         Fix #47991.  Remove a TODO.
8874         * statement.cs (Block.Toplevel): Make into a field.
8875         (Block.Parameters): Move into ToplevelBlock.
8876         (Block.known_variables): Rename from child_variable_names.
8877         (Block.Block): Remove variants that take Parameters.  Initialize
8878         'Toplevel' with the immediately surrounding toplevel block.
8879         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
8880         LocalInfo parameter.
8881         (Block.GetKnownVariableInfo): New.
8882         (Block.IsVariableNameUsedInChildBlock): Update.
8883         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
8884         the block, even though it may not be in scope.
8885         (Block.AddVariable): Remove Parameters parameter.  Use
8886         Toplevel.Parameters instead.
8887         (Block.AddConstant): Remove Parameters parameter.
8888         (Block.GetParameterReference): Update to use Toplevel.Parameters.
8889         (Block.IsParamaterReference): Likewise.
8890         (Block.IsLocalParameter): Likewise.  Simplify a lot.
8891         (ToplevelBlock.Parameters): New.  Moved from Block.
8892         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
8893         initialize Parameters to a non-null value.
8894         * cs-parser.jay: Update to changes.
8895         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
8896         simple names that mean different things in the same block.  Use
8897         Block.IsVariableNameUsedInBlock.
8898
8899 2005-03-28  Raja R Harinath  <rharinath@novell.com>
8900
8901         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
8902         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
8903         GetTypeHandle.  It is possible for a reflected type to derive from
8904         a TypeBuilder (e.g., int[] derives from the TypeBuilder
8905         System.Array during mscorlib compilation).
8906         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
8907         contain a method_hash, don't create one either.  Don't create a
8908         deep copy of the base cache's method_hash.
8909         (MemberCache.SetupCache): Rename back from DeepCopy.
8910         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
8911         already initialized.  If we see an override function, add its
8912         underlying base virtual function to the member_hash too.
8913
8914         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
8915
8916 2005-03-26  Raja R Harinath  <harinath@acm.org>
8917
8918         Fix #73038.
8919         * assign.cs (Assign.DoResolve): When the RHS of an assignment
8920         fails to resolve, ensure that the LHS is still resolved as an
8921         lvalue.
8922
8923 2005-03-25  Raja R Harinath  <harinath@acm.org>
8924
8925         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
8926         ec.ContainerType.
8927         (Enum.current_ec): Remove.
8928         (Enum.LookupEnumValue): Remove EmitContext argument.
8929         Just uses the one created during DefineType.
8930         (Enum.FindMembers): Update.
8931         * expression.cs (MemberAccess.DoResolve): Update.
8932
8933 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
8934
8935         * assign.cs (Assign.DoResolve): Check for CS1717 when
8936         source and target are same (uses Equals).
8937
8938         * expression.cs (LocalVariableReference, ParameterReference,
8939         This): Implemented Equals, GetHashCode.
8940
8941         * statement.cs (Block.GetParameterReference): Removed useless
8942         local variable.
8943
8944 2005-03-22  Raja R Harinath  <rharinath@novell.com>
8945
8946         Fix cs0128.cs
8947         * statement.cs (Block.AddVariable): Ensure that we skip implicit
8948         blocks before deciding whether the error is cs0136 or cs0128.
8949
8950         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
8951         (using_alias_directive, using_namespace_directive): Pass
8952         MemberName, not an expression to Namespace.UsingAlias and
8953         Namespace.Using.
8954         (MakeName): Use the MemberName of the namespace.
8955         * namespace.cs (Namespace.MemberName): New.
8956         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
8957         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
8958         Likewise.
8959         * decl.cs (MemberName.Name): Make readonly.
8960         (MemberName.FromDotted): New "constructor".
8961         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
8962         (MemberCore.Name): Compute from MemberName on demand.
8963         (MemberCore.SetMemberName): Provide a way to change the
8964         MemberName.
8965         (MemberCore.AddToContainer): Don't take a fullname parameter.
8966         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
8967         fully qualified name of the container to the member name.
8968         (TypeContainer.AddToTypeContainer): Use a fully qualified name
8969         only if the type is a member of the root container.
8970         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
8971         MemberName.Left rather than searching for an embedded ".".
8972         (PartialContainer.CreatePart): Update to changes in RootContext.
8973         (MemberBase.ShortName): Turn into a property.  Use
8974         MemberCore.SetMemberName.
8975         (MemberBase.ExplicitInterfaceName): Remove.
8976         (MemberBase.UpdateMemberName): Remove.
8977         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
8978         (PropertyBase.SetMemberName): New override.
8979         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
8980         (Tree.GetDecl): New.
8981         (Tree.AllDecls): Rename from Decls.
8982         * attribute.cs, enum.cs, report.cs: Update to changes.
8983         * driver.cs (MainDriver): Use MemberName.FromDotted on
8984         RootContext.MainClass.
8985
8986 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
8987
8988         * class.cs (FixedField.Define): Check for CS1664 and more sanity
8989         checks.
8990
8991         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
8992
8993 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
8994
8995         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
8996         property accessor modifiers.
8997
8998         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
8999         fixed buffer attribute (CS1716).
9000         (PropertyMethod.HasCustomAccessModifier): When property accessor
9001         has custom modifier.
9002
9003         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
9004         modifiers.
9005         (PropertyExpr.DoResolveLValue): Add CS0272.
9006
9007 2005-03-17  Miguel de Icaza  <miguel@novell.com>
9008
9009         * convert.cs: When converting to a pointer, use the proper Conv.U
9010         or Conv.I depending on the source data type.
9011
9012         * cs-tokenizer.cs: Make the size for large decimal constants,
9013         fixes #72957.
9014
9015 2005-03-17  Martin Baulig  <martin@ximian.com>
9016
9017         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
9018         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
9019
9020 2005-03-17  Martin Baulig  <martin@ximian.com>
9021
9022         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
9023         to bool so we can return an error condition.
9024         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
9025         returned an error.
9026
9027 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
9028
9029         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
9030         attributes.
9031
9032 2005-03-16  Raja R Harinath  <rharinath@novell.com>
9033
9034         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
9035         Refactor to avoid traversing the list of assemblies, and to avoid
9036         string concatenation.
9037         * typemanager.cs (guid_attr_type): Remove.
9038         (negative_hits, pointers, references): Remove hashes.
9039         (type_hash): New.
9040         (GetConstructedType): New.  Uses type_hash to handle constructed
9041         types (arrays, references, pointers).
9042         (GetReferenceType, GetPointerType): Use it.
9043         (GetNestedType): New.  Uses type_hash to handle nested types of
9044         reflected types.
9045         (LookupType, LookupTypeDirect): Remove.
9046         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
9047         'types' hash and LookupTypeReflection directly.
9048         (params_string, params_object): Use GetConstructedType.
9049         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
9050         top-level types.
9051         (Namespace.Lookup): Use cached_types.
9052         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
9053         provided by old TypeManager.LookupType.
9054         * rootcontext.cs (MakeFQN): Remove.
9055         * decl.cs (DeclSpace.MakeFQN): Likewise.
9056         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
9057         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
9058         TypeManager.GetConstructedType.
9059         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
9060
9061 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
9062
9063         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
9064         indexers.
9065
9066         * cs-parser.jay: Reports CS1527 for any namespace element.
9067
9068         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
9069         Added CS0407.
9070
9071         * expression.cs (ParameterReference.IsAssigned): Changed error to
9072         CS0269.
9073         (Error_WrongNumArguments): Moved CS0245 detection here.
9074
9075         * statement.cs (Return.Resolve): Add CS1622 report.
9076
9077 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
9078
9079         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
9080
9081 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
9082
9083         * attribute.cs expression.cs: Get rid of some allocations.
9084
9085 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
9086
9087         * doc.cs : just eliminate the latest change.
9088
9089 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9090
9091         * doc.cs : commented out the latest change. It breaks xml-030.cs
9092
9093 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9094
9095         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
9096           fail. So invoke CreateType() in FindDocumentedType().
9097
9098 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9099
9100         * cs-tokenizer.cs : added IsKeyword().
9101         * doc.cs : Detect keyword incorrectly used as identifier.
9102           Allow identifiers prefixed by @.
9103
9104 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
9105
9106         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
9107         It caused exception in namespace resolving (again!).
9108         
9109         * class.cs (Class.ctor): Removed exit.
9110         (PropertyMethod.ctor): ditto.
9111         
9112         * codegen.cs (Codegen.Reset): Reset static data.
9113         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
9114         
9115         * cs-tokenizer.cs (Cleanup): Removed.
9116         
9117         * driver.cs (GetSystemDir): Rewrote to one line command.
9118         It caused problem with unloaded dynamic modules.
9119         (UnixParseOption): Removed Exit.
9120         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
9121         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
9122         Now can be mcs used as library.
9123         
9124         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
9125         empty location.
9126         
9127         * location.cs (Reset): Reset static data.
9128         
9129         * namespace.cs (Reset): Reset static data.
9130         
9131         * report.cs (Report.Reset): Reset static data.
9132         
9133         * rootcontext.cs (RootContext.Reset): Reset static data.
9134         
9135         * tree.cs (RootTypes.ctor): Use Location.Null
9136         
9137         * typemanager.cs (TypeManager.Reset): Reset static data.
9138         (CoreLookupType): Removed Exit.
9139         (TypeHandle.Reset): Reset static data.
9140         
9141 2005-03-10  Raja R Harinath  <rharinath@novell.com>
9142
9143         Fix #73516.
9144         * typemanager.cs (ComputeNamespaces): Import namespaces from
9145         referenced modules too.
9146
9147 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9148
9149         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
9150         than '.'.
9151
9152 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9153
9154         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
9155         enclosing DeclSpace.  This ensures that a name-lookup populates
9156         more caches and there are fewer 'TypeExpression's.  Carve out
9157         nested type lookup into ...
9158         (LookupNestedTypeInHierarchy): ... this.
9159
9160 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9161
9162         Clean up a few partial-class semantics.  
9163         Fixes test-357.cs and cs1618-2.cs.
9164         * cs-parser.jay (struct_declaration): Use 'current_class' as
9165         parent of newly-created struct.  Remove call to Register ().
9166         Use 'pop_current_class' to complete handing the current struct.
9167         (interface_declaration): Likewise.
9168         (class_declaration): Likewise.
9169         (enum_declaration): Use 'current_class' as parent of newly created
9170         enum.
9171         (delegate_declaration): Likewise.
9172         (pop_current_class): New function.  This is used to handle closing
9173         up the 'current_class' and 'current_container', and pointing them
9174         to the enclosing class/container.
9175         (CSharpParser): Initialize 'current_class' too.
9176         * decl.cs (MemberCore): Add check for invariant: a partial
9177         container is not a parsed entity, and thus does not enclose any
9178         parsed members.
9179         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
9180         (DeclSpace.BaseTypeExpr): Use it.
9181         (DeclSpace.LookupType): Add check for invariant.
9182         * class.cs (TypeContainer): Add check for invariant: a nested
9183         class should have the same NamespaceEntry as its enclosing class.
9184         (TypeContainer.EmitFieldInitializers): Make virtual.
9185         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
9186         MemberCore.
9187         (TypeContainer.Register): Remove.
9188         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
9189         null.  Use TypeResolveEmitContext for resolving base types and
9190         interfaces.  Move initialization of Parts.TypeBuilder here from
9191         ...
9192         (TypeContainer.DefineNestedTypes): ... here.
9193         (PartialContainer): Take a Namespace not a NamespaceEntry.
9194         (PartialContainer.Create): Don't use Register.  Call the
9195         appropriate Add... function directly.
9196         (ClassPart): Take both the PartialContainer and the enclosing
9197         class as constructor arguments.
9198         (ClassPart.EmitFieldInitializers): Override.
9199         (ClassPart.PartFindNestedTypes): Remove.
9200         (FieldBase.GetInitializerExpression): Resolve the initializer
9201         expression in the emit context of the enclosing class.
9202         * tree.cs (RootTypes): Remove Register ().
9203         
9204 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
9205
9206         * cs-parser.jay: Removed CS0134.
9207         
9208         * driver.cs: Removed CS1901.
9209         
9210         * expression.cs (SizeOf.DoResolve): Don't report CS0233
9211         for predefined types.
9212
9213 2005-03-07  Duncan Mak  <duncan@novell.com>
9214
9215         * codegen.cs (Save):  Catch UnauthorizedAccessException as
9216         well. Fixes bug #73454.
9217
9218 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
9219
9220         * cs-tokenizer.cs (xtoken): Add CS1035.
9221         
9222         * class.cs (MethodData.Define): Add CS0683.
9223         (FieldMember.ctor): Add CS0681.
9224
9225 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9226
9227         * ecore.cs (SimpleName.DoResolve): Rename from
9228         SimpleName.DoResolveAllowStatic.
9229         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
9230         Pass 'intermediate' flag to MemberStaticCheck.
9231         (SimpleName.MemberStaticCheck): Skip "static check" only in case
9232         of "intermediate" lookups via MemberAccess.
9233         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
9234         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
9235
9236 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9237
9238         Fix #73394.
9239         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
9240         slipped in because of variable names that are identical to a
9241         builtin type's BCL equivalent ('string String;', 'int Int32;').
9242         (PropertyExpr.EmitInstance): Likewise.
9243
9244 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
9245
9246         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
9247         
9248         * report.cs (warning_ignore_table): Made public.
9249
9250 2005-03-04  Raja R Harinath  <rharinath@novell.com>
9251
9252         Fix #73282.
9253         * class.cs (MethodData.Emit): Pass 'container' to
9254         container.GetObsoleteAttribute instead of 'container.Parent'.
9255
9256 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
9257
9258         * cs-parser.jay: Add 1534 error test.
9259
9260         * iterators.cs (Yield.CheckContext): Add error 1629.
9261         (Iterator.ctor): Save unsafe modifier.
9262         (MoveNextMethod.DoEmit): Restore unsafe context.
9263
9264         * namespace.cs (UsingAlias): Better error message.
9265
9266 2005-03-03  Dan Winship  <danw@novell.com>
9267
9268         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
9269         the warning message [#73219]
9270
9271 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9272
9273         Fix compile with MCS 1.0.0.0.
9274         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
9275         w_restore to not depend on string constant folding.
9276
9277 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9278
9279         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
9280         CS0246 check to users who passed 'silent = false'.
9281         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
9282         check.
9283         (SimpleName.SimpleNameResolve): Update.
9284         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
9285         (MemberAccess.IdenticalNameAndTypeName): Update.
9286         * doc.cs (FindDocumentedTypeNonArray): Update.
9287
9288 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
9289
9290         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
9291         * parameters.cs (ComputeAndDefineParameters): Remove.
9292         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
9293         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
9294         Use GetParameterInfo.
9295
9296 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
9297
9298         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
9299
9300 2005-03-02  Raja R Harinath  <rharinath@novell.com>
9301
9302         Unify DeclSpace.LookupType and DeclSpace.FindType.
9303         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
9304         is in charge of defining nested types on demand.
9305         (DeclSpace.LookupType): Use it when the current_type is a
9306         TypeBuilder.  Use LookupTypeDirect for reflected types.
9307         (DeclSpace.FindType): Remove.
9308         (DeclSpace.LookupInterfaceOrClass): Likewise.
9309         (DeclSpace.DefineTypeAndParents): Likewise.
9310         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
9311         DeclSpace.LookupType.
9312         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
9313         * typemanager.cs (LookupType): Simplify.
9314         (AddUserType): Remove type from negative_hits.
9315         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
9316         * class.cs (TypeContainer.FindMembers): Move handling of nested
9317         types ...
9318         (TypeContainer.FindMembers_NestedTypes): ... here.
9319         (TypeContainer.FindNestedType): Implement override.
9320         (ClassPart.FindNestedType): Delegate to PartialContainer.
9321         (ClassPart.PartFindNestedType): Looks up the nested types of the
9322         part alone.
9323
9324 2005-03-02  Martin Baulig  <martin@ximian.com>
9325
9326         * class.cs (TypeContainer.DoDefineMembers): We also need a default
9327         static constructor in static classes.
9328
9329 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
9330
9331         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
9332         sizeParamIndex is not specified.
9333
9334 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
9335
9336         Fix #73117
9337         * report.cs (WarningMessage.IsEnabled): Missing null check.
9338
9339 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9340
9341         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
9342         in the fields and not in the properties.
9343
9344 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
9345
9346         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
9347         fields as well.
9348
9349 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9350
9351         * attribute.cs: Small refactoring (improved robustness).
9352         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
9353         (ValidateGuid): Removed.
9354         (Resolve): Removed referenced to above mentioned.
9355         (GetAttributeUsage): Made private and changed to work without
9356         class assistance.
9357         (GetIndexerAttributeValue): Don't crash.
9358         (GetConditionalAttributeValue): Ditto.
9359         (GetClsCompliantAttributeValue): Ditto.
9360         (ExtractSecurityPermissionSet): All attributes exceptions are
9361         error 648.
9362         (GetPropertyValue): New helper.
9363         (GetMethodImplOptions): New method.
9364         (DefinePInvokeMethod): Reuse common code. Implemented handling of
9365         some missing properties.
9366         
9367         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
9368         (Method.ApplyAttributeBuilder): Updated.
9369         
9370         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
9371         exception.
9372
9373 2005-02-28  Raja R Harinath  <rharinath@novell.com>
9374
9375         Fix #73052.
9376         * report.cs (Report.SymbolRelatedToPreviousError): Handle
9377         non-simple types (array, pointer, reference).
9378
9379 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9380
9381         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
9382
9383         * class.cs (MethodCore.IsDuplicateImplementation): Special error
9384         for operators.
9385         (Method.CheckBase): Catch wrong destructor here.
9386         (MethodData.Define): Add errors 550, 668.
9387
9388         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
9389
9390         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
9391
9392         * pending.cs (VerifyPendingMethods): Add error 551.
9393
9394         * typemanager.cs (CSharpName): Next error report helper.
9395
9396 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
9397
9398         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
9399         attributes. Removed useless attribute double check.
9400         It saves almost 2MBs for corlib.
9401
9402 2005-02-25  Raja R Harinath  <rharinath@novell.com>
9403
9404         Fix #72924.
9405         * statement.cs (ExpressionStatement.Resolve): Make robust to being
9406         called twice in case of error.
9407
9408 2005-02-23  Chris Toshok  <toshok@ximian.com>
9409
9410         Fix compiler portions of #72827.
9411         * statement.cs (Block.Emit): call Begin/EndScope on the
9412         EmitContext instead of the ILGenerator.
9413
9414         * codegen.cs (EmitContext.BeginScope): new method, call
9415         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
9416         we have one.)
9417         (EmitContext.BeginScope): same, but EndScope and CloseScope
9418
9419         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
9420         offset and call the superclass's OpenScope(int) with it.
9421         (SymbolWriter.CloseScope): get the current il
9422         offset and call superclass's CloseScope(int) with it.
9423
9424 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
9425
9426         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
9427         CS1677 for out and ref as well.
9428
9429         * class.cs (Method.Define): Add error CS1599 detection.
9430         
9431         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
9432         
9433         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
9434         
9435         * delegate.cs (Delegate.Define): Add error CS1599 detection.
9436         
9437         * support.cs.cs (ModifierDesc): New helper method.
9438
9439 2005-02-23  Raja R Harinath  <rharinath@novell.com>
9440             Abin Thomas  <projectmonokochi@rediffmail.com>
9441             Anoob V E  <projectmonokochi@rediffmail.com>
9442             Harilal P R  <projectmonokochi@rediffmail.com>
9443
9444         Fix #57851, #72718.
9445         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
9446         MemberLookup (used for error reporting) actually returns a result.
9447         Fix error report number (122, not 112).
9448
9449 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
9450             Anoob V E  <projectmonokochi@rediffmail.com>
9451             Harilal P R  <projectmonokochi@rediffmail.com>
9452
9453         Fix #71134.
9454         * pending.cs (PendingImplementation.GetAbstractMethods):
9455         Find NonPublic members too.
9456
9457 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
9458
9459         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
9460         Fixed error 217.
9461         
9462         * class.cs (MethodCore.CheckMethodAgainstBase):
9463         Add error 239 report.
9464
9465 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9466
9467         Fix #68955.
9468         * expression.cs (Invocation.IsApplicable): Make public.
9469         (Invocation.IsParamsMethodApplicable): Likewise.
9470         * delegate.cs (Delegate.VerifyApplicability): Don't use
9471         Invocation.VerifyArgumentCompat for parameter applicability
9472         testing.  Use Invocation.IsApplicable and
9473         Invocation.IsParamsMethodApplicable.
9474
9475 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9476
9477         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
9478         
9479         * class.cs (Operator.Define): Add error 217 report.
9480         
9481 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9482
9483         * namespace.cs (UsingEntry.Resolve): Undo change below.
9484
9485 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9486
9487         Fix #72756.
9488         * ecore.cs (Expression.MemberLookupFailed): Add argument to
9489         disable the error message when the extended MemberLookup also
9490         fails.
9491         (Expression.MemberLookupFinal): Update.
9492         (SimpleName.DoSimpleNameResolve): Update.
9493         * expression.cs (MemberAccess.ResolveNamespaceOrType):
9494         Don't use MemberLookupFinal.
9495         (New.DoResolve): Update.
9496         (BaseAccess.CommonResolve): Update.
9497
9498 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9499
9500         Fix #72732.
9501         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
9502         occured previously, don't resolve again.
9503
9504 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9505
9506         Fix #69949
9507         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
9508         argument. Call ResolveAttributeUsage for unresolved.
9509         when types doesn't match ctor arguments.
9510         
9511         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
9512         for nested attribute classes.
9513         (Class.attribute_usage): Removed.
9514         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
9515         for attribute class.
9516         
9517         * ecore.cs (IsAttribute): Removed.
9518         
9519         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
9520         
9521         * rootcontext.cs (RegisterAttribute): Removed, attributes are
9522         now normal types.
9523         (attribute_types): Removed.
9524         (EmitCode): Global attributes are emited as the latest.
9525
9526 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
9527
9528         * class.cs (EmitFieldInitializers): Don't emit field initializer
9529         for default values when optimilization is on.
9530         
9531         * constant.cs (Constant.IsDefaultValue): New property.
9532         
9533         * driver.cs: Add /optimize handling.
9534         
9535         * constant.cs,
9536         * ecore.cs,
9537         * literal.cs: Implement new IsDefaultValue property.
9538         
9539         * rootcontext.cs (Optimize): New field, holds /optimize option.
9540
9541 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9542
9543         Fix crasher in re-opened #72347.
9544         * namespace.cs (Namespace.Lookup): Return null if
9545         DeclSpace.DefineType returns null.
9546
9547         Fix #72678.
9548         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
9549
9550 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9551
9552         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
9553         now returns null if it cannot resolve to an lvalue.
9554         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
9555         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
9556         returned null.  Remove check for SimpleName.
9557         (EventExpr.DoResolveLValue): New.
9558         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
9559         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
9560         error from ...
9561         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
9562         avoid CS0131 error.
9563         (Unary.ResolveOperator): Move CS0211 check ...
9564         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
9565         CS0131 error.
9566         (Unary.DoResolveLValue): Simplify.
9567         (AddressOf.DoResolveLValue): New.
9568         (ArrayAccess.DoResolveLValue): New.
9569
9570 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
9571
9572         * attribute.cs (Attribute.Resolve): Add arguments casting for
9573         when types doesn't match ctor arguments.
9574
9575 2005-02-16  Raja R Harinath  <rharinath@novell.com>
9576
9577         Fix parts of #63202.
9578         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
9579         lookup of operator in base type.  Ensure that all checks happen
9580         when the operator resolves to an "op_..." method.
9581
9582 2005-02-15  Raja R Harinath  <rharinath@novell.com>
9583
9584         Fix #71992.
9585         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
9586         'ignore_cs0104' parameter.  Pass it to ...
9587         (NamespaceEntry.Lookup): ... this.
9588         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
9589         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
9590         (TypeLookupExpression.DoResolveAsTypeStep): Update.
9591         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
9592         Update.  Request that cs0104 errors be ignored.
9593         (ComposedCast.ResolveAsTypeStep): Update.
9594
9595 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9596
9597         Fix #59209.
9598         * expression.cs (Invocation.BetterFunction): Remove support for
9599         comparing virtual functions and their overrides.
9600         (Invocation.IsOverride): New.
9601         (Invocation.OverloadResolve): Don't consider 'override' functions
9602         during candidate selection.  Store them in a lookaside list.
9603         If the selected method is a 'virtual' function, use the list to
9604         find any overrides that are closer to the LHS type.
9605
9606 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
9607
9608         * expression.cs (New.DoResolve): Add complex core type reduction.
9609         (New.Constantify): Converts complex core type syntax like 'new int ()'
9610         to simple constant.
9611         
9612 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9613
9614         * decl.cs (EntryType.EntryType): New constructor to create an
9615         updated copy of a cache entry.
9616         (MemberCache.AddMethods): Use it.
9617         (MemberCache.ClearDeclaredOnly): Remove.
9618         (MemberCache.MemberCache): Update.
9619
9620 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9621
9622         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
9623         variable.  This one is represents the actual low-level declaration
9624         of the method, as opposed to the semantic level `IsStatic'.   
9625
9626         An anonymous method which is hosted into a static method might be
9627         actually an instance method.  IsStatic would reflect the
9628         container, while MethodIsStatic represents the actual code
9629         generated.
9630
9631         * expression.cs (ParameterReference): Use the new MethodIsStatic
9632         instead of IsStatic.
9633
9634         * anonymous.cs (AnonymousMethod.Compatible): Pass the
9635         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
9636         set on the current EmitContext. 
9637
9638         * expression.cs (Cast): Overload DoResolveLValue so we can pass
9639         resolve our casted expression as an LValue.  This triggers the
9640         proper LValue processing that is later required by Assign.
9641
9642         This fixes 72347.
9643
9644         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
9645
9646 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
9647
9648         C# 2.0 Fixed buffer implementation
9649
9650         * anonymous.cs: Update after RegisterHelperClass renaming.
9651
9652         * attribute.cs (AttributeTester.fixed_buffer_cache):
9653         Cache of external fixed buffers.
9654         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
9655         implementation if field is fixed buffer else null.
9656
9657         * class.cs
9658         (TypeContainer.AddField): Accept FieldMember instead of Field.
9659         (FieldBase.IsFieldClsCompliant): Extracted code from
9660         VerifyClsCompliance descendant customization.
9661         (FixedField): New class handles fixed buffer fields.
9662         (FixedFieldExternal): Keeps information about imported fixed
9663         buffer.
9664         (IFixedField): Make access to internal or external fixed buffer
9665         same.
9666
9667         * cs-parser.jay: Add fixed buffer parsing.
9668
9669         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
9670         buffer.
9671
9672         * expression.cs (Indirection): Extended implementation to accept
9673         fixed buffer field.
9674         (PointerArithmetic.Emit): Get element from fixed buffer as well.
9675         (ElementAccess.MakePointerAccess): Get type as parameter.
9676         (DoResolve): Add fixed buffer field expression conversion.
9677         (DoResolveLValue): Ditto.
9678         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
9679         (ArrayPtr): Derives from FixedBufferPtr.
9680         (ArrayPtr.Emit): Add extra emit for array elements.
9681
9682         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
9683
9684         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
9685         for compiler generated types.
9686         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
9687
9688         * statement.cs (Fixed): Refactored to be easier add fixed buffer
9689         and consume less memory.
9690         (Fixed.Resolve): Add fixed buffer case.
9691
9692         * typemanager.cs (compiler_generated_attr_ctor,
9693         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
9694         (HasElementType): Add our own implementation to work on every
9695         runtime.
9696
9697 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9698
9699         * anonymous.cs (CaptureContext): Track whether `this' has been
9700         referenced.   
9701
9702         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
9703         only captured `this' if it was implicitly done (instance
9704         methods/variables were used). 
9705
9706         * codegen.cs (EmitContext.CaptureThis): New method to flag that
9707         `this' must be captured.
9708
9709 2005-01-30  Miguel de Icaza  <miguel@novell.com>
9710  
9711         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
9712         is null it means that there has been no need to capture anything,
9713         so we just create a sibling.
9714
9715         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
9716
9717         Just a partial fix.  The other half is fairly elusive.
9718         
9719 2005-02-10  Raja R Harinath  <rharinath@novell.com>
9720
9721         Fix #52586, cs0121-4.cs.
9722         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
9723         and return a hashtable.
9724         (MemberCache.ClearDeclaredOnly): New.
9725         (MemberCache.MemberCache): Update to change.  Make a deep copy of
9726         the method_hash of a base type too.
9727         (MemberCache.AddMethods): Adapt to having a deep copy of the base
9728         type methods.  Overwrite entries with the same MethodHandle so
9729         that the ReflectedType is correct.  The process leaves in base
9730         virtual functions and their overrides as distinct entries.
9731         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
9732         matters since it was boxed in a ArrayList before.
9733         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
9734         modifier.
9735         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
9736         case of a virtual function and its override (choose the overload
9737         as better).
9738         (Invocation.OverloadResolve): Avoid 'override' members during
9739         'applicable_type' calculation.
9740
9741 2005-02-09  Raja R Harinath  <rharinath@novell.com>
9742
9743         Combine two near-redundant caches.
9744         * typemanager.cs (method_params): Rename from method_internal_params.
9745         (TypeManager.GetParameterData): New.  Replace
9746         Invocation.GetParameterData.
9747         (TypeManager.LookupParametersByBuilder): Remove.
9748         * expression.cs (Invocation.method_parameter_cache): Remove.
9749         (Invocation.GetParameterData): Remove.
9750         Update to changes.
9751         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
9752         Update to changes.
9753
9754 2005-02-08  Raja R Harinath  <rharinath@novell.com>
9755
9756         Fix #72015.
9757         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
9758         TypeManager.multicast_delegate_type is null, resolve it by looking
9759         up "System.MulticastDelegate".
9760         * rootcontext.cs (RootContext.ResolveCore): Simplify.
9761
9762 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
9763             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
9764             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
9765
9766         Fix cs0164.cs.
9767         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
9768         (LabeledStatement.AddReference): New.  Set 'referenced'.
9769         (Goto.Resolve): Use it.
9770
9771 2005-02-05  John Luke  <john.luke@gmail.com>
9772
9773         * driver.cs: remove duplicate -doc line in Usage ()
9774
9775 2005-02-04  Raja R Harinath  <rharinath@novell.com>
9776
9777         * location.cs (Location.AddFile): Fix CS2002 error report.
9778
9779 2005-02-02  Martin Baulig  <martin@ximian.com>
9780
9781         * delegate.cs (Delegate.DefineType): Report an internal error if
9782         TypeManager.multicast_delegate_type is null.  See bug #72015 for
9783         details.        
9784
9785 2005-02-02  Raja R Harinath  <rharinath@novell.com>
9786
9787         Fix a crasher in a variant of #31984.
9788         * const.cs (Constant.CheckBase): New override that defers the
9789         new-or-override check in case the base type hasn't been populated
9790         yet.
9791         (Constant.Define): Ensure the new-or-override check is performed.
9792
9793 2005-02-01  Duncan Mak  <duncan@ximian.com>
9794
9795         * const.cs (LookupConstantValue): Check that `ce' is not null
9796         before calling GetValue ().
9797
9798 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9799
9800         Fix test-334.cs (#69519).
9801         * cs-parser.jay (using_alias_directive): Pass in an expression to
9802         NamespaceEntry.UsingAlias.
9803         (using_namespace_directive): Pass in an expression to
9804         NamespaceEntry.Using.
9805         (namespace_name): Don't flatten to a string.
9806         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
9807         (NamespaceEntry.AliasEntry.Resolve): Lookup using
9808         ResolveAsTypeStep.
9809         (NamespaceEntry.UsingEntry): Likewise.
9810         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
9811         changes.
9812         (NamespaceEntry.LookupForUsing): Remove.
9813         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
9814         names.
9815         (NamespaceEntry.Lookup): Remove support for dotted names.
9816
9817 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9818
9819         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
9820         split into two.
9821         (NamespaceEntry.ImplicitParent): Compute on demand.
9822         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
9823         parallels the current.
9824         (NamespaceEntry.LookupForUsing): Use it.
9825         (NamespaceEntry.Lookup): If the current namespace-entry is
9826         implicit, don't search aliases and using tables.
9827
9828 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9829
9830         Fix #31984.
9831         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
9832         BaseCache here.
9833         (TypeContainer.BaseCache): Compute on demand.
9834         (TypeContainer.FindMembers): Define constants and types if they're
9835         not already created.
9836         (FieldMember.Define): Move resetting of ec.InUnsafe before error
9837         check.
9838         * const.cs (Constant.Define): Make idempotent.
9839
9840 2005-01-29  Miguel de Icaza  <miguel@novell.com>
9841
9842         * pending.cs: Produce better code (no nops produced by using Ldarg
9843         + value).
9844         
9845         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
9846         i - 1' it should be arg + 1.
9847
9848         Fixes bug #71819.
9849
9850 2005-01-28  Raja R Harinath  <rharinath@novell.com>
9851
9852         * attribute.cs (Attribute.CheckAttributeType): Make private
9853         non-virtual.
9854         (Attribute.ResolveType): Make virtual.
9855         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
9856         handling of RootContext.Tree.Types.
9857
9858 2005-01-27  Raja R Harinath  <rharinath@novell.com>
9859
9860         Update attribute-handling to use the SimpleName/MemberAccess
9861         mechanisms.
9862         * cs-parser.jay (attribute): Pass in an expression to the
9863         constructors of Attribute and GlobalAttribute.
9864         * attribute.cs (Attribute): Take an expression for the name.
9865         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
9866         passed in attribute name expression.
9867         (Attribute.CheckAttributeType): Use it.
9868         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
9869         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
9870         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
9871         argument to prevent error messages if the lookup fails.
9872
9873 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
9874
9875         * expression.cs (Indirection): Implemented IVariable interface
9876         to support indirection in AddressOf operator.
9877         (PointerArithmetic.Emit): Add optimalization for case where
9878         result can be precomputed.
9879
9880 2005-01-26  Martin Baulig  <martin@ximian.com>
9881
9882         * class.cs (TypeContainer.AttributeTargets): Return the correct
9883         AttributeTargets depending on our `Kind' instead of throwing an
9884         exception; fixes #71632.
9885
9886 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
9887
9888         Fix #71257
9889         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
9890         constant members.
9891
9892 2005-01-25  Raja R Harinath  <rharinath@novell.com>
9893
9894         Fix #71602.
9895         * expression.cs (MemberAccess.DoResolve): Don't complain with
9896         cs0572 when the LHS of a member access has identical name and type
9897         name.
9898
9899 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
9900
9901         Fix #71651, #71675
9902         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
9903         CreatePermission.
9904         Create custom PermissionSet only for PermissionSetAttribute.
9905
9906 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
9907
9908         Fix #71649
9909         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
9910         delegates in static class.
9911
9912 2005-01-24  Martin Baulig  <martin@ximian.com>
9913
9914         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9915         merging an implicit block, just use its reachability.
9916
9917         * statement.cs (Block.Resolve): Make the unreachable code check
9918         work wrt. implicit blocks; see test-337 from #63842.
9919
9920 2005-01-21  Alp Toker  <alp@atoker.com>
9921  
9922         * cs-parser.jay: destructor_declaration's container is PartialContainer
9923         not Class when partial types are used, so use Kind prop instead of
9924         'is'.
9925         
9926 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
9927
9928         * cs-parser.jay: Improve error reporting when an interface
9929         declares new types.
9930
9931 2005-01-20  Dick Porter  <dick@ximian.com>
9932
9933         * support.cs: SeekableStreamReader fix from Sandor Dobos
9934         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
9935         chars are read.  Fixes bug 70369.
9936
9937 2005-01-20  Raja R Harinath  <rharinath@novell.com>
9938
9939         * cs-parser.jay (catch_clause): Simplify current_block handling
9940         somewhat.
9941
9942 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
9943
9944         * convert.cs (ImplicitStandardConversionExists): Synchronize the
9945         code with ImplicitStandardConversion to handle the implicit
9946         conversion of method groups into valid delegate invocations. 
9947
9948         The problem is that in parameter handling we were using this code
9949         path.  Fixes bug #64698
9950
9951 2005-01-19  Raja R Harinath  <rharinath@novell.com>
9952
9953         * cs-parser.jay: Fix several infelicities.
9954         - Avoid assigning to the parser value stack.  Code like 
9955           '$3 = null' is unclean.  Synthesize a value for the code block
9956           instead. 
9957         - Avoid using oob_stack for storing location information.  Use ...
9958         (_mark_): ... this.  New (empty) rule.  Saves the current location
9959         in $$.
9960         (foreach_statement): Avoid using oob_stack for current_block
9961         handling.  Use technique used in for_statement and
9962         using_statement.  Synthesize a value for the code block to store
9963         additional intermediate information.
9964
9965 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
9966
9967         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
9968         of a different type is only allowed to private fields of a
9969         containing type, not on fields of a base class.
9970
9971         See test-174.cs and error cs0122-9.cs
9972
9973 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9974
9975         Fix test-335.cs (bug #58126).
9976         * cs-parser.jay (argument): Split out non-expression parts of the
9977         rule into 'non_simple_argument'.
9978         (invocation_expression): Support parenthesized invocations with
9979         multiple arguments, and with single non-simple arguments.
9980
9981 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9982
9983         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
9984         places.
9985
9986 2005-01-12  Raja R Harinath  <rharinath@novell.com>
9987
9988         Fix cs0038-1.cs, cs1640-6.cs.
9989         * ecore.cs (Expression.Resolve): Remove special-case for
9990         SimpleName in error-handling.
9991         (Expression.almostMatchedMembers): Relax access permission to
9992         protected.
9993         (Expression.MemberLookupFailed): Handle duplicates in
9994         almostMatchedMembers list.
9995         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
9996         * expression.cs (New.DoResolve): Report CS1540 for more cases.
9997         * typemanager.cs (GetFullNameSignature): Use the MethodBase
9998         overload if the passed in MemberInfo is a MethodBase.
9999
10000 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
10001
10002         Fix #70749
10003         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
10004         for non-CAS & merge permission sets properly.
10005
10006 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10007
10008         Improve standard-compliance of simple name and member access 
10009         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
10010         * ecore.cs (FullNamedExpression): New abstract base class 
10011         for Namespaces and TypeExpressions.
10012         (ResolveFlags.SimpleName): Remove.
10013         (SimpleName): Remove support for dotted names.
10014         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
10015         DeclSpace.FindType and DeclSpace.LookupType.
10016         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
10017         (Expression.ExprClassName): Make member function.
10018         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
10019         a namespace.  Remove creation of dotted "SimpleName"s.
10020         (MemberAccess.DoResolve): Likewise.
10021         * decl.cs (DeclSpace.Cache): Make private.
10022         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
10023         (DeclSpace.FindType): Update.
10024         (DeclSpace.LookupType): Move here from RootContext.  Return a 
10025         FullNamedExpression.
10026         * namespace.cs (Namespace): Derive from FullNamedExpression
10027         so that it can be part of expression resolution.
10028         (Namespace.Lookup): Return an FullNamedExpression.
10029         (NamespaceEntry.LookupAlias): Lookup aliases only in current
10030         namespace.
10031         * rootcontext.cs (NamespaceLookup): Remove.
10032         (LookupType): Move to DeclSpace.
10033         * attribute.cs (CheckAttributeType): Update.
10034         * doc.cs (FindDocumentedType): Remove allowAlias argument.
10035         (FindDocumentedTypeNonArray): Likewise.
10036
10037 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10038
10039         Fix cs0509.cs, cs1632.cs.
10040         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
10041         is the same as IsInterface.
10042         (TypeContainer.GetClassBases): Likewise.
10043         * statement.cs (LabeledStatement.ig): New field.
10044         (LabeledStatement.LabelTarget): Save ILGenerator which created the
10045         label.
10046         (LabeledStatement.DoEmit): Check that the label was created with
10047         the same ILGenerator.
10048
10049 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10050
10051         Fix #71058
10052         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
10053         accessors to its properties.
10054
10055         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
10056         from accessors to property.
10057         
10058 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10059
10060         Fix #70722
10061         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
10062         only for overrides.
10063         
10064 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
10065
10066         * attribute.cs: Check for null and empty strings.  
10067
10068         I have lost another battle to Paolo.
10069
10070 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
10071
10072         Fix #70942
10073         * class.cs (PropertyMethod): Set Parent field in ctors.
10074         (SetMethod.InternalParameters): Add unsafe switch hack.
10075         Override MarkForDuplicationCheck where it is appropriate.
10076
10077         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
10078         It says whether container allows members with the same name.
10079         Base default is no.
10080         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
10081         Removed is_method parameter.
10082
10083 2005-01-06  Duncan Mak  <duncan@ximian.com>
10084
10085         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
10086         because the previous change led to incorrect reporting of CS1032
10087         ("Cannot define/undefine preprocessor symbols after first token in
10088         file"). Instead of using `tokens_seen' as the only flag that
10089         triggers CS1040, introduce `comments_seen'. This new flag is used
10090         to signify having seen comments on the current line, so it is
10091         unset after a newline.
10092
10093 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10094
10095         * doc.cs : When searching for a type, find nested type too.
10096           This fixes bug #71040.
10097
10098 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10099
10100         * doc.cs :
10101           - Warn missing member comment on those classes which also does not
10102             have doc comments. Fixed bug #71041.
10103           - Don't warn missing doc comment on default constructor.
10104             Fixed bug #71042.
10105
10106 2005-01-06  Duncan Mak  <duncan@ximian.com>
10107
10108         * cs-tokenizer.cs (xtoken): After handling traditional C-style
10109         comments, set `tokens_seen' to true. This allows us to detect
10110         misplaced preprocessor directives (i.e. not at the beginning of
10111         the a line, nor after whitespaces). In that case, report error
10112         CS1040. This fixes bug #56460.
10113
10114         * cs-parser.jay (interface_member_declaration): Add checks for
10115         IsExplicitImpl, and report CS0541 error if an interface member is
10116         defined as an explicit interface declaration.
10117
10118 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
10119
10120         Fix #70817
10121         * class.cs (PropertyMethod): Set Parent field in ctors.
10122         (SetMethod.InternalParameters): Add unsafe switch hack.
10123         
10124         * decl.cs (MemberCore.Parent): Cannot be readonly.
10125
10126 2005-01-06  Raja R Harinath  <rharinath@novell.com>
10127
10128         * decl.cs (DeclSpace.ResolveType): Remove.
10129         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
10130         Merge in code from ...
10131         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
10132         * class.cs, enum.cs: Update to changes.
10133
10134 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
10135
10136         * anonymous.cs: Ensure that we init the scope of our parent if it
10137         has not been initialized yet.
10138
10139 2004-12-30  Duncan Mak  <duncan@ximian.com>
10140
10141         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
10142         if field.FieldBuilder is null. Fixes #70758.
10143
10144         * convert.cs: Fixed some typos and updated some of the comments.
10145         (ImplicitStandardConversionExists):
10146         (TryImplicitIntConversion): If `target_type' is an interface and
10147         the type of `ic' implements this interface, return true or a new
10148         BoxedCast instead of null. This fixes #70468.
10149
10150 2004-12-29  Duncan Mak  <duncan@ximian.com>
10151
10152         * expression.cs (Argument.Emit): Check that Expr is
10153         IMemoryLocation before casting to it, and report CS1510 otherwise.
10154
10155         This fixes #70402.
10156
10157 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
10158
10159         * statement.cs (Block.ThisVariable): remove the recursion here, to
10160         make the --profile more sane.
10161
10162 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
10163
10164         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
10165         assembly, by JB Evain.
10166
10167 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10168
10169         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
10170           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
10171         "parent" refers to enclosing type/class.  "base" refers to superclass.
10172
10173 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10174
10175         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10176         Ensure that we only have GlobalAttributes.
10177         * attribute.cs (Attribute.Emit): Make non-virtual.
10178         (GlobalAttribute.Emit): Remove.
10179         (Attribute.Resolve): Make virtual.
10180         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
10181         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
10182         the argument. Don't create one.
10183         (Attribute.GetObsoleteAttribute): Likewise.
10184         (Attribute.GetClsCompliantAttributeValue): Likewise.
10185         * class.cs, decl.cs: Update to changes.
10186
10187 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
10188
10189         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
10190         
10191         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
10192         
10193         * statement.cs (Foreach.Resolve): Add error 186 report.
10194
10195 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
10196
10197         * expression.cs (Conditional.DoResolve): Add warning 429.
10198         
10199         * statement.cs (If.Resolve): Add warning 665.
10200
10201 2004-12-16  Raja R Harinath  <rharinath@novell.com>
10202
10203         New invariant: RootContext.Tree.Types.NamespaceEntry == null
10204         except when in the parser, and in GlobalAttribute.
10205         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
10206         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
10207         RootContext.Tree.Types.NamespaceEntry once work is done.
10208         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
10209         and resets RootContext.Tree.Types.NamespaceEntry.
10210
10211 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
10212
10213         * cs-parser.jay: Don't create a block for every variable.
10214
10215 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
10216
10217         * location.cs: Provide extra information.
10218
10219         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
10220         variables from the captured environment, it is the ldarg_0.
10221
10222 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10223
10224         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
10225         find a conclusion.
10226         
10227         * class.cs: Changed warning level for 169 to avoid developer
10228         displeasure from warning flooding. It will be changed back when they
10229         fix most of current BCL warnings.
10230         
10231         * RootContext.cs: Pushed default WarningLevel to 3.
10232         
10233         * statement.cs: Removed unused variable.
10234
10235 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10236
10237         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
10238         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
10239         Add error 502 report.
10240         (StaticClass.DefineType): Add error 441 report.
10241         (Class.AllowedModifiersProp): New virtual property as temporary
10242         extension to AllowedModifiers.
10243         (Class.DefineType): Add error 418 report. Moved ModFlags check here
10244         to share implementation with StaticClass and don't call virtual
10245         methods from ctor.
10246         
10247         * driver.cs (MainDriver): Add error 1558 test.
10248
10249         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
10250         report. Moved error 36 test here.
10251
10252         * statement.cs (Throw.Resolve): Add error 724 report.
10253
10254         * typemanager.cs: Add out_attribute_type core type.
10255         
10256 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
10257
10258         * class.cs (TypeContainer.VerifyClsCompliance): Add error
10259         3018 report.
10260         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
10261
10262         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
10263         3017 report.
10264         
10265         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
10266
10267         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
10268         Add error 3023 report.
10269         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
10270
10271         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
10272         implementation.
10273
10274 2004-12-12  John Luke  <john.luke@gmail.com>
10275
10276         * driver.cs (AddArgs): take -- into account when
10277         adding arguments, fixes bug 65710 
10278
10279 2004-12-12  Martin Baulig  <martin@ximian.com>
10280
10281         * expression.cs (Unary.TryReduceNegative): Added support for
10282         SByteConstant and ByteConstant.
10283         (Unary.Reduce): Check error values from TryReduceNegative().
10284
10285 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
10286
10287         * attributes.cs (Attribute.Resolve): Avoid multiple error report
10288         and report exception as error 182.
10289
10290 2004-12-10  Raja R Harinath  <rharinath@novell.com>
10291
10292         * driver.cs (Main): Fix message when there are warnings.
10293
10294 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
10295
10296         * delegate.cs: Fixed my fix from yesterday, sorry about that.
10297
10298 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
10299
10300         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
10301         Reduced number of warnings.
10302         
10303         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
10304
10305 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
10306
10307         * driver.cs: Removed message.
10308
10309         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
10310
10311 2004-12-08    <vargaz@freemail.hu>
10312
10313         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
10314
10315 2004-12-08  Martin Baulig  <martin@ximian.com>
10316
10317         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
10318         instead of a CS3002 for properties and indexer.
10319
10320 2004-12-08  Martin Baulig  <martin@ximian.com>
10321
10322         * decl.cs (MemberName.ToString): Make this work again.
10323
10324 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
10325
10326         * attribute.cs (Resolve): Add error 591 detection.
10327
10328         * class.cs (FieldMember.Define): Add error 1547 detection.
10329         (Indexer.Define): Add error 620 detection.
10330         (Operator.Define): Add error 590 detection.
10331
10332         * ecore.cs: Missing argument for error 79.
10333
10334         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
10335         detection.
10336
10337 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
10338
10339         Fix #70106
10340         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
10341         only.
10342
10343 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
10344
10345         * cs-parser.jay : handle doc comments on implicit/explicit operators.
10346           Some operator comments were suppressed.
10347         * doc.cs : Implicit/explicit operator name in doc comments are like
10348           "op_Explicit(type)~returnType", so added suffix handling.
10349
10350 2004-12-07  Martin Baulig  <martin@ximian.com>
10351
10352         * decl.cs
10353         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
10354         (MemberCore.GetClsCompliantAttributeValue): Likewise.
10355         (DeclSpace.ec): New protected field; store the EmitContext here.
10356         (DeclSpace.EmitContext): New public property; moved here from
10357         `TypeContainer'.
10358         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
10359         EmitContext.
10360
10361         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
10362         (Enum.Emit): Don't create a new EmitContext.
10363
10364         * delegate.cs (Delegate.DefineType): Always create the
10365         EmitContext.
10366
10367         * iterators.cs (Iterators.DefineIterator): Create a new
10368         EmitContext and store it in `ec'.
10369
10370 2004-08-24  Martin Baulig  <martin@ximian.com>
10371
10372         * typemanager.cs
10373         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10374         this for accessibility checks.
10375         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10376         IsNestedFamilyAccessible.
10377         (TypeManager.IsSubclassOf): New method, do what the name actually
10378         says.   
10379
10380 2004-12-06  Raja R Harinath  <rharinath@novell.com>
10381
10382         Fix crash on cs0657-17.cs.
10383         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10384         Use RootContext.Tree.Types, not 'new RootTypes ()'.
10385         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
10386         the case where the NamespaceEntry gets overwritten.
10387
10388 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
10389
10390         Fixed #69195, #56821
10391         * ecore.cs (ResolveBoolean): Tiny refactoring.
10392
10393         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
10394         of right expression resolving when left is false constant and
10395         operator is LogicalAnd OR true constant and operator is LogicalOr.
10396
10397         * statement.cs (ResolveUnreachable): Always reports warning.
10398
10399 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
10400
10401         * class.cs: Distinguish between 1721 and 1722 (just a little help
10402         for the programmer).
10403
10404 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
10405
10406         * delegate.cs: Only allow this on new versions of the language. 
10407
10408 2004-12-02  Duncan Mak  <duncan@ximian.com>
10409
10410         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
10411         Expression class.
10412         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
10413         here as a static method. Take an additional bool out parameter
10414         `must_do_cs1540_check' for signaling to InstanceResolve.
10415         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
10416         member field from PropertyExpr class and made it an argument of
10417         the method instead.
10418         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
10419         check for MarshalByRefObject, and report CS0122 instead of CS1540.
10420         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
10421         and `remove_accessor' as well as InstanceResolve: report CS0122
10422         where applicable.
10423
10424         Fixes #70129.
10425
10426 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10427
10428         Fix test-327.cs, test-328.cs, and put in early infrastructure
10429         for eventually fixing #52697.
10430         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
10431         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
10432         from other methods.
10433         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
10434         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
10435         (VerifyUsing, error246): Update.
10436         * rootcontext.cs (RootContext.NamespaceLookup): Just use
10437         'NamespaceEntry.LookupNamespaceOrType'.
10438
10439 2004-12-03  Martin Baulig  <martin@ximian.com>
10440
10441         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10442         method as our child, call AnonymousMethod.Compatible() on it.
10443
10444 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10445
10446         Disable XML documentation support in 'basic' profile.
10447         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
10448         Redirect XmlElement to System.Object.
10449         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
10450         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
10451         * mcs.exe.sources: Add doc-bootstrap.cs.
10452         * doc-bootstrap.cs: New file.  Contains empty stub implementation
10453         of doc.cs.
10454
10455 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
10456
10457         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
10458           comments are allowed.
10459
10460 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10461
10462         * delegate.cs: Add checks for subtypes in paramaters and return values
10463         in VerifyMethod () to add support for Covariance/Contravariance
10464         in delegates.
10465         
10466 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
10467
10468         * report.cs: Remove extra closing parenthesis.
10469
10470         * convert.cs (Error_CannotImplicitConversion): If the name of the
10471         types are the same, provide some extra information.
10472
10473         * class.cs (FieldBase): Use an unused bit field from the field to
10474         encode the `has_offset' property from the FieldMember.  This saves
10475         a couple of Ks on bootstrap compilation.
10476
10477         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10478         method as our child, return the AnonymousMethod resolved
10479         expression.
10480
10481         * expression.cs (New.DoResolve): Allow return values from
10482         NewDelegate to also include AnonymousMethods.
10483
10484         Fixes #70150.
10485
10486 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
10487
10488         Fix bug #70102
10489         * attribute.cs (Resolve): Improved implementation of params
10490         attribute arguments.
10491
10492         * support.cs (ParameterData): Add HasParams to be faster.
10493
10494 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
10495
10496         all things are for /doc support:
10497
10498         * doc.cs: new file that supports XML documentation generation.
10499         * mcs.exe.sources: added doc.cs.
10500         * driver.cs:
10501           Handle /doc command line option.
10502           Report error 2006 instead of 5 for missing file name for /doc.
10503           Generate XML documentation when required, after type resolution.
10504         * cs-tokenizer.cs:
10505           Added support for picking up documentation (/// and /** ... */),
10506           including a new XmlCommentState enumeration.
10507         * cs-parser.jay:
10508           Added lines to fill Documentation element for field, constant,
10509           property, indexer, method, constructor, destructor, operator, event
10510           and class, struct, interface, delegate, enum.
10511           Added lines to warn incorrect comment.
10512         * rootcontext.cs :
10513           Added Documentation field (passed only when /doc was specified).
10514         * decl.cs:
10515           Added DocComment, DocCommentHeader, GenerateDocComment() and
10516           OnGenerateDocComment() and some supporting private members for
10517           /doc feature to MemberCore.
10518         * class.cs:
10519           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
10520         * delegate.cs:
10521           Added overriden DocCommentHeader.
10522         * enum.cs:
10523           Added overriden DocCommentHeader and GenerateDocComment().
10524
10525 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
10526
10527         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
10528         unwrapping the enumeration values, chain to
10529         DoConstantNumericPromotions again, so we can promote things to the
10530         fundamental types (takes care of enums that are bytes, sbytes).
10531
10532         Fixes bug #62054.
10533
10534 2004-12-01  Raja R Harinath  <rharinath@novell.com>
10535
10536         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
10537         Fix long-standing bug in type-lookup.  Use FindType instead of
10538         LookupType when ec.ResolvingTypeTree.
10539         (Attribute.ResolveType, Attribute.Resolve)
10540         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
10541         Update to changes.
10542         (Attributes.Search): Remove internal version.  Update.
10543         (Attributes.SearchMulti): Update.
10544         (Attributes.GetClsCompliantAttribute): Remove.
10545         (Attributes.GetIndexerNameAttribute): Remove.
10546         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
10547         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
10548         * class.cs (Indexer.Define): Likewise.
10549
10550 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
10551
10552         Fix bug #68790
10553         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
10554         MarshallByReference members access.
10555
10556         * expression.cs: Use CheckMarshallByRefAccess;
10557         Better error CS0197 message.
10558
10559         * report.cs: Print whole related error message.
10560
10561 2004-11-30  Raja R Harinath  <rharinath@novell.com>
10562
10563         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
10564         the current directory to help debugging.
10565
10566 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10567
10568         * class (GetClassBases): Better error 60 report.
10569         (EventProperty): Disabled warning 67 detection.
10570
10571 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10572
10573         Fix bug #60324
10574         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
10575
10576         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
10577         precise values.
10578
10579 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10580
10581         Fix bug #49488
10582         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
10583
10584         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
10585
10586 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
10587
10588         * attribute.cs (Attribute.Resolve): Refine error reporting and
10589         report a cs0117 if the identifier does not exist, to distinguish
10590         from 0617 which is a miss-use of the actual identifier.
10591
10592         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
10593         between cs0070 and cs0079.
10594
10595         * class.cs (MemberBase.DoDefine): When reporting a wrong
10596         accessibility level, we use MethodCore to compare instead of
10597         Method (this was a regression in some refactoring effort).
10598
10599         So now we correctly report cs0056 again.
10600
10601         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
10602         testing the target_type (which was known to be object_type) and
10603         not the source type (which is anonymous_method).
10604
10605         Fixed reporting of error cs1660.
10606
10607         * expression.cs (UserCast.Source): Expose the underlying cast.
10608
10609         * statement.cs (Switch.SwitchGoverningType): Sort the list of
10610         allowed types to find a match to int32 first (most common).
10611
10612         In addition, it ignores any ImplicitUserConversions that did an
10613         internal implicit conversion (as the switch statement allows only
10614         one integral conversion to exist).
10615
10616         * class.cs (PartialContainer.Create): rename `name' to
10617         `member_name' for clarity.  Then replace the string calls with a
10618         call to MemberName.GetPartialName, as now using
10619         MemberName.ToString is an error (this is due to the side effects
10620         it had, that were fixed in the past).
10621
10622         This will restore the error reporting on a number of partial class
10623         errors that were missusing this (and getting an exception as a
10624         results, which is now just a plain textual warning, because
10625         yyparse debug output would crash otherwise).
10626
10627 2004-11-26  Raja R Harinath  <rharinath@novell.com>
10628
10629         * Makefile (PROGRAM_INSTALL_DIR): Remove.
10630
10631 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10632
10633         * rootcontext.cs (LookupType): Make sure to cache lookups that
10634         don't give us a negative result. This saves about 5% of corlib
10635         compilation time.
10636
10637 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10638
10639         * report.cs (AbstractMessage.Print): messages are sent to stderr
10640
10641         * class.cs (TypeContainer.GetClassBases): It is an error to have a
10642         non-interface in the list of interfaces (at this point, either
10643         parent was properly set, or a base class is being listed in the
10644         interfaces section).
10645
10646         This flags error 1722, and resolves the crash from bug 69259.
10647
10648 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10649
10650         * statement.cs (Using.EmitExpressionFinally): make this work right
10651         for valuetypes. Fixes 69926.
10652
10653 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10654
10655         * const.cs (Const.ChangeType): Cope with the "0 literal can be
10656         converted to an enum" here, before we try to change the underlying
10657         type.  This code exists, but it is a different code path than the
10658         one used while encoding constants.
10659
10660         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
10661         old bug: when converting from the null literal to a pointer,
10662         return an EmptyCast, not the NullLiteral.
10663
10664         This fixes #69921, the recent null_type changes probably made this
10665         bug more prominent.
10666
10667         (ImplicitReferenceConversionExists): In addition, resynchronized
10668         the code here, so it matches the same code in
10669         ImplicitReferenceConversionExists for the `from any class-type S
10670         to any interface-type T'.
10671         
10672
10673 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
10674
10675         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
10676
10677 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
10678
10679         * cs-parser.jay: Use verbosity accordingly. 
10680
10681 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10682
10683         * expression.cs (Unary.ResolveOperator): Do not report warning;
10684         AddressOf reads from variable.
10685         
10686         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
10687
10688 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10689
10690         Fix bug #69462
10691
10692         * attribute.cs (Attributable): Removed CheckTargets.
10693         (Attributes.Emit): Explicit attribute targets are tested here.
10694
10695         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
10696         not enabled for interfaces.
10697
10698         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
10699         (GetAssemblyName): Ouch next bug there.
10700
10701 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10702
10703         * expression.cs: Error 275 added.
10704         
10705 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
10706
10707         Fix bug #69177 (Implemented decimal constant support)
10708
10709         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
10710         (BinaryFold): Add DecimalConstant.
10711
10712         * const.cs (Define): Decimal constant 
10713         (is not constant.
10714         (ChangeType): Add decimal type handling.
10715         (LookupConstantValue): Don't set value for decimal type but
10716         emit DecimalConstantAttribute. Needed for constant optimization.
10717
10718         * constant.cs (ToDecimal): New method.
10719         (ConvertToDecimal): New method.
10720         (IntConstant): Implemented ConvertToDecimal.
10721         (DecimalConstant.Emit): Emit optimized version for decimals in
10722         int range.
10723
10724         * expression.cs (ResolveOperator): Changed order of constant
10725         reduction to work correctly with native types which have
10726         overloaded operators.
10727         (ResolveMemberAccess): Extract constant value from attribute
10728         for decimal type.
10729
10730         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
10731
10732         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
10733         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
10734         (ChangeType): Decimal is special.
10735         (TypeToCoreType): Add decimal type.
10736
10737 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10738
10739         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
10740         decimal types.
10741
10742 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10743
10744         * class.cs (EventField.ApplyAttributeBuilder): Fix error
10745         test cs1667-5.cs.
10746
10747 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10748
10749         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
10750
10751         * pending.cs (PendingImplementation): Grab only interfaces.
10752
10753 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10754
10755         * statement.cs (ForeachHelperMethods): Add location member and
10756         error 202 detection.
10757
10758 2004-11-19  Raja R Harinath  <rharinath@novell.com>
10759
10760         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
10761         automatically handled by executable.make.
10762         (PROGRAM): Make profile-specific.
10763
10764 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
10765
10766         * expression.cs (DoResolveBase): Fixed wrong warning for out
10767         variables.
10768
10769 2004-11-18  Martin Baulig  <martin@ximian.com>
10770
10771         Merged latest changes into gmcs.  Please keep this comment in
10772         here, it makes it easier for me to see what changed in MCS since
10773         the last time I merged.
10774
10775 2004-11-17  Raja R Harinath  <rharinath@novell.com>
10776
10777         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
10778         (TypeHandle.GetMemberCache): New.
10779         (TypeHandle.TypeHandle): Update.
10780         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
10781         (TypeManager.LookupParentInterfacesCache):
10782         Rename from LookupInterfaceCache.  Optimize slightly.
10783         (TypeManager.MemberLookup_FindMembers): Update.
10784         * decl.cs (MemberCache.MemberCache): Set Container to null in the
10785         multi-type variant.
10786         (AddCacheContents): Rename from AddHashtable.
10787         * class.cs (TypeContainer.parent_container): Remove.
10788         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
10789         (TypeContainer.DoDefineMembers): Don't initialize it.
10790         Update to name changes.
10791         
10792 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
10793
10794         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
10795         that factors the code to check access modifiers on override.  
10796
10797         (PropertyBase): Use the code here.
10798
10799         Patch from Lluis S'anchez, fixes bug #69361.
10800
10801 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
10802
10803         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
10804         routine that is used to report the use of a captured variable
10805         whose address has been taken.
10806
10807         There are two checks: one when variables are being captured and
10808         the other check is when the address of a variable is taken. 
10809         
10810         (because an anonymous methods might be resolved before *or* after
10811         the address has been taken) and 
10812
10813         * expression.cs (Conditional.DoResolve): Remove the special
10814         casing that Martin added to trueExpr and falseExpr being both
10815         NullLiteral.  We get the right behavior now just by introducing
10816         the null_type into the compiler. 
10817
10818         * convert.cs (ExplicitConversion): Change the code to use
10819         null_type instead of testing `expr is NullLiteral'.
10820         (ImplicitConversionStandard): use null_type too.
10821         (ImplicitReferenceConversionExists): use null_type too.
10822         (ImplicitReferenceConversion): use null_type too.
10823
10824         * literal.cs: The type of `NullLiteral' is now null_type instead
10825         of object_type. 
10826         (Resolve): Set the type here.
10827
10828         * typemanager.cs: Introduce null_type.
10829
10830 2004-11-17  Martin Baulig  <martin@ximian.com>
10831
10832         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
10833         direction, like FindMembers() does.  Fixes #69546, testcase is in
10834         test-315.cs.    
10835
10836 2004-11-16  Martin Baulig  <martin@ximian.com>
10837
10838         This is based on a patch from Marek Safar, see bug #69082.
10839         Fixes bugs #63705 and #67130.
10840
10841         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
10842         method; create a MemberCache for an interface type and cache the
10843         result.
10844
10845         * decl.cs (IMemberContainer.ParentContainer): Removed.
10846         (IMemberContainer.ParentCache): New property.
10847         (MemberCache.SetupCacheForInterface): Removed.
10848         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
10849         to create a cache for an interface's "parent".
10850
10851         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
10852         interfaces too.
10853
10854 2004-11-16  Martin Baulig  <martin@ximian.com>
10855
10856         Merged back from gmcs; these changes already went into gmcs a
10857         couple of weeks ago.
10858
10859         * typemanager.cs
10860         (TypeManager.AddUserType): Removed the `ifaces' argument.
10861         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
10862         `TypeExpr []'.
10863         (TypeManager.AddUserInterface): Removed.
10864         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
10865         `TypeExpr []'.
10866         (TypeManager.GetInterfaces): Likewise.
10867         (TypeManager.GetExplicitInterfaces): Likewise.
10868
10869         * ecore.cs (TypeExpr.GetInterfaces): Removed.
10870
10871         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
10872         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
10873
10874 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
10875
10876         * statement.cs: Avoid adding bools to a hashtable.
10877
10878 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
10879
10880         * expression.cs (Invocation.OverloadResolve): Flag error if we are
10881         calling an unsafe method from a safe location.
10882
10883 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
10884
10885         Fix #69167
10886         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
10887
10888 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
10889
10890         * namespace.cs (VerifyUsing): use GetPartialName instead of
10891         ToString. 
10892
10893 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
10894
10895         * statement.cs (Return.Resolve): Fix regression in typo: if
10896         `in_exc', we have to request a NeedReturnLabel, this was a typo
10897         introduced in the anonymous method check-in.  Fixes #69131.
10898
10899         * Indexers were using the ShortName when defining themselves,
10900         causing a regression in the compiler bootstrap when applying the
10901         patch from 2004-11-02 (first part), now they use their full name
10902         and the bug is gone.
10903
10904 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
10905
10906         * driver.cs: Strip the path from the names of embedded resources. Fixes
10907         #68519.
10908
10909 2004-11-04  Raja R Harinath  <rharinath@novell.com>
10910
10911         Fix error message regression: cs0104-2.cs.
10912         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
10913         (AliasEntry.Resolve): Update.
10914         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
10915         'silent' flag.
10916         (RootContext.LookupType): Update.
10917
10918 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
10919
10920         * cs-parser.jay: Add support for handling accessor modifiers
10921         * class: Add support port accessor modifiers and error checking,
10922         define PropertyMethod.Define as virtual (not abstract anymore)
10923         * ecore.cs: Add checking for proeprties access with access modifiers
10924         * iterators.cs: Modify Accessor constructor call based in the modified
10925         constructor
10926 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
10927
10928         * expression.cs (StringConcat): Handle being called twice,
10929         as when we have a concat in a field init with more than two
10930         ctors in the class
10931
10932 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
10933
10934         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
10935         special case explicit implementations, we should always produce
10936         the .property or .event declaration.
10937         
10938         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
10939         since it will not return correct data if people use this
10940         unresolved in the presence of using statements (see test-313).
10941
10942         * class.cs (MethodData.Define): If we are an explicit interface
10943         implementation, set the method name to the full name of the
10944         interface plus the name of the method.  
10945
10946         Notice that using the method.MethodName.GetFullName() does not
10947         work, as it will only contain the name as declared on the source
10948         file (it can be a shorthand in the presence of using statements)
10949         and not the fully qualifed type name, for example:
10950
10951         using System;
10952
10953         class D : ICloneable {
10954                 object ICloneable.Clone ()  {
10955                 }
10956         }
10957
10958         Would produce a method called `ICloneable.Clone' instead of
10959         `System.ICloneable.Clone'.
10960
10961         * namespace.cs (Alias.Resolve): Use GetPartialName.
10962         
10963 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10964
10965         * cs-parser.jay: Add error 1055 report.
10966
10967 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
10968
10969         * assign.cs (Assign.DoResolve): Only do the transform of
10970         assignment into a New if the types are compatible, if not, fall
10971         through and let the implicit code deal with the errors and with
10972         the necessary conversions. 
10973
10974 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10975
10976         * cs-parser.jay: Add error 1031 report.
10977
10978         * cs-tokenizer.cs: Add location for error 1038.
10979
10980 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10981
10982         * cs-parser.jay: Add error 1016 report.
10983
10984 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10985
10986         * cs-parser.jay: Add errors 1575,1611 report.
10987
10988 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10989
10990         * cs-parser.jay: Add error 1001 report.
10991
10992 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10993
10994         Fix #68850
10995         * attribute.cs (GetMarshal): Add method argument for
10996         caller identification.
10997
10998         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
10999         agument for GetMarshal and RuntimeMissingSupport.
11000
11001 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11002
11003         * attribute.cs (ExtractSecurityPermissionSet): Removed
11004         TypeManager.code_access_permission_type.
11005
11006         * typemanager.cs: Removed TypeManager.code_access_permission_type.
11007
11008 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
11009
11010         * expression.cs (LocalVariableReference.DoResolveLValue): Check
11011         for obsolete use of a variable here.   Fixes regression on errors
11012         cs0619-25 and cs0619-26.
11013
11014 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
11015
11016         Fix #62358, implemented security attribute encoding.
11017
11018         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
11019         Tests permitted SecurityAction for assembly or other types.
11020         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
11021         data from SecurityPermissionAttribute to PermisionSet class.
11022
11023         * class.cs (ApplyAttributeBuilder): Added special handling
11024         for System.Security.Permissions.SecurityAttribute based types.
11025
11026         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
11027         special handling for System.Security.Permissions.SecurityAttribute
11028         based types.
11029
11030         * enum.cs (ApplyAttributeBuilder): Added special handling
11031         for System.Security.Permissions.SecurityAttribute based types.
11032
11033         * parameter.cs (ApplyAttributeBuilder): Added special handling
11034         for System.Security.Permissions.SecurityAttribute based types.
11035
11036         * rootcontext.cs: Next 2 core types.
11037
11038         * typemanager.cs (TypeManager.security_permission_attr_type):
11039         Built in type for the SecurityPermission Attribute.
11040         (code_access_permission_type): Build in type.
11041
11042 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
11043
11044         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
11045         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
11046         all of this information into
11047         EmitContext.EmitCapturedVariableInstance.
11048         
11049         * codegen.cs (EmitCapturedVariableInstance): move here the
11050         funcionality of emitting an ldarg.0 in the presence of a
11051         remapping.   This centralizes the instance emit code.
11052
11053         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
11054         then emit a load of this: it means that we have reached the
11055         topmost ScopeInfo: the one that contains the pointer to the
11056         instance of the class hosting the anonymous method.
11057
11058         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
11059         captures to the topmost CaptureContext.
11060
11061 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
11062
11063         * expression.cs (LocalVariableReference): Move the knowledge about
11064         the iterators into codegen's EmitCapturedVariableInstance.
11065
11066 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
11067
11068         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
11069         all code paths return a value from an anonymous method (it is the
11070         same as the 161 error, but for anonymous methods).
11071
11072 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
11073
11074         The introduction of anonymous methods in the compiler changed
11075         various ways of doing things in the compiler.  The most
11076         significant one is the hard split between the resolution phase
11077         and the emission phases of the compiler.
11078
11079         For instance, routines that referenced local variables no
11080         longer can safely create temporary variables during the
11081         resolution phase: they must do so from the emission phase,
11082         since the variable might have been "captured", hence access to
11083         it can not be done with the local-variable operations from the runtime.
11084         
11085         * statement.cs 
11086
11087         (Block.Flags): New flag `IsTopLevel' to indicate that this block
11088         is a toplevel block.
11089
11090         (ToplevelBlock): A new kind of Block, these are the blocks that
11091         are created by the parser for all toplevel method bodies.  These
11092         include methods, accessors and anonymous methods.
11093
11094         These contain some extra information not found in regular blocks:
11095         A pointer to an optional CaptureContext (for tracking captured
11096         local variables and parameters).  A pointer to the parent
11097         ToplevelBlock.
11098         
11099         (Return.Resolve): Catch missmatches when returning a value from an
11100         anonymous method (error 1662).
11101         Invoke NeedReturnLabel from the Resolve phase instead of the emit
11102         phase.
11103
11104         (Break.Resolve): ditto.
11105
11106         (SwitchLabel): instead of defining the labels during the
11107         resolution phase, we now turned the public ILLabel and ILLabelCode
11108         labels into methods called GetILLabelCode() and GetILLabel() that
11109         only define the label during the Emit phase.
11110
11111         (GotoCase): Track the SwitchLabel instead of the computed label
11112         (its contained therein).  Emit the code by using
11113         SwitchLabel.GetILLabelCode ().
11114
11115         (LocalInfo.Flags.Captured): A new flag has been introduce to track
11116         whether the Local has been captured or not.
11117
11118         (LocalInfo.IsCaptured): New property, used to tell whether the
11119         local has been captured.
11120         
11121         * anonymous.cs: Vastly updated to contain the anonymous method
11122         support.
11123
11124         The main classes here are: CaptureContext which tracks any
11125         captured information for a toplevel block and ScopeInfo used to
11126         track the activation frames for various local variables.   
11127
11128         Each toplevel block has an optional capture context associated
11129         with it.  When a method contains an anonymous method both the
11130         toplevel method and the anonymous method will create a capture
11131         context.   When variables or parameters are captured, they are
11132         recorded on the CaptureContext that owns them, for example:
11133
11134         void Demo () {
11135              int a;
11136              MyDelegate d = delegate {
11137                  a = 1;
11138              }
11139         }
11140
11141         Here `a' will be recorded as captured on the toplevel
11142         CapturedContext, the inner captured context will not have anything
11143         (it will only have data if local variables or parameters from it
11144         are captured in a nested anonymous method.
11145
11146         The ScopeInfo is used to track the activation frames for local
11147         variables, for example:
11148
11149         for (int i = 0; i < 10; i++)
11150                 for (int j = 0; j < 10; j++){
11151                    MyDelegate d = delegate {
11152                         call (i, j);
11153                    }
11154                 }
11155
11156         At runtime this captures a single captured variable `i', but it
11157         captures 10 different versions of the variable `j'.  The variable
11158         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
11159         recorded on a child.  
11160
11161         The toplevel ScopeInfo will also track information like the `this'
11162         pointer if instance variables were referenced (this is necessary
11163         as the anonymous method lives inside a nested class in the host
11164         type of the method). 
11165
11166         (AnonymousMethod): Expanded to track the Toplevel, implement
11167         `AnonymousMethod.Compatible' to tell whether an anonymous method
11168         can be converted to a target delegate type. 
11169
11170         The routine now also produces the anonymous method content
11171
11172         (AnonymousDelegate): A helper class that derives from
11173         DelegateCreation, this is used to generate the code necessary to
11174         produce the delegate for the anonymous method that was created. 
11175
11176         * assign.cs: API adjustments for new changes in
11177         Convert.ImplicitStandardConversionExists.
11178
11179         * class.cs: Adjustments to cope with the fact that now toplevel
11180         blocks are of type `ToplevelBlock'. 
11181
11182         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
11183         insteda of standard blocks.
11184
11185         Flag errors if params arguments are passed to anonymous methods.
11186
11187         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
11188         `CurrentAnonymousMethod' which points to the current Anonymous
11189         Method.  The variable points to the AnonymousMethod class that
11190         holds the code being compiled.  It is set in the new EmitContext
11191         created for the anonymous method.
11192
11193         (EmitContext.Phase): Introduce a variable and an enumeration to
11194         assist in enforcing some rules about when and where we are allowed
11195         to invoke certain methods (EmitContext.NeedsReturnLabel is the
11196         only one that enfonces this right now).
11197
11198         (EmitContext.HaveCaptureInfo): new helper method that returns
11199         whether we have a CapturedContext initialized.
11200
11201         (EmitContext.CaptureVariable): New method used to register that a
11202         LocalInfo must be flagged for capturing. 
11203
11204         (EmitContext.CapturedParameter): New method used to register that a
11205         parameters must be flagged for capturing. 
11206         
11207         (EmitContext.CapturedField): New method used to register that a
11208         field must be flagged for capturing. 
11209
11210         (EmitContext.HaveCapturedVariables,
11211         EmitContext.HaveCapturedFields): Return whether there are captured
11212         variables or fields. 
11213
11214         (EmitContext.EmitMethodHostInstance): This is used to emit the
11215         instance for the anonymous method.  The instance might be null
11216         (static methods), this (for anonymous methods that capture nothing
11217         and happen to live side-by-side with the current method body) or a
11218         more complicated expression if the method has a CaptureContext.
11219
11220         (EmitContext.EmitTopBlock): Routine that drives the emission of
11221         code: it will first resolve the top block, then emit any metadata
11222         and then emit the code.  The split is done so that we can extract
11223         any anonymous methods and flag any captured variables/parameters.
11224         
11225         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
11226         during this phase, the ILGenerator should not be used as labels
11227         and local variables declared here might not be accessible to any
11228         code that is part of an anonymous method.  
11229
11230         Exceptions to this include the temporary variables that are
11231         created by some statements internally for holding temporary
11232         variables. 
11233         
11234         (EmitContext.EmitMeta): New routine, in charge of emitting all the
11235         metadata for a cb
11236
11237         (EmitContext.TemporaryReturn): This method is typically called
11238         from the Emit phase, and its the only place where we allow the
11239         ReturnLabel to be defined other than the EmitMeta.  The reason is
11240         that otherwise we would have to duplicate a lot of logic in the
11241         Resolve phases of various methods that today is on the Emit
11242         phase. 
11243
11244         (EmitContext.NeedReturnLabel): This no longer creates the label,
11245         as the ILGenerator is not valid during the resolve phase.
11246
11247         (EmitContext.EmitThis): Extended the knowledge in this class to
11248         work in anonymous methods in addition to iterators. 
11249
11250         (EmitContext.EmitCapturedVariableInstance): This emits whatever
11251         code is necessary on the stack to access the instance to a local
11252         variable (the variable will be accessed as a field).
11253
11254         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
11255         EmitContext.EmitAddressOfParameter): Routines to support
11256         parameters (not completed at this point). 
11257         
11258         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
11259         will also remove the parameters.
11260
11261         * convert.cs (Convert): Define a `ConstantEC' which points to a
11262         null.  This is just to prefity some code that uses
11263         ImplicitStandardConversion code and do not have an EmitContext
11264         handy.
11265
11266         The idea is to flag explicitly that at that point in time, it is
11267         known that the conversion will not trigger the delegate checking
11268         code in implicit conversions (which requires a valid
11269         EmitContext). 
11270
11271         Everywhere: pass new EmitContext parameter since
11272         ImplicitStandardConversionExists now requires it to check for
11273         anonymous method conversions. 
11274
11275         (Convert.ImplicitStandardConversionExists): If the type of an
11276         expression is the anonymous_method_type, and the type is a
11277         delegate, we invoke the AnonymousMethod.Compatible method to check
11278         whether an implicit conversion is possible. 
11279
11280         (Convert.ImplicitConversionStandard): Only do implicit method
11281         group conversions if the language level is not ISO_1.
11282
11283         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
11284         MethodInfo for the Invoke method.  used by Delegate and
11285         AnonymousDelegate.
11286
11287         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
11288         method conversions if the target type is a delegate.
11289
11290         Removed extra debugging nops.
11291
11292         (LocalVariableReference): Turn the `local_info' into a public
11293         field. 
11294
11295         Add `prepared' field, the same hack used for FieldExprs to cope
11296         with composed assignments, as Local variables do not necessarily
11297         operate purely on the stack as they used to: they can be captured
11298         fields. 
11299
11300         Add `temp' for a temporary result, like fields.
11301
11302         Refactor DoResolve and DoResolveLValue into DoResolveBase.
11303
11304         It now copes with Local variables that are captured and emits the
11305         proper instance variable to load it from a field in the captured
11306         case. 
11307
11308         (ParameterReference.DoResolveBase): During the resolve phase,
11309         capture parameters if we are in an anonymous method.
11310
11311         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
11312         anonymous method, use the EmitContext helper routines to emit the
11313         parameter reference.
11314
11315         * iterators.cs: Set RemapToProxy to true/false during the
11316         EmitDispose class.
11317
11318         * parameters.cs (GetParameterByName): New helper method. 
11319
11320         * typemanager.cs (anonymous_method_type) a new type that
11321         represents an anonyous method.  This is always an internal type,
11322         used as a fencepost to test against the anonymous-methodness of an
11323         expression. 
11324         
11325 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
11326
11327         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
11328         561 report.
11329         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
11330
11331 2004-10-18  Martin Baulig  <martin@ximian.com>
11332
11333         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
11334         `Type' directly, but call ResolveType() on it.
11335         (Catch.Resolve): Likewise.
11336         (Foreach.Resolve): Likewise.
11337
11338 2004-10-18  Martin Baulig  <martin@ximian.com>
11339
11340         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
11341         `Type' directly, but call ResolveType() on it.
11342         (Probe.DoResolve): Likewise.
11343         (ArrayCreation.LookupType): Likewise.
11344         (TypeOf.DoResolve): Likewise.
11345         (SizeOf.DoResolve): Likewise.
11346
11347 2004-10-18  Martin Baulig  <martin@ximian.com>
11348
11349         * expression.cs (Invocation.BetterFunction): Put back
11350         TypeManager.TypeToCoreType().
11351
11352 2004-10-18  Raja R Harinath  <rharinath@novell.com>
11353
11354         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
11355         the ResolveType.
11356
11357 2004-10-18  Martin Baulig  <martin@ximian.com>
11358
11359         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
11360         `Type' directly, but call ResolveType() on it.
11361
11362 2004-10-18  Martin Baulig  <martin@ximian.com>
11363
11364         * class.cs (FieldMember.Define): Don't access the TypeExpr's
11365         `Type' directly, but call ResolveType() on it.
11366         (MemberBase.DoDefine): Likewise.
11367
11368         * expression.cs (New.DoResolve): Don't access the TypeExpr's
11369         `Type' directly, but call ResolveType() on it.
11370         (ComposedCast.DoResolveAsTypeStep): Likewise.
11371
11372         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
11373         `Type' directly, but call ResolveType() on it.
11374
11375 2004-10-17  John Luke  <john.luke@gmail.com>
11376
11377         * class.cs (Operator.GetSignatureForError): use CSharpName
11378
11379         * parameter.cs (Parameter.GetSignatureForError): Returns
11380         correct name even if was not defined.
11381
11382 2004-10-13  Raja R Harinath  <rharinath@novell.com>
11383
11384         Fix #65816.
11385         * class.cs (TypeContainer.EmitContext): New property.
11386         (DefineNestedTypes): Create an emitcontext for each part.
11387         (MethodCore.DoDefineParameters): Use container's emitcontext.
11388         Pass type array to InternalParameters.
11389         (MemberBase.DoDefine): Use container's emitcontext.
11390         (FieldMember.Define): Likewise.
11391         (Event.Define): Likewise.
11392         (SetMethod.GetParameterInfo): Change argument to EmitContext.
11393         Pass type array to InternalParameters.
11394         (SetIndexerMethod.GetParameterInfo): Likewise.
11395         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
11396         * delegate.cs (Define): Pass emitcontext to
11397         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
11398         array to InternalParameters.
11399         * expression.cs (ParameterReference.DoResolveBase): Pass
11400         emitcontext to GetParameterInfo.
11401         (ComposedCast.DoResolveAsTypeStep): Remove check on
11402         ec.ResolvingTypeTree.
11403         * parameter.cs (Parameter.Resolve): Change argument to
11404         EmitContext.  Use ResolveAsTypeTerminal.
11405         (Parameter.GetSignature): Change argument to EmitContext.
11406         (Parameters.ComputeSignature): Likewise.
11407         (Parameters.ComputeParameterTypes): Likewise.
11408         (Parameters.GetParameterInfo): Likewise.
11409         (Parameters.ComputeAndDefineParameterTypes): Likewise.
11410         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
11411         * support.cs (InternalParameters..ctor): Remove variant that takes
11412         a DeclSpace.
11413         * typemanager.cs (system_intptr_expr): New.
11414         (InitExpressionTypes): Initialize it.
11415
11416 2004-10-12  Chris Toshok  <toshok@ximian.com>
11417
11418         * cs-parser.jay: fix location for try_statement and catch_clause.
11419
11420 2004-10-11  Martin Baulig  <martin@ximian.com>
11421
11422         * report.cs: Don't make --fatal abort on warnings, we have
11423         -warnaserror for that.
11424
11425 2004-10-07  Raja R Harinath  <rharinath@novell.com>
11426
11427         More DeclSpace.ResolveType avoidance.
11428         * decl.cs (MemberCore.InUnsafe): New property.
11429         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
11430         with newly created EmitContext.
11431         (FieldMember.Define): Likewise.
11432         * delegate.cs (Delegate.Define): Likewise.
11433         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
11434         only if normal name-lookup fails.
11435         (TypeExpr.DoResolve): Enable error-checking.
11436         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
11437         (SizeOf.DoResolve): Likewise.
11438         (ComposedCast.DoResolveAsTypeStep): Likewise.
11439         (StackAlloc.DoResolve): Likewise.
11440         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
11441         (Block.Unsafe): New property.
11442         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
11443         (Unsafe): Set 'unsafe' flag of contained block.
11444         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
11445         (Fixed.Resolve): Likewise.
11446         (Catch.Resolve): Likewise.
11447         (Using.ResolveLocalVariableDecls): Likewise.
11448         (Foreach.Resolve): Likewise.
11449
11450 2004-10-05  John Luke <john.luke@gmail.com>
11451
11452         * cs-parser.jay: add location to error CS0175
11453
11454 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
11455
11456         * ecore.cs (Expression.Constantity): Add support for turning null
11457         into a constant.
11458
11459         * const.cs (Const.Define): Allow constants to be reference types
11460         as long as the value is Null.
11461
11462 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
11463
11464         * namespace.cs (NamespaceEntry.Using): No matter which warning
11465         level is set, check if this namespace name has already been added.
11466
11467 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
11468
11469         * expression.cs: reftype [!=]= null should always use br[true,false].
11470         # 67410
11471
11472 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
11473
11474         Fix #67108
11475         * attribute.cs: Enum conversion moved to 
11476         GetAttributeArgumentExpression to be applied to the all
11477         expressions.
11478
11479 2004-10-01  Raja R Harinath  <rharinath@novell.com>
11480
11481         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
11482         * class.c (TypeContainer.DefineType): Flag error if
11483         base types aren't accessible due to access permissions.
11484         * decl.cs (DeclSpace.ResolveType): Move logic to
11485         Expression.ResolveAsTypeTerminal.
11486         (DeclSpace.ResolveTypeExpr): Thin layer over
11487         Expression.ResolveAsTypeTerminal.
11488         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
11489         Refactor code into NestedAccess.  Use it.
11490         (DeclSpace.NestedAccess): New.
11491         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
11492         argument to silence errors.  Check access permissions.
11493         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
11494         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
11495         (Cast.DoResolve): Likewise.
11496         (New.DoResolve): Likewise.
11497         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
11498         (TypeOf.DoResolve): Likewise.
11499
11500         * expression.cs (Invocation.BetterConversion): Return the Type of
11501         the better conversion.  Implement section 14.4.2.3 more faithfully.
11502         (Invocation.BetterFunction): Make boolean.  Make correspondence to
11503         section 14.4.2.2 explicit.
11504         (Invocation.OverloadResolve): Update.
11505         (Invocation): Remove is_base field.
11506         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
11507         (Invocation.Emit): Likewise.
11508
11509 2004-09-27  Raja R Harinath  <rharinath@novell.com>
11510
11511         * README: Update to changes.
11512
11513 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
11514
11515         * cs-parser.jay: Reverted 642 warning fix.
11516
11517 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11518
11519         Fix bug #66615
11520         * decl.cs (FindMemberWithSameName): Indexer can have more than
11521         1 argument.
11522
11523 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11524
11525         * expression.cs (LocalVariableReference.DoResolveLValue):
11526         Do not report warning 219 for out values.
11527         (EmptyExpression.Null): New member to avoid extra allocations.
11528
11529 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11530
11531         * cs-parser.jay: Fix wrong warning 642 report.
11532
11533         * cs-tokenizer.cs (CheckNextToken): New helper;
11534         Inspect next character if is same as expected.
11535
11536 2004-09-23  Martin Baulig  <martin@ximian.com>
11537
11538         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
11539         (Convert.ImplicitReferenceConversionExists): Likewise.
11540
11541 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11542
11543         * class.cs (Operator.Define): Add error 448 and 559 report.
11544
11545 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11546
11547         * class.cs (MemberBase.IsTypePermitted): New protected
11548         method for checking error CS0610.
11549
11550 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11551
11552         * class.cs (TypeContainer.HasExplicitLayout): New property
11553         Returns whether container has StructLayout attribute set Explicit.
11554         (FieldMember): New abstract class for consts and fields.
11555         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
11556         (Field): Reuse FieldMember.
11557
11558         * const.cs (Const): Reuse FieldMember.
11559
11560         * rootcontext.cs: EmitConstants call moved to class.
11561
11562 2004-09-22  Martin Baulig  <martin@ximian.com>
11563
11564         Thanks to Peter Sestoft for this bug report.
11565
11566         * expression.cs (Conditional): If both the `trueExpr' and the
11567         `falseExpr' is a NullLiteral, return a NullLiteral.
11568
11569 2004-09-22  Martin Baulig  <martin@ximian.com>
11570
11571         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
11572         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
11573         for the "get_Current" call.
11574
11575 2004-09-22  Martin Baulig  <martin@ximian.com>
11576
11577         Marek and me just fixed one of our oldest bugs: #28562 :-)
11578
11579         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
11580
11581         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
11582         we're an EnumConstant, just return that.
11583         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
11584         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
11585         to get the value which'll actually be written into the attribute.
11586         However, we have to use GetValue() to access the attribute's value
11587         in the compiler.        
11588
11589 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11590
11591         * constant.cs (Constant.IsNegative): New abstract property
11592         IsNegative.
11593
11594         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
11595         (StackAlloc.DoResolve): Reused IsNegative.
11596
11597 2004-09-21  Martin Baulig  <martin@ximian.com>
11598
11599         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
11600         if we're used in an iterator, we may be called from different
11601         methods.
11602
11603         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
11604         we actually have an exception block.
11605
11606 2004-09-20  John Luke <jluke@cfl.rr.com>
11607
11608         * class.cs, cs-parser.jay: Improve the error report for 1520:
11609         report the actual line where the error happens, not where the
11610         class was declared.
11611
11612         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
11613         Pass location information that was available elsewhere.
11614
11615 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
11616
11617         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
11618         runtime to delay sign assemblies.
11619
11620 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11621
11622         * cs-parser.jay: Do not report the stack trace, this is barely
11623         used nowadays.
11624
11625 2004-08-22  John Luke  <john.luke@gmail.com>
11626  
11627         * driver.cs : check that a resource id is not already used
11628         before adding it, report CS1508 if it is, bug #63637
11629
11630 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11631
11632         * ecore.cs: Removed dead code.
11633
11634 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
11635
11636         * class.cs: Do not report warning CS0067 on the interfaces.
11637
11638 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11639
11640         * cs-parser.jay: Add error 504 report.
11641
11642 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11643
11644         * rootcontext.cs: WarningLevel is 4 by default now.
11645
11646         * statement.cs (Fixed.Resolve): Do not null
11647         VariableInfo.
11648
11649 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11650
11651         Fixed bug #55780
11652         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
11653         deep search when property is not virtual.
11654         (PropertyExpr.ResolveAccessors): Make one call for both
11655         accessors.
11656
11657 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11658
11659         Fixed bug #65766
11660         * statement.cs: Error 152 report constains also location.
11661
11662 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11663
11664         Fixed bug #65766
11665         * const.cs: Explicitly set constant as static.
11666
11667 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11668
11669         Fixed bug #64226
11670         * cs-parser.jay: Add error 1017 report.
11671
11672 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11673
11674         Fixed bug #59980, #64224
11675         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
11676
11677         * typemanager.cs (IsSpecialMethod): Simplified
11678
11679 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11680
11681         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
11682         condition with better params.
11683
11684 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11685
11686         Fixed bug #65238
11687         * attribute.cs (Resolve): Property has to have both
11688         accessors.
11689
11690 2004-09-14  Martin Baulig  <martin@ximian.com>
11691
11692         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
11693
11694 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11695
11696         Fixed bug #61902
11697         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
11698         called and is obsolete then this member suppress message
11699         when call is inside next [Obsolete] method or type.
11700
11701         * expression.cs: Use TestObsoleteMethodUsage member.
11702
11703 2004-09-14  Martin Baulig  <martin@ximian.com>
11704
11705         * cs-parser.jay: Sync a bit with the GMCS version.
11706
11707 2004-09-14  Martin Baulig  <martin@ximian.com>
11708
11709         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
11710         (CSharpParser.yacc_verbose_flag): New public field.
11711
11712         * genericparser.cs: Removed.
11713
11714 2004-09-14  Raja R Harinath  <rharinath@novell.com>
11715
11716         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
11717
11718 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
11719
11720         * class.cs (MethodCore.CheckBase): Fix bug #65757.
11721
11722 2004-09-10  Martin Baulig  <martin@ximian.com>
11723
11724         Backported my MemberName changes from GMCS into MCS.
11725
11726         - we are now using a special `MemberName' class instead of using
11727         strings; in GMCS, the `MemberName' also contains the type
11728         arguments.
11729
11730         - changed the grammar rules a bit:
11731           * the old `member_name' is now a `namespace_or_type_name':
11732             The rule is that we use `namespace_or_type_name' everywhere
11733             where we expect either a "member name" (GetEnumerator) or a
11734             "member name" with an explicit interface name
11735             (IEnumerable.GetEnumerator).
11736             In GMCS, the explicit interface name may include type arguments
11737             (IEnumerable<T>.GetEnumerator).
11738           * we use `member_name' instead of just `IDENTIFIER' for
11739             "member names":
11740             The rule is that we use `member_name' wherever a member may
11741             have type parameters in GMCS.       
11742
11743         * decl.cs (MemberName): New public class.
11744         (MemberCore.MemberName): New public readonly field.
11745         (MemberCore.ctor): Take a `MemberName' argument, not a string.
11746         (DeclSpace): Likewise.
11747
11748         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
11749         * enum.cs (Enum.ctor): Likewise.
11750
11751         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
11752         MemberName.     
11753         (AliasEntry.ctor): Take a MemberName, not an Expression.
11754         (AliasEntry.UsingAlias): Likewise.
11755
11756         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
11757         (IMethodData.MemberName): Changed type from string to MemberName.
11758         (MemberBase.ExplicitInterfaceName): Likewise.
11759         (AbstractPropertyEventMethod.SetupName): Make this private.
11760         (AbstractPropertyEventMethod.ctor): Added `string prefix'
11761         argument; compute the member name here.
11762         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
11763         on the `member.MemberName' and the `prefix'.
11764
11765         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
11766         not `type_name'.
11767         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
11768         thus, we get a `MemberName' instead of a `string'.  These
11769         declarations may have type parameters in GMCS.
11770         (interface_method_declaration, delegate_declaration): Likewise.
11771         (class_declaration, interface_declaration): Likewise.
11772         (method_header): Use `namespace_or_type_name' instead of
11773         `member_name'.  We may be an explicit interface implementation.
11774         (property_declaration, event_declaration): Likewise.
11775         (member_name): This is now just an `IDENTIFIER', not a
11776         `namespace_or_type_name'.
11777         (type_name, interface_type): Removed.
11778         (namespace_or_type_name): Return a MemberName, not an Expression.
11779         (primary_expression): Use `member_name' instead of `IDENTIFIER';
11780         call GetTypeExpression() on the MemberName to get an expression.
11781         (IndexerDeclaration.interface_type): Changed type from string to
11782         MemberName.
11783         (MakeName): Operate on MemberName's instead of string's.
11784
11785 2004-09-13  Raja R Harinath  <rharinath@novell.com>
11786
11787         Fix bug #55770.
11788         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
11789         (NamespaceEntry.Lookup): Add new argument to flag if we want the
11790         lookup to avoid symbols introduced by 'using'.
11791         * rootcontext.cs (NamespaceLookup): Update.
11792
11793 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11794
11795         * class.cs (TypeContainer.DoDefineMembers): Do not call
11796         DefineDefaultConstructor for static classes.
11797
11798 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11799
11800         * attribute.cs (Attribute.Resolve): Add error 653 report.
11801
11802         * class.cs (Class.ApplyAttributeBuilder): Add error 641
11803         report.
11804         (Method.ApplyAttributeBuilder): Add error 685 report.
11805         (Operator.Define): Add error 564 report.
11806
11807         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
11808
11809         * expression.cs (Invocation.DoResolve): Add error
11810         245 and 250 report.
11811
11812         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
11813         error 674 report.
11814
11815 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11816
11817         * class.cs (ConstructorInitializer.Resolve):
11818         Wrong error number (515->516).
11819
11820 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11821
11822         * class.cs (Indexer.Define): Add error 631 report.
11823
11824 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11825
11826         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
11827
11828 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11829
11830         * expression.cs (Probe.DoResolve): Add error CS0241 report.
11831
11832 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
11833
11834         * cs-parser.jay: Added error CS0241 report.
11835
11836 2004-09-10  Raja R Harinath  <rharinath@novell.com>
11837
11838         * cs-parser.jay (fixed_statement): Introduce a scope for the
11839         declaration in the 'fixed' statement.
11840
11841 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11842
11843         * cs-parser.jay: Added CS0230 error report.
11844
11845 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11846
11847         * cs-parser.jay: Added errors CS0231 and CS0257 report.
11848
11849 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11850
11851         * expression.cs (Argument.Resolve): Added error CS0192 and
11852         CS0199 report.
11853
11854 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11855
11856         C# 2.0 #pragma warning feature
11857
11858         * cs-tokenizer.cs (PreProcessPragma): New method; 
11859         Handles #pragma directive.
11860
11861         * report.cs (WarningRegions): New class; Support
11862         class for #pragma warning directive. It tests whether
11863         warning is enabled for a given line.
11864
11865 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
11866
11867         * const.cs: Add more descriptive error report, tahnks to
11868         Sebastien. 
11869
11870 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
11871
11872         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
11873
11874 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
11875
11876         * expression.cs: Apply patch from Ben: Remove dead code from
11877         ArrayCreation, and remove the TurnintoConstant call in const.cs,
11878         as that code just threw an exception anwyays.
11879
11880         * const.cs: Remove the call to the turnintoconstant, for details
11881         see bug: #63144
11882         
11883         * literal.cs: The type of the null-literal is the null type;  So
11884         we use a placeholder type (literal.cs:System.Null, defined here)
11885         for it.
11886
11887         * expression.cs (Conditional.DoResolve): Remove some old code that
11888         is no longer needed, conversions have been fixed.
11889
11890         (ArrayCreationExpression.DoResolve): Return false if we fail to
11891         resolve the inner expression.
11892
11893 2004-09-07  Raja R Harinath  <rharinath@novell.com>
11894
11895         Fix test-290.cs.
11896         * cs-parser.jay (delegate_declaration): Record a delegate
11897         declaration as a type declaration.
11898         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
11899
11900 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
11901
11902         * parameter.cs: Do not crash if the type can not be resolved. 
11903
11904         * expression.cs: Report errors with unsafe pointers, fixes #64896
11905
11906 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11907
11908         * expression.cs: Pointer arith always needs to do a conv.i
11909         if the operand is a long. fix 65320
11910
11911 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11912
11913         Fixed cs0619-37.cs, cs0619-38.cs
11914
11915         * enum.cs (GetObsoleteAttribute): Removed.
11916
11917         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
11918         on Enum member is double staged. The first is tested member
11919         and then enum.
11920
11921 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11922
11923         Fixed #56986, #63631, #65231
11924
11925         * class.cs: (TypeContainer.AddToMemberContainer): New method,
11926         adds member to name container.
11927         (TypeContainer.AddToTypeContainer): New method, adds type to
11928         name container.
11929         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
11930         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
11931         AddOperator): Simplified by reusing AddToMemberContainer.
11932         (TypeContainer.UserDefinedStaticConstructor): Changed to property
11933         instead of field.
11934         (Method.CheckForDuplications): Fixed implementation to test all
11935         possibilities.
11936         (MemberBase): Detection whether member is explicit interface
11937         implementation is now in constructor.
11938         (MemberBase.UpdateMemberName): Handles IndexerName.
11939         (Accessor): Changed to keep also location information.
11940         (AbstractPropertyEventMethod): Is derived from MemberCore.
11941         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
11942         will be emited or not.
11943         (PropertyBase.AreAccessorsDuplicateImplementation):
11944         Tests whether accessors are not in collision with some method.
11945         (Operator): Is derived from MethodCore to simplify common
11946         operations.
11947
11948         * decl.cs (Flags.TestMethodDuplication): Test for duplication
11949         must be performed.
11950         (DeclSpace.AddToContainer): Adds the member to defined_names
11951         table. It tests for duplications and enclosing name conflicts.
11952
11953         * enum.cs (EnumMember): Clean up to reuse the base structures
11954
11955 2004-09-03  Martin Baulig  <martin@ximian.com>
11956
11957         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
11958         into TypeContainer, to make partial classes work again.
11959
11960 2004-09-03  Martin Baulig  <martin@ximian.com>
11961
11962         * rootcontext.cs (RootContext.V2): Removed.
11963
11964 2004-03-23  Martin Baulig  <martin@ximian.com>
11965
11966         * expression.cs (Invocation.OverloadResolve): Added `bool
11967         may_fail' argument and use it instead of the Location.IsNull() hack.
11968
11969 2004-09-03  Martin Baulig  <martin@ximian.com>
11970
11971         Merged latest changes into gmcs.  Please keep this comment in
11972         here, it makes it easier for me to see what changed in MCS since
11973         the last time I merged.
11974
11975 2004-09-03  Raja R Harinath  <rharinath@novell.com>
11976
11977         Fix #61128.
11978         * expression.cs (BetterConversion): Don't allow either conversion 
11979         to be null.  Remove redundant implicit conversion test when 'q ==
11980         null' -- when this function is invoked, we already know that the
11981         implicit conversion exists.
11982         (BetterFunction): Assume that 'best' is non-null.  Remove
11983         redundant reimplementation of IsApplicable when 'best' is null.
11984         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
11985         number of arguments.
11986         (IsAncestralType): Extract from OverloadResolve.
11987         (OverloadResolve): Make robust to the MethodGroupExpr being
11988         unsorted.  Implement all the logic of Section 14.5.5.1, and
11989         support overloading of methods from multiple applicable types.
11990         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
11991
11992         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
11993         (RealError, Warning): Append type of report to related symbol.
11994
11995 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
11996
11997         * enum.cs: Fixed CLS-Compliance checks for enum members.
11998         Error tests cs3008-8.cs, cs3014-8.cs
11999
12000 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12001
12002         Fixed bug #62342, #63102
12003         * class.cs: ImplementIndexer uses member.IsExplicitImpl
12004         like ImplementMethod.
12005
12006 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12007
12008         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12009         Fixed bug #65170.
12010
12011 2004-09-02  Martin Baulig  <martin@ximian.com>
12012
12013         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
12014         TypeManager.GetArgumentTypes() rather than calling GetParameters()
12015         on the MethodBase.
12016
12017 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
12018
12019         C# 2.0 Static classes implemented
12020
12021         * class.cs (TypeContainer): instance_constructors,
12022         initialized_fields, initialized_static_fields,
12023         default_constructor, base_inteface_types are protected to be
12024         accessible from StaticClass.
12025         (TypeContainer.DefineDefaultConstructor): New virtual method
12026         for custom default constructor generating
12027         (StaticClass): New class to handle "Static classes" feature.
12028
12029         * cs-parser.jay: Handle static keyword on class like instance
12030         of StaticClass.
12031
12032         * driver.cs: Added "/langversion" command line switch with two
12033         options (iso-1, default).
12034
12035 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
12036
12037         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
12038
12039 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
12040
12041         * delegate.cs: Style.
12042
12043 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12044
12045         * delegate.cs: Add seperate instance expr field for miguel.
12046
12047 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12048
12049         * PointerArithmetic (Resolve): make sure we are not doing
12050         pointer arith on void*. Also, make sure we are resolved
12051         by not setting eclass until resolve.
12052
12053         All callers: Make sure that PointerArithmetic gets resolved.
12054
12055 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12056
12057         * ArrayCreation (LookupType): If the type does not resolve 
12058         to an array, give an error.
12059
12060 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
12061
12062         * statement.cs (Try.Resolve): Fixed bug #64222
12063
12064 2004-08-27  Martin Baulig  <martin@ximian.com>
12065
12066         * class.cs
12067         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
12068         crash here.     
12069
12070 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12071
12072         * ecore.cs (Constantify): Get underlying type via
12073         System.Enum.GetUnderlyingType to avoid StackOverflow on the
12074         Windows in special cases.
12075
12076 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12077
12078         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
12079         for obtaining also private methods.
12080         (GetRemoveMethod): Used GetRemoveMethod (true)
12081         for obtaining also private methods.
12082
12083 2004-08-24  Martin Baulig  <martin@ximian.com>
12084
12085         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
12086         MethodAttributes.HideBySig for operators.
12087
12088 2004-08-23  Martin Baulig  <martin@ximian.com>
12089
12090         Back to the old error reporting system :-)
12091
12092         * report.cs (Message): Removed.
12093         (Report.MessageData, ErrorData, WarningData): Removed.
12094         (Report.Error, Warning): Back to the old system.
12095
12096 2004-08-23  Martin Baulig  <martin@ximian.com>
12097
12098         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
12099
12100         * class.cs (TypeContainer.ParentContainer): New public virtual
12101         method; replaces the explicit interface implementation.
12102         (ClassPart.ParentContainer): Override.
12103
12104 2004-08-23  Martin Baulig  <martin@ximian.com>
12105
12106         * statement.cs (Switch): Added support for constant switches; see
12107         #59428 or test-285.cs.
12108
12109 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12110
12111         Fixed bug #62740.
12112         * statement.cs (GetEnumeratorFilter): Removed useless
12113         logic because C# specs is strict. GetEnumerator must be
12114         public.
12115
12116 2004-08-22  Martin Baulig  <martin@ximian.com>
12117
12118         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12119         a switch and may break, reset the barrier.  Fixes #59867.
12120
12121 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12122
12123         CLS-Compliance speed up (~5% for corlib)
12124
12125         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
12126         New method. Tests container for CLS-Compliant names
12127
12128         * class.cs (TypeContainer.VerifyClsName): New method.
12129         Checks whether container name is CLS Compliant.
12130         (Constructor): Implements IMethodData.
12131
12132         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
12133         low-case table for CLS Compliance test.
12134         (MemberCache.VerifyClsParameterConflict): New method.
12135         Checks method parameters for CS3006 error.
12136
12137         * enum.cs (EnumMember): Is derived from MemberCore.
12138         (Enum.VerifyClsName): Optimized for better performance.
12139
12140 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12141
12142         * report.cs: Renamed Error_T to Error and changed all
12143         references.
12144
12145 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12146
12147         * class.cs (TypeContainer.IndexerArrayList): New inner class
12148         container for indexers.
12149         (TypeContainer.DefaultIndexerName): New constant for default
12150         indexer name. Replaced all "Item" with this constant.
12151         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
12152
12153         * typemanager.cs (TypeManager.default_member_ctor): Cache here
12154         DefaultMemberAttribute constructor.
12155
12156 2004-08-05  Martin Baulig  <martin@ximian.com>
12157
12158         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12159         Fix bug #59429.
12160
12161 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
12162
12163         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
12164         multi platforms problem.
12165
12166         * compiler.csproj: Included shared files.
12167
12168 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12169
12170         Fix bug 60333, 55971 in the more general way
12171         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12172         Added arg_type argument for constant conversion.
12173         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
12174
12175 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12176
12177         Fix bug #59760
12178         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
12179         OperatorArrayList, MethodCoreArrayList for typecontainer
12180         containers. Changed class member types to these new types.
12181         (MethodArrayList.DefineMembers): Added test for CS0659.
12182
12183 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
12184
12185         * cfold.cs: Synchronize the folding with the code in expression.cs
12186         Binary.DoNumericPromotions for uint operands.
12187
12188         * attribute.cs: Revert patch from Raja, it introduced a regression
12189         while building Blam-1.2.1 (hard to isolate a test case).
12190
12191 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12192
12193         Fix for #55382
12194         * class.cs:
12195         (TypeContainer.Define): Renamed to DefineContainerMembers because of
12196         name collision.
12197         (MethodCore.parent_method): New member. The method we're overriding
12198         if this is an override method.
12199         (MethodCore.CheckBase): Moved from Method class and made common.
12200         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
12201         private.
12202         (MethodCore.CheckForDuplications): New abstract method. For custom
12203         member duplication search in a container
12204         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
12205         method and its return type.
12206         (Event.conflict_symbol): New member. Symbol with same name in the
12207         parent class.
12208
12209         * decl.cs:
12210         (MemberCache.FindMemberWithSameName): New method. The method
12211         is looking for conflict with inherited symbols.
12212
12213 2004-08-04  Martin Baulig  <martin@ximian.com>
12214
12215         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
12216
12217         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
12218
12219 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12220
12221         * report.cs (Message): New enum for better error, warning reference in
12222         the code.
12223         (MessageData): New inner abstract class. It generally handles printing of
12224         error and warning messages.
12225         Removed unused Error, Warning, Message methods.
12226
12227 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12228
12229         Fix for cs0592-8.cs test
12230         * attribute.cs
12231         (Attributable.ValidAttributeTargets): Made public.
12232         (Attribute.ExplicitTarget): New member for explicit target value.
12233         (Attribute.CheckTargets): Now we translate explicit attribute
12234         target to Target here.
12235
12236 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
12237
12238         * ecore.cs (MethodGroupExpr): new IsBase property.
12239
12240         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
12241
12242         * delegate.cs (DelegateCreation): store a MethodGroupExpr
12243         rather than an instance expr.
12244
12245         (DelegateCreation.Emit): Use the method group rather than
12246         the instance expression. Also, if you have base.Foo as the
12247         method for a delegate, make sure to emit ldftn, not ldftnvirt.
12248
12249         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
12250
12251         (NewDelegate.DoResolve): Only check for the existance of Invoke
12252         if the method is going to be needed. Use MethodGroupExpr.
12253
12254         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
12255
12256         * expression.cs: For pointer arith., make sure to use
12257         the size of the type, not the size of the pointer to
12258         the type.
12259
12260 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12261
12262         Fix for #60722
12263         * class.cs (Class): Added error CS0502 test.
12264
12265 2004-08-03  John Luke  <jluke@cfl.rr.com>
12266             Raja R Harinath  <rharinath@novell.com>
12267
12268         Fix for #60997.
12269         * attribute.cs (Attribute.complained_before): New flag.
12270         (Attribute.ResolveType, Attribute.Resolve),
12271         (Attribute.DefinePInvokeMethod): Set it.
12272         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
12273         
12274 2004-08-03  Martin Baulig  <martin@ximian.com>
12275
12276         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
12277         use a user-defined operator; we still need to do numeric
12278         promotions in case one argument is a builtin type and the other
12279         one has an implicit conversion to that type.  Fixes #62322.
12280
12281 2004-08-02  Martin Baulig  <martin@ximian.com>
12282
12283         * statement.cs (LocalInfo.Flags): Added `IsThis'.
12284         (LocalInfo.IsThis): New public property.
12285         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
12286
12287 2004-08-01  Martin Baulig  <martin@ximian.com>
12288
12289         * class.cs (TypeContainer.GetClassBases): Don't set the default
12290         here since we may get called from GetPartialBases().
12291         (TypeContainer.DefineType): If GetClassBases() didn't return a
12292         parent, use the default one.
12293
12294 2004-07-30  Duncan Mak  <duncan@ximian.com>
12295
12296         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
12297
12298 2004-07-30  Martin Baulig  <martin@ximian.com>
12299
12300         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
12301
12302         * class.cs (SourceMethod): New public class, derive from the
12303         symbol writer's ISourceMethod.
12304         (Method): Use the new symbol writer API.
12305
12306         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
12307         as argument and use the new symbol writer.
12308
12309         * location.cs
12310         (SourceFile): Implement the symbol writer's ISourceFile.
12311         (Location.SymbolDocument): Removed.
12312         (Location.SourceFile): New public property.
12313
12314         * symbolwriter.cs: Use the new symbol writer API.
12315
12316 2004-07-30  Raja R Harinath  <rharinath@novell.com>
12317
12318         * Makefile (install-local): Remove.  Functionality moved to
12319         executable.make.
12320
12321 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
12322
12323         * Makefile: Install mcs.exe.config file together with mcs.exe.
12324         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
12325         correct runtime version.
12326         
12327 2004-07-25  Martin Baulig  <martin@ximian.com>
12328
12329         * class.cs
12330         (TypeContainer.RegisterOrder): Removed, this was unused.
12331         (TypeContainer, interface_order): Removed.
12332         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
12333         TypeContainer as argument since we can also be called with a
12334         `PartialContainer' for a partial class/struct/interface.
12335         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
12336         of checking whether we're an `Interface' - we could be a
12337         `PartialContainer'.
12338         (PartialContainer.Register): Override; call
12339         AddClass()/AddStruct()/AddInterface() on our parent.
12340
12341         * cs-parser.jay (interface_member_declaration): Add things to the
12342         `current_container', not the `current_class'.
12343
12344         * rootcontext.cs (RegisterOrder): The overloaded version which
12345         takes an `Interface' was unused, removed.
12346
12347         * typemanager.cs (TypeManager.LookupInterface): Return a
12348         `TypeContainer', not an `Interface'.
12349         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
12350         contain a `PartialContainer' for an interface, so check it's
12351         `Kind' to figure out what it is.
12352
12353 2004-07-25  Martin Baulig  <martin@ximian.com>
12354
12355         * class.cs (Class.DefaultTypeAttributes): New public constant.
12356         (Struct.DefaultTypeAttributes): Likewise.
12357         (Interface.DefaultTypeAttributes): Likewise.
12358         (PartialContainer.TypeAttr): Override this and add the
12359         DefaultTypeAttributes.
12360
12361 2004-07-25  Martin Baulig  <martin@ximian.com>
12362
12363         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
12364         we can just use the `Parent' field instead.
12365
12366 2004-07-25  Martin Baulig  <martin@ximian.com>
12367
12368         * class.cs (TypeContainer.Emit): Renamed to EmitType().
12369
12370 2004-07-25  Martin Baulig  <martin@ximian.com>
12371
12372         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
12373         our parts before defining any methods.
12374         (TypeContainer.VerifyImplements): Make this virtual.
12375         (ClassPart.VerifyImplements): Override and call VerifyImplements()
12376         on our PartialContainer.
12377
12378 2004-07-25  Martin Baulig  <martin@ximian.com>
12379
12380         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
12381
12382         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
12383         argument, we can just use the `Parent' field instead.
12384
12385         * class.cs
12386         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
12387         (MemberBase.DoDefine): Likewise.
12388
12389 2004-07-24  Martin Baulig  <martin@ximian.com>
12390
12391         * decl.cs (MemberCore.Parent): New public field.
12392         (DeclSpace.Parent): Moved to MemberCore.
12393
12394         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
12395         (MemberBase.ctor): Added TypeContainer argument, pass it to our
12396         parent's .ctor.
12397         (FieldBase, Field, Operator): Likewise.
12398         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
12399         (EventField, Event): Likewise.
12400
12401 2004-07-23  Martin Baulig  <martin@ximian.com>
12402
12403         * class.cs (PartialContainer): New public class.
12404         (ClassPart): New public class.
12405         (TypeContainer): Added support for partial classes.
12406         (TypeContainer.GetClassBases): Splitted some of the functionality
12407         out into GetNormalBases() and GetPartialBases().
12408
12409         * cs-tokenizer.cs (Token.PARTIAL): New token.
12410         (Tokenizer.consume_identifier): Added some hacks to recognize
12411         `partial', but only if it's immediately followed by `class',
12412         `struct' or `interface'.
12413
12414         * cs-parser.jay: Added support for partial clases.
12415
12416 2004-07-23  Martin Baulig  <martin@ximian.com>
12417
12418         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
12419         a `DeclSpace' and also made it readonly.
12420         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
12421         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
12422         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
12423
12424         * cs-parser.jay: Pass the `current_class', not the
12425         `current_container' (at the moment, this is still the same thing)
12426         to a new Method, Property, Event, Indexer or Constructor.
12427
12428 2004-07-23  Martin Baulig  <martin@ximian.com>
12429
12430         * cs-parser.jay (CSharpParser): Added a new `current_class' field
12431         and removed the `current_interface' one.
12432         (struct_declaration, class_declaration, interface_declaration):
12433         Set `current_class' to the newly created class/struct/interface;
12434         set their `Bases' and call Register() before parsing their body.
12435
12436 2004-07-23  Martin Baulig  <martin@ximian.com>
12437
12438         * class.cs (Kind): New public enum.
12439         (TypeContainer): Made this class abstract.
12440         (TypeContainer.Kind): New public readonly field.
12441         (TypeContainer.CheckDef): New public method; moved here from
12442         cs-parser.jay.
12443         (TypeContainer.Register): New public abstract method.
12444         (TypeContainer.GetPendingImplementations): New public abstract
12445         method.
12446         (TypeContainer.GetClassBases): Removed the `is_class' and
12447         `is_iface' parameters.
12448         (TypeContainer.DefineNestedTypes): Formerly known as
12449         DoDefineType().
12450         (ClassOrStruct): Made this class abstract.
12451
12452         * tree.cs (RootTypes): New public type. 
12453
12454 2004-07-20  Martin Baulig  <martin@ximian.com>
12455
12456         * tree.cs (Tree.RecordNamespace): Removed.
12457         (Tree.Namespaces): Removed.
12458
12459         * rootcontext.cs (RootContext.IsNamespace): Removed.
12460
12461         * cs-parser.jay (namespace_declaration): Just create a new
12462         NamespaceEntry here.
12463
12464 2004-07-20  Martin Baulig  <martin@ximian.com>
12465
12466         * statement.cs (ExceptionStatement): New abstract class.  This is
12467         now used as a base class for everyone who's using `finally'.
12468         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
12469         our local variables before using them.
12470
12471         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
12472         virtual method.  This is used by Yield.Resolve() to "steal" an
12473         outer block's `finally' clauses.
12474         (FlowBranchingException): The .ctor now takes an ExceptionStatement
12475         argument.
12476
12477         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
12478         version which takes an ExceptionStatement.  This version must be
12479         used to create exception branchings.
12480
12481         * iterator.cs
12482         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
12483         (Iterator.EmitMoveNext): Added exception support; protect the
12484         block with a `fault' clause, properly handle 'finally' clauses.
12485         (Iterator.EmitDispose): Run all the `finally' clauses here.
12486
12487 2004-07-20  Martin Baulig  <martin@ximian.com>
12488
12489         * iterator.cs: This is the first of a set of changes in the
12490         iterator code.  Match the spec more closely: if we're an
12491         IEnumerable, then GetEnumerator() must be called.  The first time
12492         GetEnumerator() is called, it returns the current instance; all
12493         subsequent invocations (if any) must create a copy.
12494
12495 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
12496
12497         * expression.cs: Resolve the constant expression before returning
12498         it. 
12499
12500 2004-07-19  Martin Baulig  <martin@ximian.com>
12501
12502         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
12503         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
12504         the return type of the new EmitContext.
12505
12506 2004-07-18  Martin Baulig  <martin@ximian.com>
12507
12508         * class.cs (Property.Define): Fix iterators.
12509
12510         * iterators.cs (Iterator.Define): Moved the
12511         `container.AddInterator (this)' call here from the .ctor; only do
12512         it if we resolved successfully.
12513
12514 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
12515
12516         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
12517         `true' for preprocessing directives that we parse.  The return
12518         value indicates whether we should return to regular tokenizing or
12519         not, not whether it was parsed successfully.
12520
12521         In the past if we were in: #if false ... #line #endif, we would
12522         resume parsing after `#line'.  See bug 61604.
12523
12524         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
12525         building: IsEnumType should return true only for enums, not for
12526         enums or System.Enum itself.  This fixes #61593.
12527
12528         Likely what happened is that corlib was wrong: mcs depended on
12529         this bug in some places.  The bug got fixed, we had to add the
12530         hack, which caused bug 61593.
12531
12532         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
12533         that was a workaround for the older conditions.
12534
12535 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
12536
12537         * assign.cs: IAssignMethod has a new interface, as documented
12538         inline. All assignment code now uses this new api.
12539
12540         * ecore.cs, expression.cs: All classes which implement
12541         IAssignMethod now use the new interface.
12542
12543         * expression.cs (Invocation): add a hack to EmitCall so that
12544         IndexerAccess can be the target of a compound assignment without
12545         evaluating its arguments twice.
12546
12547         * statement.cs: Handle changes in Invocation api.
12548
12549 2004-07-16  Martin Baulig  <martin@ximian.com>
12550
12551         * iterators.cs: Rewrote this.  We're now using one single Proxy
12552         class for both the IEnumerable and the IEnumerator interface and
12553         `Iterator' derives from Class so we can use the high-level API.
12554
12555         * class.cs (TypeContainer.AddIterator): New method.
12556         (TypeContainer.DoDefineType): New protected virtual method, which
12557         is called from DefineType().
12558         (TypeContainer.DoDefineMembers): Call DefineType() and
12559         DefineMembers() on all our iterators.
12560         (TypeContainer.Emit): Call Emit() on all our iterators.
12561         (TypeContainer.CloseType): Call CloseType() on all our iterators.
12562
12563         * codegen.cs (EmitContext.CurrentIterator): New public field.
12564
12565 2004-07-15  Martin Baulig  <martin@ximian.com>
12566
12567         * typemanager.cs
12568         (TypeManager.not_supported_exception_type): New type.   
12569
12570 2004-07-14  Martin Baulig  <martin@ximian.com>
12571
12572         * iterators.cs: Use real error numbers.
12573
12574 2004-07-14  Martin Baulig  <martin@ximian.com>
12575
12576         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
12577         requires this to be a System.Collection.IEnumerable and not a
12578         class implementing that interface.
12579         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
12580
12581 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
12582
12583         * class.cs: Fixed previous fix, it broke some error tests.
12584
12585 2004-07-12  Martin Baulig  <martin@ximian.com>
12586
12587         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
12588         Fixes #61293.
12589
12590 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
12591
12592         * assign.cs (LocalTemporary): Add new argument: is_address,If
12593         `is_address' is true, then the value that we store is the address
12594         to the real value, and not the value itself.
12595         
12596         * ecore.cs (PropertyExpr): use the new local temporary
12597         stuff to allow us to handle X.Y += z (where X is a struct)
12598
12599 2004-07-08  Martin Baulig  <martin@ximian.com>
12600
12601         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
12602         not always return, just like we're doing in Using.Resolve().
12603
12604 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
12605
12606         * cs-parser.jay (fixed_statement): flag this as Pinned.
12607
12608 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
12609
12610         * typemanager.cs (TypeManager): Removed MakePinned method, this
12611         mechanism is replaced with the .NET 2.x compatible mechanism of
12612         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
12613
12614         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
12615         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
12616         `IsFixed' property which has a different meaning.
12617
12618 2004-07-02  Raja R Harinath  <rharinath@novell.com>
12619
12620         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
12621         visible from inside a nested class, not just the names of the
12622         immediately enclosing class.
12623         Fix for bug #60730.
12624
12625 2004-06-24  Raja R Harinath  <rharinath@novell.com>
12626
12627         * expression.cs (BetterConversion): Remove buggy special-case
12628         handling of "implicit constant expression conversions".  At this
12629         point, we already know that the conversion is possible -- we're
12630         only checking to see which is better.
12631
12632 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12633
12634         * cs-parser.jay: Added error CS0210 test.
12635
12636 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12637
12638         * cs-parser.jay: Added error CS0134 test.
12639
12640 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12641
12642         Fix bug #52507
12643         * cs-parser.jay: Added error CS0145 test.
12644
12645 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12646
12647         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
12648
12649 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
12650         
12651         * expression.cs (StackAlloc.Resolve): The argument may not
12652         be a constant; deal with this case.
12653         
12654 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
12655
12656         * attribute.cs (IndexerName_GetIndexerName): Renamed to
12657         GetIndexerAttributeValue.
12658         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
12659
12660         * class.cs (Indexer.Define): Added error tests for CS0415,
12661         CS0609.
12662
12663 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
12664
12665         * attribute.cs (Attribute.Resolve): Keep field code in sync with
12666         property code.
12667
12668 2004-06-23  Martin Baulig  <martin@ximian.com>
12669
12670         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
12671         neither return nor throw, reset the barrier as well.  Fixes #60457.
12672
12673 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
12674
12675         * class.cs : EventAttributes is now set to None by default.
12676           This fixes bug #60459.
12677
12678 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12679
12680         Fix bug #60219
12681         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12682         Don't throw exception but return null (it's sufficient now).
12683
12684 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12685
12686         * typemanager.cs (GetArgumentTypes): Faster implementation.
12687
12688 2004-06-18  Martin Baulig  <martin@ximian.com>
12689
12690         * attribute.cs (Attribute.Resolve): Check whether we're an
12691         EmptyCast which a Constant child.  Fixes #60333.
12692
12693 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
12694
12695         * statement.cs (EmitCollectionForeach): Account for the fact that
12696         not all valuetypes are in areas which we can take the address of.
12697         For these variables, we store to a temporary variable. Also, make
12698         sure that we dont emit a `callvirt' on a valuetype method.
12699
12700 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12701
12702         * expression.cs (StackAlloc.DoReSolve): Added test for
12703         negative parameter (CS0247).
12704
12705 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12706
12707         Fix bug #59792
12708         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
12709
12710 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12711
12712         Fix bug #59781
12713         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
12714         ulong.
12715
12716 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12717
12718         Fix bug #58254 & cs1555.cs, cs1556.cs
12719         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
12720
12721 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12722
12723         * cs-parser.jay: Added error CS1669 test for indexers.
12724
12725 2004-06-11  Martin Baulig  <martin@ximian.com>
12726
12727         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
12728         call this twice: for params and varargs methods.
12729
12730 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12731
12732         * class.cs:
12733         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
12734
12735 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12736
12737         * attribute.cs (Attribute.GetValidTargets): Made public.
12738
12739         * class.cs: 
12740         (AbstractPropertyEventMethod): New class for better code sharing.
12741         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
12742         CS1667 report.
12743         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
12744
12745 2004-06-11  Raja R Harinath  <rharinath@novell.com>
12746
12747         Fix bug #59477.
12748         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
12749         that the call to Resolve is part of a MemberAccess.
12750         (Expression.Resolve): Use it for SimpleName resolution.
12751         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
12752         Add 'intermediate' boolean argument.
12753         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
12754         error message when the SimpleName can be resolved ambiguously
12755         between an expression and a type.
12756         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
12757         public.
12758         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
12759         call on the left-side.
12760
12761 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12762
12763         * class.cs:
12764         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
12765
12766 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12767
12768         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
12769
12770 2004-06-11  Martin Baulig  <martin@ximian.com>
12771
12772         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
12773         varargs methods if applicable.
12774
12775 2004-06-11  Martin Baulig  <martin@ximian.com>
12776
12777         * expression.cs (Invocation.EmitCall): Don't use
12778         `method.CallingConvention == CallingConventions.VarArgs' since the
12779         method could also have `CallingConventions.HasThis'.
12780
12781 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12782
12783         * class.cs (Event.GetSignatureForError): Implemented.
12784         Fixed crash in error test cs3010.cs
12785
12786 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
12787
12788         * cs-tokenizer.cs: Change the way we track __arglist to be
12789         consistent with the other keywords.
12790
12791 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
12792
12793         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
12794         tomorrow.
12795
12796 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
12797
12798         * codegen.cs: Check that all referenced assemblies have a strongname
12799         before strongnaming the compiled assembly. If not report error CS1577.
12800         Fix bug #56563. Patch by Jackson Harper.
12801         * typemanager.cs: Added a method to return all referenced assemblies.
12802         Fix bug #56563. Patch by Jackson Harper.
12803
12804 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12805
12806         * class.cs:
12807         (Method.ApplyAttributeBuilder): Moved and added conditional
12808         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
12809
12810         * delegate.cs:
12811         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
12812
12813 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12814
12815         Fixed #59640
12816         * class.cs: (EventField.attribute_targets): Changed default target.
12817
12818 2004-06-08  Martin Baulig  <martin@ximian.com>
12819
12820         * expression.cs (Invocation.EmitCall): Enable varargs methods.
12821
12822 2004-06-08  Martin Baulig  <martin@ximian.com>
12823
12824         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
12825
12826 2004-06-07  Martin Baulig  <martin@ximian.com>
12827
12828         Added support for varargs methods.
12829
12830         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
12831         keyword.
12832
12833         * cs-parser.jay: Added support for `__arglist'.
12834
12835         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
12836
12837         * expression.cs (Argument.AType): Added `ArgList'.
12838         (Invocation): Added support for varargs methods.
12839         (ArglistAccess): New public class.
12840         (Arglist): New public class.
12841
12842         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
12843
12844         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
12845         a method's top-level block if the method has varargs.
12846
12847         * support.cs (ReflectionParameters, InternalParameters): Added
12848         support for varargs methods.    
12849
12850 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
12851
12852         * class.cs: Provide location in indexer error report.
12853
12854         * driver.cs: Use standard names.
12855
12856         * namespace.cs: Catch the use of using after a namespace has been
12857         declared also on using aliases.
12858
12859 2004-06-03  Raja R Harinath  <rharinath@novell.com>
12860
12861         Bug #50820.
12862         * typemanager.cs (closure_private_ok, closure_invocation_type)
12863         (closure_qualifier_type, closure_invocation_assembly)
12864         (FilterWithClosure): Move to ...
12865         (Closure): New internal nested class.
12866         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
12867         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
12868         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
12869         (MemberLookup, MemberLookupFailed): Use it.
12870         * expression.cs (New.DoResolve): Treat the lookup for the
12871         constructor as being qualified by the 'new'ed type.
12872         (Indexers.GetIndexersForTypeOrInterface): Update.
12873
12874 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
12875
12876         * attribute.cs
12877         (GetConditionalAttributeValue): New method. Returns
12878         condition of ConditionalAttribute.
12879         (SearchMulti): New method.  Returns all attributes of type 't'.
12880         Use it when attribute is AllowMultiple = true.
12881         (IsConditionalMethodExcluded): New method.
12882
12883         * class.cs
12884         (Method.IsExcluded): Implemented. Returns true if method has conditional
12885         attribute and the conditions is not defined (method is excluded).
12886         (IMethodData): Extended interface for ConditionalAttribute support.
12887         (PropertyMethod.IsExcluded): Implemented.
12888
12889         * decl.cs
12890         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
12891
12892         * expression.cs
12893         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
12894         on the method.
12895
12896 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
12897
12898         * expression.cs (ArrayCreationExpression): Make this just an
12899         `expression'. It can't be a statement, so the code here was
12900         dead.
12901
12902 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12903
12904         Fixed #59072
12905         * typemanager.cs (GetFullNameSignature): New method for
12906         MethodBase types.
12907
12908 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12909
12910         Fixed #56452
12911         * class.cs (MemberBase.GetSignatureForError): New virtual method.
12912         Use this method when MethodBuilder is null.
12913         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
12914         Added test for error CS0626 (MONO reports error for this situation).
12915         (IMethodData.GetSignatureForError): Extended interface.
12916
12917 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12918
12919         * attribute.cs
12920         (AttributeTester.GetObsoleteAttribute): Returns instance of
12921         ObsoleteAttribute when type is obsolete.
12922
12923         * class.cs
12924         (TypeContainer.VerifyObsoleteAttribute): Override.
12925         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
12926         (MethodCode.VerifyObsoleteAttribute): Override.
12927         (MemberBase.VerifyObsoleteAttribute): Override.
12928
12929         * decl.cs
12930         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
12931         and report proper error.
12932
12933         *delegate.cs
12934         Delegate.VerifyObsoleteAttribute): Override.
12935
12936         * ecore.cs
12937         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
12938         and report proper error.
12939         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
12940
12941         * enum.cs
12942         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
12943         and enum member.
12944
12945         * expression.cs
12946         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
12947         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
12948         Added test for ObsoleteAttribute.
12949
12950         * statement.cs
12951         (Catch): Derived from Statement.
12952
12953 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12954  
12955         Fixed bug #59071 & cs0160.cs
12956  
12957         * statement.cs (Try.Resolve): Check here whether order of catch
12958         clauses matches their dependencies.
12959
12960 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
12961
12962         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
12963         caused a regression: #59343.  Referencing nested classes from an
12964         assembly stopped working.
12965
12966 2004-05-31  Martin Baulig  <martin@ximian.com>
12967
12968         MCS is now frozen for beta 2.
12969
12970 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12971
12972         * convert.cs: add a trivial cache for overload operator resolution.
12973
12974 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12975
12976         * decl.cs: If possible, use lookuptypedirect here. We can only do
12977         this if there is no `.' after the namespace. Avoids using
12978         LookupType, which does lots of slow processing.
12979         (FindNestedType) New method, does what it says :-).
12980         * namespace.cs: use LookupTypeDirect.
12981         * rootcontext.cs: use membercache, if possible.
12982         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
12983
12984 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12985
12986         * expression.cs:
12987         According to the spec, 
12988
12989         In a member access of the form E.I, if E is a single identifier,
12990         and if the meaning of E as a simple-name (§7.5.2) is a constant,
12991         field, property, localvariable, or parameter with the same type as
12992         the meaning of E as a type-name (§3.8), then both possible
12993         meanings of E are permitted.
12994
12995         We did not check that E as a simple-name had the same type as E as
12996         a type name.
12997
12998         This trivial check gives us 5-7% on bootstrap time.
12999
13000 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13001
13002         * expression.cs (Invocation.OverloadResolve): Avoid the
13003         use of hashtables and boxing here by allocating on demand.
13004
13005 2004-05-30  Martin Baulig  <martin@ximian.com>
13006
13007         * rootcontext.cs (RootContext.LookupType): Don't cache things if
13008         we're doing a silent lookup.  Don't try to lookup nested types in
13009         TypeManager.object_type (thanks to Ben Maurer).
13010
13011 2004-05-30  Martin Baulig  <martin@ximian.com>
13012
13013         Committing a patch from Ben Maurer.
13014
13015         * rootcontext.cs (RootContext.LookupType): Cache negative results.
13016
13017 2004-05-29  Martin Baulig  <martin@ximian.com>
13018
13019         * class.cs (IMethodData.ShouldIgnore): New method.
13020
13021         * typemanager.cs (TypeManager.MethodFlags): Don't take a
13022         `Location' argument, we don't need it anywhere.  Use
13023         `IMethodData.ShouldIgnore ()' instead of
13024         `MethodData.GetMethodFlags ()'.
13025         (TypeManager.AddMethod): Removed.
13026         (TypeManager.AddMethod2): Renamed to AddMethod.
13027
13028 2004-05-29  Martin Baulig  <martin@ximian.com>
13029
13030         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
13031
13032         * convert.cs (Convert.ImplicitReferenceConversion): If we're
13033         converting from a class type S to an interface type and we already
13034         have an object on the stack, don't box it again.  Fixes #52578.
13035
13036 2004-05-29  Martin Baulig  <martin@ximian.com>
13037
13038         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
13039         Added support for `params' parameters.  Fixes #59267.
13040
13041 2004-05-29  Martin Baulig  <martin@ximian.com>
13042
13043         * literal.cs (NullPointer): Provide a private .ctor which sets
13044         `type' to TypeManager.object_type.  Fixes #59048.
13045
13046 2004-05-29  Martin Baulig  <martin@ximian.com>
13047
13048         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
13049         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
13050
13051         * ecore.cs (EventExpr.instance_expr): Make the field private.
13052
13053 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
13054
13055         Fixed bug #50080 & cs0214-2.cs
13056         * expression.cs (Cast.DoResolve): Check unsafe context here.
13057         
13058         * statement.cs (Resolve.DoResolve): Likewise.
13059
13060 2004-05-26  Martin Baulig  <martin@ximian.com>
13061
13062         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
13063
13064         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
13065         (RootContext.LookupType): Pass down the `silent' flag.
13066
13067 2004-05-25  Martin Baulig  <martin@ximian.com>
13068
13069         * expression.cs
13070         (MethodGroupExpr.IdenticalTypeName): New public property.
13071         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
13072         expression actually refers to a type.
13073
13074 2004-05-25  Martin Baulig  <martin@ximian.com>
13075
13076         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
13077         for #56176 and made it actually work.
13078
13079 2004-05-25  Martin Baulig  <martin@ximian.com>
13080
13081         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
13082         (FieldExpr, PropertyExpr): Override and implement
13083         CacheTemporaries.  Fixes #52279.
13084
13085 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
13086
13087         * location.cs: In the new compiler listing a file twice is a
13088         warning, not an error.
13089
13090 2004-05-24  Martin Baulig  <martin@ximian.com>
13091
13092         * enum.cs (Enum.DefineType): For the `BaseType' to be a
13093         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
13094
13095 2004-05-24  Martin Baulig  <martin@ximian.com>
13096
13097         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
13098         walking the `using' list.  Fixes #53921.
13099
13100 2004-05-24  Martin Baulig  <martin@ximian.com>
13101
13102         * const.cs (Const.LookupConstantValue): Added support for
13103         EmptyCast's; fixes #55251.
13104
13105 2004-05-24  Martin Baulig  <martin@ximian.com>
13106
13107         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
13108         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
13109         which does the CS0135 check.  The reason is that we first need to
13110         check whether the variable actually exists.
13111
13112 2004-05-24  Martin Baulig  <martin@ximian.com>
13113
13114         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
13115         than RootContext.LookupType() to find the explicit interface
13116         type.  Fixes #58584.
13117
13118 2004-05-24  Raja R Harinath  <rharinath@novell.com>
13119
13120         * Makefile: Simplify.  Use executable.make.
13121         * mcs.exe.sources: New file.  List of sources of mcs.exe.
13122
13123 2004-05-24  Anders Carlsson  <andersca@gnome.org>
13124
13125         * decl.cs:
13126         * enum.cs:
13127         Use the invariant culture when doing String.Compare for CLS case
13128         sensitivity.
13129         
13130 2004-05-23  Martin Baulig  <martin@ximian.com>
13131
13132         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
13133         don't have any dots.  Fixes #52622, added cs0246-8.cs.
13134
13135         * namespace.cs (NamespaceEntry.Lookup): Likewise.
13136         
13137 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13138
13139         * class.cs (MemberBase.Define): Reuse MemberType member for 
13140         resolved type. Other methods can use it too.
13141
13142 2004-05-23  Martin Baulig  <martin@ximian.com>
13143
13144         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
13145         the variable also exists in the current block (otherwise, we need
13146         to report a CS0103).  Fixes #58670.
13147
13148 2004-05-23  Martin Baulig  <martin@ximian.com>
13149
13150         * flowanalysis.cs (Reachability.Reachable): Compute this
13151         on-the-fly rather than storing it as a field.
13152
13153 2004-05-23  Martin Baulig  <martin@ximian.com>
13154
13155         * flowanalysis.cs (Reachability.And): Manually compute the
13156         resulting `barrier' from the reachability.      
13157        
13158 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13159
13160         Fix bug #57835
13161         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
13162         instance of ObsoleteAttribute when symbol is obsolete.
13163
13164         * class.cs
13165         (IMethodData): Extended interface for ObsoleteAttribute support.
13166
13167 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13168
13169         * attribute.cs: Fix bug #55970
13170
13171 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13172
13173         Fix bug #52705
13174         * attribute.cs
13175         (GetObsoleteAttribute): New method. Creates the instance of
13176         ObsoleteAttribute.
13177         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
13178         ObsoleteAttribute when member is obsolete.
13179         (AttributeTester.Report_ObsoleteMessage): Common method for
13180         Obsolete error/warning reporting.
13181
13182         * class.cs
13183         (TypeContainer.base_classs_type): New member for storing parent type.
13184
13185         * decl.cs
13186         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
13187         for this MemberCore.
13188
13189 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13190
13191         * attribute.cs, const.cs: Fix bug #58590
13192
13193 2004-05-21  Martin Baulig  <martin@ximian.com>
13194
13195         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
13196         out parameters if the end of the method is unreachable.  Fixes
13197         #58098. 
13198
13199 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13200
13201         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
13202         Hari was right, why extra method.
13203
13204 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13205
13206         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
13207
13208 2004-05-20  Martin Baulig  <martin@ximian.com>
13209
13210         Merged this back from gmcs to keep the differences to a minumum.
13211
13212         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
13213         instead of a Declspace.
13214         (Attribute.ResolveType): Likewise.
13215         (Attributes.Search): Likewise.
13216         (Attributes.Contains): Likewise.
13217         (Attributes.GetClsCompliantAttribute): Likewise.
13218
13219         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
13220         argument.
13221         (MethodData.ApplyAttributes): Take an EmitContext instead of a
13222         DeclSpace.
13223
13224 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
13225
13226         Fix bug #58688 (MCS does not report error when the same attribute
13227         is assigned twice)
13228
13229         * attribute.cs (Attribute.Emit): Distinction between null and default.
13230
13231 2004-05-19  Raja R Harinath  <rharinath@novell.com>
13232
13233         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
13234         of a top-level attribute without an attribute target.
13235         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
13236         Make non-static.
13237         (Attribute.Conditional_GetConditionName), 
13238         (Attribute.Obsolete_GetObsoleteMessage): Update.
13239         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
13240         part of ScanForIndexerName.
13241         (Attribute.CanIgnoreInvalidAttribute): New function.
13242         (Attribute.ScanForIndexerName): Move to ...
13243         (Attributes.ScanForIndexerName): ... here.
13244         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
13245         (Attributes.Search): New internal variant that can choose not to
13246         complain if types aren't resolved.  The original signature now
13247         complains.
13248         (Attributes.GetClsCompliantAttribute): Use internal variant, with
13249         complaints suppressed.
13250         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
13251         only if it not useful.
13252         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
13253         top-level for attributes that are shared between the assembly
13254         and a top-level class.
13255         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
13256         * class.cs: Update to reflect changes.
13257         (DefineIndexers): Fuse loops.
13258         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
13259         a couple more variants of attribute names.
13260
13261 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
13262
13263         Fix bug #52585 (Implemented explicit attribute declaration)
13264
13265         * attribute.cs:
13266         (Attributable.ValidAttributeTargets): New abstract method. It gets
13267         list of valid attribute targets for explicit target declaration.
13268         (Attribute.Target): It holds target itself.
13269         (AttributeSection): Removed.
13270         (Attribute.CheckTargets): New method. It checks whether attribute
13271         target is valid for the current element.
13272
13273         * class.cs:
13274         (EventProperty): New class. For events that are declared like
13275         property (with add and remove accessors).
13276         (EventField): New class. For events that are declared like field.
13277         class.cs
13278
13279         * cs-parser.jay: Implemented explicit attribute target declaration.
13280
13281         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
13282         Override ValidAttributeTargets.
13283
13284         * parameter.cs:
13285         (ReturnParameter): Class for applying custom attributes on 
13286         the return type.
13287         (ParameterAtribute): New class. Class for applying custom
13288         attributes on the parameter type.
13289
13290 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
13291
13292         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
13293         definitions. 
13294
13295         (Method): Allow UNSAFE here.
13296
13297         * modifiers.cs: Support unsafe reporting.
13298
13299 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
13300
13301         * decl.cs: Fix bug #58478.
13302
13303 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13304
13305         * statement.cs: When checking for unreachable code on an EmptyStatement,
13306         set the location. Fixes bug #58488.
13307
13308 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
13309
13310         * driver.cs: Add -pkg handling.
13311
13312         From Gonzalo: UseShelLExecute=false
13313
13314 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
13315
13316         * attribute.cs:
13317         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
13318         for attribute.
13319         (Attribute.IsClsCompliaceRequired): Moved to base for better
13320         accesibility.
13321         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
13322         when attribute is AttributeUsageAttribute.
13323         (Attribute.GetValidTargets): Simplified.
13324         (Attribute.GetAttributeUsage): New method returns AttributeUsage
13325         attribute for this type.
13326         (Attribute.ApplyAttributes): Method renamed to Emit and make
13327         non-static.
13328         (GlobalAttributeSection): New class for special handling of global
13329         attributes (assembly, module).
13330         (AttributeSection.Emit): New method.
13331
13332         * class.cs: Implemented Attributable abstract methods.
13333         (MethodCore.LabelParameters): Moved to Parameter class.
13334         (Accessor): Is back simple class.
13335         (PropertyMethod): Implemented Attributable abstract class.
13336         (DelegateMethod): Implemented Attributable abstract class.
13337         (Event): New constructor for disctintion between normal Event
13338         and Event with accessors.
13339
13340         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
13341
13342         * codegen.cs, const.cs, decl.cs, delegate.cs:
13343         (CommonAssemblyModulClass): Implemented Attributable abstract class
13344         and simplified.
13345
13346         * enum.cs: Implement IAttributeSupport interface.
13347         (EnumMember): New class for emum members. Implemented Attributable
13348         abstract class
13349
13350         * parameter.cs:
13351         (ParameterBase): Is abstract.
13352         (ReturnParameter): New class for easier [return:] attribute handling.
13353
13354         * typemanager.cs: Removed builder_to_attr.
13355
13356 2004-05-11  Raja R Harinath  <rharinath@novell.com>
13357
13358         Fix bug #57151.
13359         * attribute.cs (Attribute.GetPositionalValue): New function.
13360         * class.cs (TypeContainer.VerifyMembers): New function.
13361         (TypeContainer.Emit): Use it.
13362         (ClassOrStruct): New base class for Class and Struct.
13363         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
13364         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
13365         class.
13366         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
13367         then each non-static field should have a FieldOffset attribute.
13368         Otherwise, none of the fields should have a FieldOffset attribute.
13369         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
13370         and FieldOffset attributes.
13371         * typemanager.cs (TypeManager.struct_layout_attribute_type)
13372         (TypeManager.field_offset_attribute_type): New core types.
13373         (TypeManager.InitCoreTypes): Initialize them.
13374
13375 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
13376
13377         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
13378         Return correct type.
13379         From bug #58270.
13380
13381 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
13382
13383         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
13384         be implicitly converted to ulong.
13385         
13386         * expression.cs: The logic for allowing operator &, | and ^ worked
13387         was wrong, it worked before because we did not report an error in
13388         an else branch.  Fixes 57895.
13389
13390         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
13391         allow volatile fields to be reference types.
13392
13393 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
13394
13395         * driver.cs: Add support for /debug-
13396
13397 2004-05-07  Raja R Harinath  <rharinath@novell.com>
13398
13399         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
13400         Add a 'complain' parameter to silence errors.
13401         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
13402         silently overlooked type-resolutions.
13403         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
13404         to reflect changes.
13405         (Attributes.Search): New function.
13406         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
13407         (Attributes.GetAttributeFullName): Remove hack.
13408         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
13409         Update to reflect changes.
13410         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
13411         Use Attributes.Search instead of nested loops.
13412
13413 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
13414
13415         * decl.cs:
13416         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
13417         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
13418         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
13419
13420         * report.cs: (Report.Warning): Renamed to Warning_T because of
13421         parameter collision.
13422
13423 2004-05-05  Raja R Harinath  <rharinath@novell.com>
13424
13425         * expression.cs (MemberAccess.ResolveMemberAccess):
13426         Exit with non-zero status after Report.Error.
13427         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
13428         Likewise.
13429         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
13430
13431 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13432
13433         * support.cs: Don't hang when the file is empty.
13434
13435 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13436
13437         * support.cs: In SeekableStreamReader, compute the preamble size of the
13438           underlying stream. Position changes should take into account that initial
13439           count of bytes.
13440
13441 2004-05-03  Todd Berman  <tberman@sevenl.net>
13442
13443         * driver.cs: remove unused GetSysVersion function.
13444
13445 2004-05-03  Todd Berman  <tberman@sevenl.net>
13446
13447         * driver.cs: Remove the hack from saturday, as well as the hack
13448         from jackson (LoadAssemblyFromGac), also adds the CWD to the
13449         link_paths to get that bit proper.
13450
13451 2004-05-01  Todd Berman  <tberman@sevenl.net>
13452
13453         * driver.cs: Try a LoadFrom before a Load, this checks the current
13454         path. This is currently a bug in mono that is be fixed, however, this
13455         provides a workaround for now. This will be removed when the bug
13456         is fixed.
13457
13458 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
13459
13460         * CryptoConvert.cs: Updated to latest version. Fix issue with 
13461         incomplete key pairs (#57941).
13462
13463 2004-05-01  Todd Berman  <tberman@sevenl.net>
13464
13465         * driver.cs: Remove '.' from path_chars, now System.* loads properly
13466         from the GAC
13467
13468 2004-04-30  Jackson Harper  <jackson@ximian.com>
13469
13470         * codegen.cs: Open keys readonly.
13471         
13472 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13473
13474         * typemanager.cs: don't report cyclic struct layout when a struct
13475         contains 2 or more fields of the same type. Failed for Pango.AttrShape
13476         which has 2 Pango.Rectangle fields.
13477
13478 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13479
13480         * expression.cs: Handle IntPtr comparisons with IL code
13481         rather than a method call.
13482
13483 2004-04-29  Martin Baulig  <martin@ximian.com>
13484
13485         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
13486         the list of PropertyInfo's in class hierarchy and find the
13487         accessor.  Fixes #56013.
13488
13489 2004-04-29  Martin Baulig  <martin@ximian.com>
13490
13491         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
13492
13493 2004-04-29  Martin Baulig  <martin@ximian.com>
13494
13495         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13496
13497         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
13498
13499 2004-04-29  Martin Baulig  <martin@ximian.com>
13500
13501         * class.cs (ConstructorInitializer.Resolve): Check whether the
13502         parent .ctor is accessible.  Fixes #52146.
13503
13504 2004-04-29  Martin Baulig  <martin@ximian.com>
13505
13506         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13507
13508         * statement.cs (Using.EmitLocalVariableDecls): Use
13509         TypeManager.idisposable_type, not typeof (IDisposable).
13510         (Foreach.EmitCollectionForeach): Added support for valuetypes.
13511
13512 2004-04-29  Martin Baulig  <martin@ximian.com>
13513
13514         * class.cs (Event.Define): Don't emit the field and don't set
13515         RTSpecialName and SpecialName for events on interfaces.  Fixes
13516         #57703. 
13517
13518 2004-04-29  Raja R Harinath  <rharinath@novell.com>
13519
13520         Refactor Attribute.ApplyAttributes.
13521         * attribute.cs (Attributable): New base class for objects that can
13522         have Attributes applied on them.
13523         (Attribute): Make AttributeUsage fields public.
13524         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
13525         (Attribute.IsInternalCall): New property.
13526         (Attribute.UsageAttr): Convert to a public read-only property.
13527         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
13528         (Attribute.ResolveType, Attribute.Resolve)
13529         (Attribute.ScanForIndexerName): Update to reflect changes.
13530         (Attribute.CheckAttributeTarget): Re-format.
13531         (Attribute.ApplyAttributes): Refactor, to various
13532         Attributable.ApplyAttributeBuilder methods.
13533         * decl.cs (MemberCore): Make Attributable.
13534         * class.cs (Accessor): Make Attributable.
13535         (MethodData.ApplyAttributes): Use proper attribute types, not
13536         attribute names.
13537         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
13538         (TypeContainer.ApplyAttributeBuilder)
13539         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
13540         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
13541         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
13542         (Operator.ApplyAttributeBuilder): New factored-out methods.
13543         * const.cs (Const.ApplyAttributeBuilder): Likewise.
13544         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
13545         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
13546         * parameter.cs (ParameterBase): New Attributable base class
13547         that can also represent Return types.
13548         (Parameter): Update to the changes.
13549
13550 2004-04-29  Jackson Harper  <jackson@ximian.com>
13551
13552         * driver.cs: Prefer the corlib system version when looking for
13553         assemblies in the GAC. This is still a hack, but its a better hack
13554         now.
13555         
13556 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
13557
13558         * decl.cs, enum.cs: Improved error 3005 reporting.
13559   
13560         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
13561         (related_symbols): New private member for list of symbols
13562         related to reported error/warning.
13563         
13564         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
13565
13566 2004-04-29  Martin Baulig  <martin@ximian.com>
13567
13568         * ecore.cs (Expression.Constantify): If we're an enum and
13569         TypeManager.TypeToCoreType() doesn't give us another type, use
13570         t.UnderlyingSystemType.  Fixes #56178.  
13571
13572 2004-04-29  Martin Baulig  <martin@ximian.com>
13573
13574         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
13575         interfaces and for each interface, only add members directly
13576         declared in that interface.  Fixes #53255.
13577
13578 2004-04-28  Martin Baulig  <martin@ximian.com>
13579
13580         * expression.cs (ConditionalLogicalOperator): Use a temporary
13581         variable for `left' to avoid that we evaluate it more than once;
13582         bug #52588.
13583
13584 2004-04-28  Martin Baulig  <martin@ximian.com>
13585
13586         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
13587         `void[]' (CS1547).
13588
13589 2004-04-28  Martin Baulig  <martin@ximian.com>
13590
13591         * statement.cs (LocalInfo.Resolve): Check whether the type is not
13592         void (CS1547).
13593
13594         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
13595         whether the type is not void (CS1547).
13596
13597 2004-04-28  Martin Baulig  <martin@ximian.com>
13598
13599         * expression.cs (Unary.DoResolveLValue): Override this and report
13600         CS0131 for anything but Operator.Indirection.
13601
13602 2004-04-28  Martin Baulig  <martin@ximian.com>
13603
13604         Committing a patch from Ben Maurer; see bug #50820.
13605
13606         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13607         check for classes.
13608
13609         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13610         classes.        
13611
13612 2004-04-28  Martin Baulig  <martin@ximian.com>
13613
13614         Committing a patch from Ben Maurer; see bug #50820.
13615
13616         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13617         check for classes.
13618
13619         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13620         classes.        
13621
13622 2004-04-28  Martin Baulig  <martin@ximian.com>
13623
13624         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
13625         (Block.AddLabel): Call DoLookupLabel() to only search in the
13626         current block.
13627
13628 2004-04-28  Martin Baulig  <martin@ximian.com>
13629
13630         * cfold.cs (ConstantFold.BinaryFold): Added special support for
13631         comparing StringConstants and NullLiterals in Equality and Inequality.
13632
13633 2004-04-28  Jackson Harper  <jackson@ximian.com>
13634
13635         * driver.cs: Attempt to load referenced assemblies from the
13636         GAC. This is the quick and dirty version of this method that
13637         doesnt take into account versions and just takes the first
13638         canidate found. Will be good enough for now as we will not have more
13639         then one version installed into the GAC until I update this method.
13640
13641 2004-04-28  Martin Baulig  <martin@ximian.com>
13642
13643         * typemanager.cs (TypeManager.CheckStructCycles): New public
13644         static method to check for cycles in the struct layout.
13645
13646         * rootcontext.cs (RootContext.PopulateTypes): Call
13647         TypeManager.CheckStructCycles() for each TypeContainer.
13648         [Note: We only need to visit each type once.]
13649
13650 2004-04-28  Martin Baulig  <martin@ximian.com>
13651
13652         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
13653
13654         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
13655         success and added `out object value'.  Use a `bool resolved' field
13656         to check whether we've already been called rather than
13657         `ConstantValue != null' since this breaks for NullLiterals.
13658
13659 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13660
13661         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
13662         setting of this flag, since the 'set' method may be non-public.
13663
13664 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13665
13666         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
13667         check on current_vector.Block.
13668
13669 2004-04-27  Martin Baulig  <martin@ximian.com>
13670
13671         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
13672         a field initializer.  Fixes #56459.
13673
13674 2004-04-27  Martin Baulig  <martin@ximian.com>
13675
13676         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
13677         we're not attempting to use an indexer.  Fixes #52154.
13678
13679 2004-04-27  Martin Baulig  <martin@ximian.com>
13680
13681         * statement.cs (Return): Don't create a return label if we don't
13682         need it; reverts my change from January 20th.  Thanks to Ben
13683         Maurer for this.
13684
13685 2004-04-27  Martin Baulig  <martin@ximian.com>
13686
13687         According to the spec, `goto' can only leave a nested scope, but
13688         never enter it.
13689
13690         * statement.cs (Block.LookupLabel): Only lookup in the current
13691         block, don't recurse into parent or child blocks.
13692         (Block.AddLabel): Check in parent and child blocks, report
13693         CS0140/CS0158 if we find a duplicate.
13694         (Block): Removed this indexer for label lookups.
13695         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
13696         this already does the error reporting for us.
13697
13698         * flowanalysis.cs
13699         (FlowBranching.UsageVector.Block): New public variable; may be null.
13700         (FlowBranching.CreateSibling): Added `Block' argument.
13701         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
13702         label for the target of a `goto' and check whether we're not
13703         leaving a `finally'.
13704
13705 2004-04-27  Martin Baulig  <martin@ximian.com>
13706
13707         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13708         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
13709         just for returns).
13710
13711 2004-04-27  Martin Baulig  <martin@ximian.com>
13712
13713         * statement.cs (Block.AddLabel): Also check for implicit blocks
13714         and added a CS0158 check.
13715
13716 2004-04-27  Martin Baulig  <martin@ximian.com>
13717
13718         * flowanalysis.cs (FlowBranchingLoop): New class.
13719         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
13720         UsageVector's instead of an ArrayList.
13721         (FlowBranching.Label): Likewise.
13722         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
13723         (FlowBranching.AddBreakVector): New method.
13724
13725 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
13726
13727         * attribute.cs: Small regression fix: only convert the type if we
13728         the type is different, fixes System.Drawing build.
13729
13730 2004-04-27  Martin Baulig  <martin@ximian.com>
13731
13732         * attribute.cs (Attribute.Resolve): If we have a constant value
13733         for a named field or property, implicity convert it to the correct
13734         type.
13735
13736 2004-04-27  Raja R Harinath  <rharinath@novell.com>
13737
13738         * statement.cs (Block.Block): Implicit blocks share
13739         'child_variable_names' fields with parent blocks.
13740         (Block.AddChildVariableNames): Remove.
13741         (Block.AddVariable): Mark variable as "used by a child block" in
13742         every surrounding block.
13743         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
13744         been used in a child block, complain about violation of "Invariant
13745         meaning in blocks" rule.
13746         * cs-parser.jay (declare_local_variables): Don't use
13747         AddChildVariableNames.
13748         (foreach_statement): Don't create an implicit block: 'foreach'
13749         introduces a scope.
13750
13751 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
13752
13753         * convert.cs (ImplicitNumericConversion): 0 is also positive when
13754         converting from 0L to ulong.  Fixes 57522.
13755
13756 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13757
13758         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
13759         derived class hides via 'new' keyword field from base class (test-242.cs).
13760         TODO: Handle this in the more general way.
13761         
13762         * class.cs (CheckBase): Ditto.
13763
13764 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13765
13766         * decl.cs (caching_flags): New member for storing cached values
13767         as bit flags.
13768         (MemberCore.Flags): New enum where bit flags for caching_flags
13769         are defined.
13770         (MemberCore.cls_compliance): Moved to caching_flags.
13771         (DeclSpace.Created): Moved to caching_flags.
13772
13773         * class.cs: Use caching_flags instead of DeclSpace.Created
13774         
13775 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
13776
13777         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
13778         if we are only a derived class, not a nested class.
13779
13780         * typemanager.cs: Same as above, but do this at the MemberLookup
13781         level (used by field and methods, properties are handled in
13782         PropertyExpr).   Allow for the qualified access if we are a nested
13783         method. 
13784
13785 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
13786
13787         * class.cs: Refactoring.
13788         (IMethodData): New inteface; Holds links to parent members
13789         to avoid member duplication (reduced memory allocation).
13790         (Method): Implemented IMethodData interface.
13791         (PropertyBase): New inner classes for get/set methods.
13792         (PropertyBase.PropertyMethod): Implemented IMethodData interface
13793         (Event): New inner classes for add/remove methods.
13794         (Event.DelegateMethod): Implemented IMethodData interface.
13795
13796         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
13797         EmitContext (related to class.cs refactoring).
13798
13799 2004-04-21  Raja R Harinath  <rharinath@novell.com>
13800
13801         * delegate.cs (Delegate.VerifyApplicability): If the number of
13802         arguments are the same as the number of parameters, first try to
13803         verify applicability ignoring  any 'params' modifier on the last
13804         parameter.
13805         Fixes #56442.
13806
13807 2004-04-16  Raja R Harinath  <rharinath@novell.com>
13808
13809         * class.cs (TypeContainer.AddIndexer): Use
13810         'ExplicitInterfaceName' to determine if interface name was
13811         explicitly specified.  'InterfaceType' is not initialized at this time.
13812         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
13813         Indexers array is already in the required order.  Initialize
13814         'IndexerName' only if there are normal indexers.
13815         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
13816         (TypeContainer.Emit): Emit DefaultMember attribute only if
13817         IndexerName is initialized.
13818         Fixes #56300.
13819
13820 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
13821
13822         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
13823         Fixes #57007
13824
13825 2004-04-15  Raja R Harinath  <rharinath@novell.com>
13826
13827         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
13828         attributes.
13829         Fix for #56456.
13830
13831         * attribute.cs (Attribute.Resolve): Check for duplicate named
13832         attributes.
13833         Fix for #56463.
13834
13835 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
13836
13837         * iterators.cs (MarkYield): track whether we are in an exception,
13838         and generate code accordingly.  Use a temporary value to store the
13839         result for our state.
13840
13841         I had ignored a bit the interaction of try/catch with iterators
13842         since their behavior was not entirely obvious, but now it is
13843         possible to verify that our behavior is the same as MS .NET 2.0
13844
13845         Fixes 54814
13846
13847 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
13848
13849         * iterators.cs: Avoid creating temporaries if there is no work to
13850         do. 
13851
13852         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
13853         Enumerations, use TypeManager.EnumToUnderlying and call
13854         recursively. 
13855
13856         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
13857         bug #57013
13858
13859         (This.Emit): Use EmitContext.EmitThis to emit our
13860         instance variable.
13861
13862         (This.EmitAssign): Ditto.
13863
13864         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
13865         codepaths, we will move all the functionality into
13866         Mono.CSharp.This 
13867
13868         (FieldExpr.EmitAssign): Ditto.
13869
13870         This fixes several hidden bugs that I uncovered while doing a code
13871         review of this today.
13872
13873         * codegen.cs (EmitThis): reworked so the semantics are more clear
13874         and also support value types "this" instances.
13875
13876         * iterators.cs: Changed so that for iterators in value types, we
13877         do not pass the value type as a parameter.  
13878
13879         Initialization of the enumerator helpers is now done in the caller
13880         instead of passing the parameters to the constructors and having
13881         the constructor set the fields.
13882
13883         The fields have now `assembly' visibility instead of private.
13884
13885 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
13886
13887         * expression.cs (Argument.Resolve): Check if fields passed as ref
13888         or out are contained in a MarshalByRefObject.
13889
13890         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
13891         another compiler type.
13892
13893 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
13894
13895         * class.cs (Indexer.Define): use the new name checking method.
13896         Also, return false on an error.
13897         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
13898         (is_identifier_[start/part]_character): make static.
13899
13900 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
13901
13902         * expression.cs (Binary.ResolveOperator): Do no append strings
13903         twice: since we can be invoked more than once (array evaluation)
13904         on the same concatenation, take care of this here.  Based on a fix
13905         from Ben (bug #56454)
13906
13907 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
13908
13909         * codegen.cs: Fix another case where CS1548 must be reported (when 
13910         delay-sign isn't specified and no private is available #56564). Fix
13911         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
13912         error when MCS is used on the MS runtime and we need to delay-sign 
13913         (which seems unsupported by AssemblyBuilder - see #56621).
13914
13915 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
13916
13917         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
13918         (TypeManager.ComputeNamespaces): Faster implementation for
13919         Microsoft runtime.
13920
13921         * compiler.csproj: Updated AssemblyName to mcs.
13922
13923 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
13924
13925         * rootcontext.cs: Add new types to the boot resolution.
13926
13927         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
13928         MulticastDelegate is not allowed.
13929
13930         * typemanager.cs: Add new types to lookup: System.TypedReference
13931         and ArgIterator.
13932
13933         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
13934         check for TypedReference or ArgIterator, they are not allowed. 
13935
13936         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
13937         makes us properly catch 1510 in some conditions (see bug 56016 for
13938         details). 
13939
13940 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
13941
13942         * CryptoConvert.cs: update from corlib version
13943         with endian fixes.
13944
13945 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
13946
13947         * class.cs (Indexer.Define): Check indexername declaration
13948
13949 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
13950
13951         * attribute.cs (IsClsCompliant): Fixed problem with handling
13952         all three states (compliant, not-compliant, undetected).
13953
13954 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
13955
13956         * attribute.cs (Attribute): Location is now public.
13957         (Resolve): Store resolved arguments (pos_values) in attribute class.
13958         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
13959         (GetClsCompliantAttributeValue): New method that gets
13960         CLSCompliantAttribute value.
13961         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
13962         if exists else null.
13963         (AttributeTester): New class for CLS-Compliant verification routines.
13964
13965         * class.cs (Emit): Add CLS-Compliant verification.
13966         (Method.GetSignatureForError): Implemented.
13967         (Constructor.GetSignatureForError): Implemented
13968         (Constructor.HasCompliantArgs): Returns if constructor has
13969         CLS-Compliant arguments.
13970         (Constructor.Emit): Override.
13971         (Construcor.IsIdentifierClsCompliant): New method; For constructors
13972         is needed to test only parameters.
13973         (FieldBase.GetSignatureForError): Implemented.
13974         (TypeContainer): New member for storing base interfaces.
13975         (TypeContainer.FindMembers): Search in base interfaces too.
13976
13977         * codegen.cs (GetClsComplianceAttribute): New method that gets
13978         assembly or module CLSCompliantAttribute value.
13979         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
13980         for assembly.
13981         (ModuleClass.Emit): Add error 3012 test.
13982
13983         * const.cs (Emit): Override and call base for CLS-Compliant tests.
13984
13985         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
13986         state for all decl types.
13987         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
13988         if CLS-Compliant tests are required.
13989         (IsClsCompliaceRequired): New method. Analyze whether code
13990         must be CLS-Compliant.
13991         (IsExposedFromAssembly): New method. Returns true when MemberCore
13992         is exposed from assembly.
13993         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
13994         value or gets cached value.
13995         (HasClsCompliantAttribute): New method. Returns true if MemberCore
13996         is explicitly marked with CLSCompliantAttribute.
13997         (IsIdentifierClsCompliant): New abstract method. This method is
13998         used to testing error 3005.
13999         (IsIdentifierAndParamClsCompliant): New method. Common helper method
14000         for identifier and parameters CLS-Compliant testing.
14001         (VerifyClsCompliance): New method. The main virtual method for
14002         CLS-Compliant verifications.
14003         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
14004         null. I don't know why is null (too many public members !).
14005         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
14006         and get value of first CLSCompliantAttribute that found.
14007
14008         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
14009         (VerifyClsCompliance): Override and add extra tests.
14010
14011         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
14012         clscheck- disable CLS-Compliant verification event if assembly is has
14013         CLSCompliantAttribute(true).
14014
14015         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
14016         ApllyAttribute is now called in emit section as in the other cases.
14017         Possible future Emit integration.
14018         (IsIdentifierClsCompliant): New override.
14019         (VerifyClsCompliance): New override.
14020         (GetEnumeratorName): Returns full enum name.
14021
14022         * parameter.cs (GetSignatureForError): Implemented.
14023
14024         * report.cs (WarningData): New struct for Warning message information.
14025         (LocationOfPreviousError): New method.
14026         (Warning): New method. Reports warning based on the warning table.
14027         (Error_T): New method. Reports error based on the error table.
14028
14029         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
14030         verifications are done here.
14031
14032         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
14033
14034         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
14035         CLSCompliantAttribute.
14036         (all_imported_types): New member holds all imported types from other
14037         assemblies.
14038         (LoadAllImportedTypes): New method fills static table with exported types
14039         from all referenced assemblies.
14040         (Modules): New property returns all assembly modules.
14041
14042 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
14043
14044         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
14045         throwing a parser error.
14046
14047         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
14048         which removes the hardcoded get_/set_ prefixes for properties, as
14049         IL allows for the properties to be named something else.  
14050
14051         Bug #56013
14052
14053         * expression.cs: Do not override operand before we know if it is
14054         non-null.  Fix 56207
14055
14056 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14057
14058         * typemanager.cs: support for pinned variables.
14059
14060 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14061
14062         * decl.cs, typemanager.cs: Avoid using an arraylist
14063         as a buffer if there is only one result set.
14064
14065 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14066
14067         * expression.cs: Make sure you cant call a static method
14068         with an instance expression, bug #56174.
14069
14070 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
14071
14072         * class.cs (IsDuplicateImplementation): Improve error reporting to
14073         flag 663 (method only differs in parameter modifier).
14074
14075         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
14076         in preprocessor directives.
14077
14078         * location.cs (LookupFile): Allow for the empty path.
14079
14080         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
14081         better approach for some of that patch, but its failing with the
14082         CharSet enumeration.  For now try/catch will do.
14083
14084         * typemanager.cs: Do not crash if a struct does not have fields.
14085         Fixes 56150.
14086
14087 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14088
14089         * expression.cs: cs0213, cant fix a fixed expression.
14090         fixes 50231.
14091
14092 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14093
14094         * cs-parser.jay: detect invalid embeded statements gracefully.
14095         bug #51113.
14096
14097 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14098
14099         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
14100         As a regex:
14101         s/
14102         the invocation type may not be a subclass of the tye of the item/
14103         The type of the item must be a subclass of the invocation item.
14104         /g
14105
14106         Fixes bug #50820.
14107
14108 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
14109
14110         * attribute.cs: Added methods to get a string and a bool from an
14111         attribute. Required to information from AssemblyKeyFileAttribute,
14112         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
14113         * codegen.cs: Modified AssemblyName creation to include support for
14114         strongnames. Catch additional exceptions to report them as CS1548.
14115         * compiler.csproj: Updated include CryptoConvert.cs.
14116         * compiler.csproj.user: Removed file - user specific configuration.
14117         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
14118         Mono.Security assembly. The original class is maintained and tested in
14119         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
14120         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
14121         like CSC 8.0 (C# v2) supports.
14122         * Makefile: Added CryptoConvert.cs to mcs sources.
14123         * rootcontext.cs: Added new options for strongnames.
14124
14125 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
14126
14127         * driver.cs: For --expect-error, report error code `2'
14128         if the program compiled with no errors, error code `1' if
14129         it compiled with an error other than the one expected.
14130
14131 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
14132
14133         * compiler.csproj: Updated for Visual Studio .NET 2003.
14134         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
14135         * compiler.sln: Updated for Visual Studio .NET 2003.
14136
14137 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
14138
14139         * expression.cs: Fix bug #47234. We basically need to apply the
14140         rule that we prefer the conversion of null to a reference type
14141         when faced with a conversion to 'object' (csc behaviour).
14142
14143 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14144
14145         * statement.cs: Shorter form for foreach, eliminates
14146         a local variable. r=Martin.
14147
14148 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14149
14150         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
14151         checks if we can use brtrue/brfalse to test for 0.
14152         * expression.cs: use the above in the test for using brtrue/brfalse.
14153         cleanup code a bit.
14154
14155 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14156
14157         * expression.cs: Rewrite string concat stuff. Benefits:
14158
14159         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
14160         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
14161         rather than a concat chain.
14162
14163         * typemanager.cs: Add lookups for more concat overloads.
14164
14165 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14166
14167         * expression.cs: Emit shorter il code for array init.
14168
14169         newarr
14170         dup
14171         // set 1
14172
14173         // set 2
14174
14175         newarr
14176         stloc.x
14177
14178         ldloc.x
14179         // set 1
14180
14181         ldloc.x
14182         // set 2
14183
14184 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
14185
14186         * statement.cs: Before, two switch blocks would be merged if the
14187         total size of the blocks (end_item - begin_item + 1) was less than
14188         two times the combined sizes of the blocks.
14189
14190         Now, it will only merge if after the merge at least half of the
14191         slots are filled.
14192
14193         fixes 55885.
14194
14195 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
14196
14197         * class.cs : csc build fix for GetMethods(). See bug #52503.
14198
14199 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
14200
14201         * expression.cs: Make sure fp comparisons work with NaN.
14202         This fixes bug #54303. Mig approved this patch a long
14203         time ago, but we were not able to test b/c the runtime
14204         had a related bug.
14205
14206 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
14207
14208         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
14209
14210 2004-03-19  Martin Baulig  <martin@ximian.com>
14211
14212         * class.cs (MemberCore.IsDuplicateImplementation): Report the
14213         error here and not in our caller.
14214
14215 2004-03-19  Martin Baulig  <martin@ximian.com>
14216
14217         * interface.cs: Completely killed this file.
14218         (Interface): We're now a TypeContainer and live in class.cs.
14219
14220         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
14221         argument; we're now also called for interfaces.
14222         (TypeContainer.DefineMembers): Allow this method being called
14223         multiple times.
14224         (TypeContainer.GetMethods): New public method; formerly known as
14225         Interface.GetMethod().  This is used by PendingImplementation.
14226         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
14227         it's now private and non-static.
14228         (Interface): Moved this here; it's now implemented similar to
14229         Class and Struct.
14230         (Method, Property, Event, Indexer): Added `bool is_interface'
14231         argument to their .ctor's.
14232         (MemberBase.IsInterface): New public field.
14233
14234         * cs-parser.jay: Create normal Method, Property, Event, Indexer
14235         instances instead of InterfaceMethod, InterfaceProperty, etc.
14236         (opt_interface_base): Removed; we now use `opt_class_base' instead.
14237         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
14238
14239 2004-03-19  Martin Baulig  <martin@ximian.com>
14240
14241         * class.cs (MethodCore.IsDuplicateImplementation): New private
14242         method which does the CS0111 checking.
14243         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
14244         Use IsDuplicateImplementation().
14245
14246 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
14247
14248         * decl.cs (FindMemberToOverride): New method to find the correct
14249         method or property to override in the base class.
14250         * class.cs
14251             - Make Method/Property use the above method to find the
14252               version in the base class.
14253             - Remove the InheritableMemberSignatureCompare as it is now
14254               dead code.
14255
14256         This patch makes large code bases much faster to compile, as it is
14257         O(n) rather than O(n^2) to do this validation.
14258
14259         Also, it fixes bug 52458 which is that nested classes are not
14260         taken into account when finding the base class member.
14261
14262         Reviewed/Approved by Martin.
14263
14264 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
14265
14266         * interface.cs: In all interface classes removed redundant
14267         member initialization.
14268
14269 2004-03-16  Martin Baulig  <martin@ximian.com>
14270
14271         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
14272
14273 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
14274
14275         * decl.cs (DefineTypeAndParents): New helper method to define a
14276         type's containers before the type itself is defined;  This is a
14277         bug exposed by the recent changes to Windows.Forms when an
14278         implemented interface was defined inside a class that had not been
14279         built yet.   
14280
14281         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
14282
14283         (Check): Loop correctly to report errors modifiers
14284         (UNSAFE was not in the loop, since it was the same as TOP).
14285
14286         * interface.cs: Every interface member now takes a ModFlags,
14287         instead of a "is_new" bool, which we set on the base MemberCore. 
14288
14289         Every place where we called "UnsafeOk" in the interface, now we
14290         call the proper member (InterfaceMethod.UnsafeOK) instead to get
14291         the unsafe settings from the member declaration instead of the
14292         container interface. 
14293
14294         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
14295
14296         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
14297         `set_indexer_name' to the pending bits (one per type).
14298
14299         We fixed a bug today that was picking the wrong method to
14300         override, since for properties the existing InterfaceMethod code
14301         basically ignored the method name.  Now we make sure that the
14302         method name is one of the valid indexer names.
14303
14304 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
14305  
14306         * support.cs (SeekableStreamReader): Keep track of stream byte
14307         positions and don't mix them with character offsets to the buffer.
14308
14309         Patch from Gustavo Giráldez
14310
14311 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
14312
14313         * interface.cs (InterfaceSetGetBase): Removed double member
14314         initialization, base class does it as well.
14315
14316 2004-03-13  Martin Baulig  <martin@ximian.com>
14317
14318         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
14319         when compiling corlib.
14320
14321 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
14322
14323         * convert.cs (ExplicitConversion): We were reporting an error on
14324         certain conversions (object_type source to a value type, when the
14325         expression was `null') before we had a chance to pass it through
14326         the user defined conversions.
14327
14328         * driver.cs: Replace / and \ in resource specifications to dots.
14329         Fixes 50752
14330
14331         * class.cs: Add check for duplicate operators.  Fixes 52477
14332
14333 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
14334
14335         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
14336         that are in the middle of the statements, not only at the end.
14337         Fixes #54987
14338
14339         * class.cs (TypeContainer.AddField): No longer set the
14340         `HaveStaticConstructor' flag, now we call it
14341         `UserDefineStaticConstructor' to diferentiate the slightly
14342         semantic difference.
14343
14344         The situation is that we were not adding BeforeFieldInit (from
14345         Modifiers.TypeAttr) to classes that could have it.
14346         BeforeFieldInit should be set to classes that have no static
14347         constructor. 
14348
14349         See:
14350
14351         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
14352
14353         And most importantly Zoltan's comment:
14354
14355         http://bugzilla.ximian.com/show_bug.cgi?id=44229
14356
14357         "I think beforefieldinit means 'it's ok to initialize the type sometime 
14358          before its static fields are used', i.e. initialization does not need
14359          to be triggered by the first access to the type. Setting this flag
14360          helps the JIT to compile better code, since it can run the static
14361          constructor at JIT time, and does not need to generate code to call it
14362          (possibly lots of times) at runtime. Unfortunately, mcs does not set
14363          this flag for lots of classes like String. 
14364          
14365          csc sets this flag if the type does not have an explicit static 
14366          constructor. The reasoning seems to be that if there are only static
14367          initalizers for a type, and no static constructor, then the programmer
14368          does not care when this initialization happens, so beforefieldinit
14369          can be used.
14370          
14371          This bug prevents the AOT compiler from being usable, since it 
14372          generates so many calls to mono_runtime_class_init that the AOT code
14373          is much slower than the JITted code. The JITted code is faster, 
14374          because it does not generate these calls if the vtable is type is
14375          already initialized, which is true in the majority of cases. But the
14376          AOT compiler can't do this."
14377
14378 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
14379
14380         * class.cs (MethodData.Emit): Refactor the code so symbolic
14381         information is generated for destructors;  For some reasons we
14382         were taking a code path that did not generate symbolic information
14383         before. 
14384
14385 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14386
14387         * class.cs: Create a Constructor.CheckBase method that
14388         takes care of all validation type code. The method
14389         contains some code that was moved from Define.
14390
14391         It also includes new code that checks for duplicate ctors.
14392         This fixes bug #55148.
14393
14394 2004-03-09  Joshua Tauberer <tauberer@for.net>
14395
14396         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
14397         a { ... }-style array creation invokes EmitStaticInitializers
14398         which is not good for reference-type arrays.  String, decimal
14399         and now null constants (NullCast) are not counted toward
14400         static initializers.
14401
14402 2004-03-05  Martin Baulig  <martin@ximian.com>
14403
14404         * location.cs (SourceFile.HasLineDirective): New public field;
14405         specifies whether the file contains or is referenced by a "#line"
14406         directive.
14407         (Location.DefineSymbolDocuments): Ignore source files which
14408         either contain or are referenced by a "#line" directive.        
14409
14410 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
14411
14412         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
14413         direct access to our parent, so check the method inline there.
14414
14415 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14416
14417         * expression.cs (Invocation.EmitCall): Miguel's last commit
14418         caused a regression. If you had:
14419
14420             T t = null;
14421             t.Foo ();
14422
14423         In Foo the implict this would be null.
14424
14425 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
14426
14427         * expression.cs (Invocation.EmitCall): If the method is not
14428         virtual, do not emit a CallVirt to it, use Call.
14429
14430         * typemanager.cs (GetFullNameSignature): Improve the method to
14431         cope with ".ctor" and replace it with the type name.
14432
14433         * class.cs (ConstructorInitializer.Resolve): Now the method takes
14434         as an argument the ConstructorBuilder where it is being defined,
14435         to catch the recursive constructor invocations.
14436
14437 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
14438
14439         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
14440         routines to check if a type is an enumerable/enumerator allow
14441         classes that implement the IEnumerable or IEnumerator interfaces.
14442
14443         * class.cs (Property, Operator): Implement IIteratorContainer, and
14444         implement SetYields.
14445
14446         (Property.Define): Do the block swapping for get_methods in the
14447         context of iterators.   We need to check if Properties also
14448         include indexers or not.
14449
14450         (Operator): Assign the Block before invoking the
14451         OperatorMethod.Define, so we can trigger the Iterator code
14452         replacement. 
14453
14454         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
14455         Property and Operator classes are not created when we parse the
14456         declarator but until we have the block completed, so we use a
14457         singleton SimpleIteratorContainer.Simple to flag whether the
14458         SetYields has been invoked.
14459
14460         We propagate this setting then to the Property or the Operator to
14461         allow the `yield' to function.
14462
14463 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
14464
14465         * codegen.cs: Implemented attribute support for modules.
14466         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
14467         Assembly/Module functionality.
14468
14469         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
14470         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
14471         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
14472
14473 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
14474
14475         * interface.cs (FindMembers): The operation is performed on all base
14476         interfaces and not only on the first. It is required for future CLS Compliance patch.
14477
14478 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14479
14480         * statement.cs, codegen.cs:
14481         This patch deals with patterns such as:
14482
14483         public class List : IEnumerable {
14484
14485                 public MyEnumerator GetEnumerator () {
14486                         return new MyEnumerator(this);
14487                 }
14488
14489                 IEnumerator IEnumerable.GetEnumerator () {
14490                         ...
14491                 }
14492                 
14493                 public struct MyEnumerator : IEnumerator {
14494                         ...
14495                 }
14496         }
14497
14498         Before, there were a few things we did wrong:
14499         1) we would emit callvirt on a struct, which is illegal
14500         2) we emited ldarg when we needed to emit ldarga
14501         3) we would mistakenly call the interface methods on an enumerator
14502         type that derived from IEnumerator and was in another assembly. For example:
14503
14504         public class MyEnumerator : IEnumerator
14505
14506         Would have the interface methods called, even if there were public impls of the
14507         method. In a struct, this lead to invalid IL code.
14508
14509 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
14510
14511         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
14512           renamed to Emit.
14513
14514         * delegate.cs (Define): Fixed crash when delegate type is undefined.
14515
14516 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
14517
14518         * cs-parser.jay: Fix small regression: we were not testing V2
14519         compiler features correctly.
14520
14521         * interface.cs: If the emit context is null, then create one
14522
14523 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
14524
14525         * decl.cs (GetSignatureForError): New virtual method to get full name
14526           for error messages.
14527
14528         * attribute.cs (IAttributeSupport): New interface for attribute setting.
14529           Now it is possible to rewrite ApplyAttributes method to be less if/else.
14530
14531         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
14532           Duplicated members and code in these classes has been removed.
14533           Better encapsulation in these classes.
14534
14535 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
14536
14537         * assign.cs (Assign.DoResolve): When dealing with compound
14538         assignments, there is a new rule in ECMA C# 2.4 (might have been
14539         there before, but it is documented here) that states that in:
14540
14541         a op= b;
14542
14543         If b is of type int, and the `op' is a shift-operator, then the
14544         above is evaluated as:
14545
14546         a = (int) a op b 
14547
14548         * expression.cs (Binary.ResolveOperator): Instead of testing for
14549         int/uint/long/ulong, try to implicitly convert to any of those
14550         types and use that in pointer arithmetic.
14551
14552         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
14553         method to print information for from the type, not from the
14554         null-method we were given.
14555
14556 2004-02-01  Duncan Mak  <duncan@ximian.com>
14557
14558         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
14559         parsing for cmd, fixes bug #53694.
14560
14561 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
14562
14563         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
14564         in the member name duplication tests. Property and operator name duplication
14565         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
14566
14567 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
14568
14569         * interface.cs (PopulateMethod): Fixed crash when interface method
14570         returns not existing type (error test cs0246-3.cs).
14571
14572 2004-02-02  Ravi Pratap M <ravi@ximian.com>
14573
14574         * cs-parser.jay (interface_accessors): Re-write actions to also
14575         store attributes attached to get and set methods. Fix spelling
14576         while at it.
14577
14578         (inteface_property_declaration): Modify accordingly.
14579
14580         (InterfaceAccessorInfo): New helper class to store information to pass
14581         around between rules that use interface_accessors.
14582
14583         * interface.cs (Emit): Apply attributes on the get and set
14584         accessors of properties and indexers too.
14585
14586         * attribute.cs (ApplyAttributes): Modify accordingly to use the
14587         right MethodBuilder when applying attributes to the get and set accessors.
14588
14589 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
14590
14591         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
14592
14593 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
14594
14595         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
14596
14597 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
14598
14599         * cs-parser.jay: Remove YIELD token, instead use the new grammar
14600         changes that treat `yield' specially when present before `break'
14601         or `return' tokens.
14602
14603         * cs-tokenizer.cs: yield is no longer a keyword.
14604
14605 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
14606
14607         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
14608         setting for default constructors.
14609         For default constructors are almost every time set wrong Modifier. The
14610         generated IL code has been alright. But inside mcs this values was
14611         wrong and this was reason why several of my CLS Compliance tests
14612         failed.
14613
14614 2004-01-22  Martin Baulig  <martin@ximian.com>
14615
14616         * cs-parser.jay (namespace_or_type_name): Return an Expression,
14617         not a QualifiedIdentifier.  This is what `type_name_expression'
14618         was previously doing.
14619         (type_name_expression): Removed; the code is now in
14620         `namespace_or_type_name'.
14621         (qualified_identifier): Removed, use `namespace_or_type_name'
14622         instead.
14623         (QualifiedIdentifier): Removed this class.      
14624
14625 2004-01-22  Martin Baulig  <martin@ximian.com>
14626
14627         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
14628         not a string as alias name.
14629
14630 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
14631
14632         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
14633         #52730 bug, and instead compute correctly the need to use a
14634         temporary variable when requesting an address based on the
14635         static/instace modified of the field and the constructor.
14636  
14637 2004-01-21  Martin Baulig  <martin@ximian.com>
14638
14639         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
14640         class and namespace before looking up aliases.  Fixes #52517.
14641
14642 2004-01-21  Martin Baulig  <martin@ximian.com>
14643
14644         * flowanalysis.cs (UsageVector.Merge): Allow variables being
14645         assinged in a 'try'; fixes exception4.cs.
14646
14647 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14648         * class.cs : Implemented parameter-less constructor for TypeContainer
14649
14650         * decl.cs: Attributes are now stored here. New property OptAttributes
14651
14652         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
14653
14654         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
14655
14656 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14657
14658         * typemanager.cs (CSharpSignature): Now reports also inner class name.
14659           (CSharpSignature): New method for indexer and property signature.
14660
14661 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14662
14663         * pending.cs (IsVirtualFilter): Faster implementation.
14664
14665 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14666
14667         * typemanager.cs: Avoid inclusion of same assembly more than once.
14668
14669 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14670
14671         * cs-parser.jay: Fixed problem where the last assembly attribute
14672           has been applied also to following declaration (class, struct, etc.)
14673           
14674 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14675
14676         * class.cs: Added error CS0538, CS0539 reporting.
14677         Fixed crash on Microsoft runtime when field type is void.
14678
14679         * cs-parser.jay: Added error CS0537 reporting.
14680
14681         * pending.cs: Added error CS0535 reporting.
14682         Improved error report for errors CS0536, CS0534.
14683
14684 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
14685
14686         Merge a few bits from the Anonymous Method MCS tree.
14687
14688         * statement.cs (ToplevelBlock): New class for toplevel methods,
14689         will hold anonymous methods, lifted variables.
14690
14691         * cs-parser.jay: Create toplevel blocks for delegates and for
14692         regular blocks of code. 
14693
14694 2004-01-20  Martin Baulig  <martin@ximian.com>
14695
14696         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
14697         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
14698         and `NeedExplicitReturn'; added `IsLastStatement'.
14699         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
14700         have a `ReturnLabel' or we're not unreachable.
14701
14702         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
14703         child's reachability; don't just override ours with it.  Fixes
14704         #58058 (lluis's example).
14705         (FlowBranching): Added public InTryOrCatch(), InCatch(),
14706         InFinally(), InLoop(), InSwitch() and
14707         BreakCrossesTryCatchBoundary() methods.
14708
14709         * statement.cs (Return): Do all error checking in Resolve().
14710         Unless we are the last statement in a top-level block, always
14711         create a return label and jump to it.
14712         (Break, Continue): Do all error checking in Resolve(); also make
14713         sure we aren't leaving a `finally'.
14714         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
14715         statement in a top-level block.
14716         (Block.Flags): Added `IsDestructor'.
14717         (Block.IsDestructor): New public property.
14718
14719 2004-01-20  Martin Baulig  <martin@ximian.com>
14720
14721         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
14722
14723 2004-01-20  Martin Baulig  <martin@ximian.com>
14724
14725         * statement.cs (Statement.ResolveUnreachable): New public method.
14726         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
14727         (Block.Resolve): Resolve unreachable statements.
14728
14729 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14730
14731         * expression.cs: We need to fix the case where we do
14732         not have a temp variable here.
14733
14734         * assign.cs: Only expression compound assignments need
14735         temporary variables.
14736
14737 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14738
14739         * flowanalysis.cs: Reduce memory allocation in a few ways:
14740           - A block with no variables should not allocate a bit
14741             vector for itself.
14742           - A method with no out parameters does not need any tracking
14743             for assignment of the parameters, so we need not allocate
14744             any data for it.
14745           - The arrays:
14746                 public readonly Type[] VariableTypes;
14747                 public readonly string[] VariableNames;
14748             Are redundant. The data is already stored in the variable
14749             map, so we need not allocate another array for it.
14750           - We need to add alot of checks for if (params | locals) == null
14751             due to the first two changes.
14752
14753 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
14754
14755         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
14756         implement IMemoryLocation, we store a copy on a local variable and
14757         take the address of it.  Patch from Benjamin Jemlich
14758
14759         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
14760         to use a special "type_name_expression" rule which reduces the
14761         number of "QualifiedIdentifier" classes created, and instead
14762         directly creates MemberAccess expressions.
14763
14764 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
14765
14766         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
14767         that fixes #52853.  Null literal assignment to ValueType
14768
14769         * class.cs (MethodData.Emit): Instead of checking the name of the
14770         method to determine if its a destructor, create a new derived
14771         class from Method called Destructor, and test for that.  
14772
14773         * cs-parser.jay: Create a Destructor object instead of a Method.  
14774
14775         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
14776
14777         Fixes: 52933
14778
14779 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
14780
14781         * expression.cs (Binary.ResolveOperator): Perform an implicit
14782         conversion from MethodGroups to their delegate types on the
14783         Addition operation.
14784
14785         * delegate.cs: Introduce a new class DelegateCreation that is the
14786         base class for `NewDelegate' and `ImplicitDelegateCreation',
14787         factor some code in here.
14788
14789         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
14790         conversion from MethodGroups to compatible delegate types. 
14791
14792         * ecore.cs (Expression.Resolve): Do not flag error 654
14793         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
14794         we allow conversions from MethodGroups to delegate types now.
14795
14796         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
14797         assignments in v2 either.
14798
14799 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
14800
14801         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
14802         static read-only fields in ctors.
14803
14804         Applied patch from Benjamin Jemlich 
14805
14806         * expression.cs (UnaryMutator): Avoid leaking local variables. 
14807
14808 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
14809
14810         * cs-tokenizer.cs (IsCastToken): Allow the various native types
14811         here to return true, as they can be used like this:
14812
14813                 (XXX) int.MEMBER ()
14814
14815         Fixed 49836 and all the other dups
14816
14817 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
14818
14819         * driver.cs: Implement /win32res and /win32icon.
14820
14821 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
14822
14823         * cs-parser.jay: Add a rule to improve error handling for the
14824         common mistake of placing modifiers after the type.
14825
14826 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
14827
14828         * cs-parser.jay (interface_event_declaration): Catch
14829         initialization of events on interfaces, and report cs0068
14830
14831         * cs-parser.jay (interface_event_declaration): Catch
14832         initialization of events. 
14833
14834         * ecore.cs: Better report missing constructors.
14835
14836         * expression.cs (Binary.ResolveOperator): My previous bug fix had
14837         the error reporting done in the wrong place.  Fix.
14838
14839         * expression.cs (Binary.ResolveOperator): Catch the 
14840         operator + (E x, E y) error earlier, and later allow for implicit
14841         conversions in operator +/- (E e, U x) from U to the underlying
14842         type of E.
14843
14844         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
14845         52596, if the container class is abstract, the default constructor
14846         is protected otherwise its public (before, we were always public).
14847
14848         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
14849         fixed statement.
14850
14851         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
14852         Jemlich that fixes bug #52597, MCS was generating invalid code for
14853         idisposable structs.   Thanks to Ben for following up with this
14854         bug as well.
14855
14856 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
14857
14858         * driver.cs: Allow assemblies without code to be generated, fixes
14859         52230.
14860
14861 2004-01-07  Nick Drochak <ndrochak@gol.com>
14862
14863         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
14864
14865 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
14866
14867         * cs-parser.jay: Add rules to improve error reporting if fields or
14868         methods are declared at the namespace level (error 116)
14869
14870         * Add rules to catch event add/remove
14871
14872 2004-01-04  David Sheldon <dave-mono@earth.li>
14873
14874   * expression.cs: Added matching ")" to error message for 
14875   CS0077
14876
14877 2004-01-03 Todd Berman <tberman@gentoo.org>
14878
14879         * ecore.cs, attribute.cs:
14880         Applying fix from #52429.
14881
14882 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14883
14884         * ecore.cs, expression.cs, statement.cs:
14885         Total rewrite of how we handle branching. We
14886         now handle complex boolean expressions with fewer
14887         jumps. As well if (x == 0) no longer emits a ceq.
14888
14889         if (x is Foo) is much faster now, because we generate
14890         better code.
14891
14892         Overall, we get a pretty big improvement on our benchmark
14893         tests. The code we generate is smaller and more readable.
14894
14895         I did a full two-stage bootstrap. The patch was reviewed
14896         by Martin and Miguel.
14897
14898 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14899
14900         * cs-parser.jay: Make primary_expression not take a QI.
14901         we dont need this because the member_access rule covers
14902         us here. So we replace the rule with just IDENTIFIER.
14903
14904         This has two good effects. First, we remove a s/r conflict.
14905         Second, we allocate many fewer QualifiedIdentifier objects.
14906
14907 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14908
14909         * attribute.cs: Handle MarshalAs attributes as pseudo, and
14910         set the correct information via SRE. This prevents
14911         hanging on the MS runtime. Fixes #29374.
14912
14913 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14914
14915         * convert.cs: correctly handle conversions to value types
14916         from Enum and ValueType as unboxing conversions.
14917
14918         Fixes bug #52569. Patch by Benjamin Jemlich.
14919
14920 2004-01-02  Ravi Pratap  <ravi@ximian.com>
14921
14922         * expression.cs (BetterConversion): Prefer int -> uint
14923         over int -> ulong (csc's behaviour). This fixed bug #52046.
14924
14925 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
14926
14927         * decl.cs (MemberCache.FindMembers): now returns a
14928         MemberInfo [].
14929
14930         * typemanager.cs: In general, go with with ^^.
14931         (CopyNewMethods): take an IList.
14932         (RealMemberLookup): Only allocate an arraylist
14933         if we copy from two sets of methods.
14934
14935         This change basically does two things:
14936         1) Fewer array lists allocated due to CopyNewMethods.
14937         2) the explicit cast in MemberList costed ALOT.
14938
14939 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
14940
14941         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
14942         a hashtable to avoid needless string allocations when an identifier is
14943         used more than once (the common case).
14944
14945 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14946
14947         * pending.cs: MS's TypeBuilder.GetInterfaces ()
14948         is broken, it will not return anything. So, we
14949         have to use the information we have in mcs to
14950         do the task.
14951
14952         * typemanager.cs: Add a cache for GetInterfaces,
14953         since this will now be used more often (due to ^^)
14954
14955         (GetExplicitInterfaces) New method that gets the
14956         declared, not effective, interfaces on a type
14957         builder (eg, if you have interface IFoo, interface
14958         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
14959         { IBar }.
14960
14961         This patch makes MCS able to bootstrap itself on
14962         Windows again.
14963
14964 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14965
14966         * expression.cs: Remove the Nop's that Miguel put
14967         in by mistake.
14968
14969 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14970
14971         * report.cs, codegen.cs: Give the real stack trace to
14972         the error when an exception is thrown.
14973
14974 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14975
14976         * decl.cs: only allocate hashtables for ifaces if 
14977         it is an iface!
14978
14979 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14980
14981         * expression.cs: fix the error from cs0121-2.cs
14982         (a parent interface has two child interfaces that
14983         have a function with the same name and 0 params
14984         and the function is called through the parent).
14985
14986 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14987
14988         * class.cs, rootcontext.cs, typmanager.cs: do not
14989         leak pointers.
14990
14991 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14992
14993         * codegen.cs: remove stack for the ec flow branching.
14994         It is already a linked list, so no need.
14995
14996 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14997
14998         * Makefile: Allow custom profiler here.
14999
15000 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15001
15002         * typemanager.cs (LookupType):
15003           - Use a static char [], because split takes
15004             a param array for args, so it was allocating
15005             every time.
15006           - Do not store true in a hashtable, it boxes.
15007
15008 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15009
15010         * flowanalysis.cs: bytify common enums.
15011
15012 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15013
15014         * modifiers.cs: Add a new set of flags for the
15015         flags allowed on explicit interface impls.
15016         * cs-parser.jay: catch the use of modifiers in
15017         interfaces correctly.
15018         * class.cs: catch private void IFoo.Blah ().
15019
15020         All related to bug #50572.
15021
15022 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15023
15024         * decl.cs: Rewrite the consistant accessability checking.
15025         Accessability is not linear, it must be implemented in
15026         a tableish way. Fixes #49704.
15027
15028 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15029
15030         * expression.cs: Handle negation in a checked context.
15031         We must use subtraction from zero. Fixes #38674.
15032
15033 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15034
15035         * class.cs: Ignore static void main in DLLs.
15036         * rootcontext.cs: Handle the target type here,
15037         since we are have to access it from class.cs
15038         * driver.cs: account for the above.
15039
15040 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15041
15042         * report.cs: Give line numbers and files if available.
15043
15044 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
15045
15046         * driver.cs: Implement /addmodule.
15047
15048         * typemanager.cs:  Change 'modules' field so it now contains Modules not
15049         ModuleBuilders.
15050
15051 2003-12-20  Martin Baulig  <martin@ximian.com>
15052
15053         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
15054         (FieldBase.IsAssigned): Removed this field.
15055         (FieldBase.SetAssigned): New public method.
15056         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
15057
15058 2003-12-20  Martin Baulig  <martin@ximian.com>
15059
15060         * expression.cs (LocalVariableReference.DoResolve): Don't set
15061         `vi.Used' if we're called from DoResolveLValue().
15062
15063         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
15064         returns the usage vector it just merged into the current one -
15065         pass this one to UsageWarning().
15066         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
15067         of the `EmitContext', don't call this recursively on our children.
15068
15069 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
15070
15071         * driver.cs: Implement /target:module.
15072
15073 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
15074
15075         * support.cs (CharArrayHashtable): New helper class.
15076
15077         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
15078         char arrays, not strings, so we can avoid creating a string in
15079         consume_identifier if the identifier is a keyword.
15080
15081 2003-12-16  Martin Baulig  <martin@ximian.com>
15082
15083         * statement.cs (LocalInfo.Assigned): Removed this property.
15084         (LocalInfo.Flags): Removed `Assigned'.
15085         (LocalInfo.IsAssigned): New public method; takes the EmitContext
15086         and uses flow analysis.
15087         (Block.UsageWarning): Made this method private.
15088         (Block.Resolve): Call UsageWarning() if appropriate.
15089
15090         * expression.cs (LocalVariableReference.DoResolve): Always set
15091         LocalInfo.Used here.
15092
15093 2003-12-13  Martin Baulig  <martin@ximian.com>
15094
15095         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
15096         any value here; we're now using flow analysis to figure out
15097         whether a statement/block returns a value.
15098
15099 2003-12-13  Martin Baulig  <martin@ximian.com>
15100
15101         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
15102         working again.
15103         (FlowBranching.MergeFinally): Don't call
15104         `branching.CheckOutParameters()' here, this is called in
15105         MergeTopBlock().
15106         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
15107         when adding the `finally' vector.       
15108
15109 2003-12-13  Martin Baulig  <martin@ximian.com>
15110
15111         * flowanalysis.cs
15112         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
15113         actually work and also fix #48962.
15114
15115 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
15116
15117         * decl.cs: Do not check System.Object for nested types,
15118         since we know it does not have any. Big bang for buck:
15119
15120         BEFORE:
15121            Run 1:   8.35 seconds
15122            Run 2:   8.32 seconds
15123            corlib:  17.99 seconds
15124         AFTER:
15125            Run 1:   8.17 seconds
15126            Run 2:   8.17 seconds
15127            corlib:  17.39 seconds
15128
15129 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
15130
15131         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
15132         time we are returning 0 members, so we save alot here.
15133
15134 2003-12-11  Martin Baulig  <martin@ximian.com>
15135
15136         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
15137         `MergeChild()', also just take the `FlowBranching' as argument;
15138         call Merge() on it and return the result.
15139         (FlowBranching.Merge): We don't need to do anything if we just
15140         have one sibling.
15141
15142 2003-12-11  Martin Baulig  <martin@ximian.com>
15143
15144         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
15145         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
15146         Maurer for this idea.
15147
15148 2003-12-11  Martin Baulig  <martin@ximian.com>
15149
15150         * flowanalysis.cs (MergeResult): This class is now gone; we now
15151         use the `UsageVector' for this.  The reason for this is that if a
15152         branching just has one sibling, we don't need to "merge" them at
15153         all - that's the next step to do.
15154         (FlowBranching.Merge): We now return a `UsageVector' instead of a
15155         `MergeResult'.
15156
15157 2003-12-11  Martin Baulig  <martin@ximian.com>
15158
15159         Reworked flow analyis and made it more precise and bug-free.  The
15160         most important change is that we're now using a special `Reachability'
15161         class instead of having "magic" meanings of `FlowReturns'.  I'll
15162         do some more cleanups and optimizations and also add some more
15163         documentation this week.
15164
15165         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
15166         largely reworked this class.
15167         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
15168         the new `Reachability' class instead of having "magic" values here.
15169         (FlowBranching): We're now using an instance of `Reachability'
15170         instead of having separate `Returns', `Breaks' etc. fields.
15171
15172         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
15173         based on flow analysis; ignore the return value of block.Emit ().
15174
15175 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
15176
15177         * driver.cs typemanager.cs: Find the mono extensions to corlib even
15178         if they are private.
15179
15180 2003-12-09  Martin Baulig  <martin@ximian.com>
15181
15182         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
15183         call them directly on the UsageVector.
15184
15185 2003-12-09  Martin Baulig  <martin@ximian.com>
15186
15187         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
15188         Changed return type from `FlowReturns' to `Reachability'.
15189
15190 2003-12-09  Martin Baulig  <martin@ximian.com>
15191
15192         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
15193         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
15194         `Reachable' fields with a single `Reachability' one.
15195
15196 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15197
15198         * class.cs (FindMembers): Remove foreach's.
15199
15200         Bootstrap times:
15201
15202         BEFORE
15203                 Run 1:   8.74 seconds
15204                 Run 2:   8.71 seconds
15205
15206         AFTER
15207                 Run 1:   8.64 seconds
15208                 Run 2:   8.58 seconds
15209
15210
15211 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15212
15213         * cs-parser.jay:
15214         * gen-treedump.cs:
15215         * statement.cs:
15216         This patch does a few things:
15217                 1. EmptyStatement is now a singleton, so it is never reallocated.
15218                 2. All blah is EmptyStatement constructs have been changed to
15219                    blah == EmptyStatement.Value, which is much faster and valid
15220                    now that EmptyStatement is a singleton.
15221                 3. When resolving a block, rather than allocating a new array for
15222                    the non-empty statements, empty statements are replaced with
15223                    EmptyStatement.Value
15224                 4. Some recursive functions have been made non-recursive.
15225         Mainly the performance impact is from (3), however (1) and (2) are needed for
15226         this to work. (4) does not make a big difference in normal situations, however
15227         it makes the profile look saner.
15228
15229         Bootstrap times:
15230
15231         BEFORE
15232         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15233         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15234         Total memory allocated: 56397 KB
15235
15236         AFTER
15237         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
15238         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
15239         Total memory allocated: 55666 KB
15240
15241 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15242
15243         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
15244         than the hashtable in a hashtable version
15245
15246         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
15247         we always end up concating a string. This results in a huge perf
15248         loss, because many strings have to be tracked by the GC. In this
15249         patch, we first use a hashtable that works with two keys, so that
15250         the strings do not need to be concat'ed.
15251
15252         Bootstrap times:
15253         BEFORE
15254                 Run 1:   8.74 seconds
15255                 Run 2:   8.71 seconds
15256
15257         AFTER
15258                 Run 1:   8.65 seconds
15259                 Run 2:   8.56 seconds
15260
15261 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15262
15263         * Makefile: Add a new target `do-time' that does a quick and simple
15264         profile, leaving easy to parse output.
15265
15266 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
15267
15268         * codegen.cs (Init): Create the dynamic assembly with 
15269         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
15270
15271 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15272
15273         * support.cs: Make the PtrHashtable use only one
15274         instance of its comparer.
15275
15276 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
15277
15278         * typemanager.cs: Fix lookup of GetNamespaces.
15279
15280 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
15281
15282         * expression.cs: Removed redundant line.
15283
15284         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
15285         ArrayLists, use for loops with bounds.  
15286
15287         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
15288         arraylist.
15289
15290         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
15291         arraylists, use for loop with bounds.
15292
15293         The above three changes give us a 0.071 second performance
15294         improvement out of 3.294 seconds down to 3.223.  On my machine
15295         the above changes reduced the memory usage by 1,387 KB during
15296         compiler bootstrap.
15297
15298         * cs-parser.jay (QualifiedIdentifier): New class used to represent
15299         QualifiedIdentifiers.  Before we created a new string through
15300         concatenation, and mostly later on, the result would be
15301         manipulated by DecomposeQI through string manipulation.
15302
15303         This reduced the compiler memory usage for bootstrapping from
15304         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
15305         compile times in 0.05 seconds.
15306
15307 2003-11-28  Dick Porter  <dick@ximian.com>
15308
15309         * support.cs: Do string compares with the Invariant culture.
15310
15311         * rootcontext.cs: 
15312         * gen-treedump.cs: 
15313         * expression.cs: 
15314         * driver.cs: 
15315         * decl.cs: 
15316         * codegen.cs: 
15317         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
15318         the comparison is done with the Invariant culture.
15319
15320 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
15321
15322         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
15323         GetEnumerator method.
15324
15325         (ProbeCollectionType): Iterate starting at the most specific type
15326         upwards looking for a GetEnumerator
15327
15328         * expression.cs: Shift count can be up to 31 for int/uint and 63
15329         for long/ulong.
15330
15331 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
15332
15333         * statement.cs (Block.LookupLabel): Also look for the label on the
15334         children blocks.  Use a hash table to keep track of visited
15335         nodes. 
15336
15337         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
15338         we actually did transform the other operand, otherwise fall back
15339         to the common codepath that casts to long.
15340
15341         * cs-tokenizer.cs: Use the same code pattern as the int case.
15342         Maybe I should do the parsing myself, and avoid depending on the
15343         Parse routines to get this done.
15344
15345 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
15346
15347         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15348         which fixes bug 51347.  This time test it.
15349
15350         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
15351         attributes for example can not tell the difference between these.
15352         The difference was only a syntax feature of the language. 
15353
15354         * attribute.cs: Apply attributes to delegates.
15355
15356         * delegate.cs: Call the apply attributes method.
15357
15358 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
15359
15360         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
15361         comparing 0 vs Byte.MinValue, not the value
15362
15363         (ImplicitConversionRequired): When reporting a conversion error,
15364         use error 31 to print out the constant error instead of the
15365         simpler 29.
15366
15367         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15368         which fixes bug 51347.
15369
15370 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
15371
15372         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
15373         which fixes the -warnaserror command line option.
15374
15375 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
15376
15377         * cfold.cs (DoNumericPromotions): During constant folding of
15378         additions on UIntConstant, special case intconstants with
15379         IntConstants like we do on the expression binary operator. 
15380
15381 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
15382
15383         * convert.cs (ImplicitReferenceConversion): We were missing a case
15384         (System.Enum are not value types or class types, so we need to
15385         classify them separatedly).
15386
15387         * driver.cs: We do not support error 2007.
15388
15389 2003-11-12 Jackson Harper <jackson@ximian.com>
15390
15391         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
15392         system directory. Also use the full file name so users can
15393         libraries names mscorlib-o-tron.dll in a non system dir.
15394
15395 2003-11-10  Martin Baulig  <martin@ximian.com>
15396
15397         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
15398         (TypeManager.InitCoreTypes): Initialize them here, but instead of
15399         calling `ResolveType()' on them, directly assign their `Type'.
15400
15401 2003-11-08  Martin Baulig  <martin@ximian.com>
15402
15403         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
15404         return value and the `out parent' parameter.
15405         (TypeContainer.DefineType): Moved the CS0644 check into
15406         GetClassBases().  Don't pass the interface types to the
15407         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
15408         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
15409
15410         * ecore.cs (TypeExpr.IsAttribute): New property.
15411         (TypeExpr.GetInterfaces): New method.
15412
15413         * interface.cs (Interface.GetInterfaceTypeByName): Return a
15414         TypeExpr instead of a Type.
15415         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
15416         (Interface.DefineType): Don't pass the interface types to the
15417         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
15418         them later and then call `TypeBulider.AddInterfaceImplementation()'.
15419
15420         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
15421         instead of a `Type[]'.
15422         (TypeManager.RegisterBuilder): Likewise.
15423         (TypeManager.AddUserInterface): Likewise.
15424         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
15425         `Type[]' and also return a `TypeExpr[]'.
15426         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
15427
15428 2003-11-08  Martin Baulig  <martin@ximian.com>
15429
15430         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
15431         Expression.     
15432
15433 2003-11-08  Martin Baulig  <martin@ximian.com>
15434
15435         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
15436         TypeManager.ResolveExpressionTypes().
15437
15438         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
15439         instead of an Expression.
15440         (TypeExpr): This is now an abstract base class for `TypeExpression'.
15441         (TypeExpression): New public class; formerly known as `TypeExpr'.
15442
15443         * expression.cs (ComposedCast): Derive from TypeExpr.
15444
15445         * typemanager.cs (TypeManager.system_*_expr): These are now
15446         TypExpr's instead of Expression's.
15447         (TypeManager.ResolveExpressionTypes): New public static function;
15448         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
15449         of them.        
15450
15451 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
15452
15453         * expression.cs (New.DoResolve): Do not dereference value that
15454         might be a null return.
15455
15456         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
15457         sure that the constant value has the right type.  Fixes an
15458         unreported bug, similar to 50425.
15459
15460         * const.cs (Const.LookupConstantValue): Call
15461         ImplicitStandardConversionExists before doing a conversion to
15462         avoid havng the TypeManager.ChangeType do conversions.
15463
15464         Reduced the number of casts used
15465
15466         (Const.ChangeType): New routine to enable reuse of the constant
15467         type changing code from statement.
15468
15469         * typemanager.cs (ChangeType): Move common initialization to
15470         static global variables.
15471
15472         Fixes #50425.
15473
15474         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
15475         every value type to go through, even if it was void.  Fix that. 
15476
15477         * cs-tokenizer.cs: Use is_identifier_start_character on the start
15478         character of the define, and the is_identifier_part_character for
15479         the rest of the string.
15480
15481 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
15482
15483         * expression.cs (UnaryMutator.EmitCode): When I updated
15484         LocalVariableReference.DoResolve, I overdid it, and dropped an
15485         optimization done on local variable references.
15486
15487 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
15488
15489         * ecore.cs: Convert the return from Ldlen into an int.
15490
15491 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
15492
15493         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
15494         the accessibility, this is a special case for toplevel non-public
15495         classes (internal for instance).
15496
15497 2003-10-20  Nick Drochak <ndrochak@gol.com>
15498
15499         * ecore.cs: Fix typo and build.  Needed another right paren.
15500
15501 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
15502
15503         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
15504         `internal' case regular and protected, but not allowing protected
15505         to be evaluated later.  Bug 49840
15506
15507 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
15508
15509         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
15510         to kb.Nlast, and not the kb.nFirst to isolate the switch
15511         statement.
15512
15513         Extract the underlying type, so enumerations of long/ulong are
15514         treated like long/ulong.
15515
15516 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
15517
15518         * expression.cs (New): Overload the meaning of RequestedType to
15519         track the possible creation of the NewDelegate type, since
15520         DoResolve is invoked more than once for new constructors on field
15521         initialization.
15522
15523         See bugs: #48800 and #37014
15524
15525         * cs-parser.jay (declare_local_constants): Take an arraylist
15526         instead of a single constant.
15527
15528         (local_constant_declaration): It should take a
15529         constant_declarators, not a constant_declarator.  Fixes 49487
15530
15531         * convert.cs: Fix error report.
15532
15533 2003-10-13 Jackson Harper <jackson@ximian.com>
15534
15535         * typemanager.cs (TypeToCoreType): Add float and double this fixes
15536         bug #49611
15537
15538 2003-10-09  Martin Baulig  <martin@ximian.com>
15539
15540         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
15541         to the .ctor.
15542         (MethodCore.DoDefineParameters): Removed the TypeContainer
15543         argument; use the DeclSpace which was passed to the .ctor instead.
15544         (MethodCore.CheckParameter): Take a DeclSpace instead of a
15545         TypeContainer; we only need a DeclSpace here.
15546
15547 2003-10-09  Martin Baulig  <martin@ximian.com>
15548
15549         * class.cs (MethodData): Added additional `DeclSpace ds' argument
15550         to the .ctor.
15551         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
15552         EmitContext's .ctor.    
15553
15554 2003-10-09  Martin Baulig  <martin@ximian.com>
15555
15556         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
15557         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
15558         AsAccessible(), moved them as well.
15559
15560         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
15561
15562 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
15563
15564         * cs-parser.jay : Renamed yyName to yyNames related to jay.
15565
15566 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
15567
15568         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
15569         generation for >=, as spotted by Paolo, bug 48679.  
15570         Patch from David Waite.
15571
15572         * cs-tokenizer.cs: Add handling for #pragma.
15573
15574         * cs-parser.jay: Allow for both yield and yield return in the
15575         syntax.  The anti-cobolization of C# fight will go on!
15576
15577         * class.cs (TypeBuilder.DefineType): Catch error condition here
15578         (Parent.DefineType erroring out and returning null).
15579
15580         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15581         coping with enumerations variables, we were mistakenly processing
15582         them as a regular value type instead of built-in types.  Fixes the
15583         bug #48063
15584
15585         * typemanager.cs (IsBuiltinOrEnum): New method.
15586
15587 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
15588
15589         * cs-parser.jay: Upgrade: yield now needs the return clause.
15590
15591 2003-09-19  Martin Baulig  <martin@ximian.com>
15592
15593         * decl.cs (MemberCache.SetupCacheForInterface): Take a
15594         `MemberCache parent' argument.  Normally, an interface doesn't
15595         have a parent type except System.Object, but we use this in gmcs
15596         for generic type parameters.
15597
15598 2003-09-18  Martin Baulig  <martin@ximian.com>
15599
15600         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
15601         on `type.IsInterface'; don't check whether the type has a parent
15602         to determine whether it's an interface.
15603
15604 2003-09-15  Martin Baulig  <martin@ximian.com>
15605
15606         * class.cs (TypeContainer.DefineType): Added an error flag to
15607         avoid reporting duplicate CS0146's ("class definition is
15608         circular.").
15609
15610         * driver.cs (Driver.MainDriver): Abort if
15611         RootContext.ResolveTree() reported any errors.
15612
15613 2003-09-07  Martin Baulig  <martin@ximian.com>
15614
15615         * report.cs (Error, Warning): Added overloaded versions which take
15616         a `params object[] args' and call String.Format().
15617
15618 2003-09-07  Martin Baulig  <martin@ximian.com>
15619
15620         * decl.cs (DeclSpace..ctor): Don't call
15621         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
15622         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
15623         (DeclSpace.RecordDecl): New method.
15624
15625         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
15626
15627 2003-09-02  Ravi Pratap  <ravi@ximian.com>
15628
15629         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
15630         value attributes to be applied to ParameterBuilders.
15631
15632         * class.cs (MethodCore.LabelParameters): Make static and more
15633         generic so that it can be used from other places - like interface
15634         methods, for instance.
15635
15636         * interface.cs (Interface.Emit): Call LabelParameters before
15637         emitting attributes on the InterfaceMethod.
15638
15639 2003-08-26  Martin Baulig  <martin@ximian.com>
15640
15641         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
15642         resolving aliases; fixes #47927.
15643
15644 2003-08-26  Martin Baulig  <martin@ximian.com>
15645
15646         * statement.cs (Using.DoResolve): This is internally emitting a
15647         try/finally clause, so we need to set ec.NeedExplicitReturn if we
15648         do not always return.  Fixes #47681.
15649
15650 2003-08-26  Martin Baulig  <martin@ximian.com>
15651
15652         * decl.cs (MemberCore): Moved WarningNotHiding(),
15653         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
15654         into MemberBase.
15655         (AdditionResult): Make this nested in DeclSpace.
15656         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
15657         argument; call NamespaceEntry.Define() unless we're nested in a
15658         class or struct.
15659
15660         * namespace.cs (Namespace.DefineName): New public function.  This
15661         is called from DeclSpace's .ctor to add 
15662         (Namespace.Lookup): Include DeclSpaces in the lookup.
15663
15664         * class.cs (Operator): Derive from MemberBase, not MemberCore.
15665
15666         * const.cs (Const): Derive from MemberBase, not MemberCore.     
15667
15668 2003-08-25  Martin Baulig  <martin@ximian.com>
15669
15670         * convert.cs (Convert.ExplicitReferenceConversion): When
15671         converting from an interface type to a class, unbox if the target
15672         type is a struct type.  Fixes #47822.
15673
15674 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15675
15676         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
15677         #47854.
15678
15679 2003-08-22  Martin Baulig  <martin@ximian.com>
15680
15681         * class.cs (TypeManager.DefineType): When defining a nested type,
15682         call DefineType() on our parent; fixes #47801.
15683
15684 2003-08-22  Martin Baulig  <martin@ximian.com>
15685
15686         * class.cs (MethodData.Define): While checking if a method is an
15687         interface implementation, improve the test a bit more to fix #47654.
15688
15689 2003-08-22  Martin Baulig  <martin@ximian.com>
15690
15691         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
15692         correctly; fixes #47722.
15693
15694 2003-08-22  Martin Baulig  <martin@ximian.com>
15695
15696         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
15697         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
15698
15699         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
15700
15701 2003-08-22  Martin Baulig  <martin@ximian.com>
15702
15703         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
15704         can only be assigned in static constructors.  Fixes #47161.
15705
15706 2003-08-22  Martin Baulig  <martin@ximian.com>
15707
15708         Rewrote and improved the flow analysis code.
15709
15710         * flowbranching.cs (FlowBranching): Make this class abstract.
15711         (FlowBranching.CreateBranching): New static function to create a
15712         new flow branching.
15713         (FlowBranchingBlock, FlowBranchingException): New classes.
15714         (FlowBranching.UsageVector.Type): New public readonly field.
15715         (FlowBranching.UsageVector.Breaks): Removed the setter.
15716         (FlowBranching.UsageVector.Returns): Removed the setter.
15717         (FlowBranching.UsageVector): Added Break(), Return(),
15718         NeverReachable() and Throw() methods to modify the reachability.
15719         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
15720         done by FlowBranching.Merge().
15721         (FlowBranching.UsageVector.MergeChild): New method; merges the
15722         merge result into the current vector.
15723         (FlowBranching.Merge): New abstract method to merge a branching.
15724
15725 2003-08-12  Martin Baulig  <martin@ximian.com>
15726
15727         * expression.cs (Indirection.CacheTemporaries): Create the
15728         LocalTemporary with the pointer type, not its element type.
15729
15730 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
15731
15732         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
15733         token was a keyword or not.
15734
15735         Add `error' options where an IDENTIFIER was expected;  Provide
15736         CheckToken and CheckIdentifierToken convenience error reporting
15737         functions. 
15738
15739         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
15740
15741         * decl.cs: Rename `NamespaceEntry Namespace' public field into
15742         NameSpaceEntry NameSpaceEntry.
15743
15744         (LookupInterfaceOrClass): Avoid creating a full qualified name
15745         from namespace and name: avoid doing lookups when we know the
15746         namespace is non-existant.   Use new Tree.LookupByNamespace which
15747         looks up DeclSpaces based on their namespace, name pair.
15748
15749         * driver.cs: Provide a new `parser verbose' to display the
15750         exception thrown during parsing.  This is turned off by default
15751         now, so the output of a failure from mcs is more graceful.
15752
15753         * namespace.cs: Track all the namespaces defined in a hashtable
15754         for quick lookup.
15755
15756         (IsNamespace): New method
15757
15758 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
15759
15760         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
15761         we know that we need to concatenate (full typename can never be
15762         null). 
15763
15764         * class.cs: ditto.
15765
15766         * statement.cs: Use a bitfield;  Do not initialize to null things
15767         which are done by the constructor by default.
15768
15769         * cs-parser.jay: bug fix, parameter was 4, not 3.
15770
15771         * expression.cs: Just use the property;
15772
15773         * statement.cs: No need for GetVariableInfo method.
15774
15775 2003-08-08  Martin Baulig  <martin@ximian.com>
15776
15777         * flowanalysis.cs (FlowReturns): This is now nested in the
15778         `FlowBranching' class.
15779         (MyBitVector): Moved this here from statement.cs.
15780         (FlowBranching.SiblingType): New enum type.
15781         (FlowBranching.CreateSibling): Added `SiblingType' argument.
15782
15783 2003-08-07  Martin Baulig  <martin@ximian.com>
15784
15785         * flowanalysis.cs (FlowBranchingType): This is now nested in the
15786         `FlowBranching' class and called `BranchingType'.
15787
15788 2003-08-07  Martin Baulig  <martin@ximian.com>
15789
15790         * flowanalysis.cs: Moved all the control flow analysis code into
15791         its own file.
15792
15793 2003-08-07  Martin Baulig  <martin@ximian.com>
15794
15795         * assign.cs (Assign.DoResolve): `target' must either be an
15796         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
15797         #37319.
15798
15799 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
15800
15801         * expression.cs (BinaryMethod): This kind of expression is created by the
15802         Binary class if it determines that the operator has to be handled
15803         by a method.
15804
15805         (BinaryDelegate): This kind of expression is created if we are
15806         dealing with a + or - operator on delegates.
15807
15808         (Binary): remove method, argumetns, and DelegateOperator: when
15809         dealing with methods, 
15810
15811         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
15812
15813         * statement.cs (Block): use bitfields for the three extra booleans
15814         we had in use.   Remove unused topblock parameter.
15815
15816         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
15817
15818         * assign.cs: Drop extra unneeded tests.
15819
15820 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
15821
15822         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
15823
15824         * statement.cs (Foreach): Use VariableStorage instead of
15825         LocalBuilders.   
15826
15827         * codegen.cs (VariableStorage): New class used by clients that
15828         require a variable stored: locals or fields for variables that
15829         need to live across yield.
15830
15831         Maybe provide a convenience api for EmitThis+EmitLoad?
15832
15833         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
15834         these bad boys.
15835
15836 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
15837
15838         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
15839         RemapParameterLValue): New methods that are used to turn a
15840         precomputed FieldInfo into an expression like this:
15841
15842                 instance.FieldInfo
15843
15844         The idea is to use this instead of making LocalVariableReference
15845         have more than one meaning.
15846
15847         * cs-parser.jay: Add error production to BASE.
15848
15849         * ecore.cs: Deal with TypeManager.GetField returning null, which
15850         is now a valid return value.
15851
15852         (FieldExprNoAddress): New expression for Fields whose address can
15853         not be taken.
15854
15855         * expression.cs (LocalVariableReference): During the resolve
15856         phases, create new expressions if we are in a remapping context.
15857         Remove code that dealt with remapping here.
15858
15859         (ParameterReference): same.
15860
15861         (ProxyInstance): New expression, like the `This' expression, but
15862         it is born fully resolved.  We know what we are doing, so remove
15863         the errors that are targeted to user-provided uses of `this'.
15864
15865         * statement.cs (Foreach): our variable is now stored as an
15866         Expression;  During resolution, follow the protocol, dont just
15867         assume it will return this.
15868
15869 2003-08-06  Martin Baulig  <martin@ximian.com>
15870
15871         * support.cs (SeekableStreamReader.cs): New public class.
15872
15873         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
15874         SeekableStreamReader instead of the normal StreamReader.
15875
15876 2003-08-04  Martin Baulig  <martin@ximian.com>
15877
15878         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
15879         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
15880         deambiguate casts and delegate invocations.
15881         (parenthesized_expression): Use the new tokens to ensure this is
15882         not a cast of method invocation.
15883
15884         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
15885         when reading a `)' and Deambiguate_CloseParens () was previously
15886         called.
15887
15888         * expression.cs (ParenthesizedExpression): New class.  This is
15889         just used for the CS0075 test.
15890         (Binary.DoResolve): Check for CS0075.   
15891
15892 2003-07-29  Ravi Pratap  <ravi@ximian.com>
15893
15894         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
15895         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
15896         reference comparison.
15897
15898         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
15899         examine the ReturnType for equality - this is necessary in the
15900         cases of implicit and explicit operators whose signature also
15901         includes the return type.
15902
15903 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
15904
15905         * namespace.cs: Cache the result of the namespace computation,
15906         instead of computing it every time.
15907
15908 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
15909
15910         * decl.cs: Use a global arraylist that we reuse over invocations
15911         to avoid excesive memory consumption.  Reduces memory usage on an
15912         mcs compile by one meg (45 average).
15913
15914         * typemanager.cs (LookupTypeReflection): In .NET pointers are
15915         private, work around that.
15916
15917 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
15918
15919         * literal.cs (IntLiteral): Define Zero and One static literals. 
15920
15921         * cs-parser.jay (integer_literal): use static literals to reduce
15922         memory usage for the most used literals (0, 1 and -1).  211kb
15923         reduced in memory usage.
15924
15925         Replace all calls to `new ArrayList' with `new
15926         ArrayList(4)' which is a good average number for most allocations,
15927         and also requires only 16 bytes of memory for its buffer by
15928         default. 
15929
15930         This reduced MCS memory usage in seven megabytes for the RSS after
15931         bootstrapping.
15932
15933 2003-07-28  Ravi Pratap  <ravi@ximian.com>
15934
15935         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
15936         handle params methods the correct way by forming only one
15937         applicable set with params and normal methods in them. Earlier we
15938         were looking at params methods only if we found no normal methods
15939         which was not the correct thing to do.
15940
15941         (Invocation.BetterFunction): Take separate arguments indicating
15942         when candidate and the best method are params methods in their
15943         expanded form.
15944
15945         This fixes bugs #43367 and #46199.
15946
15947         * attribute.cs: Documentation updates.
15948
15949         (CheckAttribute): Rename to CheckAttributeTarget.
15950         (GetValidPlaces): Rename to GetValidTargets.
15951
15952         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
15953         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
15954
15955         Fixes bug #44468.
15956
15957 2003-07-28  Martin Baulig  <martin@ximian.com>
15958
15959         * class.cs (TypeContainer.DefineMembers): Use the base type's full
15960         name when looking up the base class of a nested class.  Fixes #46977.
15961
15962 2003-07-26  Martin Baulig  <martin@ximian.com>
15963
15964         * expression.cs (Indexers.Indexer): New nested struct; contains
15965         getter, setter and the indexer's type.
15966         (Indexers.Properties): This is now an ArrayList of
15967         Indexers.Indexer's.
15968         (IndexerAccess.DoResolveLValue): Correctly set the type if the
15969         indexer doesn't have any getters.
15970
15971         * assign.cs (Assign.DoResolve): Also do the implicit conversions
15972         for embedded property and indexer assignments.
15973
15974 2003-07-26  Martin Baulig  <martin@ximian.com>
15975
15976         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
15977         preprocessor directive is not the first non-whitespace character
15978         on a line.
15979
15980 2003-07-26  Martin Baulig  <martin@ximian.com>
15981
15982         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
15983         namespace parsing, follow the spec more closely.
15984
15985         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
15986         NamespaceEntry.Lookup().
15987
15988 2003-07-25  Martin Baulig  <martin@ximian.com>
15989
15990         * MethodCore.cs (OverridesSomething): New public field; it's set
15991         from TypeContainer.DefineMembers if this method overrides
15992         something (which doesn't need to be a method).  Fix #39462.
15993
15994 2003-07-25  Ravi Pratap  <ravi@ximian.com>
15995
15996         * typemanager.cs (GetMembers): Ensure that the list of members is
15997         reversed. This keeps things in sync.
15998
15999         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
16000         find an AttributeUsage attribute.
16001
16002         * expression.cs (Invocation.OverloadResolve): Perform the check
16003         which disallows Invoke to be directly called on a Delegate.
16004
16005         (Error_InvokeOnDelegate): Report error cs1533.
16006
16007 2003-07-25  Martin Baulig  <martin@ximian.com>
16008
16009         * expression.cs (Indexers.GetIndexersForType): Only look in the
16010         interface hierarchy if the requested type is already an
16011         interface.  Fixes #46788 while keeping #46502 fixed.
16012
16013 2003-07-25  Martin Baulig  <martin@ximian.com>
16014
16015         * class.cs (TypeContainer.DefineMembers): Check whether all
16016         readonly fields have been assigned and report warning CS0649 if
16017         not.
16018
16019         * statement.cs (LocalInfo.IsFixed): Always return true if this is
16020         a valuetype.
16021
16022 2003-07-24  Ravi Pratap  <ravi@ximian.com>
16023
16024         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
16025         returned from GetMethods to make things consistent with the
16026         assumptions MCS makes about ordering of methods.
16027
16028         This should comprehensively fix bug #45127 and it does :-)
16029
16030         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
16031         ordering is actually reverse.
16032
16033         * Clean up some debug messages I left lying around.
16034
16035         * interface.cs (Populate*): Get rid of code which emits attributes
16036         since the stage in which we emit attributes is the 'Emit' stage,
16037         not the define stage.
16038
16039         (Emit): Move attribute emission for interface members here.
16040
16041 2003-07-22  Ravi Pratap  <ravi@ximian.com>
16042
16043         * expression.cs (Invocation.OverloadResolve): Follow the spec more
16044         closely: we eliminate methods in base types when we have an
16045         applicable method in a top-level type.
16046
16047         Please see section 14.5.5.1 for an exact description of what goes
16048         on. 
16049
16050         This fixes bug #45127 and a host of other related to corlib compilation.
16051
16052         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
16053         array is the method corresponding to the top-level type (this is
16054         because of the changes made to icall.c) so we change this
16055         accordingly.
16056
16057         (MethodGroupExpr.Name): This too.
16058
16059         * typemanager.cs (GetElementType): New method which does the right
16060         thing when compiling corlib. 
16061
16062         * everywhere: Make use of the above in the relevant places.
16063
16064 2003-07-22  Martin Baulig  <martin@ximian.com>
16065
16066         * cs-parser.jay (invocation_expression): Moved
16067         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
16068         `cast_expression', but create a InvocationOrCast which later
16069         resolves to either an Invocation or a Cast.
16070
16071         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
16072         method; call this before EmitStatement() to make sure that this
16073         expression can be used as a statement.
16074
16075         * expression.cs (InvocationOrCast): New class; resolves to either
16076         an Invocation or a Cast.
16077
16078         * statement.cs (StatementExpression): Call ResolveStatement() on
16079         the ExpressionStatement before emitting it.
16080
16081 2003-07-21  Martin Baulig  <martin@ximian.com>
16082
16083         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
16084         `ref' and `out' attributes match; fixes #46220.
16085         (MemberAccess.ResolveMemberAccess): You can't reference a type
16086         through an expression; fixes #33180.
16087         (Indexers.GetIndexersForType): Don't return the indexers from
16088         interfaces the class implements; fixes #46502.
16089
16090 2003-07-21  Martin Baulig  <martin@ximian.com>
16091
16092         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
16093         CS0661 checks; fixes bug #30442.
16094
16095 2003-07-21  Martin Baulig  <martin@ximian.com>
16096
16097         * decl.cs (AdditionResult): Added `Error'.
16098
16099         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
16100
16101         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
16102         makes cs0031.cs actually work.
16103
16104 2003-07-20  Martin Baulig  <martin@ximian.com>
16105
16106         * namespace.cs: Fixed that bug which caused a crash when compiling
16107         the debugger's GUI.
16108
16109 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
16110
16111         * typemanager.cs (LookupTypeReflection): Never expose types which
16112         are NotPublic, NestedPrivate, NestedAssembly, or
16113         NestedFamANDAssem.  We used to return these, and later do a check
16114         that would report a meaningful error, but the problem is that we
16115         would not get the real match, if there was a name override.
16116
16117 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
16118
16119         * namespace.cs (Namespace, Name): Do not compute the namespace
16120         name dynamically, compute it in the constructor.  This reduced
16121         memory usage by 1697 KB.
16122
16123         * driver.cs: Use --pause to pause at the end.
16124
16125 2003-07-17  Peter Williams  <peter@newton.cx>
16126
16127         * Makefile: Change the name of the test target so that it doesn't
16128         conflict with the recursive test target.
16129
16130 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
16131
16132         * expression.cs (LocalVariableReference.Emit, EmitAssign,
16133         AddressOf): Do not use EmitThis, that was wrong, use the actual
16134         this pointer.
16135
16136 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
16137
16138         * class.cs (MethodData.Define): While checking if a method is an
16139         interface implementation, improve the test: If we are not public
16140         (use new test here: use the computed MethodAttributes directly,
16141         instead of the parsed modifier flags) check if the `implementing'
16142         method comes from an interface or not.
16143
16144         * pending.cs (VerifyPendingMethods): Slightly better error
16145         message.
16146
16147         * makefile: add test target that does the mcs bootstrap.
16148
16149 2003-07-16  Ravi Pratap  <ravi@ximian.com>
16150
16151         * interface.cs (Define): Do nothing here since there are no
16152         members to populate etc. Move the attribute emission out of here
16153         since this was just totally the wrong place to put it. Attribute
16154         application happens during the 'Emit' phase, not in the 'Define'
16155         phase.
16156
16157         (Emit): Add this method and move the attribute emission here
16158
16159         * rootcontext.cs (EmitCode): Call the Emit method on interface
16160         types too.
16161
16162 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16163
16164         * expression.cs (OverloadResolve): Report error only if Location
16165         is not 'Null' which means that there was a probe going on.
16166
16167 2003-07-14  Martin Baulig  <martin@ximian.com>
16168
16169         * expression.cs (ConditionalLogicalOperator): New public class to
16170         implement user defined conditional logical operators.
16171         This is section 14.11.2 in the spec and bug #40505.
16172
16173 2003-07-14  Martin Baulig  <martin@ximian.com>
16174
16175         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
16176
16177 2003-07-14  Martin Baulig  <martin@ximian.com>
16178
16179         * codegen.cs (EmitContext.InFixedInitializer): New public field.
16180
16181         * ecore.cs (IVariable.VerifyFixed): New interface method.
16182
16183         * expression.cs (Unary.ResolveOperator): When resolving the `&'
16184         operator, check whether the variable is actually fixed.  Fixes bug
16185         #36055.  Set a variable definitely assigned when taking its
16186         address as required by the spec.
16187
16188         * statement.cs (LocalInfo.IsFixed): New field.
16189         (LocalInfo.MakePinned): Set `IsFixed' to true.
16190
16191 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16192
16193         * attribute.cs (Attribute.Resolve): While doing a Member lookup
16194         for .ctors, ensure that we only ask for members declared in the
16195         attribute type (BindingFlags.DeclaredOnly).
16196
16197         Fixes bug #43632.
16198
16199         * expression.cs (Error_WrongNumArguments): Report error 1501
16200         correctly the way CSC does.
16201
16202 2003-07-13  Martin Baulig  <martin@ximian.com>
16203
16204         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
16205         lookup on the fully qualified name, to make things like "X.X" work
16206         where "X.X" is a fully qualified type name, but we also have a
16207         namespace "X" in the using list.  Fixes #41975.
16208
16209 2003-07-13  Martin Baulig  <martin@ximian.com>
16210
16211         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
16212         function. If we're a CompoundAssign, we need to create an embedded
16213         CompoundAssign, not an embedded Assign.
16214         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
16215         Fixes #45854.
16216
16217 2003-07-13  Martin Baulig  <martin@ximian.com>
16218
16219         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
16220         work to fix bug #46088.
16221
16222 2003-07-13  Ravi Pratap <ravi@ximian.com>
16223
16224         * class.cs (Operator.Emit): Do not emit attributes here - it is
16225         taken care of by the Method class that we delegate too. This takes
16226         care of bug #45876.
16227
16228 2003-07-10  Martin Baulig  <martin@ximian.com>
16229
16230         * expression.cs (TypeOfVoid): New class.
16231         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
16232
16233 2003-07-10  Martin Baulig  <martin@ximian.com>
16234
16235         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
16236         bug #35957.
16237
16238 2003-07-10  Martin Baulig  <martin@ximian.com>
16239
16240         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
16241         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
16242
16243         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
16244
16245         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
16246
16247 2003-07-10  Martin Baulig  <martin@ximian.com>
16248
16249         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
16250         of decimal.  Fixes #42850.
16251
16252         NOTE: I also fixed the created byte blob, but this doesn't work on
16253         the MS runtime and csc never produces any byte blobs for decimal
16254         arrays.
16255
16256 2003-07-10  Martin Baulig  <martin@ximian.com>
16257
16258         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
16259         structs; fixes #32068.
16260         (Block.AddChildVariableNames): Fixed #44302.
16261
16262 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16263
16264         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
16265
16266 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16267
16268         * attribute.cs: And this test is onger needed.
16269
16270 2003-07-08  Martin Baulig  <martin@ximian.com>
16271
16272         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
16273         inaccessible types.  Fixes #36313.
16274
16275         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
16276
16277         * namespace.cs (NamespaceEntry): Create implicit entries for all
16278         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
16279         implicit entries for N1.N2 and N1.
16280
16281 2003-07-08  Martin Baulig  <martin@ximian.com>
16282
16283         Rewrote the handling of namespaces to fix a lot of the issues
16284         wrt. `using' aliases etc.
16285
16286         * namespace.cs (Namespace): Splitted this class into a
16287         per-assembly `Namespace' and a per-file `NamespaceEntry'.
16288
16289         * typemanager.cs (TypeManager.IsNamespace): Removed.
16290         (TypeManager.ComputeNamespaces): Only compute namespaces from
16291         loaded assemblies here, not the namespaces from the assembly we're
16292         currently compiling.
16293
16294 2003-07-08  Martin Baulig  <martin@ximian.com>
16295
16296         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
16297
16298 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16299
16300         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
16301         already fixed it.  
16302
16303         I thought about the memory savings here, but LookupTypeReflection
16304         is used under already very constrained scenarios.  Compiling
16305         corlib or mcs only exposes one hit, so it would not really reduce
16306         any memory consumption.
16307
16308 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16309
16310         * typemanager.cs: fixes bug #45889 by only adding public types from
16311         other assemblies to the list of known types.
16312
16313 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16314
16315         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
16316         on the type we resolved.
16317
16318 2003-07-05  Martin Baulig  <martin@ximian.com>
16319
16320         * pending.cs (PendingImplementation.ParentImplements): Don't
16321         create the proxy if the parent is abstract.
16322
16323         * class.cs (TypeContainer.DefineIndexers): Process explicit
16324         interface implementations first.  Fixes #37714.
16325
16326 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
16327
16328         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
16329         defined recursively;  but since we modify the input parameters
16330         (left is set to `this' temporarily), we reset this value if the
16331         left_is_explicit is false, which gives the original semantics to
16332         the code.  
16333
16334         * literal.cs (NullPointer): new class used to represent a null
16335         literal in a pointer context.
16336
16337         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
16338         type is a pointer, use a NullPointer object instead of a
16339         NullLiteral.   Closes 43687
16340
16341         (ExplicitConversion): Convert pointer values using
16342         the conv opcode to the proper type.
16343
16344         * ecore.cs (New): change ValueTypeVariable property into a method,
16345         that returns whether the valuetype is suitable for being used.
16346
16347         * expression.cs (Binary.DoNumericPromotions): Only return if we
16348         the int constant was a valid uint, and we can return both left and
16349         right as uints.  If not, we continue processing, to trigger the
16350         type conversion.  This fixes 39018.
16351
16352         * statement.cs (Block.EmitMeta): During constant resolution, set
16353         the CurrentBlock property on the emitcontext, so that we resolve
16354         constants propertly.
16355
16356 2003-07-02  Martin Baulig  <martin@ximian.com>
16357
16358         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
16359         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
16360
16361         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
16362         than emitting it here.
16363
16364         * statement.cs: Fixed some more flow analysis bugs.
16365
16366 2003-07-02  Martin Baulig  <martin@ximian.com>
16367
16368         * class.cs (MethodData.Define): When implementing interface
16369         methods, set Final unless we're Virtual.
16370
16371         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
16372         check work for interface methods.
16373
16374 2003-07-01  Martin Baulig  <martin@ximian.com>
16375
16376         * ecore.cs (EmitContext.This): Replaced this property with a
16377         GetThis() method which takes a Location argument.  This ensures
16378         that we get the correct error location for a CS0188.
16379
16380 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
16381
16382         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
16383         ImplicitStandardConversion.
16384
16385         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
16386
16387 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
16388
16389         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
16390         optimization.
16391
16392 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
16393
16394         * class.cs (Constructor.Define): Turn off initlocals for unsafe
16395         constructors.
16396
16397         (MethodData.Define): Turn off initlocals for unsafe methods.
16398
16399 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
16400
16401         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
16402         complete;  Fixes #37521.
16403
16404         * delegate.cs: Use Modifiers.TypeAttr to compute the
16405         TypeAttributes, instead of rolling our own.  This makes the flags
16406         correct for the delegates.
16407
16408 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
16409
16410         * class.cs (Constructor.Define): Set the private flag for static
16411         constructors as well.
16412
16413         * cs-parser.jay (statement_expression): Set the return value to
16414         null, to avoid a crash when we catch an error.
16415
16416 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
16417
16418         * cs-parser.jay: Applied patch from Jackson that adds support for
16419         extern and unsafe modifiers to destructor declarations.
16420
16421         * expression.cs: Report error 21 if the user is trying to index a
16422         System.Array.
16423
16424         * driver.cs: Add an error message, suggested by the bug report.
16425
16426         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
16427         if we do not have a ": this ()" constructor initializer.  Fixes 45149
16428
16429 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
16430
16431         * namespace.cs: Add some information to reduce FAQs.
16432
16433 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
16434
16435         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
16436         underlying enumeration types.  Fixes #43915.
16437
16438         * expression.cs: Treat ushort/short as legal values to be used in
16439         bitwise operations.
16440
16441 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
16442
16443         * delegate.cs: transfer custom attributes for paramenters from
16444         the delegate declaration to Invoke and BeginInvoke.
16445
16446 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
16447
16448         * attribute.cs: handle custom marshalers and emit marshal info
16449         for fields, too.
16450
16451 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
16452
16453         * makefile.gnu: Added anonymous.cs to the compiler sources.
16454
16455 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
16456
16457         * iterators.cs: Change the name of the proxy class to include two
16458         underscores.
16459
16460         * cs-parser.jay: Update grammar to include anonymous methods.
16461
16462         * anonymous.cs: new file.
16463
16464 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
16465
16466         * class.cs (Field.Define): Add missing test for pointers and
16467         safety. 
16468
16469 2003-05-27  Ravi Pratap  <ravi@ximian.com>
16470
16471         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
16472         we use the stobj opcode.
16473
16474         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
16475         since it wasn't the correct fix. 
16476
16477         It still is puzzling that we are required to use stobj for IntPtr
16478         which seems to be a ValueType.
16479
16480 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
16481
16482         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
16483         during regular simple name resolution.   Now, the trick is that
16484         instead of returning for processing the simplename, we do a
16485         TypeManager.LookupType (ie, a rooted lookup as opposed to a
16486         contextual lookup type).   If a match is found, return that, if
16487         not, return for further composition.
16488
16489         This fixes long-standing 30485.
16490
16491         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16492         using the address to initialize an object, do an Stobj instead of
16493         using the regular Stelem.
16494
16495         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
16496         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
16497         Because if we are a BaseIndexerAccess that value will be true.
16498         Fixes 43643.
16499
16500         * statement.cs (GotoCase.Resolve): Return after reporting an
16501         error, do not attempt to continue. 
16502
16503         * expression.cs (PointerArithmetic.Emit): If our operand is a
16504         long, convert our constants to match the operand before
16505         multiplying.  Convert to I type before adding.   Fixes 43670.
16506
16507 2003-05-14  Ravi Pratap  <ravi@ximian.com>
16508
16509         * enum.cs (ImplicitConversionExists) : Rename to
16510         ImplicitEnumConversionExists to remove ambiguity. 
16511
16512         * ecore.cs (NullCast): New type of cast expression class which
16513         basically is very similar to EmptyCast with the difference being
16514         it still is a constant since it is used only to cast a null to
16515         something else
16516         (eg. (string) null)
16517
16518         * convert.cs (ImplicitReferenceConversion): When casting a null
16519         literal, we return a NullCast.
16520
16521         * literal.cs (NullLiteralTyped): Remove - I don't see why this
16522         should be around anymore.
16523
16524         The renaming (reported was slightly wrong). Corrections:
16525
16526         ConvertImplicitStandard -> ImplicitConversionStandard
16527         ConvertExplicitStandard -> ExplicitConversionStandard
16528
16529         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
16530         before passing them in !
16531
16532         * convert.cs (ImplicitConversionStandard): When comparing for
16533         equal expr and target types, ensure that expr is not a
16534         NullLiteral.
16535
16536         In general, we must not be checking (expr_type ==
16537         target_type) in the top level conversion methods
16538         (ImplicitConversion, ExplicitConversion etc). This checking is
16539         done in the methods that they delegate to.
16540
16541 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
16542
16543         * convert.cs: Move Error_CannotConvertType,
16544         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
16545         ImplicitNumericConversion, ImplicitConversionExists,
16546         ImplicitUserConversionExists, StandardConversionExists,
16547         FindMostEncompassedType, FindMostSpecificSource,
16548         FindMostSpecificTarget, ImplicitUserConversion,
16549         ExplicitUserConversion, GetConversionOperators,
16550         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
16551         TryImplicitIntConversion, Error_CannotConvertImplicit,
16552         ConvertImplicitRequired, ConvertNumericExplicit,
16553         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
16554         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
16555         its own file.
16556
16557         Perform the following renames:
16558
16559         StandardConversionExists -> ImplicitStandardConversionExists
16560         ConvertImplicit -> ImplicitConversion
16561         ConvertImplicitStandard -> ImplicitStandardConversion
16562         TryImplicitIntConversion -> ImplicitIntConversion
16563         ConvertImplicitRequired -> ImplicitConversionRequired
16564         ConvertNumericExplicit -> ExplicitNumericConversion
16565         ConvertReferenceExplicit -> ExplicitReferenceConversion
16566         ConvertExplicit -> ExplicitConversion
16567         ConvertExplicitStandard -> ExplicitStandardConversion
16568
16569 2003-05-19  Martin Baulig  <martin@ximian.com>
16570
16571         * statement.cs (TypeInfo.StructInfo): Made this type protected.
16572         (TypeInfo): Added support for structs having structs as fields.
16573
16574         * ecore.cs (FieldExpr): Implement IVariable.
16575         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
16576         VariableInfo for the field.
16577
16578 2003-05-18  Martin Baulig  <martin@ximian.com>
16579
16580         * expression.cs (This.DoResolve): Report a CS0027 if we're
16581         emitting a field initializer.
16582
16583 2003-05-18  Martin Baulig  <martin@ximian.com>
16584
16585         * expression.cs (This.ResolveBase): New public function.
16586         (This.DoResolve): Check for CS0188.
16587
16588         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
16589         This.Resolve().
16590
16591         * ecore.cs (MethodGroupExpr.DoResolve): Set the
16592         `instance_expression' to null if we don't have any non-static
16593         methods.
16594
16595 2003-05-18  Martin Baulig  <martin@ximian.com>
16596
16597         Reworked the way how local variables and parameters are handled by
16598         the flow analysis code.
16599
16600         * statement.cs (TypeInfo, VariableMap): New public classes.
16601         (VariableInfo): New public class.  This is now responsible for
16602         checking whether a variable has been assigned.  It is used for
16603         parameters and local variables.
16604         (Block.EmitMeta): Take the InternalParameters as argument; compute
16605         the layout of the flow vectors here.
16606         (Block.LocalMap, Block.ParameterMap): New public properties.
16607         (FlowBranching): The .ctor doesn't get the InternalParameters
16608         anymore since Block.EmitMeta() now computes the layout of the flow
16609         vector.
16610         (MyStructInfo): This class is now known as `StructInfo' and nested
16611         in `TypeInfo'; we don't access this directly anymore.
16612
16613         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
16614         property and removed IsAssigned(), IsFieldAssigned(),
16615         SetAssigned() and SetFieldAssigned(); we now call them on the
16616         VariableInfo so we don't need to duplicate this code everywhere.
16617
16618         * expression.cs (ParameterReference): Added `Block block' argument
16619         to the .ctor.
16620         (LocalVariableReference, ParameterReference, This): The new
16621         VariableInfo class is now responsible for all the definite
16622         assignment stuff.
16623
16624         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
16625         IsParameterAssigned, SetParameterAssigned): Removed.
16626
16627 2003-05-18  Martin Baulig  <martin@ximian.com>
16628
16629         * typemanager.cs (InitCoreTypes): Try calling
16630         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
16631         the 3-args-version.  Corlib now also needs our `void_type'.
16632         (GetMethod): Added overloaded version which takes an optional
16633         `bool report_errors' to allow lookups of optional methods.
16634
16635 2003-05-12  Martin Baulig  <martin@ximian.com>
16636
16637         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
16638         only used for locals and not for parameters.
16639
16640 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
16641
16642         * support.cs (InternalParameters.ParameterType): Return the
16643         ExternalType of the parameter.
16644
16645         * parameter.cs (Parameter.ExternalType): drop the two arguments,
16646         they were unused.
16647
16648 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
16649
16650         * class.cs (MethodData.Define): Do not set the `newslot' on
16651         interface members, if they are also flagged as "override".
16652
16653         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
16654         better code for ++i and i++.  This only works for static fields
16655         and local variables.
16656
16657         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
16658         want to pull the DeclSpace out of the builder_to_declspace instead
16659         of the TypeBuilder (like in TypeContainer.FindMembers).
16660
16661         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
16662         instead of LookupTypeContainer.  Fixes the crash on .NET for
16663         looking up interface members.
16664
16665         * const.cs: Create our own emit context during the Definition
16666         stage, so that constants are evaluated in the proper context, when
16667         a recursive definition happens.
16668
16669 2003-05-11  Martin Baulig  <martin@ximian.com>
16670
16671         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
16672         new block for a switch section.
16673         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
16674         the adding/lookup in the switch block.  Fixes #39828.
16675
16676 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
16677
16678         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
16679         functionality: I needed to convert the data after I had performed
16680         the add/sub operation into the operands type size.
16681
16682         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
16683         pass the type for the box operation, otherwise the resulting
16684         object would have been of type object.
16685
16686         (BoxedCast): Add constructor to specify the type to box as.
16687
16688 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
16689
16690         * iterators.cs: I was reusing the `count' variable inadvertently,
16691         take steps to not allow this to happen.
16692
16693 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
16694
16695         * attribute.cs (Attribute.Resolve): Params attributes are encoded
16696         by creating an array at the point where the params starts and
16697         putting all those arguments there, then adjusting the size of the
16698         array.
16699
16700 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
16701
16702         * expression.cs (New.AddressOf): Implement interface
16703         IMemoryLocation.  This is used when the `new' operator is used in
16704         the context of an invocation to a method on a value type.
16705
16706         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
16707         example. 
16708
16709         * namespace.cs: Also check the using aliases here.
16710
16711         * driver.cs: Move the test for using validity after the types have
16712         been entered, so we do a single pass that also includes the using
16713         aliases. 
16714
16715         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
16716         in the regular case.   CreateSiblingForFinally is doing extra
16717         error checking.
16718
16719         * attribute.cs (GetAttributeArgumentExpression): Store the result
16720         on an out value, and use the return value to indicate failure
16721         instead of using null (which is a valid return for Constant.GetValue).
16722
16723         * statement.cs: Perform the analysis flow for the increment
16724         portion after the statement, because this will be the real flow of
16725         execution.  Fixes #42385
16726
16727         * codegen.cs (EmitContext.EmitArgument,
16728         EmitContext.EmitStoreArgument): New helper functions when the
16729         RemapToProxy flag is set.
16730
16731         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
16732         function.
16733
16734         Add support for remapping parameters. 
16735
16736         * iterators.cs: Propagate parameter values;  Store parameter
16737         values in the proxy classes.
16738
16739 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
16740
16741         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
16742         need a proxy reference;  I do not know what I was thinking
16743
16744         * cs-parser.jay (constructor_initializer): catch another error,
16745         and display nice message.
16746
16747         (field_declaration): catch void field declaration
16748         to flag a better error. 
16749
16750         * class.cs (MemberBase.CheckBase): Report an error instead of a
16751         warning if a new protected member is declared in a struct. 
16752         (Field.Define): catch the error of readonly/volatile.
16753
16754         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
16755
16756         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
16757         volatile variable is taken
16758
16759 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
16760
16761         * statement.cs (Fixed.Resolve): Report an error if we are not in
16762         an unsafe context.
16763
16764 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
16765
16766         * typemanager.cs: reuse the code that handles type clashes for
16767         delegates and enumerations.
16768
16769         * class.cs (Report28): Always report.
16770
16771         * expression.cs (EncodeAsAttribute): Allow nulls here.
16772
16773 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
16774
16775         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
16776         the functionality for testing whether an expression is valid for
16777         an attribute here.  Also handle the case of arrays of elements
16778         being stored. 
16779
16780         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
16781         encoding a linear array into an array of objects that are suitable
16782         to be passed to an CustomAttributeBuilder.
16783
16784         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
16785
16786         * ecore.cs: (FieldExpr): Handle field remapping here.
16787
16788         * iteratators.cs: Pass the instance variable (if the method is an
16789         instance method) to the constructors, so we can access the field
16790         variables on the class.
16791
16792         TODO: Test this with structs.  I think the THIS variable on
16793         structs might have to be a pointer, and not a refenrece
16794
16795 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
16796
16797         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
16798         local variables to fields in a proxy class.
16799
16800         * iterators.cs (PopulateProxy): Rename our internal fields to
16801         <XXX>.  
16802         Create a <THIS> field if we are an instance method, so we can
16803         reference our parent container variables.
16804         (MapVariable): Called back from the EmitContext code to enter a
16805         new variable to field mapping into the proxy class (we just create
16806         a FieldBuilder).
16807
16808         * expression.cs
16809         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
16810         for using the remapped locals to fields.
16811
16812         I placed the code here, because that gives the same semantics to
16813         local variables, and only changes the Emit code.
16814
16815         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
16816         statements inside iterators.
16817         (VariableInfo): Add a FieldBuilder for the cases when we are
16818         remapping local variables to fields in a proxy class
16819
16820         * ecore.cs (SimpleNameResolve): Avoid testing two times for
16821         current_block != null.
16822
16823         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
16824         not cope with strings, as it has been moved to the
16825         TableSwitchEmit.  Fixed bug in switch generation.
16826
16827         * expression.cs (New.DoResolve): Provide more context for the user
16828         when reporting an error.
16829
16830         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
16831         pointers. 
16832
16833         * expression.cs (MemberAccess.DoResolve): When we get a type back,
16834         check the permissions for it.  Note than in a type-resolution
16835         context the check was already present in DeclSpace.ResolveType,
16836         but was missing from the MemberAccess.
16837
16838         (ArrayCreation.CheckIndices): warn if the user has
16839         more nested levels of expressions, but there are no more
16840         dimensions specified.  Avoids crash on bug 41906.
16841
16842 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
16843
16844         * statement.cs (Block): replace Implicit bool, for a generic
16845         flags.   
16846         New flag: `Unchecked'.  This is used during the EmitMeta phase
16847         (which is out-of-line with the regular Resolve/Emit process for a
16848         statement, as this is done ahead of time, but still gets a chance
16849         to call constant resolve).
16850
16851         (Block.Flags): new enum for adding a new flag.
16852
16853         (Block.EmitMeta): track the state of unchecked.
16854
16855         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
16856         to enable constant resolution to work there as well.
16857
16858 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
16859
16860         * typemanager.cs (ienumerable_type): Also look up
16861         System.Collections.IEnumerable. 
16862
16863 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
16864
16865         TODO: Test more than one conditional per method.
16866
16867         * class.cs (Indexer.Define): Report the location where the user is
16868         referencing the unsupported feature.
16869
16870         (MethodData): Overload the use of `conditionals' to
16871         minimize the creation of needless ArrayLists.   This saves roughly
16872         212kb on my machine.
16873
16874         (Method): Implement the new IIteratorContainer interface.
16875         (Method.SetYields): Implement the method by setting the ModFlags
16876         to contain METHOD_YIELDS.
16877
16878         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
16879         which just got set to null.
16880
16881         * iterators.cs: New file.
16882
16883         (Yield, YieldBreak): New statements.
16884
16885         * statement.cs (Return.Resolve): Flag an error if we are used in
16886         an iterator method.
16887
16888         * codegen.cs (InIterator): New flag set if the code is being
16889         compiled in an iterator method.
16890
16891         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
16892         internal modifier, and we just use it to avoid adding extra
16893         fields, as this is seldom used.  
16894
16895         * cs-parser.jay: Add yield_statement (yield and yield break).
16896
16897         * driver.cs: New flag -v2 to turn on version 2 features. 
16898
16899         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
16900         hashtable when v2 is enabled.
16901
16902 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
16903
16904         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
16905         there is already a namespace defined with this name.
16906
16907         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
16908         people upgraded their corlibs.
16909
16910         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
16911         always use fully qualified types, no need to use the compiler
16912         front end.
16913
16914         (TypeManager.IsNamespace): Use binarysearch.
16915
16916         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
16917         AddDelegate): I did not quite use the new IsValid API properly: I
16918         have to pass the short-name and the fullname.  I was passing only
16919         the basename instead of the fullname sometimes. 
16920
16921         (TypeContainer.DefineType): call NamespaceClash.
16922
16923         * interface.cs (Interface.DefineType): use NamespaceClash before
16924         defining the type.
16925
16926         * delegate.cs (Delegate.DefineType): use NamespaceClash before
16927         defining the type.
16928
16929         * enum.cs: (Enum.DefineType): use NamespaceClash before
16930         defining the type.
16931
16932         * typemanager.cs (: 3-line patch that gives us some tasty 11%
16933         speed increase.  First, use the negative_hits cache when we get a
16934         negative.  Second, add the type with its full original name
16935         instead of the new . and + encoded name (reflection uses + to
16936         separate type from a nested type).  Use LookupTypeReflection
16937         directly which bypasses the type->name hashtable (that we already
16938         know does not contain the type.
16939
16940         * decl.cs (DeclSpace.ResolveTypeExpr): track the
16941         location/container type. 
16942
16943         * driver.cs: When passing utf8, use directly the UTF8Encoding.
16944
16945 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
16946
16947         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
16948
16949         * delegate.cs (NewDelegate.Resolve): Test whether an instance
16950         method is being referenced in the method group from a static
16951         context, and report error 120 if so.
16952
16953         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
16954         Error118. 
16955
16956         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
16957         is created, we create the A namespace).
16958
16959         * cs-parser.jay: A namespace also introduces a DeclarationFound.
16960         Fixes #41591
16961
16962 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
16963
16964         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
16965         invocation to ModuleBuilder.GetType with the same values will
16966         return a new type instance, so we need to cache its return
16967         values. 
16968
16969         * expression.cs (Binary.ResolveOperator): Only allow the compare
16970         operators on enums if they are of the same type.
16971
16972         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
16973         types of ValueType on their own case.  Before we were giving them
16974         the same treatment as objects.
16975
16976         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
16977         fullname.  Short name is used to compare against container name.
16978         Fullname is used to check against defined namespace names.
16979
16980         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
16981         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
16982
16983         (Method.CheckBase): Call parent.
16984         (MemberBase.CheckBase): Check for protected members on sealed
16985         classes.
16986         (PropertyBase.CheckBase): Call parent.
16987         (Field.Define): Call parent.
16988
16989         * report.cs: Negative error codes are now mapped to 8000 - code,
16990         so that the display is render more nicely.
16991
16992         * typemanager.cs: Do not use try/catch, instead report a regular
16993         error. 
16994
16995         (GetPointerType, GetReferenceType): These methods provide
16996         mechanisms to obtain the T* and T& from a T.  We had the code
16997         previously scattered around the code base, and it also used
16998         TypeManager.LookupType that would go through plenty of caches.
16999         This one goes directly to the type source.
17000
17001         In some places we did the Type.GetType followed by
17002         ModuleBuilder.GetType, but not in others, so this unifies the
17003         processing as well.
17004
17005         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
17006         statements now that we have namespace information.
17007
17008         * typemanager.cs (IsNamespace): New method, returns whether the
17009         string presented is a namespace or not.
17010
17011         (ComputeNamespaces): New public entry point, computes the list of
17012         available namespaces, using the GetNamespaces API call in Mono, or
17013         the slower version in MS.NET.   
17014
17015         Now before we start the semantic analysis phase, we have a
17016         complete list of namespaces including everything that the user has
17017         provided.
17018
17019         Deleted old code to cache namespaces in .nsc files.
17020
17021 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
17022
17023         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
17024         class/struct location definition Location for the implicit
17025         constructor location.
17026
17027         (Operator.Define): Use the location of the operator for the
17028         implicit Method definition.
17029
17030         (Constructor.Emit): use the constructor location for the implicit
17031         base initializer constructor.
17032
17033         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
17034         and the Expression class now contains two new methods:
17035
17036         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
17037         isolate type lookup from the rest of the resolution process.
17038
17039         Since we use Expressions to hold type definitions due to the way
17040         we parse the input we have historically overloaded Resolve to
17041         perform the Type lookups if a special flag is passed.  Now this is
17042         eliminated and two methods take their place. 
17043
17044         The differences in the two methods between xStep and xTerminal is
17045         that xStep is involved in our current lookup system that uses
17046         SimpleNames to compose a name, while xTerminal is used just to
17047         catch the case where the simplename lookup failed.
17048
17049 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
17050
17051         * expression.cs (ResolveMemberAccess): Remove redundant code.
17052         TypeExpr expressions are always born fully resolved.
17053
17054         * interface.cs (PopulateMethod): Do not lookup the types twice.
17055         We were doing it once during SemanticAnalysis and once during
17056         PopulateMethod.
17057
17058         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
17059         in local variable type definitions, were being returned as a
17060         SimpleName (we decomposed everything into a string), that is
17061         because primary_expression was being used instead of a type in the
17062         grammar (reduce/reduce conflicts).
17063
17064         The part that was wrong is that we converted the expression into a
17065         string (an oversimplification in one hand, compounded with primary
17066         expressions doing string concatenation).
17067
17068         So things like:
17069
17070         A.B.C [] x;
17071
17072         Would return "A.B.C[]" as a SimpleName.  This stopped things like
17073         using clauses from working on this particular context.  And a type
17074         was being matched directly against "A.B.C[]".
17075
17076         We now use the correct approach, and allow for ComposedCast to be
17077         part of the unary expression.  So the "A.B.C []" become a composed
17078         cast of "A.B.C" (as a nested group of MemberAccess with a
17079         SimpleName at the end) plus the rank composition "[]". 
17080
17081         Also fixes 35567
17082
17083 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
17084
17085         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
17086         for the access level checking.
17087
17088         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
17089         `TypeContainer container', because I kept getting confused when I
17090         was debugging this code.
17091
17092         * expression.cs (Indexers): Instead of tracking getters/setters,
17093         we now track them in parallel.  We create one arraylist less, but
17094         most importantly it is possible now for the LValue code to find a
17095         matching get for a set.
17096
17097         (IndexerAccess.DoResolveLValue): Update the code.
17098         GetIndexersForType has been modified already to extract all the
17099         indexers from a type.  The code assumed it did not.
17100
17101         Also make the code set the correct return type for the indexer.
17102         This was fixed a long time ago for properties, but was missing for
17103         indexers.  It used to be void_type.
17104
17105         (Binary.Emit): Test first for doubles instead of
17106         floats, as they are more common.
17107
17108         (Binary.EmitBranchable): Use the .un version of the branch opcodes
17109         when dealing with floats and the <=, >= operators.  This fixes bug
17110         #39314 
17111
17112         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
17113         to load the array value by emitting a load on the foreach variable
17114         type.  This was incorrect.  
17115
17116         We now emit the code to load an element using the the array
17117         variable type, and then we emit the conversion operator.
17118
17119         Fixed #40176
17120
17121 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
17122
17123         * attribute.cs: Avoid allocation of ArrayLists in the common case.
17124
17125 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
17126
17127         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
17128         test for protection before we test for signatures. 
17129
17130         (MethodSignature.ToString): implement.
17131
17132         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
17133         to the case where we reduced into a LongConstant.
17134
17135         * decl.cs (CheckAccessLevel): If the type is an array, we can not
17136         depend on whether the information is acurrate, because the
17137         Microsoft runtime will always claim that the array type is public,
17138         regardless of the real state.
17139
17140         If the type is a pointer, another problem happens: the type is
17141         reported as non-public in Microsoft.  
17142
17143         In both cases we have to call CheckAccessLevel recursively with
17144         the underlying type as the argument to be tested.
17145
17146 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
17147
17148         * assign.cs (Assign.Emit): If we are dealing with a compound
17149         assignment expression, we should use the code path that stores the
17150         intermediate result in a temporary value.  This fixes #40903.
17151
17152         *expression.cs (Indirection.ToString): Provide ToString method for
17153         debugging. 
17154
17155 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
17156
17157         * class.cs: Null out fields holding references to Block objects so
17158         they can be garbage collected.
17159
17160         * expression.cs (OverloadResolve): Remove unused local.
17161
17162 2003-04-07  Martin Baulig  <martin@ximian.com>
17163
17164         * codegen.cs (EmitContext.CurrentFile): New public field.
17165         (EmitContext.Mark): Use the CurrentFile to check whether the
17166         location is in the correct file.
17167         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
17168
17169 2003-04-07  Martin Baulig  <martin@ximian.com>
17170
17171         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
17172
17173         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
17174         location.  [FIXME: The location argument which gets passed to this
17175         method is sometimes wrong!]
17176
17177 2003-04-07  Nick Drochak <ndrochak@gol.com>
17178
17179         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
17180
17181 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
17182
17183         * expression.cs (Indirection.EmitAssign): We were using the
17184         temporary, but returning immediately instead of continuing the
17185         EmitAssing flow.
17186
17187 2003-04-06  Martin Baulig  <martin@ximian.com>
17188
17189         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
17190         if it's a nested child, but also deriving from the outer class.
17191         See test 190.cs.
17192
17193         * typemanager.cs (IsNestedChildOf): Make this work if it's a
17194         nested child, but also deriving from the outer class.  See
17195         test-190.cs.
17196         (FilterWithClosure): We may access private members of the outer
17197         class if we're a nested child and deriving from the outer class.
17198         (RealMemberLookup): Only set `closure_private_ok' if the
17199         `original_bf' contained BindingFlags.NonPublic.
17200
17201 2003-04-05  Martin Baulig  <martin@ximian.com>
17202
17203         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
17204
17205 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
17206
17207         * class.cs (Event.Define): Do not allow abstract events to have
17208         initializers. 
17209
17210 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
17211
17212         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
17213         block in event declarations.
17214
17215         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
17216         value type, get its address.
17217
17218         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
17219         leaving a class on the stack instead of a boolean value (int
17220         0/1).  Change the code so we compare against null, and then the
17221         result against zero.
17222
17223         * class.cs (TypeContainer.GetClassBases): We were checking for the
17224         parent class being sealed too late.
17225
17226         * expression.cs (Binary.Emit): For <= and >= when dealing with
17227         floating point values, use cgt.un and clt.un instead of cgt and
17228         clt alone.
17229
17230 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
17231
17232         * statement.cs: Apply the same optimization as MS: skip the 
17233         GetEnumerator returning an IEnumerator, and use the one returning a 
17234         CharEnumerator instead. This allows us to avoid the try-finally block 
17235         and the boxing.
17236
17237 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
17238
17239         * cs-parser.jay: Attributes cannot be applied to
17240                          namespaces. Fixes #40473
17241
17242 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17243
17244         * class.cs:
17245         (Add*): check if the name is valid using the full name for constants,
17246         fields, properties and events.
17247
17248 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
17249
17250         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
17251         char constants to be part of the enumeration.
17252
17253         * expression.cs (Conditional.DoResolve): Add support for operator
17254         true. Implements the missing functionality from 14.12
17255
17256         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
17257         operator true/false as required by the spec.
17258
17259         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
17260         implicit conversion to boolean.
17261
17262         * statement.cs (Statement.ResolveBoolean): A boolean expression is
17263         also one where the type implements `operator true'. 
17264
17265         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
17266         get an expression that will invoke operator true based on an
17267         expression.  
17268
17269         (GetConversionOperators): Removed the hack that called op_True
17270         here.  
17271
17272         (Expression.ResolveBoolean): Move this from Statement.
17273
17274 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
17275
17276         * ecore.cs (FieldExpr): do not allow initialization of initonly
17277         fields on derived classes
17278
17279 2003-03-13  Martin Baulig  <martin@ximian.com>
17280
17281         * statement.cs (Block.Emit): Call ig.BeginScope() and
17282         ig.EndScope() when compiling with debugging info; call
17283         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
17284
17285 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
17286
17287         * expression.cs (Indexers): Do not construct immediately, allow
17288         for new members to be appended as we go.  Fixes 38143
17289
17290 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17291
17292         * expression.cs: save/restore context when resolving an unchecked
17293         expression.
17294
17295 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
17296
17297         * cfold.cs: Catch division by zero in modulus operator during
17298         constant folding.
17299
17300 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
17301
17302         * interface.cs (Interface.DefineMembers): Avoid defining members
17303         twice. 
17304
17305 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
17306
17307         * driver.cs: handle the +/- options for -noconfig
17308
17309         * statement.cs (Unckeched.Resolve): Also track the state of
17310         unchecked in the Resolve phase.
17311
17312 2003-02-27  Martin Baulig  <martin@ximian.com>
17313
17314         * ecore.cs (Expression.MemberLookup): Don't create a
17315         MethodGroupExpr for something which is not a method.  Fixes #38291.
17316
17317 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
17318
17319         * class.cs (MemberBase.CheckParameters): Also check that the type
17320         is unmanaged if it is a pointer.
17321
17322         * expression.cs (SizeOf.Resolve): Add location information.
17323
17324         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
17325         a managed type is declared.
17326
17327         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
17328         parameter modifiers as well.  Fixes bug 38606
17329
17330         * class.cs: Very sad.  Am backing out the speed up changes
17331         introduced by the ArrayList -> Array in the TypeContainer, as they
17332         were not actually that much faster, and introduced a bug (no error
17333         reports on duplicated methods).
17334
17335         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
17336         source first, this will guarantee that we have a valid expression
17337         before calling in lower levels functions that will require a
17338         resolved object.  Then use this original_source in the
17339         target.ResolveLValue instead of the original source that was
17340         passed to us.
17341
17342         Another change.  Use target.Resolve instead of LValueResolve.
17343         Although we are resolving for LValues, we will let the Assign code
17344         take care of that (it will be called again from Resolve).  This
17345         basically allows code like this:
17346
17347         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
17348         class Y { void A (X x) { x [0] += o; }
17349
17350         The problem was that the indexer was trying to resolve for
17351         set_Item (idx, object o) and never finding one.  The real set_Item
17352         was set_Item (idx, X).  By delaying the process we get the right
17353         semantics. 
17354
17355         Fixes bug 36505
17356
17357 2003-02-23  Martin Baulig  <martin@ximian.com>
17358
17359         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
17360         while calling DoEmit ().
17361
17362         * codegen.cs (EmitContext.Mark): Don't mark locations in other
17363         source files; if you use the #line directive inside a method, the
17364         compiler stops emitting line numbers for the debugger until it
17365         reaches the end of the method or another #line directive which
17366         restores the original file.
17367
17368 2003-02-23  Martin Baulig  <martin@ximian.com>
17369
17370         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
17371
17372 2003-02-23  Martin Baulig  <martin@ximian.com>
17373
17374         * statement.cs (Block.AddChildVariableNames): We need to call this
17375         recursively, not just for our immediate children.
17376
17377 2003-02-23  Martin Baulig  <martin@ximian.com>
17378
17379         * class.cs (Event.Define): Always make the field private, like csc does.
17380
17381         * typemanager.cs (TypeManager.RealMemberLookup): Make events
17382         actually work, fixes bug #37521.
17383
17384 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
17385
17386         * delegate.cs: When creating the various temporary "Parameters"
17387         classes, make sure that we call the ComputeAndDefineParameterTypes
17388         on those new parameters (just like we do with the formal ones), to
17389         allow them to be resolved in the context of the DeclSpace.
17390
17391         This fixes the bug that Dick observed in Bugzilla #38530.
17392
17393 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
17394
17395         * expression.cs (ResolveMemberAccess): When resolving a constant,
17396         do not attempt to pull a constant if the value was not able to
17397         generate a valid constant.
17398
17399         * const.cs (LookupConstantValue): Do not report more errors than required.
17400
17401 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17402
17403         * expression.cs: fixes bug #38328.
17404
17405 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17406
17407         * class.cs: Changed all the various members that can be part of a
17408         class from being an ArrayList to be an Array of the right type.
17409         During the DefineType type_list, interface_list, delegate_list and
17410         enum_list are turned into types, interfaces, delegates and enums
17411         arrays.  
17412
17413         And during the member population, indexer_list, event_list,
17414         constant_list, field_list, instance_constructor_list, method_list,
17415         operator_list and property_list are turned into their real arrays.
17416
17417         Although we could probably perform this operation earlier, for
17418         good error reporting we need to keep the lists and remove the
17419         lists for longer than required.
17420
17421         This optimization was triggered by Paolo profiling the compiler
17422         speed on the output of `gen-sample-program.pl' perl script. 
17423
17424         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
17425         not crash in methods like MemberLookupFailed that use this field.  
17426
17427         This problem arises when the compiler fails to resolve a type
17428         during interface type definition for example.
17429
17430 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17431
17432         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
17433         inherit from System.Object, so we have to stop at null, not only
17434         when reaching System.Object.
17435
17436 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
17437
17438         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
17439         DeclaredOnly because the parent indexer might have had a different
17440         name, but did not loop until the top of the hierarchy was reached.
17441
17442         The problem this one fixes is 35492: when a class implemented an
17443         indexer from an interface, we were getting the interface method
17444         (which was abstract) and we were flagging an error (can not invoke
17445         abstract method).
17446
17447         This also keeps bug 33089 functioning, and test-148 functioning.
17448
17449         * typemanager.cs (IsSpecialMethod): The correct way of figuring
17450         out if a method is special is to see if it is declared in a
17451         property or event, or whether it is one of the predefined operator
17452         names.   This should fix correctly #36804.
17453
17454 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
17455
17456         The goal here is to remove the dependency on EmptyCast.Peel ().
17457         Killing it completely.
17458
17459         The problem is that currently in a number of places where
17460         constants are expected, we have to "probe" for an EmptyCast, and
17461         Peel, which is not the correct thing to do, as this will be
17462         repetitive and will likely lead to errors. 
17463
17464         The idea is to remove any EmptyCasts that are used in casts that
17465         can be reduced to constants, so we only have to cope with
17466         constants. 
17467
17468         This bug hunt was triggered by Bug 37363 and the desire to remove
17469         the duplicate pattern where we were "peeling" emptycasts to check
17470         whether they were constants.  Now constants will always be
17471         constants.
17472
17473         * ecore.cs: Use an enumconstant here instead of wrapping with
17474         EmptyCast.  
17475
17476         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
17477         throwing me off.  By handling this we can get rid of a few hacks.
17478
17479         * statement.cs (Switch): Removed Peel() code.
17480
17481 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
17482
17483         * class.cs: Location information for error 508
17484
17485         * expression.cs (New.DoResolve): Add a guard against double
17486         resolution of an expression.  
17487
17488         The New DoResolve might be called twice when initializing field
17489         expressions (see EmitFieldInitializers, the call to
17490         GetInitializerExpression will perform a resolve on the expression,
17491         and later the assign will trigger another resolution
17492
17493         This leads to bugs (#37014)
17494
17495         * delegate.cs: The signature for EndInvoke should contain any ref
17496         or out parameters as well.  We were not doing this in the past. 
17497
17498         * class.cs (Field.Define): Do not overwrite the type definition
17499         inside the `volatile' group.  Turns out that volatile enumerations
17500         were changing the type here to perform a validity test, which
17501         broke conversions. 
17502
17503 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
17504
17505         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
17506         and structs, we do not want to load the instance variable
17507
17508         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
17509         enum_type has to be handled like an object reference (implicit
17510         conversions exists from this to object), but the regular IsClass
17511         and IsValueType tests will never return true for this one.
17512
17513         Also we use TypeManager.IsValueType instead of type.IsValueType,
17514         just for consistency with the rest of the code (this is only
17515         needed if we ever use the construct exposed by test-180.cs inside
17516         corlib, which we dont today).
17517
17518 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
17519
17520         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
17521         just InternalCall.
17522
17523 2003-02-09  Martin Baulig  <martin@ximian.com>
17524
17525         * namespace.cs (Namespace..ctor): Added SourceFile argument.
17526         (Namespace.DefineNamespaces): New static public method; this is
17527         called when we're compiling with debugging to add all namespaces
17528         to the symbol file.
17529
17530         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
17531         pass it to the Namespace's .ctor.
17532
17533         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
17534         and MethodBase arguments; pass the namespace ID to the symwriter;
17535         pass the MethodBase instead of the token to the symwriter.
17536         (SymbolWriter.DefineNamespace): New method to add a namespace to
17537         the symbol file.
17538
17539 2003-02-09  Martin Baulig  <martin@ximian.com>
17540
17541         * symbolwriter.cs: New file.  This is a wrapper around
17542         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
17543         methods here in near future.
17544
17545 2003-02-09  Martin Baulig  <martin@ximian.com>
17546
17547         * codegen.cs (EmitContext.Mark): Just pass the arguments to
17548         ILGenerator.MarkSequencePoint() which are actually used by the
17549         symbol writer.
17550
17551 2003-02-09  Martin Baulig  <martin@ximian.com>
17552
17553         * location.cs (SourceFile): New public sealed class.  This
17554         contains the name and an index which is used in the location's token.
17555         (Location): Reserve an appropriate number of bits in the token for
17556         the source file instead of walking over that list, this gives us a
17557         really huge performance improvement when compiling with debugging.
17558
17559         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
17560         `SourceFile' argument instead of a string.
17561         (Driver.ProcessFile): Add all the files via Location.AddFile(),
17562         but don't parse/tokenize here, we need to generate the list of all
17563         source files before we do that.
17564         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
17565         the files.
17566
17567         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
17568         instead of a string.
17569
17570         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
17571         of a string.
17572
17573 2003-02-09  Martin Baulig  <martin@ximian.com>
17574
17575         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
17576         filename on `#line default'.
17577
17578 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
17579
17580         * statement.cs: don't clear the pinned var when the fixed statement
17581         returns from the method (fixes bug#37752).
17582
17583 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
17584
17585         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
17586         to IsValueType.
17587
17588 2003-02-07  Martin Baulig  <martin@ximian.com>
17589
17590         * driver.cs: Removed the `--debug-args' command line argument.
17591
17592         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
17593         automatically by the AsssemblyBuilder.
17594         (CodeGen.InitializeSymbolWriter): We don't need to call any
17595         initialization function on the symbol writer anymore.  This method
17596         doesn't take any arguments.
17597
17598 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
17599
17600         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
17601         from referenced assemblies as well.
17602
17603 2003-02-02  Martin Baulig  <martin@ximian.com>
17604
17605         * class.cs (MethodData.Emit): Generate debugging info for external methods.
17606
17607 2003-02-02  Martin Baulig  <martin@ximian.com>
17608
17609         * class.cs (Constructor.Emit): Open the symbol writer before
17610         emitting the constructor initializer.
17611         (ConstructorInitializer.Emit): Call ec.Mark() to allow
17612         single-stepping through constructor initializers.
17613
17614 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
17615
17616         * class.cs: Handle error 549: do not allow virtual methods in
17617         sealed classes. 
17618
17619 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
17620
17621         * decl.cs: Check access levels when resolving types
17622
17623 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
17624
17625         * statement.cs: Add parameters and locals set in catch blocks that might 
17626         return to set vector
17627
17628 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
17629
17630         * class.cs (Operator): Set the SpecialName flags for operators.
17631
17632         * expression.cs (Invocation.DoResolve): Only block calls to
17633         accessors and operators on SpecialName methods.
17634
17635         (Cast.TryReduce): Handle conversions from char constants.
17636
17637
17638 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
17639
17640         * statement.cs: small memory and time optimization in FlowBranching.
17641
17642 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
17643
17644         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
17645         problem that the last fix but in the other sid (Set).
17646
17647         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
17648         access when there is no indexer in the hierarchy.
17649
17650 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
17651
17652         * class.cs: Combine some if statements.
17653
17654 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17655
17656         * driver.cs: fixed bug #37187.
17657
17658 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
17659
17660         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
17661         any indexer, it's needed to build a list with all the indexers in the
17662         hierarchy (AllGetters), else we have problems. Fixes #35653.
17663
17664 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
17665
17666         * class.cs (MethodData.Define): It is wrong for an interface
17667         implementation to be static in both cases: explicit and implicit.
17668         We were only handling this in one case.
17669
17670         Improve the if situation there to not have negations.
17671
17672         * class.cs (Field.Define): Turns out that we do not need to check
17673         the unsafe bit on field definition, only on usage.  Remove the test.
17674
17675 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17676
17677         * driver.cs: use assembly.Location instead of Codebase (the latest
17678         patch made mcs fail when using MS assemblies).
17679
17680 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
17681
17682         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
17683         get the path to *corlib.dll.
17684
17685 2003-01-21  Nick Drochak <ndrochak@gol.com>
17686
17687         * cs-tokenizer.cs:
17688         * pending.cs:
17689         * typemanager.cs: Remove compiler warnings
17690
17691 2003-01-20  Duncan Mak  <duncan@ximian.com>
17692
17693         * AssemblyInfo.cs: Bump the version number to 0.19.
17694
17695 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17696
17697         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
17698
17699 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
17700
17701         * class.cs (Constructor::Emit): Emit debugging info for constructors.
17702
17703 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
17704
17705         * cs-parser.jay: Small fix: we were not comparing the constructor
17706         name correctly.   Thanks to Zoltan for the initial pointer.
17707
17708 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
17709
17710         * cs-tokenizer.cs: Set file name when specified with #line
17711
17712 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
17713
17714         * cs-parser.jay: Only perform the constructor checks here if we
17715         are named like the class;  This will help provider a better
17716         error.  The constructor path is taken when a type definition is
17717         not found, but most likely the user forgot to add the type, so
17718         report that rather than the constructor error.
17719
17720 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
17721
17722         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
17723         allocations.
17724
17725 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17726
17727         * cs-parser.jay: Add cleanup call.
17728
17729 2003-01-13  Duncan Mak  <duncan@ximian.com>
17730
17731         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
17732         consistent with other methods.
17733
17734 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17735
17736         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
17737
17738 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
17739
17740         * attribute.cs: only set GuidAttr to true when we have a
17741         GuidAttribute.
17742
17743 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17744
17745         * ecore.cs:
17746         * expression.cs:
17747         * typemanager.cs: fixes to allow mcs compile corlib with the new
17748         Type.IsSubclassOf fix.
17749
17750 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
17751
17752         * expression.cs (LocalVariableReference.DoResolve): Classify a
17753         constant as a value, not as a variable.   Also, set the type for
17754         the variable.
17755
17756         * cs-parser.jay (fixed_statement): take a type instead of a
17757         pointer_type, so we can produce a better error message later.
17758
17759         * statement.cs (Fixed.Resolve): Flag types that are not pointers
17760         as an error.  
17761
17762         (For.DoEmit): Make inifinite loops have a
17763         non-conditional branch back.
17764
17765         (Fixed.DoEmit): First populate the pinned variables, then emit the
17766         statement, then clear the variables.  Before I was emitting the
17767         code once for each fixed piece.
17768
17769
17770 2003-01-08  Martin Baulig  <martin@ximian.com>
17771
17772         * statement.cs (FlowBranching.MergeChild): A break in a
17773         SWITCH_SECTION does not leave a loop.  Fixes #36155.
17774
17775 2003-01-08  Martin Baulig  <martin@ximian.com>
17776
17777         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
17778         lives in the same number space than `param_map'.  Fixes #36154.
17779
17780 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
17781
17782         * cs-parser.jay (constructor_declaration): Set the
17783         Constructor.ModFlags before probing for it.  This makes the
17784         compiler report 514, 515 and 132 (the code was there, but got
17785         broken). 
17786
17787         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
17788         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
17789         (GotoCase.Resolve): Set `Returns' to ALWAYS.
17790
17791 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
17792
17793         * enum.cs: create the enum static fields using the enum type.
17794
17795 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
17796
17797         * class.cs: don't try to create the ParamBuilder for the return
17798         type if it's not needed (and handle it breaking for the ms runtime
17799         anyway).
17800
17801 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
17802
17803         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
17804
17805 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
17806
17807         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
17808         the command.   This showed up while compiling the JANET source
17809         code, which used \r as its only newline separator.
17810
17811 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
17812
17813         * class.cs (Method.Define): If we are an operator (because it
17814         reuses our code), then set the SpecialName and HideBySig.  #36128
17815
17816 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
17817
17818         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
17819         exception, report error 120 `object reference required'.
17820
17821         * driver.cs: Add --pause option, used during to measure the size
17822         of the process as it goes with --timestamp.
17823
17824         * expression.cs (Invocation.DoResolve): Do not allow methods with
17825         SpecialName to be invoked.
17826
17827 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
17828
17829         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
17830         number before adding it.
17831
17832 2002-12-21  Ravi Pratap  <ravi@ximian.com>
17833
17834         * ecore.cs (StandardImplicitConversion): When in an unsafe
17835         context, we allow conversion between void * to any other pointer
17836         type. This fixes bug #35973.
17837
17838 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
17839
17840         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
17841         is not thrown when extensionless outputs are used 
17842
17843 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17844
17845         * rootcontext.cs: fixed compilation of corlib.
17846
17847 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
17848
17849         * attribute.cs (Attributes.Contains): Add new method.
17850
17851         * class.cs (MethodCore.LabelParameters): if the parameter is an
17852         `out' parameter, check that no attribute `[In]' has been passed.
17853
17854         * enum.cs: Handle the `value__' name in an enumeration.
17855
17856 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
17857
17858         * decl.cs: Added special case to allow overrides on "protected
17859         internal" methods
17860
17861 2002-12-18  Ravi Pratap  <ravi@ximian.com>
17862
17863         * attribute.cs (Attributes.AddAttributeSection): Rename to this
17864         since it makes much more sense.
17865
17866         (Attributes.ctor): Don't require a Location parameter.
17867
17868         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
17869
17870         * attribute.cs (ApplyAttributes): Remove extra Location parameters
17871         since we already have that information per attribute.
17872
17873         * everywhere : make appropriate changes.
17874
17875         * class.cs (LabelParameters): Write the code which actually
17876         applies attributes to the return type. We can't do this on the MS
17877         .NET runtime so we flag a warning in the case an exception is
17878         thrown.
17879
17880 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
17881
17882         * const.cs: Handle implicit null conversions here too.
17883
17884 2002-12-17  Ravi Pratap  <ravi@ximian.com>
17885
17886         * class.cs (MethodCore.LabelParameters): Remove the extra
17887         Type [] parameter since it is completely unnecessary. Instead
17888         pass in the method's attributes so that we can extract
17889         the "return" attribute.
17890
17891 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
17892
17893         * cs-parser.jay (parse): Use Report.Error to flag errors instead
17894         of ignoring it and letting the compile continue.
17895
17896         * typemanager.cs (ChangeType): use an extra argument to return an
17897         error condition instead of throwing an exception.
17898
17899 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
17900
17901         * expression.cs (Unary.TryReduce): mimic the code for the regular
17902         code path.  Perform an implicit cast in the cases where we can
17903         implicitly convert to one of the integral types, and then reduce
17904         based on that constant.   This fixes bug #35483.
17905
17906 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17907
17908         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
17909
17910 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17911
17912         * namespace.cs: fixed bug #35489.
17913
17914 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
17915
17916         * class.cs: Remove some dead code.
17917
17918         * cs-parser.jay: Estimate the number of methods needed
17919         (RootContext.MethodCount);
17920
17921         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
17922         numbers instead of StringBuilders.
17923
17924         * support.cs (PtrHashtable): Add constructor with initial size;
17925         We can now reduce reallocations of the method table.
17926
17927 2002-12-10  Ravi Pratap  <ravi@ximian.com>
17928
17929         * attribute.cs (ApplyAttributes): Keep track of the emitted
17930         attributes on a per-target basis. This fixes bug #35413.
17931
17932 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
17933
17934         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
17935         default to the Windows 1252 encoding.
17936
17937         (UnixParseOption): Support version, thanks to Alp for the missing
17938         pointer. 
17939
17940         * AssemblyInfo.cs: Add nice assembly information.
17941
17942         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
17943         (bug 35169).
17944
17945         * cs-parser.jay: Allow a trailing comma before the close bracked
17946         in the attribute_section production.
17947
17948         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
17949         address of the instance was being taken, I will take this out,
17950         because we take the address of the object immediately here.
17951
17952 2002-12-09  Ravi Pratap  <ravi@ximian.com>
17953
17954         * typemanager.cs (AreMultipleAllowed): Take care of the most
17955         obvious case where attribute type is not in the current assembly -
17956         stupid me ;-)
17957
17958 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
17959
17960         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
17961         definitions, instead of doing that afterwards.  
17962
17963         Also we use a nice little hack, depending on the constructor, we
17964         know if we are a "composed" name or a simple name.  Hence, we
17965         avoid the IndexOf test, and we avoid 
17966
17967         * codegen.cs: Add code to assist in a bug reporter to track down
17968         the source of a compiler crash. 
17969
17970 2002-12-07  Ravi Pratap  <ravi@ximian.com>
17971
17972         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
17973         types have been emitted for a given element and flag an error
17974         if something which does not have AllowMultiple set is used more
17975         than once.
17976
17977         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
17978         attribute types and their corresponding AllowMultiple properties
17979
17980         (AreMultipleAllowed): Check the property for a given type.
17981
17982         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
17983         property in the case we have a TypeContainer.
17984
17985         (Attributes.AddAttribute): Detect duplicates and just skip on
17986         adding them. This trivial fix catches a pretty gross error in our
17987         attribute emission - global attributes were being emitted twice!
17988
17989         Bugzilla bug #33187 is now fixed.
17990
17991 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
17992
17993         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
17994         instead of pp_and).
17995
17996         * expression.cs (Binary.ResolveOperator): I can only use the
17997         Concat (string, string, string) and Concat (string, string,
17998         string, string) if the child is actually a concatenation of
17999         strings. 
18000
18001 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
18002
18003         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
18004         context where we need a 2-character lookahead.
18005
18006         * pending.cs (PendingImplementation): Rework so we can keep track
18007         of interface types all the time, and flag those which were
18008         implemented by parents as optional.
18009
18010 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
18011
18012         * expression.cs (Binary.ResolveOperator): Use
18013         String.Concat(string,string,string) or
18014         String.Concat(string,string,string,string) when possible. 
18015
18016         * typemanager: More helper methods.
18017
18018
18019 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
18020
18021         * pending.cs: remove the bogus return from GetMissingInterfaces()
18022         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
18023
18024 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18025
18026         * namespace.cs: avoid duplicated 'using xxx' being added to
18027         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
18028         when we get more than one 'using' statement for the same namespace.
18029         Report a CS0105 warning for it.
18030
18031 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
18032
18033         * cs-tokenizer.cs (consume_identifier): use read directly, instead
18034         of calling getChar/putback, uses internal knowledge of it.    
18035
18036         (xtoken): Reorder tokenizer so most common patterns are checked
18037         first.  This reduces the compilation time in another 5% (from 8.11s
18038         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
18039
18040         The parsing time is 22% of the compilation in mcs, and from that
18041         64% is spent on the tokenization process.  
18042
18043         I tried using a binary search for keywords, but this is slower
18044         than the hashtable.  Another option would be to do a couple of
18045         things:
18046
18047                 * Not use a StringBuilder, instead use an array of chars,
18048                   with a set value.  Notice that this way we could catch
18049                   the 645 error without having to do it *afterwards*.
18050
18051                 * We could write a hand-parser to avoid the hashtable
18052                   compares altogether.
18053
18054         The identifier consumption process takes 37% of the tokenization
18055         time.  Another 15% is spent on is_number.  56% of the time spent
18056         on is_number is spent on Int64.Parse:
18057
18058                 * We could probably choose based on the string length to
18059                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
18060                   computations. 
18061
18062         Another 3% is spend on wrapping `xtoken' in the `token' function.
18063
18064         Handle 0xa0 as whitespace (#34752)
18065
18066 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
18067
18068         * typemanager.cs (IsCLRType): New routine to tell whether a type
18069         is one of the builtin types.  
18070
18071         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
18072         typecode in more places instead of doing pointer comparissions.
18073         We could leverage some knowledge about the way the typecodes are
18074         laid out.
18075
18076         New code to cache namespaces in assemblies, it is currently not
18077         invoked, to be used soon.
18078
18079         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
18080
18081         * expression.cs (Binary.ResolveOperator): specially handle
18082         strings, and do not perform user-defined operator overloading for
18083         built-in types.
18084
18085 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
18086
18087         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
18088         internalcall as it is a pretty simple operation;  Avoid whenever
18089         possible to call Char.IsLetter.
18090
18091         (consume_identifier): Cut by half the number of
18092         hashtable calls by merging the is_keyword and GetKeyword behavior.
18093
18094         Do not short-circuit, because if we do, we
18095         report errors (ie, #if false && true would produce an invalid
18096         directive error);
18097
18098
18099 2002-11-24  Martin Baulig  <martin@ximian.com>
18100
18101         * expression.cs (Cast.TryReduce): If we're in checked syntax,
18102         check constant ranges and report a CS0221.  Fixes #33186.
18103
18104 2002-11-24  Martin Baulig  <martin@ximian.com>
18105
18106         * cs-parser.jay: Make this work for uninitialized variable
18107         declarations in the `for' initializer.  Fixes #32416.
18108
18109 2002-11-24  Martin Baulig  <martin@ximian.com>
18110
18111         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
18112         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
18113
18114 2002-11-24  Martin Baulig  <martin@ximian.com>
18115
18116         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
18117         argument; if true, we also check for user-defined conversions.
18118         This is only needed if both arguments are of a user-defined type.
18119         Fixes #30443, added test-175.cs.
18120         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
18121
18122         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
18123
18124 2002-11-24  Martin Baulig  <martin@ximian.com>
18125
18126         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
18127         function to get the store opcode.
18128         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
18129         only emit the Ldelema if the store opcode is Stobj.  You must run
18130         both test-34 and test-167 to test this.  Fixes #34529.
18131
18132 2002-11-23  Martin Baulig  <martin@ximian.com>
18133
18134         * ecore.cs (Expression.MemberLookup): Added additional
18135         `qualifier_type' argument which is used when we're being called
18136         from MemberAccess.DoResolve() and null if we're called from a
18137         SimpleName lookup.
18138         (Expression.MemberLookupFailed): New method to report errors; this
18139         does the CS1540 check and reports the correct error message.
18140
18141         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
18142         argument for the CS1540 check and redone the way how we're dealing
18143         with private members.  See the comment in the source code for details.
18144         (FilterWithClosure): Reverted this back to revision 1.197; renamed
18145         `closure_start_type' to `closure_qualifier_type' and check whether
18146         it's not null.  It was not this filter being broken, it was just
18147         being called with the wrong arguments.
18148
18149         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
18150         and pass it the correct `qualifier_type'; this also does the error
18151         handling for us.
18152
18153 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
18154
18155         * expression.cs (Invocation.EmitParams): If the we are dealing
18156         with a non-built-in value type, load its address as well.
18157
18158         (ArrayCreation): Use a a pretty constant instead
18159         of the hardcoded value 2.   Use 6 instead of 2 for the number of
18160         static initializers.  
18161
18162         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
18163         because they are not really value types, just glorified integers. 
18164
18165         * driver.cs: Do not append .exe, the CSC compiler does not do it.
18166
18167         * ecore.cs: Remove redundant code for enumerations, make them use
18168         the same code path as everything else, fixes the casting issue
18169         with enumerations in Windows.Forms.
18170
18171         * attribute.cs: Do only cast to string if it is a string, the
18172         validation happens later.
18173
18174         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
18175         people upgrade their corlibs.
18176
18177         * ecore.cs: Oops, enumerations were not following the entire code path
18178
18179 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
18180
18181         * typemanager.cs (FilterWithClosure): Commented out the test for
18182         1540 in typemanager.cs, as it has problems when accessing
18183         protected methods from a parent class (see test-174.cs). 
18184
18185         * attribute.cs (Attribute.ValidateGuid): new method.
18186         (Attribute.Resolve): Use above.
18187
18188 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
18189
18190         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
18191
18192         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
18193         handling for enumerations, as we only needed the TypeContainer
18194         functionality to begin with (this is required for the fix below to
18195         work for enums that reference constants in a container class for
18196         example). 
18197
18198         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
18199
18200         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
18201         a valid TypeBuilder to perform lookups on.o
18202
18203         * class.cs (InheritableMemberSignatureCompare): Use true in the
18204         call to GetGetMethod and GetSetMethod, because we are comparing
18205         the signature, and we need to get the methods *even* if they are
18206         private. 
18207
18208         (PropertyBase.CheckBase): ditto.
18209
18210         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
18211         GotoCase.Resolve): Use Peel on EmpytCasts.
18212
18213         * ecore.cs (EmptyCast): drop child, add Peel method.
18214
18215 2002-11-17  Martin Baulig  <martin@ximian.com>
18216
18217         * ecore.cs (EmptyCast.Child): New public property.
18218
18219         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
18220         label resolved to an EmptyCast.  Fixes #34162.
18221         (GotoCase.Resolve): Likewise.
18222         (Block.EmitMeta): Likewise.
18223
18224 2002-11-17  Martin Baulig  <martin@ximian.com>
18225
18226         * expression.cs (Invocation.BetterConversion): Prefer int over
18227         uint; short over ushort; long over ulong for integer literals.
18228         Use ImplicitConversionExists instead of StandardConversionExists
18229         since we also need to check for user-defined implicit conversions.
18230         Fixes #34165.  Added test-173.cs.
18231
18232 2002-11-16  Martin Baulig  <martin@ximian.com>
18233
18234         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
18235         with the `true' and `false' literals.  Fixes #33151.
18236
18237 2002-11-16  Martin Baulig  <martin@ximian.com>
18238
18239         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
18240         October 22nd; don't do the cs1540 check for static members.
18241
18242         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
18243         now using our own filter here and doing the cs1540 check again.
18244
18245 2002-11-16  Martin Baulig  <martin@ximian.com>
18246
18247         * support.cs (InternalParameters): Don't crash if we don't have
18248         any fixed parameters.  Fixes #33532.
18249
18250 2002-11-16  Martin Baulig  <martin@ximian.com>
18251
18252         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
18253         when looking up static methods to make this work on Windows.
18254         Fixes #33773.
18255
18256 2002-11-16  Martin Baulig  <martin@ximian.com>
18257
18258         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
18259         a setter rather than using PropertyInfo.CanWrite.
18260
18261 2002-11-15  Nick Drochak  <ndrochak@gol.com>
18262
18263         * class.cs: Allow acces to block member by subclasses. Fixes build
18264         breaker.
18265
18266 2002-11-14  Martin Baulig  <martin@ximian.com>
18267
18268         * class.cs (Constructor.Emit): Added the extern/block check.
18269         Fixes bug #33678.
18270
18271 2002-11-14  Martin Baulig  <martin@ximian.com>
18272
18273         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
18274         iteration while looking for indexers, this is needed because the
18275         indexer may have a different name in our base classes.  Fixed the
18276         error reporting (no indexers at all, not get accessor, no
18277         overloaded match).  Fixes bug #33089.
18278         (IndexerAccess.DoResolveLValue): Likewise.
18279
18280 2002-11-14  Martin Baulig  <martin@ximian.com>
18281
18282         * class.cs (PropertyBase.CheckBase): Make this work for multiple
18283         indexers.  Fixes the first part of bug #33089.
18284         (MethodSignature.InheritableMemberSignatureCompare): Added support
18285         for properties.
18286
18287 2002-11-13  Ravi Pratap  <ravi@ximian.com>
18288
18289         * attribute.cs (Attribute.Resolve): Catch the
18290         NullReferenceException and report it since it isn't supposed to
18291         happen. 
18292
18293 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
18294
18295         * expression.cs (Binary.EmitBranchable): Also handle the cases for
18296         LogicalOr and LogicalAnd that can benefit from recursively
18297         handling EmitBranchable.  The code now should be nice for Paolo.
18298
18299 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
18300
18301         * typemanager.cs (LookupType): Added a negative-hit hashtable for
18302         the Type lookups, as we perform quite a number of lookups on
18303         non-Types.  This can be removed once we can deterministically tell
18304         whether we have a type or a namespace in advance.
18305
18306         But this might require special hacks from our corlib.
18307
18308         * TODO: updated.
18309
18310         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
18311         and double which avoids a conversion from an integer to a double.
18312
18313         * expression.cs: tiny optimization, avoid calling IsConstant,
18314         because it effectively performs the lookup twice.
18315
18316 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
18317
18318         But a bogus return here to keep the semantics of the old code
18319         until the Mono runtime is fixed.
18320
18321         * pending.cs (GetMissingInterfaces): New method used to remove all
18322         the interfaces that are already implemented by our parent
18323         classes from the list of pending methods. 
18324
18325         * interface.cs: Add checks for calls after ResolveTypeExpr.
18326
18327 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
18328
18329         * class.cs (Class.Emit): Report warning 67: event not used if the
18330         warning level is beyond 3.
18331
18332         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
18333         being a NullLiteral.
18334
18335         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
18336         specifiers. 
18337
18338         * class.cs (TypeContainer.GetClassBases): Cover a missing code
18339         path that might fail if a type can not be resolved.
18340
18341         * expression.cs (Binary.Emit): Emit unsigned versions of the
18342         operators. 
18343
18344         * driver.cs: use error 5.
18345
18346 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
18347
18348         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
18349
18350 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
18351
18352         * cs-parser.jay (switch_section): A beautiful patch from Martin
18353         Baulig that fixed 33094.
18354
18355 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
18356
18357         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
18358         Check whether the base is abstract and report an error if so.
18359
18360         * expression.cs (IndexerAccess.DoResolveLValue,
18361         IndexerAccess.DoResolve): ditto. 
18362
18363         (Invocation.DoResolve): ditto.
18364
18365         (Invocation.FullMethodDesc): Improve the report string.
18366
18367         * statement.cs (Block): Eliminate IsVariableDefined as it is
18368         basically just a wrapper for GetVariableInfo.
18369
18370         * ecore.cs (SimpleName): Use new 
18371
18372         * support.cs (ReflectionParamter.ParameterType): We unwrap the
18373         type, as we return the actual parameter ref/unref state on a
18374         different call.
18375
18376 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
18377
18378         * support.cs: Return proper flags REF/OUT fixing the previous
18379         commit.  
18380
18381         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
18382         not used to mean `ref' but `ref or out' in ParameterReference
18383
18384         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
18385         full type signature instead of calling TypeManger.CSharpName
18386         ourselves. 
18387
18388         * support.cs (InternalParameters.ParameterDesc): Do not compare
18389         directly to the modflags, because REF/OUT will actually be bitsets
18390         if set. 
18391
18392         * delegate.cs (VerifyMethod): Check also the modifiers.
18393
18394         * cs-tokenizer.cs: Fix bug where floating point values with an
18395         exponent where a sign was missing was ignored.
18396
18397         * driver.cs: Allow multiple assemblies to be specified in a single
18398         /r: argument
18399
18400 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
18401
18402         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
18403         because identifiers after a parenthesis would end up in this kind
18404         of production, and we needed to desamiguate it for having casts
18405         like:
18406
18407                 (UserDefinedType *) xxx
18408
18409 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
18410
18411         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
18412         we should set on the Bindingflags.NonPublic, but not turn on
18413         private_ok.  private_ok controls whether a Private member is
18414         returned (this is chekced on the filter routine), while the
18415         BindingFlags.NonPublic just controls whether private/protected
18416         will be allowed.   This fixes the problem part of the problem of
18417         private properties being allowed to be used in derived classes.
18418
18419         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
18420         so we can call the children DoResolveLValue method (this will
18421         properly signal errors on lvalue assignments to base properties)
18422
18423         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
18424         getter are null, and we have a property info, we know that this
18425         happened because the lookup failed, so we report an error 122 for
18426         protection level violation.
18427
18428         We also silently return if setter and getter are null in the
18429         resolve functions, this condition only happens if we have flagged
18430         the error before.  This is the other half of the problem. 
18431
18432         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
18433         not have accessibility information, that is why we were returning
18434         true in the filter function in typemanager.cs.
18435
18436         To properly report 122 (property is inaccessible because of its
18437         protection level) correctly, we report this error in ResolveAccess
18438         by failing if both the setter and the getter are lacking (ie, the
18439         lookup failed). 
18440
18441         DoResolve and DoLResolve have been modified to check for both
18442         setter/getter being null and returning silently, the reason being
18443         that I did not want to put the knowledge about this error in upper
18444         layers, like:
18445
18446         int old = Report.Errors;
18447         x = new PropertyExpr (...);
18448         if (old != Report.Errors)
18449                 return null;
18450         else
18451                 return x;
18452
18453         So the property expr is returned, but it is invalid, so the error
18454         will be flagged during the resolve process. 
18455
18456         * class.cs: Remove InheritablePropertySignatureCompare from the
18457         class, as we no longer depend on the property signature to compute
18458         whether it is possible to implement a method or not.
18459
18460         The reason is that calling PropertyInfo.GetGetMethod will return
18461         null (in .NET, in Mono it works, and we should change this), in
18462         cases where the Get Method does not exist in that particular
18463         class.
18464
18465         So this code:
18466
18467         class X { public virtual int A { get { return 1; } } }
18468         class Y : X { }
18469         class Z : Y { public override int A { get { return 2; } } }
18470
18471         Would fail in Z because the parent (Y) would not have the property
18472         defined.  So we avoid this completely now (because the alternative
18473         fix was ugly and slow), and we now depend exclusively on the
18474         method names.
18475
18476         (PropertyBase.CheckBase): Use a method-base mechanism to find our
18477         reference method, instead of using the property.
18478
18479         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
18480         routines are gone now.
18481
18482         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
18483         names, they were incorrectly named.
18484
18485         * cs-tokenizer.cs: Return are more gentle token on failure. 
18486
18487         * pending.cs (PendingImplementation.InterfaceMethod): This routine
18488         had an out-of-sync index variable, which caused it to remove from
18489         the list of pending methods the wrong method sometimes.
18490
18491 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
18492
18493         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
18494         CanWrite, because those refer to this particular instance of the
18495         property, and do not take into account the fact that we can
18496         override single members of a property.
18497
18498         Constructor requires an EmitContext.  The resolution process does
18499         not happen here, but we need to compute the accessors before,
18500         because the resolution does not always happen for properties.
18501
18502         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
18503         subclass, before we did not update this flag, but we did update
18504         bindingflags. 
18505
18506         (GetAccessors): Drop this routine, as it did not work in the
18507         presence of partially overwritten set/get methods. 
18508
18509         Notice that this broke the cs1540 detection, but that will require
18510         more thinking. 
18511
18512 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18513
18514         * class.cs:
18515         * codegen.cs:
18516         * driver.cs: issue a warning instead of an error if we don't support
18517         debugging for the platform. Also ignore a couple of errors that may
18518         arise when trying to write the symbols. Undo my previous patch.
18519
18520 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18521
18522         * driver.cs: ignore /debug switch except for Unix platforms.
18523
18524 2002-10-23  Nick Drochak  <ndrochak@gol.com>
18525
18526         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
18527
18528 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
18529
18530         * driver.cs: Do not make mcs-debug conditional, so we do not break
18531         builds that use it.
18532
18533         * statement.cs (UsageVector.MergeChildren): I would like Martin to
18534         review this patch.  But basically after all the children variables
18535         have been merged, the value of "Breaks" was not being set to
18536         new_breaks for Switch blocks.  I think that it should be set after
18537         it has executed.  Currently I set this to the value of new_breaks,
18538         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
18539         conservative, but I do not understand this code very well.
18540
18541         I did not break anything in the build, so that is good ;-)
18542
18543         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
18544
18545 2002-10-20  Mark Crichton  <crichton@gimp.org>
18546
18547         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
18548
18549 2002-10-20  Nick Drochak  <ndrochak@gol.com>
18550
18551         * cfold.cs: Fixed compile blocker.
18552
18553 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
18554
18555         * driver.cs: I was chekcing the key, not the file.
18556
18557 2002-10-19  Ravi Pratap  <ravi@ximian.com>
18558
18559         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
18560         message that we were generating - we just need to silently return
18561         a null.
18562
18563 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
18564
18565         * class.cs (Event.Define): Change my previous commit, as this
18566         breaks the debugger.  This is a temporary hack, as it seems like
18567         the compiler is generating events incorrectly to begin with.
18568
18569         * expression.cs (Binary.ResolveOperator): Added support for 
18570         "U operator - (E x, E y)"
18571
18572         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
18573         y)".
18574
18575         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
18576         init-only variables, but this path did not take into account that
18577         there might be also instance readonly variables.  Correct this
18578         problem. 
18579
18580         This fixes bug 32253
18581
18582         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
18583         delegates as well.
18584
18585         * driver.cs: Change the extension for modules to `netmodule'
18586
18587         * cs-parser.jay: Improved slightly the location tracking for
18588         the debugger symbols.
18589
18590         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
18591         modifiers that were specified instead of the hardcoded value
18592         (FamAndAssem).  This was basically ignoring the static modifier,
18593         and others.  Fixes 32429.
18594
18595         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
18596         fixed a bug in the process (32476)
18597
18598         * expression.cs (ArrayAccess.EmitAssign): Patch from
18599         hwang_rob@yahoo.ca that fixes bug 31834.3
18600
18601 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
18602
18603         * driver.cs: Make the module extension .netmodule.
18604
18605 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
18606
18607         * driver.cs: Report an error if the resource file is not found
18608         instead of crashing.
18609
18610         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
18611         false, like Emit does.
18612
18613 2002-10-16  Nick Drochak  <ndrochak@gol.com>
18614
18615         * typemanager.cs: Remove unused private member.  Also reported mcs
18616         bug to report this as a warning like csc.
18617
18618 2002-10-15  Martin Baulig  <martin@gnome.org>
18619
18620         * statement.cs (Statement.Emit): Made this a virtual method; emits
18621         the line number info and calls DoEmit().
18622         (Statement.DoEmit): New protected abstract method, formerly knows
18623         as Statement.Emit().
18624
18625         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
18626
18627 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
18628
18629         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
18630         have fixed a remaining problem: not every AddXXXX was adding a
18631         fully qualified name.  
18632
18633         Now everyone registers a fully qualified name in the DeclSpace as
18634         being defined instead of the partial name.  
18635
18636         Downsides: we are slower than we need to be due to the excess
18637         copies and the names being registered this way.  
18638
18639         The reason for this is that we currently depend (on the corlib
18640         bootstrap for instance) that types are fully qualified, because
18641         we dump all the types in the namespace, and we should really have
18642         types inserted into the proper namespace, so we can only store the
18643         basenames in the defined_names array.
18644
18645 2002-10-10  Martin Baulig  <martin@gnome.org>
18646
18647         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
18648         from bug #31834, see the bug report for a testcase which is
18649         miscompiled.
18650
18651 2002-10-10  Martin Baulig  <martin@gnome.org>
18652
18653         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
18654         flow analysis code for this.
18655
18656         * statement.cs (Do, While, For): Tell the flow analysis code about
18657         infinite loops.
18658         (FlowBranching.UsageVector): Added support for infinite loops.
18659         (Block.Resolve): Moved the dead code elimination here and use flow
18660         analysis to do it.
18661
18662 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
18663
18664         * class.cs (Field.Define): Catch cycles on struct type
18665         definitions. 
18666
18667         * typemanager.cs (IsUnmanagedtype): Do not recursively check
18668         fields if the fields are static.  We only need to check instance
18669         fields. 
18670
18671         * expression.cs (As.DoResolve): Test for reference type.
18672
18673         * statement.cs (Using.ResolveExpression): Use
18674         ConvertImplicitRequired, not ConvertImplicit which reports an
18675         error on failture
18676         (Using.ResolveLocalVariableDecls): ditto.
18677
18678         * expression.cs (Binary.ResolveOperator): Report errors in a few
18679         places where we had to.
18680
18681         * typemanager.cs (IsUnmanagedtype): Finish implementation.
18682
18683 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
18684
18685         * expression.cs: Use StoreFromPtr instead of extracting the type
18686         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
18687
18688         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
18689         an enumeration value to a System.Enum, but System.Enum is not a
18690         value type, but an class type, so we need to box.
18691
18692         (Expression.ConvertExplicit): One codepath could return
18693         errors but not flag them.  Fix this.  Fixes #31853
18694
18695         * parameter.cs (Resolve): Do not allow void as a parameter type.
18696
18697 2002-10-06  Martin Baulig  <martin@gnome.org>
18698
18699         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
18700         if it's a class type and not a struct.  Fixes #31815.
18701
18702 2002-10-06  Martin Baulig  <martin@gnome.org>
18703
18704         * statement.cs: Reworked the flow analysis code a bit to make it
18705         usable for dead code elimination.
18706
18707 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18708
18709         * cs-parser.jay: allow empty source files. Fixes bug #31781.
18710
18711 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18712
18713         * expression.cs (ComposedCast.DoResolveType): A quick workaround
18714         to fix the test 165, will investigate deeper.
18715
18716 2002-10-04  Martin Baulig  <martin@gnome.org>
18717
18718         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
18719         finally blocks actually work.
18720         (Try.Resolve): We don't need to create a sibling for `finally' if
18721         there is no finally block.
18722
18723 2002-10-04  Martin Baulig  <martin@gnome.org>
18724
18725         * class.cs (Constructor.Define): The default accessibility for a
18726         non-default constructor is private, not public.
18727
18728 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18729
18730         * class.cs (Constructor): Make AllowedModifiers public, add
18731         EXTERN.
18732
18733         * cs-parser.jay: Perform the modifiers test here, as the
18734         constructor for the Constructor class usually receives a zero
18735         because of the way we create it (first we create, later we
18736         customize, and we were never checking the modifiers).
18737
18738         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
18739         is a version of LookupTypeReflection that includes the type-name
18740         cache.  This can be used as a fast path for functions that know
18741         the fully qualified name and are only calling into *.GetType() to
18742         obtain a composed type.
18743
18744         This is also used by TypeManager.LookupType during its type
18745         composition.
18746
18747         (LookupType): We now also track the real type name, as sometimes
18748         we can get a quey for the real type name from things like
18749         ComposedCast.  This fixes bug 31422.
18750
18751         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
18752         complete type fullname, it does not have to go through the type
18753         resolution system to obtain the composed version of the type (for
18754         obtaining arrays or pointers).
18755
18756         (Conditional.Emit): Use the EmitBoolExpression to
18757         generate nicer code, as requested by Paolo.
18758
18759         (ArrayCreation.CheckIndices): Use the patch from
18760         hwang_rob@yahoo.ca to validate the array initializers. 
18761
18762 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
18763
18764         * class.cs (ConstructorInitializer.Emit): simplify code by using
18765         Invocation.EmitCall, and at the same time, fix the bugs in calling
18766         parent constructors that took variable arguments. 
18767
18768         * ecore.cs (Expression.ConvertNumericExplicit,
18769         Expression.ImplicitNumericConversion): Remove the code that
18770         manually wrapped decimal (InternalTypeConstructor call is now gone
18771         as well).
18772
18773         * expression.cs (Cast.TryReduce): Also handle decimal types when
18774         trying to perform a constant fold on the type.
18775
18776         * typemanager.cs (IsUnmanagedtype): Partially implemented.
18777
18778         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
18779         that only turned off an error report, and did nothing else. 
18780
18781 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
18782
18783         * driver.cs: Handle and ignore /fullpaths
18784
18785 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
18786
18787         * expression.cs (Binary.ResolveOperator): Catch the case where
18788         DoNumericPromotions returns true, 
18789
18790         (Binary.DoNumericPromotions): Simplify the code, and the tests.
18791
18792 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
18793
18794         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
18795         report error 70.
18796
18797 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
18798
18799         * ecore.cs (ConvertNumericExplicit): It is not enough that the
18800         conversion exists, but it is also required that the conversion be
18801         performed.  This manifested in "(Type64Enum) 2".  
18802
18803         * class.cs (TypeManager.AddMethod): The fix is not to change
18804         AddEnum, because that one was using a fully qualified name (every
18805         DeclSpace derivative does), but to change the AddMethod routine
18806         that was using an un-namespaced name.  This now correctly reports
18807         the duplicated name.
18808
18809         Revert patch until I can properly fix it.  The issue
18810         is that we have a shared Type space across all namespaces
18811         currently, which is wrong.
18812
18813         Options include making the Namespace a DeclSpace, and merge
18814         current_namespace/current_container in the parser.
18815
18816 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
18817
18818         * cs-parser.jay: Improve error reporting when we get a different
18819         kind of expression in local_variable_type and
18820         local_variable_pointer_type. 
18821
18822         Propagate this to avoid missleading errors being reported.
18823
18824         * ecore.cs (ImplicitReferenceConversion): treat
18825         TypeManager.value_type as a target just like object_type.   As
18826         code like this:
18827
18828         ValueType v = 1;
18829
18830         Is valid, and needs to result in the int 1 being boxed before it
18831         is assigned to the value type v.
18832
18833         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
18834         to validate the enumeration name.
18835
18836         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
18837         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
18838         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
18839
18840         * ecore.cs (TryImplicitIntConversion): When doing an
18841         implicit-enumeration-conversion, check if the type is 64-bits and
18842         perform a conversion before passing to EnumConstant.
18843
18844 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
18845
18846         * decl.cs (Error_AmbiguousTypeReference); New routine used to
18847         report ambiguous type references.  Unlike the MS version, we
18848         report what the ambiguity is.   Innovation at work ;-)
18849
18850         (DeclSpace.FindType): Require a location argument to
18851         display when we display an ambiguous error.
18852
18853         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
18854
18855         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
18856
18857         * expression.cs (EmitDynamicInitializers): Apply patch from
18858         hwang_rob@yahoo.ca that fixes the order in which we emit our
18859         initializers. 
18860
18861 2002-09-21  Martin Baulig  <martin@gnome.org>
18862
18863         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
18864         delegate takes no arguments.
18865
18866 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
18867
18868         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
18869         from integers.
18870
18871         * expression.cs: Extract the underlying type.
18872
18873         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
18874
18875         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
18876
18877 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
18878
18879         * class.cs (TypeContainer.DefineType): We can not use the nice
18880         PackingSize with the size set to 1 DefineType method, because it
18881         will not allow us to define the interfaces that the struct
18882         implements.
18883
18884         This completes the fixing of bug 27287
18885
18886         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
18887         means also structs.  This fixes part of the problem. 
18888         (Expresion.ImplicitReferenceConversionExists): ditto.
18889
18890         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
18891         error if there were no errors reported during the type lookup
18892         process, to avoid duplicates or redundant errors.  Without this
18893         you would get an ambiguous errors plus a type not found.  We have
18894         beaten the user enough with the first error.  
18895
18896         (DeclSparce.FindType): Emit a warning if we have an ambiguous
18897         reference. 
18898
18899         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
18900         during the resolution process, stop the lookup, this avoids
18901         repeated error reports (same error twice).
18902
18903         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
18904
18905         * typemanager.cs (LookupType): Redo the type lookup code to match
18906         the needs of System.Reflection.  
18907
18908         The issue is that System.Reflection requires references to nested
18909         types to begin with a "+" sign instead of a dot.  So toplevel
18910         types look like: "NameSpace.TopLevelClass", and nested ones look
18911         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
18912         levels. 
18913
18914 2002-09-19  Martin Baulig  <martin@gnome.org>
18915
18916         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
18917         says that a method always returns or always throws an exception,
18918         don't report the CS0161.
18919
18920         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
18921         set `Returns = new_returns'.
18922
18923 2002-09-19  Martin Baulig  <martin@gnome.org>
18924
18925         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
18926         to an enum constant, check for a CS0176.
18927
18928 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
18929
18930         * class.cs (TypeContainer.CheckPairedOperators): Now we check
18931         for operators that must be in pairs and report errors.
18932
18933         * ecore.cs (SimpleName.DoResolveType): During the initial type
18934         resolution process, when we define types recursively, we must
18935         check first for types in our current scope before we perform
18936         lookups in the enclosing scopes.
18937
18938         * expression.cs (MakeByteBlob): Handle Decimal blobs.
18939
18940         (Invocation.VerifyArgumentsCompat): Call
18941         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
18942         I thought we were supposed to always call this, but there are a
18943         few places in the code where we dont do it.
18944
18945 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
18946
18947         * driver.cs: Add support in -linkres and -resource to specify the
18948         name of the identifier.
18949
18950 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18951
18952         * ecore.cs (StandardConversionExists): Sync with the conversion
18953         code: allow anything-* to void* conversions.
18954
18955         (FindMostSpecificSource): Use an Expression argument
18956         instead of a Type, because we might be handed over a Literal which
18957         gets a few more implicit conversions that plain types do not.  So
18958         this information was being lost.
18959
18960         Also, we drop the temporary type-holder expression when not
18961         required.
18962
18963 2002-09-17  Martin Baulig  <martin@gnome.org>
18964
18965         * class.cs (PropertyBase.CheckBase): Don't check the base class if
18966         this is an explicit interface implementation.
18967
18968 2002-09-17  Martin Baulig  <martin@gnome.org>
18969
18970         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
18971         different `IndexerName' attributes.
18972
18973         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
18974         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
18975         virtual CommonResolve().
18976
18977 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18978
18979         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
18980         and convert that to the UnderlyingType.
18981
18982         * statement.cs (Foreach.Resolve): Indexers are just like variables
18983         or PropertyAccesses.
18984
18985         * cs-tokenizer.cs (consume_string): Track line numbers and columns
18986         inside quoted strings, we were not doing this before.
18987
18988 2002-09-16  Martin Baulig  <martin@gnome.org>
18989
18990         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
18991         resolve it.  This is needed for the definite assignment check of the
18992         instance expression, fixes bug #29846.
18993         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
18994
18995 2002-09-16  Nick Drochak  <ndrochak@gol.com>
18996
18997         * parameter.cs: Fix compile error.  Cannot reference static member
18998         from an instance object.  Is this an mcs bug?
18999
19000 2002-09-14  Martin Baulig  <martin@gnome.org>
19001
19002         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
19003         multiple times.  Fixes bug #30295, added test-166.cs.
19004
19005 2002-09-14  Martin Baulig  <martin@gnome.org>
19006
19007         * statement.cs (Block.Emit): Don't emit unreachable code.
19008         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
19009         `break' statements.
19010         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
19011
19012 2002-09-14  Martin Baulig  <martin@gnome.org>
19013
19014         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
19015         is set.
19016
19017 2002-09-14  Martin Baulig  <martin@gnome.org>
19018
19019         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
19020         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
19021         be false on the ms runtime.
19022
19023 2002-09-13  Martin Baulig  <martin@gnome.org>
19024
19025         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
19026         the CS0038 error message.
19027
19028 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
19029
19030         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
19031         constant inside, return it.
19032
19033 2002-09-12  Martin Baulig  <martin@gnome.org>
19034
19035         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
19036         implicit conversion can be done between enum types.
19037
19038         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
19039         check whether an implicit conversion to the current enum's UnderlyingType
19040         exists and report an error if not.
19041
19042         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
19043         without debugging support.
19044
19045         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
19046         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
19047
19048 2002-09-12  Martin Baulig  <martin@gnome.org>
19049
19050         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
19051
19052         * ecore.cs (IMemberExpr.DeclaringType): New property.
19053         (SimpleName.SimpleNameResolve): Check whether we're accessing a
19054         nonstatic member of an outer type (CS0038).
19055
19056 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
19057
19058         * driver.cs: Activate the using-error detector at warning level
19059         4 (at least for MS-compatible APIs).
19060
19061         * namespace.cs (VerifyUsing): Small buglett fix.
19062
19063         * pending.cs (PendingImplementation): pass the container pointer. 
19064
19065         * interface.cs (GetMethods): Allow for recursive definition.  Long
19066         term, I would like to move every type to support recursive
19067         definitions, not the current ordering mechanism that we have right
19068         now.
19069
19070         The situation is this: Attributes are handled before interfaces,
19071         so we can apply attributes to interfaces.  But some attributes
19072         implement interfaces, we will now handle the simple cases
19073         (recursive definitions will just get an error).  
19074
19075         * parameter.cs: Only invalidate types at the end if we fail to
19076         lookup all types.  
19077
19078 2002-09-09  Martin Baulig  <martin@gnome.org>
19079
19080         * ecore.cs (PropertyExpr.Emit): Also check for
19081         TypeManager.system_int_array_get_length so this'll also work when
19082         compiling corlib.  Fixes #30003.
19083
19084 2002-09-09  Martin Baulig  <martin@gnome.org>
19085
19086         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
19087         and throw an exception if we can't get the type's size.  Fixed #30040,
19088         added test-165.cs.
19089
19090 2002-09-09  Martin Baulig  <martin@gnome.org>
19091
19092         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
19093
19094         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
19095         context.  Fixes bug #30027.
19096
19097         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
19098         virtual functions.  Fixes bug #30043, added test-164.cs.
19099
19100 2002-09-08  Ravi Pratap  <ravi@ximian.com>
19101
19102         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
19103
19104 2002-09-08  Nick Drochak  <ndrochak@gol.com>
19105
19106         * driver.cs: Use an object to get the windows codepage since it's not a
19107         static property.
19108
19109 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
19110
19111         * statement.cs (For.Emit): for infinite loops (test == null)
19112         return whether there is a break inside, not always "true".
19113
19114         * namespace.cs (UsingEntry): New struct to hold the name of the
19115         using definition, the location where it is defined, and whether it
19116         has been used in a successful type lookup.
19117
19118         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
19119         strings.
19120
19121         * decl.cs: ditto.
19122
19123 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19124
19125         * attribute.cs : Fix incorrect code which relied on catching
19126         a NullReferenceException to detect a null being passed in
19127         where an object was expected.
19128
19129 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
19130
19131         * statement.cs (Try): flag the catch variable as assigned
19132
19133         * expression.cs (Cast): Simplified by using ResolveType instead of
19134         manually resolving.
19135
19136         * statement.cs (Catch): Fix bug by using ResolveType.
19137
19138 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19139
19140         * expression.cs (BetterConversion): Special case for when we have
19141         a NullLiteral as the argument and we have to choose between string
19142         and object types - we choose string the way csc does.
19143
19144         * attribute.cs (Attribute.Resolve): Catch the
19145         NullReferenceException and report error #182 since the Mono
19146         runtime no more has the bug and having this exception raised means
19147         we tried to select a constructor which takes an object and is
19148         passed a null.
19149
19150 2002-09-05  Ravi Pratap  <ravi@ximian.com>
19151
19152         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
19153         message (1502, 1503) when we can't locate a method after overload
19154         resolution. This is much more informative and closes the bug
19155         Miguel reported.
19156
19157         * interface.cs (PopulateMethod): Return if there are no argument
19158         types. Fixes a NullReferenceException bug.
19159
19160         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
19161         expressions too. Previously we were checking only in one place for
19162         positional arguments leaving out named arguments.
19163
19164         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
19165         type to the enum type is not allowed. Remove code corresponding to
19166         that.
19167
19168         (ConvertNumericExplicit): Allow explicit conversions from
19169         the underlying type to enum type. This precisely follows the spec
19170         and closes a bug filed by Gonzalo.
19171
19172 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19173
19174         * compiler.csproj:
19175         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
19176
19177 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
19178
19179         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
19180         it was important that we stored the right value after the
19181         reduction in `converted'.
19182
19183 2002-09-04  Martin Baulig  <martin@gnome.org>
19184
19185         * location.cs (Location.SymbolDocument): Use full pathnames for the
19186         source files.
19187
19188 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
19189
19190         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
19191         of the expression resolve mechanism, because that will catch the
19192         SimpleName error failures.
19193
19194         (Conditional): If we can not resolve the
19195         expression, return, do not crash.
19196
19197 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19198
19199         * cs-tokenizer.cs:
19200         (location): display token name instead of its number.
19201
19202 2002-08-28  Martin Baulig  <martin@gnome.org>
19203
19204         * expression.cs (Binary.ResolveOperator): Don't silently return
19205         but return an error if an operator cannot be applied between two
19206         enum types.
19207
19208 2002-08-28  Martin Baulig  <martin@gnome.org>
19209
19210         * class.cs (Constructor.Define): Set the permission attributes
19211         correctly instead of making all constructors public.
19212
19213 2002-08-28  Martin Baulig  <martin@gnome.org>
19214
19215         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
19216         for private members before reporting a CS0103; if we find anything,
19217         it's a CS0122.
19218
19219 2002-08-28  Martin Baulig  <martin@gnome.org>
19220
19221         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
19222         to check whether `closure_start_type == closure_invocation_type',
19223         we also need to check whether `m.DeclaringType == closure_invocation_type'
19224         before bypassing the permission checks.  We might be accessing
19225         protected/private members from the base class.
19226         (TypeManager.RealMemberLookup): Only set private_ok if private
19227         members were requested via BindingFlags.NonPublic.
19228
19229         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
19230
19231         * expression.cs (MemberAccess.ResolveMemberAccess): Set
19232         MethodGroupExpr.IsExplicitImpl if appropriate.
19233         (Invocation.DoResolve): Don't report the CS0120 for explicit
19234         interface implementations.
19235
19236 2002-08-27  Martin Baulig  <martin@gnome.org>
19237
19238         * expression.cs (Invocation.DoResolve): If this is a static
19239         method and we don't have an InstanceExpression, we must report
19240         a CS0120.
19241
19242 2002-08-25  Martin Baulig  <martin@gnome.org>
19243
19244         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
19245         `==' between a valuetype and an object.
19246
19247 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
19248
19249         * ecore.cs (TypeExpr): Provide a ToString method.
19250
19251 2002-08-24  Martin Baulig  <martin@gnome.org>
19252
19253         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
19254         now called proggie.dbg and it's a binary file.
19255
19256 2002-08-23  Martin Baulig  <martin@gnome.org>
19257
19258         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
19259
19260 2002-08-23  Martin Baulig  <martin@gnome.org>
19261
19262         * struct.cs (MyStructInfo.ctor): Make this work with empty
19263         structs; it's not allowed to use foreach() on null.
19264
19265 2002-08-23  Martin Baulig  <martin@gnome.org>
19266
19267         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
19268         writer the full pathname of the generated assembly.
19269
19270 2002-08-23  Martin Baulig  <martin@gnome.org>
19271
19272         * statements.cs (FlowBranching.UsageVector.MergeChildren):
19273         A `finally' block never returns or breaks; improved handling of
19274         unreachable code.
19275
19276 2002-08-23  Martin Baulig  <martin@gnome.org>
19277
19278         * statement.cs (Throw.Resolve): Allow `throw null'.
19279
19280 2002-08-23  Martin Baulig  <martin@gnome.org>
19281
19282         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
19283         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
19284         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
19285         MemberLookup would return a wrong event if this is an explicit
19286         interface implementation and the class has an event with the same
19287         name.
19288
19289 2002-08-23  Martin Baulig  <martin@gnome.org>
19290
19291         * statement.cs (Block.AddChildVariableNames): New public method.
19292         (Block.AddChildVariableName): Likewise.
19293         (Block.IsVariableNameUsedInChildBlock): Likewise.
19294         (Block.AddVariable): Check whether a variable name has already
19295         been used in a child block.
19296
19297         * cs-parser.jay (declare_local_variables): Mark all variable names
19298         from the current block as being used in a child block in the
19299         implicit block.
19300
19301 2002-08-23  Martin Baulig  <martin@gnome.org>
19302
19303         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
19304         find the symbol writer.
19305
19306         * driver.cs: csc also allows the arguments to /define being
19307         separated by commas, not only by semicolons.
19308
19309 2002-08-23  Martin Baulig  <martin@gnome.org>
19310
19311         * interface.cs (Interface.GetMembers): Added static check for events.
19312
19313 2002-08-15  Martin Baulig  <martin@gnome.org>
19314
19315         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
19316         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
19317
19318         * ecore.cs (Expression.MemberLookup): Added documentation and explained
19319         why the MethodData.EmitDestructor() change was necessary.
19320
19321 2002-08-20  Martin Baulig  <martin@gnome.org>
19322
19323         * class.cs (TypeContainer.FindMembers): Added static check for events.
19324
19325         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
19326
19327         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
19328         use Type.GetEvents(), not Type.FindMembers().
19329
19330 2002-08-20  Martin Baulig  <martin@gnome.org>
19331
19332         * decl.cs (MemberCache): Added a special method cache which will
19333         be used for method-only searched.  This ensures that a method
19334         search will return a MethodInfo with the correct ReflectedType for
19335         inherited methods.      
19336
19337 2002-08-20  Martin Baulig  <martin@gnome.org>
19338
19339         * decl.cs (DeclSpace.FindMembers): Made this public.
19340
19341 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19342
19343         * delegate.cs: fixed build on windows.
19344         [FIXME:  Filed as bug #29150: MCS must report these errors.]
19345
19346 2002-08-19  Ravi Pratap  <ravi@ximian.com>
19347
19348         * ecore.cs (StandardConversionExists): Return a false
19349         if we are trying to convert the void type to anything else
19350         since that is not allowed.
19351
19352         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
19353         we flag error 70 in the event an event is trying to be accessed
19354         directly from outside the declaring type.
19355
19356 2002-08-20  Martin Baulig  <martin@gnome.org>
19357
19358         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
19359         MemberCache from typemanager.cs to decl.cs.
19360
19361 2002-08-19  Martin Baulig  <martin@gnome.org>
19362
19363         * class.cs (TypeContainer): Implement IMemberContainer.
19364         (TypeContainer.DefineMembers): Create the MemberCache.
19365         (TypeContainer.FindMembers): Do better BindingFlags checking; only
19366         return public members if BindingFlags.Public was given, check
19367         whether members are static.
19368
19369 2002-08-16  Martin Baulig  <martin@gnome.org>
19370
19371         * decl.cs (DeclSpace.Define): Splitted this in Define and
19372         DefineMembers.  DefineMembers is called first and initializes the
19373         MemberCache.
19374
19375         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
19376         DefineMembers() on all our DeclSpaces.
19377
19378         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
19379         but call DefineMembers() on all nested interfaces.  We call their
19380         Define() in our new Define() function.
19381
19382         * interface.cs (Interface): Implement IMemberContainer.
19383         (Interface.Define): Moved all code except the attribute stuf to
19384         DefineMembers().
19385         (Interface.DefineMembers): Initialize the member cache.
19386
19387         * typemanager.cs (IMemberFinder): Removed this interface, we don't
19388         need this anymore since we can use MemberCache.FindMembers directly.
19389
19390 2002-08-19  Martin Baulig  <martin@gnome.org>
19391
19392         * typemanager.cs (MemberCache): When creating the cache for an
19393         interface type, add all inherited members.
19394         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
19395         to `out bool used_cache' and documented it.
19396         (TypeManager.MemberLookup): If we already used the cache in the first
19397         iteration, we don't need to do the interfaces check.
19398
19399 2002-08-19  Martin Baulig  <martin@gnome.org>
19400
19401         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
19402         here from IMemberFinder and don't implement this interface anymore.
19403         (DeclSpace.MemberCache): Moved here from IMemberFinder.
19404
19405         * typemanager.cs (IMemberFinder): This interface is now only used by
19406         classes which actually support the member cache.
19407         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
19408         since we only put DeclSpaces into this Hashtable.
19409         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
19410         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
19411
19412 2002-08-16  Martin Baulig  <martin@gnome.org>
19413
19414         * typemanager.cs (ICachingMemberFinder): Removed.
19415         (IMemberFinder.MemberCache): New property.
19416         (TypeManager.FindMembers): Merged this with RealFindMembers().
19417         This function will never be called from TypeManager.MemberLookup()
19418         so we can't use the cache here, just the IMemberFinder.
19419         (TypeManager.MemberLookup_FindMembers): Check whether the
19420         IMemberFinder has a MemberCache and call the cache's FindMembers
19421         function.
19422         (MemberCache): Rewrote larger parts of this yet another time and
19423         cleaned it up a bit.
19424
19425 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
19426
19427         * driver.cs (LoadArgs): Support quoting.
19428
19429         (Usage): Show the CSC-like command line arguments.
19430
19431         Improved a few error messages.
19432
19433 2002-08-15  Martin Baulig  <martin@gnome.org>
19434
19435         * typemanager.cs (IMemberContainer.Type): New property.
19436         (IMemberContainer.IsInterface): New property.
19437
19438         The following changes are conditional to BROKEN_RUNTIME, which is
19439         defined at the top of the file.
19440
19441         * typemanager.cs (MemberCache.MemberCache): Don't add the base
19442         class'es members, but add all members from TypeHandle.ObjectType
19443         if we're an interface.
19444         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
19445         is the current type.
19446         (MemberCache.CacheEntry.Container): Removed this field.
19447         (TypeHandle.GetMembers): Include inherited members.
19448
19449 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19450
19451         * typemanager.cs: fixed compilation and added a comment on a field that
19452         is never used.
19453
19454 2002-08-15  Martin Baulig  <martin@gnome.org>
19455
19456         * class.cs (ConstructorInitializer.Resolve): In the
19457         Expression.MemberLookup call, use the queried_type as
19458         invocation_type.
19459
19460         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
19461         declared' attribute, it's always true.
19462         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
19463         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
19464         temporary wrapper for FindMembers which tells MemberLookup whether
19465         members from the base classes are included in the return value.
19466         This will go away soon.
19467         (TypeManager.MemberLookup): Use this temporary hack here; once the
19468         new MemberCache is completed, we don't need to do the DeclaredOnly
19469         looping here anymore since the MemberCache will take care of this.
19470         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
19471         (MemberCache): When creating the MemberCache for a class, get
19472         members from the current class and all its base classes.
19473         (MemberCache.CacheEntry.Container): New field.  This is a
19474         temporary hack until the Mono runtime is fixed to distinguish
19475         between ReflectedType and DeclaringType.  It allows us to use MCS
19476         with both the MS runtime and the unfixed Mono runtime without
19477         problems and without accecting performance.
19478         (MemberCache.SearchMembers): The DeclaredOnly looping from
19479         TypeManager.MemberLookup is now done here.      
19480
19481 2002-08-14  Martin Baulig  <martin@gnome.org>
19482
19483         * statement.cs (MyStructInfo.MyStructInfo): Don't call
19484         Type.GetFields on dynamic types but get the fields from the
19485         corresponding TypeContainer.
19486         (MyStructInfo.GetStructInfo): Added check for enum types.
19487
19488         * typemanager.cs (MemberList.IsSynchronized): Implemented.
19489         (MemberList.SyncRoot): Implemented.
19490         (TypeManager.FilterWithClosure): No need to check permissions if
19491         closure_start_type == closure_invocation_type, don't crash if
19492         closure_invocation_type is null.
19493
19494 2002-08-13  Martin Baulig  <martin@gnome.org>
19495
19496         Rewrote TypeContainer.FindMembers to use a member cache.  This
19497         gives us a speed increase of about 35% for the self-hosting MCS
19498         build and of about 15-20% for the class libs (both on GNU/Linux).
19499
19500         * report.cs (Timer): New class to get enhanced profiling.  This
19501         whole class is "TIMER" conditional since it remarkably slows down
19502         compilation speed.
19503
19504         * class.cs (MemberList): New class.  This is an IList wrapper
19505         which we're now using instead of passing MemberInfo[]'s around to
19506         avoid copying this array unnecessarily.
19507         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
19508         (ICachingMemberFinder, IMemberContainer): New interface.
19509         (TypeManager.FilterWithClosure): If `criteria' is null, the name
19510         has already been checked, otherwise use it for the name comparision.
19511         (TypeManager.FindMembers): Renamed to RealMemberFinder and
19512         provided wrapper which tries to use ICachingMemberFinder.FindMembers
19513         if possible.  Returns a MemberList, not a MemberInfo [].
19514         (TypeHandle): New class, implements IMemberContainer.  We create
19515         one instance of this class per type, it contains a MemberCache
19516         which is used to do the member lookups.
19517         (MemberCache): New class.  Each instance of this class contains
19518         all members of a type and a name-based hash table.
19519         (MemberCache.FindMembers): This is our new member lookup
19520         function.  First, it looks up all members of the requested name in
19521         the hash table.  Then, it walks this list and sorts out all
19522         applicable members and returns them.
19523
19524 2002-08-13  Martin Baulig  <martin@gnome.org>
19525
19526         In addition to a nice code cleanup, this gives us a performance
19527         increase of about 1.4% on GNU/Linux - not much, but it's already
19528         half a second for the self-hosting MCS compilation.
19529
19530         * typemanager.cs (IMemberFinder): New interface.  It is used by
19531         TypeManager.FindMembers to call FindMembers on a TypeContainer,
19532         Enum, Delegate or Interface.
19533         (TypeManager.finder_to_member_finder): New PtrHashtable.
19534         (TypeManager.finder_to_container): Removed.
19535         (TypeManager.finder_to_delegate): Removed.
19536         (TypeManager.finder_to_interface): Removed.
19537         (TypeManager.finder_to_enum): Removed.
19538
19539         * interface.cs (Interface): Implement IMemberFinder.
19540
19541         * delegate.cs (Delegate): Implement IMemberFinder.
19542
19543         * enum.cs (Enum): Implement IMemberFinder.
19544
19545         * class.cs (TypeContainer): Implement IMemberFinder.
19546
19547 2002-08-12  Martin Baulig  <martin@gnome.org>
19548
19549         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
19550
19551 2002-08-12  Martin Baulig  <martin@gnome.org>
19552
19553         * ecore.cs (ITypeExpression): New interface for expressions which
19554         resolve to a type.
19555         (TypeExpression): Renamed to TypeLookupExpression.
19556         (Expression.DoResolve): If we're doing a types-only lookup, the
19557         expression must implement the ITypeExpression interface and we
19558         call DoResolveType() on it.
19559         (SimpleName): Implement the new ITypeExpression interface.
19560         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
19561         hack, the situation that we're only looking up types can't happen
19562         anymore when this method is called.  Moved the type lookup code to
19563         DoResolveType() and call it.
19564         (SimpleName.DoResolveType): This ITypeExpression interface method
19565         is now doing the types-only lookup.
19566         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
19567         (ResolveFlags): Added MaskExprClass.
19568
19569         * expression.cs (MemberAccess): Implement the ITypeExpression
19570         interface.
19571         (MemberAccess.DoResolve): Added support for a types-only lookup
19572         when we're called via ITypeExpression.DoResolveType().
19573         (ComposedCast): Implement the ITypeExpression interface.
19574
19575         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
19576         Expression.Resolve() with ResolveFlags.Type instead.
19577
19578 2002-08-12  Martin Baulig  <martin@gnome.org>
19579
19580         * interface.cs (Interface.Define): Apply attributes.
19581
19582         * attribute.cs (Attribute.ApplyAttributes): Added support for
19583         interface attributes.
19584
19585 2002-08-11  Martin Baulig  <martin@gnome.org>
19586
19587         * statement.cs (Block.Emit): Only check the "this" variable if we
19588         do not always throw an exception.
19589
19590         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
19591         whether the property has a set accessor.
19592
19593 2002-08-11  Martin Baulig  <martin@gnome.org>
19594
19595         Added control flow analysis support for structs.
19596
19597         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
19598         with control flow analysis turned off.
19599         (IVariable): New interface.
19600         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
19601         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
19602         (FieldExpr.DoResolve): Resolve the instance expression with flow
19603         analysis turned off and do the definite assignment check after the
19604         resolving when we know what the expression will resolve to.
19605
19606         * expression.cs (LocalVariableReference, ParameterReference):
19607         Implement the new IVariable interface, only call the flow analysis
19608         code if ec.DoFlowAnalysis is true.
19609         (This): Added constructor which takes a Block argument.  Implement
19610         the new IVariable interface.
19611         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
19612         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
19613         This does the definite assignment checks for struct members.
19614
19615         * class.cs (Constructor.Emit): If this is a non-static `struct'
19616         constructor which doesn't have any initializer, call
19617         Block.AddThisVariable() to tell the flow analysis code that all
19618         struct elements must be initialized before control returns from
19619         the constructor.
19620
19621         * statement.cs (MyStructInfo): New public class.
19622         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
19623         argument to this indexer.  If non-zero, check an individual struct
19624         member, not the whole struct.
19625         (FlowBranching.CheckOutParameters): Check struct members.
19626         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
19627         overloaded versions of these methods which take an additional
19628         `int field_idx' argument to check struct members.
19629         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
19630         overloaded versions of these methods which take an additional
19631         `string field_name' argument to check struct member.s
19632         (VariableInfo): Implement the IVariable interface.
19633         (VariableInfo.StructInfo): New public property.  Returns the
19634         MyStructInfo instance of the variable if it's a struct or null.
19635         (Block.AddThisVariable): New public method.  This is called from
19636         Constructor.Emit() for non-static `struct' constructor which do
19637         not have any initializer.  It creates a special variable for the
19638         "this" instance variable which will be checked by the flow
19639         analysis code to ensure that all of the struct's fields are
19640         initialized before control returns from the constructor.
19641         (UsageVector): Added support for struct members.  If a
19642         variable/parameter is a struct with N members, we reserve a slot
19643         in the usage vector for each member.  A struct is considered fully
19644         initialized if either the struct itself (slot 0) or all its
19645         members are initialized.
19646
19647 2002-08-08  Martin Baulig  <martin@gnome.org>
19648
19649         * driver.cs (Driver.MainDriver): Only report an error CS5001
19650         if there were no compilation errors.
19651
19652         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
19653         `UnsafeContext' property to determine whether the parent is in
19654         unsafe context rather than checking the parent's ModFlags:
19655         classes nested in an unsafe class are unsafe as well.
19656
19657 2002-08-08  Martin Baulig  <martin@gnome.org>
19658
19659         * statement.cs (UsageVector.MergeChildren): Distinguish between
19660         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
19661         we return.  Added test17() and test18() to test-154.cs.
19662
19663 2002-08-08  Martin Baulig  <martin@gnome.org>
19664
19665         * typemanager.cs (TypeManager.FilterWithClosure): If we have
19666         Family access, make sure the invoking type isn't a subclass of the
19667         queried type (that'd be a CS1540).
19668
19669         * ecore.cs (Expression.MemberLookup): Added overloaded version of
19670         this method which takes an additional `Type invocation_type'.
19671
19672         * expression.cs (BaseAccess.DoResolve): Use the base type as
19673         invocation and query type.
19674         (MemberAccess.DoResolve): If the lookup failed and we're about to
19675         report a CS0122, try a lookup with the ec.ContainerType - if this
19676         succeeds, we must report a CS1540.
19677
19678 2002-08-08  Martin Baulig  <martin@gnome.org>
19679
19680         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
19681         (MethodGroupExpr): Implement the IMemberExpr interface.
19682
19683         * expression (MemberAccess.ResolveMemberAccess): No need to have
19684         any special code for MethodGroupExprs anymore, they're now
19685         IMemberExprs.   
19686
19687 2002-08-08  Martin Baulig  <martin@gnome.org>
19688
19689         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
19690         Family, FamANDAssem and FamORAssem permissions.
19691         (TypeManager.IsSubclassOrNestedChildOf): New public method.
19692
19693 2002-08-08  Martin Baulig  <martin@gnome.org>
19694
19695         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
19696         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
19697         or loop block.
19698
19699 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
19700
19701         * driver.cs: implemented /resource option to embed managed resources.
19702
19703 2002-08-07  Martin Baulig  <martin@gnome.org>
19704
19705         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
19706         (FieldBase.HasFieldInitializer): New public property.
19707         (FieldBase.GetInitializerExpression): New public method.  Resolves and
19708         returns the field initializer and makes sure it is only resolved once.
19709         (TypeContainer.EmitFieldInitializers): Call
19710         FieldBase.GetInitializerExpression to get the initializer, this ensures
19711         that it isn't resolved multiple times.
19712
19713         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
19714         the resolving process (SimpleName/MemberLookup) that we're currently
19715         emitting a field initializer (which must not access any instance members,
19716         this is an error CS0236).
19717
19718         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
19719         argument, if the `IsFieldInitializer' flag is set, we must report and
19720         error CS0236 and not an error CS0120.   
19721
19722 2002-08-07  Martin Baulig  <martin@gnome.org>
19723
19724         * ecore.cs (IMemberExpr): New public interface.
19725         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
19726         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
19727         if the expression is an IMemberExpr.
19728
19729         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
19730         to be null, implicitly default to `this' if we're non-static in
19731         this case.  Simplified the code a lot by using the new IMemberExpr
19732         interface.  Also fixed bug #28176 here.
19733
19734 2002-08-06  Martin Baulig  <martin@gnome.org>
19735
19736         * cs-parser.jay (SimpleLookup): Removed.  We need to create
19737         ParameterReferences during semantic analysis so that we can do a
19738         type-only search when resolving Cast, TypeOf and SizeOf.
19739         (block): Pass the `current_local_parameters' to the Block's
19740         constructor.
19741
19742         * class.cs (ConstructorInitializer): Added `Parameters parameters'
19743         argument to the constructor.
19744         (ConstructorInitializer.Resolve): Create a temporary implicit
19745         block with the parameters.
19746
19747         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
19748         references here if we aren't doing a type-only search.
19749
19750         * statement.cs (Block): Added constructor which takes a
19751         `Parameters parameters' argument.
19752         (Block.Parameters): New public property.
19753
19754         * support.cs (InternalParameters.Parameters): Renamed `parameters'
19755         to `Parameters' and made it public readonly.
19756
19757 2002-08-06  Martin Baulig  <martin@gnome.org>
19758
19759         * ecore.cs (Expression.Warning): Made this public as well.
19760
19761         * report.cs (Report.Debug): Print the contents of collections.
19762
19763 2002-08-06  Martin Baulig  <martin@gnome.org>
19764
19765         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
19766         used to tell Resolve() which kinds of expressions it may return.
19767         (Expression.Resolve): Added overloaded version of this method which
19768         takes a `ResolveFlags flags' argument.  This can be used to tell
19769         Resolve() which kinds of expressions it may return.  Reports a
19770         CS0118 on error.
19771         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
19772         ResolveFlags.SimpleName.
19773         (Expression.Error118): Added overloaded version of this method which
19774         takes a `ResolveFlags flags' argument.  It uses the flags to determine
19775         which kinds of expressions are allowed.
19776
19777         * expression.cs (Argument.ResolveMethodGroup): New public method.
19778         Resolves an argument, but allows a MethodGroup to be returned.
19779         This is used when invoking a delegate.
19780
19781         * TODO: Updated a bit.
19782
19783 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19784
19785         Fixed compilation with csc.
19786
19787         * ecore.cs: Expression.Error made public. Is this correct? Should
19788         Warning be made public too?
19789
19790         * expression.cs: use ea.Location instead of ea.loc.
19791         [FIXME:  Filed as bug #28607: MCS must report these errors.]
19792
19793 2002-08-06  Martin Baulig  <martin@gnome.org>
19794
19795         * ecore.cs (Expression.loc): Moved the location here instead of
19796         duplicating it in all derived classes.
19797         (Expression.Location): New public property.
19798         (Expression.Error, Expression.Warning): Made them non-static and
19799         removed the location argument.
19800         (Expression.Warning): Added overloaded version which takes an
19801         `int level' argument.
19802         (Expression.Error118): Make this non-static and removed the
19803         expression and location arguments.
19804         (TypeExpr): Added location argument to the constructor.
19805
19806         * expression.cs (StaticCallExpr): Added location argument to
19807         the constructor.
19808         (Indirection, PointerArithmetic): Likewise.
19809         (CheckedExpr, UnCheckedExpr): Likewise.
19810         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
19811         (StringPtr): Likewise.
19812
19813
19814 2002-08-05  Martin Baulig  <martin@gnome.org>
19815
19816         * expression.cs (BaseAccess.DoResolve): Actually report errors.
19817
19818         * assign.cs (Assign.DoResolve): Check whether the source
19819         expression is a value or variable.
19820
19821         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
19822         while resolving the corresponding blocks.
19823
19824         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
19825         an error, don't silently return null.
19826
19827         * statement.cs (Block.AddVariable): Do the error reporting here
19828         and distinguish between CS0128 and CS0136.
19829         (Block.DoResolve): Report all unused labels (warning CS0164).
19830         (LabeledStatement): Pass the location to the constructor.
19831         (LabeledStatement.HasBeenReferenced): New property.
19832         (LabeledStatement.Resolve): Set it to true here.
19833
19834         * statement.cs (Return.Emit): Return success even after reporting
19835         a type mismatch error (CS0126 or CS0127), this is what csc does and
19836         it avoids confusing the users with any consecutive errors.
19837
19838 2002-08-05  Martin Baulig  <martin@gnome.org>
19839
19840         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
19841
19842         * const.cs (Const.LookupConstantValue): Catch circular definitions.
19843
19844         * expression.cs (MemberAccess.DoResolve): Silently return if an
19845         error has already been reported.
19846
19847         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
19848         error has already been reported.
19849
19850 2002-08-05  Martin Baulig  <martin@gnome.org>
19851
19852         * statement.cs (UsageVector): Only initialize the `parameters'
19853         vector if we actually have any "out" parameters.
19854
19855 2002-08-05  Martin Baulig  <martin@gnome.org>
19856
19857         * expression.cs (Binary.ResolveOperator): When combining delegates,
19858         they must have the same type.
19859
19860 2002-08-05  Martin Baulig  <martin@gnome.org>
19861
19862         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
19863         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
19864         work with the ms runtime and we also don't need it: if we're a
19865         PropertyBuilder and not in the `indexer_arguments' hash, then we
19866         are a property and not an indexer.
19867
19868         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
19869         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
19870         since the latter one doesn't work with the ms runtime.
19871
19872 2002-08-03  Martin Baulig  <martin@gnome.org>
19873
19874         Fixed bugs #27998 and #22735.
19875
19876         * class.cs (Method.IsOperator): New public field.
19877         (Method.CheckBase): Report CS0111 if there's already a method
19878         with the same parameters in the current class.  Report CS0508 when
19879         attempting to change the return type of an inherited method.
19880         (MethodData.Emit): Report CS0179 if a method doesn't have a body
19881         and it's not marked abstract or extern.
19882         (PropertyBase): New abstract base class for Property and Indexer.
19883         (PropertyBase.CheckBase): Moved here from Property and made it work
19884         for indexers.
19885         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
19886         the same so we can reuse it there.
19887         (Property, Indexer): Derive from PropertyBase.
19888         (MethodSignature.inheritable_property_signature_filter): New delegate
19889         to find properties and indexers.
19890
19891         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
19892         argument and improved error reporting.
19893
19894         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
19895         EmptyReadOnlyParameters and made it a property.
19896
19897         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
19898         version of this method which takes a `PropertyInfo indexer'.
19899         (TypeManager.RegisterIndexer): New method.
19900
19901         * class.cs: Added myself as author of this file :-)
19902
19903 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19904
19905         * class.cs: fixed compilation on windoze.
19906
19907 2002-08-03  Martin Baulig  <martin@gnome.org>
19908
19909         * interface.cs (Interface.GetInterfaceBases): Check whether all
19910         base interfaces are at least as accessible than the current one.
19911
19912         * class.cs (TypeContainer.GetClassBases): Check whether base types
19913         are at least as accessible than the current type.
19914         (TypeContainer.AsAccessible): Implemented and made non-static.
19915         (MemberBase.CheckParameters): Report errors if the accessibility
19916         checks fail.
19917
19918         * delegate.cs (Delegate.Delegate): The default visibility is
19919         internal for top-level types and private for nested types.
19920         (Delegate.Define): Report errors if the accessibility checks fail.
19921
19922         * enum.cs (Enum.Enum): The default visibility is internal for
19923         top-level types and private for nested types.
19924         (Enum.DefineType): Compute the correct visibility.
19925
19926         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
19927         function which takes a `bool is_toplevel' instead of a TypeContainer.
19928
19929         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
19930         builtin type.
19931
19932 2002-08-02  Martin Baulig  <martin@gnome.org>
19933
19934         * expression.cs (LocalVariableReferenc): Added constructor which
19935         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
19936         (LocalVariableReference.IsReadOnly): New property.
19937         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
19938         variable is readonly, use our own readonly flag to do this; you can
19939         use the new constructor to get a writable reference to a read-only
19940         variable.
19941
19942         * cs-parser.jay (foreach_statement, using_statement): Get a writable
19943         reference to the local variable.
19944
19945 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
19946
19947         * rootcontext.cs (ResolveCore): Also include System.Exception
19948
19949         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
19950         we reach an EmptyStatement.
19951
19952         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
19953         is also fine.
19954
19955         * expression.cs (Binary.ResolveOperator): Check error result in
19956         two places.
19957
19958         use brtrue/brfalse directly and avoid compares to null.
19959
19960 2002-08-02  Martin Baulig  <martin@gnome.org>
19961
19962         * class.cs (TypeContainer.Define): Define all nested interfaces here.
19963         Fixes bug #28407, added test-155.cs.
19964
19965 2002-08-01  Martin Baulig  <martin@gnome.org>
19966
19967         * class.cs (Event.EmitDefaultMethod): Make this work with static
19968         events.  Fixes #28311, added verify-3.cs.
19969
19970 2002-08-01  Martin Baulig  <martin@gnome.org>
19971
19972         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
19973         `is_disposable' fields.
19974         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
19975         `hm.is_disposable' if we're using the collection pattern.
19976         (Foreach.EmitCollectionForeach): Use the correct type for the
19977         enumerator's local variable, only emit the try/finally block if
19978         necessary (fixes #27713).
19979
19980 2002-08-01  Martin Baulig  <martin@gnome.org>
19981
19982         * ecore.cs (Expression.report118): Renamed to Error118 and made
19983         it public static.
19984
19985         * statement.cs (Throw.Resolve): Check whether the expression is of
19986         the correct type (CS0118) and whether the type derives from
19987         System.Exception (CS0155).
19988         (Catch.Resolve): New method.  Do the type lookup here and check
19989         whether it derives from System.Exception (CS0155).
19990         (Catch.CatchType, Catch.IsGeneral): New public properties.
19991
19992         * typemanager.cs (TypeManager.exception_type): Added.
19993
19994 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
19995
19996         * driver.cs: Updated About function.
19997
19998 2002-07-31  Martin Baulig  <martin@gnome.org>
19999
20000         Implemented Control Flow Analysis.
20001
20002         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
20003         (EmitContext.CurrentBranching): Added.
20004         (EmitContext.StartFlowBranching): Added.
20005         (EmitContext.EndFlowBranching): Added.
20006         (EmitContext.KillFlowBranching): Added.
20007         (EmitContext.IsVariableAssigned): Added.
20008         (EmitContext.SetVariableAssigned): Added.
20009         (EmitContext.IsParameterAssigned): Added.
20010         (EmitContext.SetParameterAssigned): Added.
20011         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
20012         Added control flow analysis stuff here.
20013
20014         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
20015         resolve the expression as lvalue.
20016         (LocalVariableReference.DoResolve): Check whether the variable has
20017         already been assigned.
20018         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
20019         the parameter as assigned here.
20020         (ParameterReference.DoResolve): Check whether the parameter has already
20021         been assigned.
20022         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
20023         expression as lvalue.
20024
20025         * statement.cs (FlowBranching): New class for the flow analysis code.
20026         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
20027         (LabeledStatement.IsDefined): New public property.
20028         (LabeledStatement.AddUsageVector): New public method to tell flow
20029         analyis that the label may be reached via a forward jump.
20030         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
20031         flow analysis.
20032         (VariableInfo.Number): New public field.  This is used by flow analysis
20033         to number all locals of a block.
20034         (Block.CountVariables): New public property.  This is the number of
20035         local variables in this block (including the locals from all parent
20036         blocks).
20037         (Block.EmitMeta): Number all the variables.
20038
20039         * statement.cs: Added flow analysis support to all classes.
20040
20041 2002-07-31  Martin Baulig  <martin@gnome.org>
20042
20043         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
20044         To get debugging messages, compile mcs with /define:MCS_DEBUG and
20045         then use this argument.
20046
20047         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
20048
20049         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
20050         use this to specify /define options.
20051
20052 2002-07-29  Martin Baulig  <martin@gnome.org>
20053
20054         * statement.cs (Fixed): Moved all code that does variable lookups
20055         and resolvings from Emit to Resolve.
20056
20057         * statement.cs (For): Moved all code that does variable lookups
20058         and resolvings from Emit to Resolve.
20059
20060         * statement.cs (Using): Moved all code that does variable lookups
20061         and resolvings from Emit to Resolve.
20062
20063 2002-07-29  Martin Baulig  <martin@gnome.org>
20064
20065         * attribute.cs (Attribute.Resolve): Explicitly catch a
20066         System.NullReferenceException when creating the
20067         CustromAttributeBuilder and report a different warning message.
20068
20069 2002-07-29  Martin Baulig  <martin@gnome.org>
20070
20071         * support.cs (ParameterData.ParameterName): Added method to
20072         get the name of a parameter.
20073
20074         * typemanager.cs (TypeManager.IsValueType): New public method.
20075
20076 2002-07-29  Martin Baulig  <martin@gnome.org>
20077
20078         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
20079         is a flag which specifies that it's either ref or out.
20080         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
20081         the out parameter to `out Parameter.Modifier mod', also set the
20082         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
20083
20084         * support.cs (InternalParameters.ParameterModifier): Distinguish
20085         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20086         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20087
20088         * expression.cs (Argument.GetParameterModifier): Distinguish
20089         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20090         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20091
20092 2002-07-29  Martin Baulig  <martin@gnome.org>
20093
20094         * expression.cs (ParameterReference.ParameterReference): Added
20095         `Location loc' argument to the constructor.
20096
20097         * cs-parser.jay: Pass location to ParameterReference.
20098
20099 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
20100
20101         * statement.cs (Try): Initialize the location.
20102
20103         * cs-parser.jay: pass location to Try.
20104
20105         * expression.cs (Unary.Reduce): Change the prototype to return
20106         whether a constant fold could be performed or not.  The result is
20107         returned in an out parameters.  In the case of Indirection and
20108         AddressOf, we want to perform the full tests.
20109
20110 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
20111
20112         * statement.cs (Statement.Emit): Flag dead code.
20113
20114 2002-07-27  Andrew Birkett  <andy@nobugs.org>
20115
20116         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
20117
20118 2002-07-27  Martin Baulig  <martin@gnome.org>
20119
20120         * class.cs (MethodData.Define): Put back call to
20121         TypeManager.AddMethod(), accidentally commented this out.
20122
20123         * report.cs (Debug): New public method to print debugging information,
20124         this is `[Conditional ("DEBUG")]'.
20125
20126 2002-07-26  Martin Baulig  <martin@gnome.org>
20127
20128         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
20129         (switch_statement): Push the current_block to the switch_stack and
20130         pop it again when we're done with the switch.
20131         (switch_section): The new block is a child of the current_block.
20132         Fixes bug #24007, added test-152.cs.
20133
20134 2002-07-27  Martin Baulig  <martin@gnome.org>
20135
20136         * expression.cs (Invocation.EmitArguments): When calling a varargs
20137         function with only its fixed arguments, we need to pass an empty
20138         array.
20139
20140 2002-07-27  Martin Baulig  <martin@gnome.org>
20141
20142         Mono 0.13 has been released.
20143
20144 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
20145
20146         * driver.cs: Rename --resource to --linkres, because that is what
20147         we do currently, we dont support --resource yet.
20148
20149         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
20150
20151 2002-07-25  Martin Baulig  <martin@gnome.org>
20152
20153         * class.cs (MethodData): New public class.  This is a `method builder'
20154         class for a method or one accessor of a Property/Indexer/Event.
20155         (MethodData.GetMethodFlags): Moved here from MemberBase.
20156         (MethodData.ApplyAttributes): Likewise.
20157         (MethodData.ApplyObsoleteAttribute): Likewise.
20158         (MethodData.ApplyConditionalAttribute): Likewise.
20159         (MethodData.ApplyDllImportAttribute): Likewise.
20160         (MethodData.CheckAbstractAndExternal): Likewise.
20161         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
20162         (MethodData.Emit): Formerly known as Method.Emit().
20163         (MemberBase): Moved everything which was specific to a single
20164         accessor/method to MethodData.
20165         (Method): Create a new MethodData and call Define() and Emit() on it.
20166         (Property, Indexer, Event): Create a new MethodData objects for each
20167         accessor and call Define() and Emit() on them.
20168
20169 2002-07-25  Martin Baulig  <martin@gnome.org>
20170
20171         Made MethodCore derive from MemberBase to reuse the code from there.
20172         MemberBase now also checks for attributes.
20173
20174         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
20175         (MemberBase.GetMethodFlags): Moved here from class Method and marked
20176         as virtual.
20177         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
20178         `CallingConventions cc' and `Attributes opt_attrs' arguments.
20179         (MemberBase.ApplyAttributes): New virtual method; applies the
20180         attributes to a method or accessor.
20181         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
20182         (MemberBase.ApplyConditionalAttribute): Likewise.
20183         (MemberBase.ApplyDllImportAttribute): Likewise.
20184         (MemberBase.CheckAbstractAndExternal): Likewise.
20185         (MethodCore.ParameterTypes): This is now a property instead of a
20186         method, it's initialized from DoDefineParameters().
20187         (MethodCore.ParameterInfo): Removed the set accessor.
20188         (MethodCore.DoDefineParameters): New protected virtual method to
20189         initialize ParameterTypes and ParameterInfo.
20190         (Method.GetReturnType): We can now simply return the MemberType.
20191         (Method.GetMethodFlags): Override the MemberBase version and add
20192         the conditional flags.
20193         (Method.CheckBase): Moved some code from Define() here, call
20194         DoDefineParameters() here.
20195         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
20196         here to avoid some larger code duplication.
20197         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
20198         ensure that abstract and external accessors don't declare a body.
20199
20200         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
20201         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
20202         lookup in the attribute's parent classes, so we need to abort as soon
20203         as we found the first match.
20204         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
20205         the attribute has no arguments.
20206
20207         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
20208         of a Method.
20209
20210 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20211
20212         * cs-parser.jay: reverted previous patch.
20213
20214 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20215
20216         * cs-parser.jay: fixed bug #22119.
20217
20218 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20219
20220         * attribute.cs: fixed compilation. The error was:
20221         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
20222         be assigned to before control leaves the current method."
20223         [FIXME:  Filed as bug #28186: MCS must report this error.]
20224
20225 2002-07-25  Martin Baulig  <martin@gnome.org>
20226
20227         * attribute.cs (Attribute.Conditional_GetConditionName): New static
20228         method to pull the condition name ouf of a Conditional attribute.
20229         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
20230         the obsolete message and error flag out of an Obsolete attribute.
20231
20232         * class.cs (Method.GetMethodFlags): New public method to get the
20233         TypeManager.MethodFlags for this method.
20234         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
20235         private methods.
20236         (Method.Define): Get and apply the Obsolete and Conditional attributes;
20237         if we're overriding a virtual function, set the new private variable
20238         `parent_method'; call the new TypeManager.AddMethod().
20239
20240         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
20241         the MethodBuilder and the Method in a PtrHashtable.
20242         (TypeManager.builder_to_method): Added for this purpose.
20243         (TypeManager.MethodFlags): Added IsObsoleteError.
20244         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
20245         Obsolete and Conditional arguments in MethodBuilders.  If we discover
20246         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
20247         the message from the attribute.
20248
20249 2002-07-24  Martin Baulig  <martin@gnome.org>
20250
20251         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
20252         preprocessor directives, ensure that the argument to #define/#undef is
20253         exactly one identifier and that it's actually an identifier.
20254
20255         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
20256         did not work ....
20257
20258 2002-07-24  Martin Baulig  <martin@gnome.org>
20259
20260         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
20261         initialize it to TypeManager.object_type in the constructor.
20262         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
20263         of the `hm.get_current' method if we're using the collection pattern.
20264         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
20265         for the explicit conversion to make it work when we're using the collection
20266         pattern and the `Current' property has a different return type than `object'.
20267         Fixes #27713.
20268
20269 2002-07-24  Martin Baulig  <martin@gnome.org>
20270
20271         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
20272         does not match, but don't report any errors.  This method is called in
20273         order for all methods in a MethodGroupExpr until a matching method is
20274         found, so we don't want to bail out if the first method doesn't match.
20275         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
20276         matches, report the 123.  Fixes #28070.
20277
20278 2002-07-24  Martin Baulig  <martin@gnome.org>
20279
20280         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
20281         TypeManager.TypeToCoreType() to the top of the method so the
20282         following equality checks will work.  Fixes #28107.
20283
20284 2002-07-24  Martin Baulig  <martin@gnome.org>
20285
20286         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
20287         operand is of type uint, and the other operand is of type sbyte,
20288         short or int, the operands are converted to type long." -
20289         Actually do what this comment already told us.  Fixes bug #28106,
20290         added test-150.cs.
20291
20292 2002-07-24  Martin Baulig  <martin@gnome.org>
20293
20294         * class.cs (MethodBase): New abstract class.  This is now a base
20295         class for Property, Indexer and Event to avoid some code duplication
20296         in their Define() and DefineMethods() methods.
20297         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
20298         generic methods for Define() and DefineMethods().
20299         (FieldBase): Derive from MemberBase, not MemberCore.
20300         (Property): Derive from MemberBase, not MemberCore.
20301         (Property.DefineMethod): Moved all the code from this method to the
20302         new MethodBase.DefineAccessor(), just call it with appropriate
20303         argumetnts.
20304         (Property.Define): Call the new Property.DoDefine(), this does some
20305         sanity checks and we don't need to duplicate the code everywhere.
20306         (Event): Derive from MemberBase, not MemberCore.
20307         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
20308         accessors, this will also make them work with interface events.
20309         (Indexer): Derive from MemberBase, not MemberCore.
20310         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
20311         (Indexer.Define): Use the new MethodBase functions.
20312
20313         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
20314         argument to the constructor.
20315         (Interface.FindMembers): Added support for interface events.
20316         (Interface.PopluateEvent): Implemented.
20317
20318         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
20319
20320 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
20321
20322         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
20323         but this is required to check for a method name being the same as
20324         the containing class.  
20325
20326         Handle this now.
20327
20328 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20329
20330         * interface.cs: initialize variable.
20331
20332 2002-07-23  Martin Baulig  <martin@gnome.org>
20333
20334         Implemented the IndexerName attribute in interfaces.
20335
20336         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
20337         name if this is an explicit interface implementation.
20338         (Indexer.InterfaceIndexerName): New public variable.  If we're
20339         implementing an interface indexer, this is the IndexerName in that
20340         interface.  Otherwise, it's the IndexerName.
20341         (Indexer.DefineMethod): If we're implementing interface indexer,
20342         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
20343         and Pending.ImplementIndexer methods.
20344         (Indexer.Define): Also define the PropertyBuilder if we're
20345         implementing an interface indexer and this is neither an explicit
20346         interface implementation nor do the IndexerName match the one in
20347         the interface.
20348
20349         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
20350         If a method is defined here, then we always need to create a proxy
20351         for it.  This is used when implementing interface indexers.
20352         (Pending.IsInterfaceIndexer): New public method.
20353         (Pending.ImplementIndexer): New public method.
20354         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
20355         This is used when implementing interface indexers to define a proxy
20356         if necessary.
20357         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
20358         define a proxy if necessary.
20359
20360         * interface.cs (Interface.IndexerName): New public variable.
20361         (Interface.PopulateIndexer): Set the IndexerName.
20362         (Interface.DefineIndexers): New private method.  Populate all the
20363         indexers and make sure their IndexerNames match.
20364
20365         * typemanager.cs (IndexerPropertyName): Added support for interface
20366         indexers.
20367
20368 2002-07-22  Martin Baulig  <martin@gnome.org>
20369
20370         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
20371         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
20372         ret if HasReturnLabel.
20373         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
20374         variables.
20375
20376         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
20377         and set the ec.LoopBeginTryCatchLevel.
20378         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
20379         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
20380         the current ec.TryCatchLevel, the branch goes out of an exception
20381         block.  In this case, we need to use Leave and not Br.
20382
20383 2002-07-22  Martin Baulig  <martin@gnome.org>
20384
20385         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
20386         block unless the block does not always return or it is contained in
20387         another try { ... } catch { ... } block.  Fixes bug #26506.
20388         Added verify-1.cs to the test suite.
20389
20390 2002-07-22  Martin Baulig  <martin@gnome.org>
20391
20392         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
20393         then we do not always return.  Fixes bug #24985.
20394
20395 2002-07-22  Martin Baulig  <martin@gnome.org>
20396
20397         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
20398         lookup on a per-class level; ie. walk up the class hierarchy until we
20399         found at least one applicable method, then choose the best among them.
20400         Fixes bug #24463 and test-29.cs.
20401
20402 2002-07-22  Martin Baulig  <martin@gnome.org>
20403
20404         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
20405         return types of the methods.  The return type is not part of the
20406         signature and we must not check it to make the `new' modifier work.
20407         Fixes bug #27999, also added test-147.cs.
20408         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
20409
20410         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
20411         on the method's return type.
20412
20413 2002-07-21  Martin Baulig  <martin@gnome.org>
20414
20415         * assign.cs: Make this work if the rightmost source is a constant and
20416         we need to do an implicit type conversion.  Also adding a few more tests
20417         to test-38.cs which should have caught this.
20418
20419         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
20420         target in the makefile for this.  The makefile.gnu is primarily intended
20421         for end-users who don't want to debug the compiler.
20422
20423 2002-07-21  Martin Baulig  <martin@gnome.org>
20424
20425         * assign.cs: Improved the Assign class so it can now handle embedded
20426         assignments (X = Y = Z = something).  As a side-effect this'll now also
20427         consume less local variables.  test-38.cs now passes with MCS, added
20428         a few new test cases to that test.
20429
20430 2002-07-20  Martin Baulig  <martin@gnome.org>
20431
20432         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
20433         instructions.  Fixes bug #27977, also added test-146.cs.
20434
20435 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20436
20437         * cs-tokenizer.cs: fixed getHex ().
20438
20439 2002-07-19  Martin Baulig  <martin@gnome.org>
20440
20441         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
20442         not Type.GetType() to lookup the array type.  This is needed when
20443         we're constructing an array of a user-defined type.
20444         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
20445         single-dimensional arrays, but also for single-dimensial arrays of
20446         type decimal.
20447
20448 2002-07-19  Martin Baulig  <martin@gnome.org>
20449
20450         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
20451         this function is called, it's not allowed to share LocalBuilders
20452         among ILGenerators.
20453
20454 2002-07-19  Martin Baulig  <martin@gnome.org>
20455
20456         * expression.cs (Argument.Resolve): Report an error 118 when trying
20457         to pass a type as argument.
20458
20459 2002-07-18  Martin Baulig  <martin@gnome.org>
20460
20461         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
20462         Conv_R_Un for the signed `long' type.
20463
20464 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
20465
20466         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
20467         `expr' for the temporary result, as that will fail if we do
20468         multiple resolves on the same expression.
20469
20470 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
20471
20472         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
20473         ec.TypeContainer for looking up aliases. 
20474
20475         * class.cs (TypeContainer): Remove LookupAlias from here.
20476
20477         * decl.cs (DeclSpace); Move here.
20478
20479 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
20480
20481         * class.cs (FindMembers): Only call filter if the constructor
20482         bulider is not null.
20483
20484         Also handle delegates in `NestedTypes' now.  Now we will perform
20485         type lookups using the standard resolution process.  This also
20486         fixes a bug.
20487
20488         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
20489         This uses Expressions (the limited kind that can be parsed by the
20490         tree) instead of strings.
20491
20492         * expression.cs (ComposedCast.ToString): Implement, used to flag
20493         errors since now we have to render expressions.
20494
20495         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
20496         FormArrayType. 
20497
20498         * ecore.cs (SimpleName.ToString): ditto.
20499
20500         * cs-parser.jay: Instead of using strings to assemble types, use
20501         Expressions to assemble the type (using SimpleName, ComposedCast,
20502         MemberAccess).  This should fix the type lookups in declarations,
20503         because we were using a different code path for this.
20504
20505         * statement.cs (Block.Resolve): Continue processing statements
20506         even when there is an error.
20507
20508 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
20509
20510         * class.cs (Event.Define): Also remove the `remove' method from
20511         the list of pending items.
20512
20513         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
20514         generate more compact code. 
20515
20516 2002-07-17  Martin Baulig  <martin@gnome.org>
20517
20518         * const.cs (Const.LookupConstantValue): Add support for constant
20519         `unchecked' and `checked' expressions.
20520         Also adding test case test-140.cs for this.
20521
20522 2002-07-17  Martin Baulig  <martin@gnome.org>
20523
20524         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
20525         check whether mi.ReturnType implements the IEnumerator interface; the
20526         `==' and the IsAssignableFrom() will fail in this situation.
20527
20528 2002-07-16  Ravi Pratap  <ravi@ximian.com>
20529
20530         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
20531         here too.
20532
20533 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20534
20535         * expression.cs: fixed bug #27811.
20536
20537 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
20538
20539         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
20540         Molaro: when we are a ref, the value already contains a pointer
20541         value, do not take the address of it.
20542
20543 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
20544         * removed mb-parser.jay and mb-tokenizer.cs
20545
20546 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20547
20548         * expression.cs: check against the building corlib void type.
20549
20550 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
20551
20552         * ecore.cs: fix for valuetype static readonly fields: when 
20553         initializing them, we need their address, not the address of a copy.
20554
20555 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
20556
20557         * typemanager.cs: register also enum_type in corlib.
20558
20559 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20560
20561         * class.cs: allow calling this (but not base) initializers in structs.
20562
20563 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
20564
20565         * ecore.cs: make sure we compare against the building base types
20566         in GetTypeSize ().
20567
20568 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
20569
20570         * typemanager.cs: fix TypeToCoreType() to handle void and object
20571         (corlib gets no more typerefs after this change).
20572
20573 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
20574
20575         * expression.cs (ArrayCreation.EmitArrayArguments): use
20576         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
20577
20578         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
20579         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
20580         array indexes, the runtime actually forbids them.
20581
20582         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
20583         for array arguments here.
20584
20585         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
20586         instead of the default for ValueTypes.
20587
20588         (New.DoEmit): Use IsValueType instead of
20589         IsSubclassOf (value_type)
20590         (New.DoResolve): ditto.
20591         (Invocation.EmitCall): ditto.
20592
20593         * assign.cs (Assign): ditto.
20594
20595         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
20596         Statements *are* currently doing part of their resolution during
20597         Emit.  
20598
20599         Expressions do always resolve during resolve, but statements are
20600         only required to propagate resolution to their children.
20601
20602 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
20603
20604         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
20605
20606         (LoadAssembly): Do not add the dll if it is already specified
20607
20608         (MainDriver): Add the System directory to the link path at the end,
20609         after all the other -L arguments. 
20610
20611         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
20612         wrong opcode for loading bytes and bools (ldelem.i1 instead of
20613         ldelem.u1) and using the opposite for sbytes.
20614
20615         This fixes Digger, and we can finally run it.
20616
20617         * driver.cs (UnixParseOption): Move the option parsing here.  
20618         (CSCParseOption): Implement CSC-like parsing of options.
20619
20620         We now support both modes of operation, the old Unix way, and the
20621         new CSC-like way.  This should help those who wanted to make cross
20622         platform makefiles.
20623
20624         The only thing broken is that /r:, /reference: and /lib: are not
20625         implemented, because I want to make those have the same semantics
20626         as the CSC compiler has, and kill once and for all the confussion
20627         around this.   Will be doing this tomorrow.
20628
20629         * statement.cs (Unsafe.Resolve): The state is checked during
20630         resolve, not emit, so we have to set the flags for IsUnsfe here.
20631
20632 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20633
20634         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
20635         not catch the Error_ObjectRefRequired in SimpleName (as it is
20636         possible to have a class/instance variable name that later gets
20637         deambiguated), we have to check this here.      
20638
20639 2002-07-10  Ravi Pratap  <ravi@ximian.com>
20640
20641         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
20642         make static and put into Expression.
20643
20644         (Event.Define): Register the private field of the event with the 
20645         TypeManager so that GetFieldFromEvent can get at it.
20646
20647         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
20648         keep track of the private field associated with an event which
20649         has no accessors.
20650
20651         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
20652         private field.
20653
20654         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
20655
20656 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20657
20658         * expression.cs (Binary.EmitBranchable): this routine emits the
20659         Binary expression in a branchable context.  This basically means:
20660         we need to branch somewhere, not just get the value on the stack.
20661
20662         This works together with Statement.EmitBoolExpression.
20663
20664         * statement.cs (Statement.EmitBoolExpression): Use
20665         EmitBranchable. 
20666
20667 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
20668
20669         * statement.cs (For): Reduce the number of jumps in loops.
20670
20671         (For): Implement loop inversion for the For statement.
20672
20673         (Break): We can be breaking out of a Try/Catch controlled section
20674         (foreach might have an implicit try/catch clause), so we need to
20675         use Leave instead of Br.
20676
20677         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
20678         now).  If the instace expression supports IMemoryLocation, we use
20679         the AddressOf method from the IMemoryLocation to extract the
20680         address instead of emitting the instance.
20681
20682         This showed up with `This', as we were emitting the instance
20683         always (Emit) instead of the Address of This.  Particularly
20684         interesting when This is a value type, as we dont want the Emit
20685         effect (which was to load the object).
20686
20687 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
20688
20689         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
20690
20691         * statement.cs (Checked): Set the CheckedState during the resolve
20692         process too, as the ConvCast operations track the checked state on
20693         the resolve process, and not emit.
20694
20695         * cs-parser.jay (namespace_member_declaration): Flag that we have
20696         found a declaration when we do.  This is used to flag error 1529
20697
20698         * driver.cs: Report ok when we display the help only.
20699
20700 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
20701
20702         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
20703
20704 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
20705
20706         * cs-tokenizer.cs (define): We also have to track locally the
20707         defines.  AllDefines is just used for the Conditional Attribute,
20708         but we also need the local defines for the current source code. 
20709
20710 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
20711
20712         * statement.cs (While, For, Do): These loops can exit through a
20713         Break statement, use this information to tell whether the
20714         statement is the last piece of code.
20715
20716         (Break): Flag that we break.
20717
20718         * codegen.cs (EmitContexts): New `Breaks' state variable.
20719
20720 2002-07-03  Martin Baulig  <martin@gnome.org>
20721
20722         * class.cs (TypeContainer.MethodModifiersValid): Allow override
20723         modifiers in method declarations in structs.  Otherwise, you won't
20724         be able to override things like Object.Equals().
20725
20726 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20727
20728         * class.cs (Method, Property, Indexer): Do not allow the public
20729         modifier to be used in explicit interface implementations.
20730
20731         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
20732         override modifiers in method declarations in structs
20733
20734 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
20735
20736         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
20737         integer or real overflow, report an error
20738
20739 2002-07-02  Martin Baulig  <martin@gnome.org>
20740
20741         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
20742         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
20743         to tell the runtime about our newly created System.Object and
20744         System.ValueType types.
20745
20746 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20747
20748         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
20749         struct instead of Ldarg/Starg.
20750
20751 2002-07-02  Martin Baulig  <martin@gnome.org>
20752
20753         * expression.cs (Indirection.Indirection): Call
20754         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
20755
20756 2002-07-02  Martin Baulig  <martin@gnome.org>
20757
20758         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
20759         ValueType, call TypeManager.TypeToCoreType() on it.
20760         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
20761         the OpCodes.Newarr argument.
20762
20763 2002-07-02  Martin Baulig  <martin@gnome.org>
20764
20765         * expression.cs (Invocation.EmitCall): When compiling corlib,
20766         replace all calls to the system's System.Array type to calls to
20767         the newly created one.
20768
20769         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
20770         System.Array methods.
20771         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
20772         from the system's System.Array type which must be replaced.
20773
20774 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
20775
20776         * typemanager.cs: load unverifiable_code_ctor so we can build
20777         corlib using the correct type. Avoid using GetTypeCode() with
20778         TypeBuilders.
20779         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
20780         TypeManager.object_type to allow building corlib.
20781
20782 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
20783
20784         * ecore.cs: handle System.Enum separately in LoadFromPtr().
20785
20786 2002-07-01  Martin Baulig  <martin@gnome.org>
20787
20788         * class.cs: Make the last change actually work, we need to check
20789         whether `ifaces != null' to avoid a crash.
20790
20791 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20792
20793         * class.cs: when we build structs without fields that implement
20794         interfaces, we need to add the interfaces separately, since there is
20795         no API to both set the size and add the interfaces at type creation
20796         time.
20797
20798 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20799
20800         * expression.cs: the dimension arguments to the array constructors
20801         need to be converted if they are a long.
20802
20803 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
20804
20805         * class.cs: don't emit ldarg.0 if there is no parent constructor
20806         (fixes showstopper for corlib).
20807
20808 2002-06-29  Martin Baulig  <martin@gnome.org>
20809
20810         MCS now compiles corlib on GNU/Linux :-)
20811
20812         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
20813         ie. check for MethodImplOptions.InternalCall.
20814
20815         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
20816         and TypeManager.attribute_type are null, so we must explicitly check
20817         whether parent is not null to find out whether it's an attribute type.
20818         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
20819         and SetBuilder, not only if the property is neither abstract nor external.
20820         This is necessary to set the MethodImplOptions on the accessor methods.
20821         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
20822         SetBuilder, see Property.Emit().
20823
20824         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
20825         populate "System.Object", "System.ValueType" and "System.Attribute" since
20826         they've already been populated from BootCorlib_PopulateCoreTypes().
20827
20828 2002-06-29  Martin Baulig  <martin@gnome.org>
20829
20830         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
20831         is the NullLiteral, we also need to make sure that target_type is not
20832         an enum type.   
20833
20834 2002-06-29  Martin Baulig  <martin@gnome.org>
20835
20836         * rootcontext.cs (RootContext.ResolveCore): We must initialize
20837         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
20838         before calling BootstrapCorlib_ResolveDelegate ().
20839
20840 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20841
20842         * statement.cs: fixed build-breaker. All tests passed ok.
20843
20844 2002-06-27  Martin Baulig  <martin@gnome.org>
20845
20846         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
20847         for System.Decimal when compiling corlib.
20848
20849 2002-06-27  Martin Baulig  <martin@gnome.org>
20850
20851         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
20852         switch blocks which contain nothing but a default clause.
20853
20854 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
20855
20856        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
20857
20858 2002-06-27  Martin Baulig  <martin@gnome.org>
20859
20860         * ecore.cs (PropertyExpr.PropertyExpr): Call
20861         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
20862
20863         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
20864         is already a TypeBuilder.
20865
20866 2002-06-27  Martin Baulig  <martin@gnome.org>
20867
20868         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
20869         `target_type == TypeManager.array_type', not IsAssignableFrom() in
20870         the "from an array-type to System.Array" case.  This makes it work
20871         when compiling corlib.
20872
20873 2002-06-27  Martin Baulig  <martin@gnome.org>
20874
20875         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
20876         non-static PropertyExpr, set its InstanceExpression.  This makes
20877         the `ICollection.Count' property work in System/Array.cs.
20878
20879 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
20880
20881         * driver.cs: Made error handling more consistent.  Errors now
20882         tracked by Report class, so many methods which used to return int
20883         now return void.  Main() now prints success/failure and 
20884         errors/warnings message.
20885
20886         Renamed '--probe' compiler argument to '--expect-error'.  Removed
20887         the magic number return values (123 and 124).  Now, if the
20888         expected error occurs, the compiler exits with success (exit value
20889         0).  If the compilation completes without seeing that particular
20890         error, the compiler exits with failure (exit value 1).  The
20891         makefile in mcs/errors has been changed to handle the new behaviour.
20892
20893         * report.cs: Made 'expected error' number a property and renamed
20894         it from 'Probe' to 'ExpectedError'.
20895
20896         * genericparser.cs: Removed error handling support, since it is
20897         now all done by Report class.
20898
20899         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
20900         class, so parse() no longer returns an int.
20901
20902         * namespace.cs: Use Report.Error instead of GenericParser.error
20903
20904 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
20905
20906         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
20907         TypeContainer.AddOperator): At the front of the list put the
20908         explicit implementations, so they get resolved/defined first. 
20909
20910 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
20911
20912         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
20913         interface type is implemented by this TypeContainer.  Used during
20914         explicit interface implementation.
20915
20916         (Property.Define, Indexer.Define, Method.Define): Validate that
20917         the given interface in the explicit implementation is one of the
20918         base classes for the containing type.
20919
20920         Also if we are explicitly implementing an interface, but there is
20921         no match in the pending implementation table, report an error.
20922
20923         (Property.Define): Only define the property if we are
20924         not explicitly implementing a property from an interface.  Use the
20925         correct name also for those properties (the same CSC uses,
20926         although that is really not needed).
20927
20928         (Property.Emit): Do not emit attributes for explicitly implemented
20929         properties, as there is no TypeBuilder.
20930
20931         (Indexer.Emit): ditto.
20932
20933         Hiding then means that we do not really *implement* a pending
20934         implementation, which makes code fail.
20935
20936 2002-06-22  Martin Baulig  <martin@gnome.org>
20937
20938         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
20939         the return value of Object.GetType().  [FIXME: we need to do this whenever
20940         we get a type back from the reflection library].
20941
20942 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
20943
20944         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
20945
20946 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
20947
20948         * attribute.cs: Return null if we can not look up the type.
20949
20950         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
20951         the interface types found.
20952
20953         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
20954         interface types found.
20955
20956         * typemanager.cs (GetInterfaces): Make this routine returns alll
20957         the interfaces and work around the lame differences between
20958         System.Type and System.Reflection.Emit.TypeBuilder in the results
20959         result for GetInterfaces.
20960
20961         (ExpandInterfaces): Given an array of interface types, expand and
20962         eliminate repeated ocurrences of an interface.  This expands in
20963         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
20964         be IA, IB, IC.
20965
20966 2002-06-21  Martin Baulig  <martin@gnome.org>
20967
20968         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
20969         on System.Enum.
20970
20971 2002-06-21  Martin Baulig  <martin@gnome.org>
20972
20973         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
20974         and called with one of the core types, return the corresponding typebuilder for
20975         that type.
20976
20977         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
20978         element type.
20979
20980 2002-06-21  Martin Baulig  <martin@gnome.org>
20981
20982         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
20983         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
20984         (Expression.ConvertReferenceExplicit): Likewise.
20985
20986         * expression.cs (ElementAccess.DoResolve): Likewise.
20987         (ElementAccess.DoResolveLValue): Likewise.
20988
20989 2002-06-10  Martin Baulig  <martin@gnome.org>
20990
20991         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
20992         add the "value" parameter to the parameter list.
20993
20994         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
20995         to our caller.
20996
20997 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
20998
20999         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
21000         the argument to an int, uint, long or ulong, per the spec.  Also
21001         catch negative constants in array creation.
21002
21003 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
21004
21005         * class.cs: do not allow the same interface to appear twice in
21006         the definition list.
21007
21008 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
21009
21010         * ecore.cs: don't use ldlen with System.Array.
21011
21012 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
21013
21014         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
21015
21016 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
21017
21018         * modifiers.cs: produce correct field attributes for protected
21019         internal. Easy fix so miguel can work on ther harder stuff:-)
21020
21021 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
21022
21023         * pending.cs: New file.  Move the code from class.cs here.
21024         Support clearning the pending flag for all methods (when not doing
21025         explicit interface implementation).
21026
21027 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
21028
21029         * rootcontext.cs: added a couple more types needed to bootstrap.
21030
21031 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
21032
21033         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
21034         constructor in the type, instead of any constructor in the type
21035         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
21036         a bug in the Mono runtime when applying the params attribute). 
21037
21038 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
21039         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
21040
21041 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
21042
21043         * expression.cs (Unary.ResolveOperator): Use TypeManager
21044         to resolve the type.
21045
21046 2002-06-13  Ravi Pratap  <ravi@ximian.com>
21047
21048         * cs-parser.jay (enum_member_declaration): Pass in the attributes
21049         attached.
21050
21051         * enum.cs (AddEnumMember): Add support to store the attributes associated 
21052         with each member too.
21053
21054         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
21055         field builders too - this takes care of the enum member case.
21056
21057 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
21058
21059         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
21060         address-of operator on both value types and pointers.
21061
21062 2002-06-10  Martin Baulig  <martin@gnome.org>
21063
21064         * interface.cs (Interface.PopulateIndexer): Add the indexer's
21065         PropertyBuilder to the `property_builders' list.
21066
21067         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
21068         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
21069         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
21070         find any indexers which are inherited from an interface.
21071
21072 2002-06-09  Martin Baulig  <martin@gnome.org>
21073
21074         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
21075         the same type as the constant if necessary.  There's also a test-130.cs
21076         for this.
21077
21078         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
21079
21080         * typemanager.cs (TypeManager.ChangeType): Previously known as
21081         Enum.ChangeEnumType().
21082
21083 2002-06-09  Martin Baulig  <martin@gnome.org>
21084
21085         * expression.cs (Cast.TryReduce): Added support for consts.
21086
21087 2002-06-08  Ravi Pratap  <ravi@ximian.com>
21088
21089         * class.cs (Accessor): Hold attributes information so we can pass
21090         it along.
21091
21092         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
21093         Modify to pass in attributes attached to the methods.
21094
21095         (add_accessor_declaration, remove_accessor_declaration): Ditto.
21096
21097         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
21098         to handle the Accessor kind :-)
21099
21100         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
21101
21102 2002-06-08  Martin Baulig  <martin@gnome.org>
21103
21104         * expression.cs (Unary.TryReduceNegative): Added support for
21105         ULongConstants.
21106
21107 2002-06-08  Martin Baulig  <martin@gnome.org>
21108
21109         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
21110         name can't be found in the `defined_names' - the caller will do a
21111         MemberLookup in this case and thus find methods in System.Enum
21112         such as Enum.IsDefined().
21113
21114 2002-06-08  Martin Baulig  <martin@gnome.org>
21115
21116         * enum.cs (Enum.ChangeEnumType): This is a custom version of
21117         Convert.ChangeType() which works with TypeBuilder created types.
21118         (Enum.LookupEnumValue, Enum.Define): Use it here.
21119
21120         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
21121         `TypeBuilder.BaseType != null' check.
21122         (TypeContainer.FindMembers): Only lookup parent members if we
21123         actually have a parent.
21124         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
21125         (ConstructorInitializer.Resolve): Likewise.
21126
21127         * interface.cs (Interface.FindMembers): Added
21128         `TypeBuilder.BaseType != null' check.
21129
21130         * rootcontext.cs (RootContext.ResolveCore): Added
21131         "System.Runtime.CompilerServices.IndexerNameAttribute" to
21132         classes_second_stage.
21133
21134         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
21135         debug_type and trace_type when compiling with --nostdlib.       
21136
21137 2002-06-07  Martin Baulig  <martin@gnome.org>
21138
21139         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
21140         (AddField): Set it to true when adding a non-static field.
21141         (DefineType): Use `have_nonstatic_fields' to find out whether we
21142         have non-static fields, not `Fields != null'.
21143
21144 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
21145
21146         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
21147         dereferencing a null on the static-field code path)
21148
21149 2002-05-30  Martin Baulig  <martin@gnome.org>
21150
21151         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
21152         to take command line arguments.  Use reflection to call the new
21153         custom `Initialize' function on the symbol writer and pass it the
21154         command line arguments.
21155
21156         * driver.cs (--debug-args): New command line argument to pass command
21157         line arguments to the symbol writer.
21158
21159 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
21160
21161         * assign.cs (DoResolve): Forgot to do the implicit conversion to
21162         the target type for indexers and properties.  Thanks to Joe for
21163         catching this.
21164
21165 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
21166
21167         * typemanager.cs (MethodFlags): returns the method flags
21168         (Obsolete/ShouldIgnore) that control warning emission and whether
21169         the invocation should be made, or ignored. 
21170
21171         * expression.cs (Invocation.Emit): Remove previous hack, we should
21172         not do this on matching a base type, we should do this based on an attribute
21173
21174         Only emit calls to System.Diagnostics.Debug and
21175         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
21176         on the command line.
21177
21178         * rootcontext.cs: Global settings for tracing and debugging.
21179
21180         * cs-tokenizer.cs (define): New utility function to track
21181         defines.   Set the global settings for TRACE and DEBUG if found.
21182
21183 2002-05-25  Ravi Pratap  <ravi@ximian.com>
21184
21185         * interface.cs (Populate*): Pass in the TypeContainer as well as
21186         the DeclSpace as parameters so that we can create EmitContexts and
21187         then use that to apply attributes etc.
21188
21189         (PopulateMethod, PopulateEvent, PopulateProperty)
21190         (PopulateIndexer): Apply attributes everywhere.
21191
21192         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
21193         etc.
21194
21195         (ApplyAttributes): Update accordingly.
21196
21197         We now apply interface attributes for all members too.
21198
21199 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
21200
21201         * class.cs (Indexer.Define); Correctly check if we are explicit
21202         implementation (instead of checking the Name for a ".", we
21203         directly look up if the InterfaceType was specified).
21204
21205         Delay the creation of the PropertyBuilder.
21206
21207         Only create the PropertyBuilder if we are not an explicit
21208         interface implementation.   This means that explicit interface
21209         implementation members do not participate in regular function
21210         lookups, and hence fixes another major ambiguity problem in
21211         overload resolution (that was the visible effect).
21212
21213         (DefineMethod): Return whether we are doing an interface
21214         implementation. 
21215
21216         * typemanager.cs: Temporary hack until we get attributes in
21217         interfaces (Ravi is working on that) and we get IndexerName
21218         support in interfaces.
21219
21220         * interface.cs: Register the indexers as properties.
21221
21222         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
21223         warning, I have verified that this is a bug in the .NET runtime
21224         (JavaScript suffers of the same problem).
21225
21226         * typemanager.cs (MemberLookup): When looking up members for
21227         interfaces, the parent of an interface is the implicit
21228         System.Object (so we succeed in searches of Object methods in an
21229         interface method invocation.  Example:  IEnumerable x;  x.ToString
21230         ()) 
21231
21232 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
21233
21234         * class.cs (Event): Events should also register if they do
21235         implement the methods that an interface requires.
21236
21237         * typemanager.cs (MemberLookup); use the new GetInterfaces
21238         method. 
21239
21240         (GetInterfaces): The code used to lookup interfaces for a type is
21241         used in more than one place, factor it here. 
21242
21243         * driver.cs: Track the errors at the bottom of the file, we kept
21244         on going.
21245
21246         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
21247         instance if the method we are calling is static!
21248
21249 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
21250
21251         * attribute.cs (ApplyAttributes): Make this function filter out
21252         the IndexerName attribute (as that attribute in reality is never
21253         applied) and return the string constant for the IndexerName
21254         attribute. 
21255
21256         * class.cs (TypeContainer.Emit): Validate that all the indexers
21257         have the same IndexerName attribute, and if so, set the
21258         DefaultName attribute on the class. 
21259
21260         * typemanager.cs: The return value might contain other stuff (not
21261         only methods).  For instance, consider a method with an "Item"
21262         property and an Item method.
21263
21264         * class.cs: If there is a problem with the parameter types,
21265         return. 
21266
21267 2002-05-24  Ravi Pratap  <ravi@ximian.com>
21268
21269         * ecore.cs (ImplicitConversionExists): Wrapper function which also
21270         looks at user defined conversion after making a call to 
21271         StandardConversionExists - we need this for overload resolution.
21272
21273         * expression.cs : Update accordingly the various method calls.
21274
21275         This fixes 2 bugs filed against implicit user defined conversions 
21276
21277 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
21278
21279         * statement.cs: Track the result of the assignment.
21280
21281 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
21282
21283         * expression.cs (MemberAccess): Improved error reporting for
21284         inaccessible members.
21285
21286 2002-05-22  Martin Baulig  <martin@gnome.org>
21287
21288         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
21289         itself with debugging support.
21290
21291 2002-05-22  Martin Baulig  <martin@gnome.org>
21292
21293         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
21294         Removed, this isn't needed anymore.
21295
21296 2002-05-20  Martin Baulig  <martin@gnome.org>
21297
21298         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
21299         be underlying type for an enum.
21300
21301 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
21302
21303         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
21304         that splits out the loading of just the core types.
21305
21306         * rootcontext.cs (ResolveCore): Split the struct resolution in
21307         two, so we can load the enumeration underlying types before any
21308         enums are used.
21309
21310         * expression.cs (Is): Bandaid until we fix properly Switch (see
21311         bug #24985 for details).
21312
21313         * typemanager.cs (ImplementsInterface): The hashtable will contain
21314         a null if there are no interfaces implemented.
21315
21316 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
21317
21318         * cs-parser.jay (indexer_declarator): It is fine to have array
21319         parameters
21320
21321 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21322
21323         * typemanager.cs: (RegisterBuilder): New function used to register
21324         TypeBuilders that implement interfaces.  Since
21325         TypeBuilder.GetInterfaces (as usual) does not work with lame
21326         Reflection.Emit. 
21327         (AddUserType): register interfaces.
21328
21329         (ImplementsInterface): Use the builder_to_ifaces hash if we are
21330         dealing with TypeBuilder.  Also, arrays are showing up as
21331         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
21332         methods can not be invoked on them!
21333
21334         * ecore.cs (ExplicitReferenceConversionExists): Made public.
21335         (ImplicitReferenceConversionExists): Split out from
21336         StandardConversionExists. 
21337
21338         * expression.cs (As): We were only implementing one of the three
21339         cases for the as operator.  We now implement them all.
21340         (Is): Implement the various other cases for Is as well.
21341
21342         * typemanager.cs (CACHE): New define used to control if we want or
21343         not the FindMembers cache.  Seems to have a negative impact on
21344         performance currently
21345
21346         (MemberLookup): Nested types have full acess to
21347         enclosing type members
21348
21349         Remove code that coped with instance/static returns for events, we
21350         now catch this in RealFindMembers.
21351
21352         (RealFindMembers): only perform static lookup if the instance
21353         lookup did not return a type or an event.  
21354
21355 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21356
21357         * assign.cs (CompoundAssign): We pass more semantic information
21358         now to Compound Assignments than we did before: now we have all
21359         the information at hand, and now we resolve the target *before* we
21360         do the expression expansion, which allows the "CacheValue" method
21361         to have the effect we intended (before, a [x] += 1 would generate
21362         two differen ArrayAccess expressions from the ElementAccess,
21363         during the resolution process).
21364
21365         (CompoundAssign.DoResolve): Resolve target and original_source here.
21366
21367 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
21368
21369         * expression.cs (ArrayAccess): dropped debugging information. 
21370
21371         * typemanager.cs: Small bug fix: I was always returning i_members,
21372         instead of one of i_members or s_members (depending on which had
21373         the content).
21374
21375         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
21376         method is invoked before any code generation takes place, and it
21377         is a mechanism to inform that the expression will be invoked more
21378         than once, and that the method should use temporary values to
21379         avoid having side effects
21380
21381         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
21382
21383         * ecore.cs (Expression.CacheTemporaries): Provide empty default
21384         implementation.
21385
21386         * expression.cs (Indirection, ArrayAccess): Add support for
21387         CacheTemporaries in these two bad boys. 
21388
21389         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
21390         ldobj or ldind_ref.  
21391         (StoreFromPtr): Handle stobj as well.
21392
21393         * expression.cs (UnaryMutator): Share more code.
21394
21395         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
21396         down: I was not tracking the Filter function as well, which
21397         was affecting the results of the cache.
21398
21399 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
21400
21401         * attribute.cs: Remove the hack to handle the CharSet property on
21402         StructLayouts. 
21403
21404 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
21405
21406         * attribute.cs (DoResolve): More uglyness, we now only try to
21407         resolve the attribute partially, to extract the CharSet
21408         information (only if we are a StructLayout attribute).  Otherwise 
21409
21410         (GetExtraTypeInfo): Add some code to conditionally kill in the
21411         future this.   I am more and more convinced that the .NET
21412         framework has special code to handle the attribute setting on
21413         certain elements.
21414
21415         * expression.cs (IsParamsMethodApplicable): Revert my previous
21416         foreach change here, it was wrong.
21417
21418 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
21419
21420         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
21421         (pp_expr): do not abort on unknown input, just return.
21422         (eval): abort if there are pending chars.
21423
21424         * attribute.cs (Attribute.Resolve): Positional parameters are
21425         optional.  Deal with that case.
21426
21427         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
21428         the Ansi/Unicode/Auto information for the type.
21429
21430         (TypeContainer.DefineType): instantiate the EmitContext here, as
21431         we will be using it during the type definition (to resolve
21432         attributes) and during the emit phase.
21433
21434         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
21435         to pull type information out of the attributes
21436
21437         (Attribute.Resolve): track the constructor builder, and allow for
21438         multiple invocations (structs and classes will use this).
21439
21440         * ecore.cs (MemberLookupFinal): new version with all the
21441         parameters customizable.
21442
21443         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
21444         constructors.  Return if the result value is null (as the error
21445         would have been flagged already by MemberLookupFinal)
21446
21447         Do not allow instances of abstract classes or interfaces to be
21448         created.
21449
21450         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
21451         We have to compare the assembly property here when dealing with
21452         FamANDAssem and Assembly access modifiers, because we might be
21453         creating an assembly from *modules* (that means that we are not
21454         getting TypeBuilders for types defined in other modules that are
21455         part of this assembly).
21456
21457         (Method.Emit): If the method is marked abstract and has a body,
21458         emit an error. 
21459
21460         (TypeContainer.DefineMembers): If both the defined member and the
21461         parent name match are methods, then do not emit any warnings: let
21462         the Method.Define routine take care of flagging warnings.  But if
21463         there is a mismatch (method overrides something else, or method is
21464         overriwritten by something, then emit warning).
21465
21466         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
21467         set to null, this means `do not check for the return type on the
21468         signature'. 
21469
21470         (Method.Define): set the return type for the method signature to
21471         null, so that we get methods with the same name and parameters and
21472         different return types.  This is used to flag warning 114 (you are
21473         hiding a method, and you probably want to use the new/override
21474         keywords instead).
21475
21476         * typemanager.cs (MemberLookup): Implemented proper access
21477         control, closing a long standing set of bug reports.  The problem
21478         was that the Framework only has two bits: Public and NonPublic,
21479         and NonPublic includes private and protected methods, but we need
21480         to enforce the FamANDAssem, FamOrAssem and Family. 
21481
21482 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
21483
21484         * statement.cs (GotoCase): Return true: Ammounts to giving up
21485         knowledge on whether we return or not, and letting the other case
21486         be responsible for it.
21487
21488 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
21489
21490         * driver.cs: Do not load directories for each file processed, only
21491         do it if there is a pattern.
21492
21493         * ecore.cs: Report readonly assigns here as well, as we might have
21494         been resolved only by MemberAccess.
21495
21496         (SimpleName.SimpleNameResolve): Also be useful for LValue
21497         resolution.   We need this to propagate assign to local readonly variables
21498
21499         * typemanager.cs: Use a ptrhashtable for the criteria, because we
21500         do not want to reuse potential criteria memory.
21501
21502         * class.cs (MyEventBuilder): Set reflected_type;
21503
21504         * ecore.cs (Constantify): Added support for constifying bools.
21505
21506         (RootContext.LookupType): Added a cache for values looked up in
21507         the declaration space.
21508
21509         * typemanager.cs (FindMembers): Now is a front-end to
21510         RealFindMembers, and provides a two-level hashtable-based cache to
21511         the request.  
21512
21513         15% performance improvement: from 22.5 to 19.2 seconds.
21514
21515         * expression.cs (IsParamsMethodApplicable): use foreach.
21516         (Invocation.DoResolve): ditto.
21517         (New.DoResolve): ditto.
21518         (ArrayCreation.DoResolve): ditto.
21519
21520         * ecore.cs (FindMostEncompassingType): use foreach.
21521
21522         * delegate.cs (NewDelegate.DoResolve): Use foreach
21523
21524         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
21525         (RemoveMethods): use foreach.
21526
21527         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
21528         nested foreach statements instead of for, and also break out of
21529         the inner loop once a match is found.
21530
21531         (Invocation.OverloadResolve): Use foreach, simplify the code. 
21532
21533 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
21534
21535         * cfold.cs (BinaryFold): During an enumeration evaluation context,
21536         we actually unwrap the expression to allow for extra information
21537         to be extracted. 
21538
21539         * expression.cs: Use Shr_Un on unsigned operations. 
21540
21541 2002-05-08  Ravi Pratap  <ravi@ximian.com>
21542
21543         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
21544         applicable operators was not being considered correctly. This closes
21545         the bug Miguel reported.
21546
21547 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
21548
21549         * attribute.cs: check that the type derives from System.Attribute
21550         and report the correct error in that case (moved the duplicate code to
21551         its own method, too).
21552
21553 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
21554
21555         * attribute.cs: lookup attribute type name as the spec says: first the
21556         bare attribute name and then name + "Attribute" (nant compiles with
21557         mcs after this fix).
21558
21559 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
21560
21561         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
21562         Because of the way we parse things, we should try to see if a
21563         UIntConstant can fit in an integer.
21564
21565 2002-05-07  Ravi Pratap  <ravi@ximian.com>
21566
21567         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
21568         when we are in an explicit context.
21569
21570         (ConvertReferenceExplicit): When converting from Iface type S to Class
21571         T make sure the rules are implemented as an OR.
21572
21573         * parameter.cs (ParameterType): Make it a property for now although the
21574         purpose really isn't anything immediate.
21575
21576         * expression.cs (Is*Applicable): Do better checking on the parameter type
21577         of a ref/out parameter. The ones from the system assemblies are already 
21578         marked with the correct type so we don't need to do any correction.
21579
21580         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
21581         the object type is standard too so include that.
21582
21583 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21584
21585         * ecore.cs (StandardConversionExists): Augment with missing code:
21586         deal with IntConstant, LongConstants and Enumerations.
21587
21588         * assign.cs: Report the error, instead of failing silently
21589
21590         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
21591         typecontainer that they are declared, because the
21592         typecontainer/namespace will have the list of using clauses that
21593         need to be applied.
21594
21595         Assembly Attributes were escaping the normal registration
21596         mechanism. 
21597
21598         (EmitCode): Apply attributes within an EmitContext that represents
21599         the container they were declared on.
21600
21601         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
21602
21603 2002-05-06  Ravi Pratap  <ravi@ximian.com>
21604
21605         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
21606         Revamp completely - make much cleaner as we now operate only
21607         on a set of Types.
21608
21609         (FindMostSpecificSource, FindMostSpecificTarget): New methods
21610         to implement the logic detailed in the spec more correctly.
21611
21612         (UserDefinedConversion): Update accordingly.
21613
21614 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21615
21616         * statement.cs: Return flow analysis information up.
21617
21618         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
21619         and the default.
21620
21621         (token): Do not consume an extra character before calling
21622         decimal_digits.
21623
21624 2002-05-06  Piers Haken <piersh@friskit.com>
21625
21626         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
21627
21628 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21629
21630         * class.cs (Constructor.Emit): Set the IsStatic flag in the
21631         EmitContext during the instance constructor initializer
21632         resolution, to stop access to instance variables.
21633
21634         This is mandated by the spec, last paragraph of the `constructor
21635         initializers' section. 
21636
21637 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
21638
21639         * cs-parser.jay, class.cs (Accessor): new class used to represent
21640         an accessor (get or set).  In the past we used `null' to represent
21641         a missing accessor.  But this is ambiguous because there was no
21642         way to tell in abstract indexers/properties if one of them was
21643         specified.
21644
21645         Now there is a way of addressing that.
21646
21647         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
21648         instead of FindMembers.
21649
21650         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
21651         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
21652
21653         * attribute.cs: Treat indexers and properties as the same in terms
21654         of applying attributes
21655
21656         * ecore.cs (FindMostEncompassedType): Use statically initialized
21657         EmptyExpressions()s like we do elsewhere to avoid creating useless
21658         objects (and we take this out of the tight loop).
21659
21660         (GetConversionOperators): Move the code to extract the actual
21661         operators to a separate routine to clean things up.
21662
21663 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
21664
21665         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
21666         events are always registered FieldBuilders.
21667
21668         * class.cs (FieldBase): New class shared by Fields 
21669
21670         * delegate.cs: If we are a toplevel delegate, use our full name.
21671         If we are a nested delegate, then only use our tail name.
21672
21673 2002-05-02  Ravi Pratap  <ravi@ximian.com>
21674
21675         * expression.cs (IsApplicable): Ensure that we add the "&" to
21676         ref/out types before comparing it with the type of the argument.
21677
21678         (IsParamsMethodApplicable): Ditto.
21679
21680         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
21681         silly me ;-)
21682
21683         * delegate.cs : Handle the case when we have more than one applicable
21684         method. Flag an error only when we finish checking all.
21685
21686 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
21687
21688         * expression.cs: Add support for boolean static initializers.
21689
21690 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
21691
21692         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
21693
21694         * parameter.cs (ComputeParameterTypes,
21695         ComputeAndDefineParameterTypes): Better error handling: now we
21696         clear the `types' cache if we fail during any of the type lookups.
21697         We also return the status code correctly to our caller
21698
21699         * delegate.cs: If we fail to define a delegate, abort the extra
21700         steps. 
21701
21702         * expression.cs (Binary.ResolveOperator): for
21703         operator==(object,object) and operator !=(object, object) we also
21704         have to verify that there is an implicit conversion from one to
21705         the other.
21706
21707         (ArrayAccess.DoResolve): Array Access can operate on
21708         non-variables. 
21709
21710 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
21711
21712         * assign.cs (CompoundAssign): A new class used as a "flag" that
21713         the assignment actually is happening as part of a compound
21714         assignment operator.
21715
21716         During compound assignment, a few new rules exist to enable things
21717         like:
21718
21719         byte b |= 1 + 2
21720
21721         From the spec:
21722
21723         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
21724         to the type of x) if y is implicitly convertible to the type of x,
21725         and the operator is a builtin operator and the return type of the
21726         operator is explicitly convertible to the type of x. 
21727
21728         * rootcontext.cs: Reset warning level to 2.  4 catches various
21729         "interesting" features in mcs, we must clean this up at some
21730         point, but currently am trying to kill other bugs ;-)
21731
21732         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
21733         in container classes as well.  
21734
21735         * expression.cs (Binary.ResolveOperator): Handle string case
21736         before anything else (as operator overloading does emit an error
21737         before doing anything else).
21738
21739         This code could go away when we move to a table driven model, but
21740         i could not come up with a good plan last night.
21741
21742 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
21743
21744         * typemanager.cs (CSharpName): reimplementation using regex.
21745         * class.cs: added null check for fields in Emit
21746         * rootcontext.cs: set warninglevel to 4
21747
21748 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
21749
21750         * typemanager.cs (CSharpName): reimplemented with Lupus
21751         suggestion.
21752
21753 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
21754
21755         * statement.cs (If): correclty implement Resolve, because we were
21756         not catching sem errors in there.  The same process is needed
21757         everywhere else. 
21758         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
21759
21760
21761         (Statement.Warning_DeadCodeFound): Factorize code.
21762         (While): Report dead code here too.
21763
21764         (Statement): Added Resolve virtual method to allow
21765         for resolution split from the emit code.
21766
21767 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21768
21769         * statement.cs (EmitBoolExpression): No longer try to resolve the
21770         expression here.    
21771         (MakeBoolean): New utility function that resolve, implicitly
21772         converts to boolean and tags the expression. 
21773
21774
21775         (If, Do): Implement dead code elimination.
21776         (While): Implement loop inversion
21777
21778         (Do, While, For, If): Resolve the expression prior to calling our
21779         code generation.
21780
21781 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
21782
21783         * class.cs:
21784           - added method Report28 (warning: program has more than one entry point)
21785           - added method IsEntryPoint, implements paragraph 10.1 of the spec
21786           - modified method Method.Define, the part at the end of the method
21787
21788         * rootcontext.cs: added static public Location EntryPointLocation;
21789           
21790         * ../errors/cs0028.cs : Add test case for the above warning.              
21791
21792         * typemanager.cs:
21793           - modified method CSharpName to allow arrays of primitive type to
21794             be printed nicely (e.g. instead of System.Int32[][] it now prints
21795             int[][])
21796           - added method CSharpSignature: returns the signature of a method
21797             in string format to be used in reporting errors, warnings, etc.
21798
21799         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
21800         with String.Empty.
21801
21802 2002-04-26  Ravi Pratap  <ravi@ximian.com>
21803
21804         * delegate.cs (Define): Fix extremely silly bug where I was
21805         setting the type of the 'object' parameter of the BeginInvoke
21806         method to System.IAsyncResult instead of System.Object ;-)
21807
21808 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21809
21810         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
21811         here. 
21812
21813         (Constructor.Emit): return if we fail to initialize the
21814         constructor.  Another door closed!  
21815
21816         * expression.cs (New.DoResolve): Improve error message (from -6 to
21817         1501).  Use DeclaredOnly lookup to find the exact constructor.
21818
21819         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
21820         loop.  This is useful.
21821
21822         * cs-parser.jay: Adjust the default parameters so that destructors
21823         have the proper signature.
21824
21825 2002-04-26  Martin Baulig  <martin@gnome.org>
21826
21827         * driver.cs (LoadAssembly): If `assembly' contains any characters
21828         which are only valid in path names and not in assembly names
21829         (currently slash, backslash and point), use Assembly.LoadFrom ()
21830         instead of Assembly.Load () on the `assembly' (before iteration
21831         over the link_paths).
21832
21833 2002-04-26  Martin Baulig  <martin@gnome.org>
21834
21835         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
21836
21837 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
21838
21839         * class.cs (Property): use the new typemanager.MemberLookup
21840
21841         (TypeContainer.MemberLookup): Implement using the
21842         TypeManager.MemberLookup now. 
21843
21844         * typemanager.cs: Make MemberLookup a function of the TypeManager,
21845         and return MemberInfos, so that these can be used without an
21846         EmitContext (what we had before).
21847
21848 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
21849
21850         * expression.cs: Fix the case where the argument to params if the
21851         type of the params.  I omitted handling this before.   Fixed
21852
21853 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21854
21855         * driver.cs: Call BootCorlib_PopulateCoreType
21856
21857         * class.cs (Property.CheckBase): Check for properties only, not
21858         for all members. 
21859
21860         * interface.cs: Temporary hack: try/catch around the
21861         CustomAttributeBuilder, because I am getting an exception that I
21862         do not understand.
21863
21864         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
21865         types whose definitions are required to be there (attributes are
21866         defined before standard types).
21867
21868         Compute definitions as we boot the various types, as they are used
21869         immediately (value_type class will need object_type, but if we do
21870         not initialize object_type, we will pass a null, which will let
21871         the runtime pick the System.Object from the existing corlib, which
21872         is not what we want).
21873
21874 2002-04-22  Patrik Torstensson <totte@labs2.com>
21875
21876         * cs-tokenizer.cs: fixed a number of trim() issues.
21877
21878 2002-04-22  Ravi Pratap  <ravi@ximian.com>
21879
21880         * expression.cs (Argument.Type): Ensure that we return the correct
21881         type when we have out or ref parameters [in which case we 
21882         append a "&"].
21883
21884 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21885
21886         * class.cs (Property, Indexer): Allow extern modifier in there. 
21887
21888         * typemanager.cs (InitBaseTypes): Initializes object_type and
21889         value_type, since those will be used early on during the bootstrap
21890         process to compile corlib.
21891
21892         (InitCoreTypes): Move code from here to InitBaseTypes.
21893
21894 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
21895
21896         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
21897         single-dimension arrays as using the ldlen opcode.  
21898
21899         Daniel Lewis discovered this optimization.  
21900
21901         * typemanager.cs: Add signature for System.Array::get_Length
21902
21903 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21904
21905         * statement.cs: report the error when the foreach does not apply to an
21906         array nor a collection.
21907
21908 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
21909
21910         * expression.cs: Add implicit conversions to the operator ~.
21911
21912         * constant.cs (DecimalConstant.Emit): Emit decimal value.
21913
21914         * typemanager.cs: Locate the decimal constructor.
21915
21916 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21917
21918         * attribute.cs: use the new property of TypeOf.
21919         * expression.cs: added 'get' property around typearg.
21920
21921         These changes fix a build breaker reported by NickD. Is this the
21922         correct way to fix?  If not, please, revert my changes and make it
21923         work :-).
21924
21925 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
21926
21927         * attribute.cs: Add support for typeof in attribute invocations.
21928         I am not sure that this is right though.
21929
21930 2002-04-14  Duncan Mak  <duncan@ximian.com>
21931
21932         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
21933         Binary.Operator.Division case.
21934
21935 2002-04-13  Ravi Pratap  <ravi@ximian.com>
21936
21937         * class.cs (DefineType): Ensure that we do a proper check on
21938         attribute types and also register it with the TypeManager.
21939
21940         (TypeContainer.Targets): The default for attribute types is
21941         AttributeTargets.All.
21942
21943         * attribute.cs (ApplyAttributes): Registering the attribute type
21944         is done elsewhere, not when we discover we have a Usage attribute.
21945
21946 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21947
21948         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
21949         and get rid of is_delegate parameter.
21950
21951         * everywhere : update.
21952
21953 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21954
21955         * cs-parser.jay (compilation_unit): Revamp completely to use
21956         some new ideas that I got from Rhys' grammar to solve the problems
21957         with assembly level attributes.
21958
21959         (outer_declaration): New grammar production.
21960
21961         (attribute_sections): Add.
21962
21963         (opt_attributes): Base on attribute_sections
21964
21965         (namespace_declaration): Allow opt_attributes to tackle the case
21966         when we have assembly level attributes - we are clever in this
21967         regard now ;-)
21968
21969         * attribute.cs (ApplyAttributes): Do not worry about assembly 
21970         attributes in the non-global context.
21971
21972         * rootcontext.cs (AddGlobalAttributes): Go back to using this
21973         instead of SetGlobalAttributes.
21974
21975         * class.cs, rootcontext.cs : Ensure we define and generate 
21976         attribute types before anything else.
21977
21978         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
21979         and flag the new error -20 for the case when the attribute type
21980         does not have valid targets specified. csc does not catch this.
21981
21982         * ../errors/errors.txt : update for error # -20
21983
21984 2002-04-11  Ravi Pratap  <ravi@ximian.com>
21985
21986         * support.cs (InternalParameters.ParameterModifier): Do some null
21987         checking and return sane values.
21988
21989         * class.cs (Method.Define): If we are a PInvoke method, ensure
21990         that we are static and extern. Report error # 601
21991
21992         * ../errors/cs0601.cs : Add test case for the above error.
21993
21994 2002-04-07  Ravi Pratap  <ravi@ximian.com>
21995
21996         * rootcontext.cs (attribute_types): We need to keep type of
21997         all attribute types separately and emit code for them first.
21998
21999         (RegisterAttribute) : Implement.
22000
22001         * class.cs (DefineType): Check if the current Type is a custom
22002         attribute type and register it accordingly.
22003
22004         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
22005         adding the first attribute twice and rename to
22006
22007         (SetGlobalAttributes): this.
22008
22009         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
22010         lookups.
22011
22012         * attribute.cs (ApplyAttributes): Take an additional argument telling us
22013         if we are processing global arguments. Hmm, I am unsure of this.
22014
22015 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22016
22017         * expression.cs: added static array of strings to avoid calling
22018         Enum.ToString () for Operator in Binary. Significant recover of
22019         performance.
22020
22021 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
22022
22023         * class.cs (FindMembers): Allow the Builders of the various
22024         members to be null.  If they are skip them.  This only happens
22025         during the PInvoke declaration.
22026
22027 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
22028
22029         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
22030         failure, so we do not keep going afterwards.
22031
22032         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
22033         wanted to pass `false' as the `is_delegate' argument.  If this is
22034         the case, why not use delegate_type == null to mean `is_delegate =
22035         false' and anything else as is_delegate = true.
22036
22037 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
22038
22039         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
22040         code for the section, not the beginning of the tests.
22041
22042 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
22043
22044         * cfold.cs: Handle operator + (Enum x, Underlying x) 
22045
22046         * expression.cs (Binary): same.  Warn about errors where we have
22047         Enum/Enum in operator + as well.
22048
22049 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
22050
22051         * statement.cs:
22052                 - added support for switch(bool)
22053                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
22054                 - add TableSwitchEmit() to handle table-based switch statements
22055
22056 2002-04-05  Ravi Pratap  <ravi@ximian.com>
22057
22058         * expression.cs (Invocation.OverloadResolve): Factor out code which
22059         does parameter compatibility checking with arguments so that we can 
22060         re-use the code even from Delegate.VerifyApplicability
22061
22062         (VerifyArgumentsCompat): Move above code here.
22063
22064         * delegate.cs (VerifyApplicability): Get rid of duplicate code
22065         and instead make a call to the above method.
22066
22067 2002-03-31  Ravi Pratap  <ravi@ximian.com>
22068
22069         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
22070         We use it to keep track of classes which are attribute types.
22071
22072 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
22073
22074         * delegate.cs (Delegate.Define): Correctly define the types in the
22075         presence of fixed and array parameters.
22076
22077         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
22078         doing FindMembers.
22079
22080         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
22081         include NonPublic after the first iteration.
22082
22083         * class.cs (Indexer.CheckBase): Only check if both parents are
22084         non-null. 
22085
22086         * cs-parser.jay (accessor_body): If empty, set to null.
22087
22088         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
22089         same code path here to resolve constants names that we did have in
22090         MemberAccess.DoResolve.  There is too much code duplicated here.
22091
22092 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
22093
22094         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
22095
22096         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
22097         to MakeUnionSet.
22098
22099         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
22100         tokens, numbers and strings.
22101
22102         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
22103         parenthesis.
22104
22105         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
22106         asyncronous parameters and the regular parameters.  
22107
22108         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
22109         specify the target directory.
22110
22111         * expression.cs: (This.DoResolve): Simplify
22112         (As.Emit): Optimize, do not generate IsInst if the expression is
22113         always of the given type.
22114
22115         (Is.DoResolve): Bug fix, we were reporting both always/never for
22116         the is expression.
22117
22118         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
22119         creating too many unnecessary arrays.
22120
22121 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
22122
22123         * class.cs (EmitFieldInitializer): Use Assign expression to assign
22124         fields instead of rolling our own initializer.   Takes care of all
22125         implicit conversions, and drops unnecessary static checks/argument.
22126
22127 2002-03-31  Dick Porter  <dick@ximian.com>
22128
22129         * driver.cs: use the GetDirectories() return values properly, and
22130         use "/" as path separator.
22131
22132 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
22133
22134         * expression.cs (Unary): Optimize - - expr into expr.
22135         (Binary): Optimize a + (-b) into a -b.
22136
22137         * codegen.cs (CodeGen): Made all methods static.
22138
22139 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
22140
22141         * rootcontext.cs: 
22142
22143         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
22144         TypeBuilder property.
22145
22146         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
22147         instead. 
22148
22149         * tree.cs: Removed the various RecordXXXX, and replaced with a
22150         single RecordDecl.  Removed all the accessor methods, and just
22151         left a single access point Type 
22152
22153         * enum.cs: Rename DefineEnum to DefineType.
22154
22155         * decl.cs: New abstract method `DefineType' used to unify the
22156         Defines for Enumerations, Interfaces, TypeContainers and
22157         Delegates.
22158
22159         (FindType): Moved LookupInterfaceOrClass here.  Moved the
22160         LookupBaseClasses method that used to live in class.cs and
22161         interface.cs here, and renamed to FindType.
22162
22163         * delegate.cs: Implement DefineType.  Take advantage of the
22164         refactored pattern for locating the parent builder without taking
22165         the parent_builder argument (which we know does not work if we are
22166         nested, and triggering a toplevel definition).
22167
22168 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22169
22170         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
22171         accessibility of a member has changed during override and report
22172         an error if so.
22173
22174         * class.cs (Method.Define, Property.Define): Only complain on
22175         overrides if the method is private, any other accessibility is
22176         fine (and since we just checked the permission is the same, we are
22177         good to go).
22178
22179         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
22180         and elif are processed always.  The other pre-processing
22181         directives are only processed if we are "taking" the path
22182
22183 2002-03-29  Martin Baulig  <martin@gnome.org>
22184
22185         * class.cs (Method.Emit): Only emit symbolic debugging info if the
22186         current location is not Null.
22187
22188         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
22189         a separate method so we can profile it.
22190
22191         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
22192         `span.Seconds' are just seconds, but no minutes or hours.
22193         (MainDriver): Profile the CodeGen.SaveSymbols calls.
22194
22195 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22196
22197         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
22198         Remove the gratuitous set of Final:
22199
22200                                 // If an interface implementation, then we can set Final.
22201                                 if (((flags & MethodAttributes.Abstract) == 0) &&
22202                                     implementing.DeclaringType.IsInterface)
22203                                         flags |= MethodAttributes.Final;
22204
22205         I do not know what I was smoking when I used that.
22206
22207
22208         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
22209         step into fixing the name resolution issues for delegates and
22210         unifying the toplevel name resolution.
22211
22212 2002-03-28  Martin Baulig  <martin@gnome.org>
22213
22214         * class.cs (Method.Emit): If we have a symbol writer, call its
22215         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
22216         tell it about the current method.
22217
22218         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
22219         writer that we're going to emit the first byte of IL code for a new
22220         statement (a new source line).
22221         (EmitContext.EmitTopBlock): If we have a symbol writer, call
22222         EmitContext.Mark() before emitting any code.
22223
22224         * location.cs (SymbolDocument): Return null when we're Null.
22225
22226         * statement.cs (Statement): Moved the `Location loc' variable here.
22227         (Statement.EmitBoolExpression): If we have a symbol writer, call
22228         ec.Mark() before emitting any code to tell it that we're at the
22229         beginning of a new statement.
22230         (StatementExpression): Added `Location' argument to the constructor.
22231         (Block): Added public readonly variable `StartLocation' and public
22232         variable `EndLocation'.  The latter is to be set using SetEndLocation().
22233         (Block): Added constructor which takes a start and end location.
22234         (Block.SetEndLocation): New method. This sets the end location.
22235         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
22236         local variables we create.
22237         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
22238         each statement and do also mark the begin and end of the block.
22239
22240         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
22241         tell it the current lexer.Location, use Location.Null for the end of the
22242         block.
22243         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
22244         current block, set its end location using SetEndLocation().
22245         (statement_expression): StatementExpression constructor now takes the
22246         lexer.Location as additional argument.
22247         (for_statement, declare_local_variables): Likewise.
22248         (declare_local_variables): When creating a new implicit block, use the
22249         new Block constructor and pass it the lexer.Location.
22250
22251 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22252
22253         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
22254         members also on the parent interfaces recursively.
22255
22256 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
22257
22258         * report.cs: Use new formats, since Gonzalo finished the missing
22259         bits. 
22260
22261         * expression.cs (Binary.ResolveOperator): added missing operator|
22262         operator& and operator^ for bool/bool.
22263
22264         * cs-parser.jay: CheckDef now takes a Location argument that is
22265         used to report errors more precisly (instead of reporting the end
22266         of a definition, we try to track something which is a lot closer
22267         to the source of the problem).
22268
22269         * cs-tokenizer.cs: Track global token use, so we can properly flag
22270         the use of #define/#undef after the first token has been seen.
22271
22272         Also, rename the reportXXXX to Error_DescriptiveName
22273
22274         * decl.cs (DeclSpace.IsTopLevel): Move property here from
22275         TypeContainer, so that Enum and Interface can use this too.
22276
22277         * class.cs (TypeContainer.LookupInterfaceOrClass,
22278         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
22279         `builder' argument.  Typically this was used to pass the parent
22280         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
22281         the definition).  
22282
22283         The problem is that a nested class could trigger the definition of
22284         a toplevel class, and the builder would be obviously wrong in that
22285         case. 
22286
22287         So we drop this argument, and we compute dynamically the
22288         TypeBuilder/ModuleBuilder (the correct information was available
22289         to us anyways from DeclSpace.Parent)
22290
22291         * interface.cs (Interface.DefineInterface): Drop builder
22292         parameter cleanup like class.cs
22293
22294         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
22295         like class.cs
22296
22297         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
22298         values. 
22299
22300         (Try.Emit): Propagate the returns value from the statement.
22301
22302         (Return.Emit): Even if we are leavning 
22303
22304         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
22305
22306         * modifiers.cs: Fix the computation of MethodAttributes flags.
22307
22308 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
22309
22310         * driver.cs: allow compilation of files that start with '/'.
22311         Add a default case when checking the argument of --target.
22312
22313 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
22314
22315         * interface.cs: Implement the same search algorithm for types in
22316         the interface code.
22317
22318         * delegate.cs: Do not allow multiple definition.
22319
22320         * Recovered ChangeLog that got accidentally amputated
22321
22322         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
22323
22324         * rootcontext.cs: Load manually enum to allow core classes to
22325         contain enumerations.
22326
22327         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
22328         Update to new static methods in TypeManager.
22329
22330         * typemanager.cs (GetMethod, GetConstructor): Use our
22331         implementation of FindMembers to find the members, since during
22332         corlib compilation, the types are TypeBuilders and GetMethod and
22333         GetConstructor do not work.
22334
22335         Make all methods in TypeManager static.
22336
22337         (InitCodeHelpers): Split the functionality from
22338         the InitCodeTypes function.
22339
22340         * driver.cs: Call InitCodeHelpers after we have populated the
22341         types. 
22342
22343         * cs-parser.jay (delegate_declaration): we did not used to compute
22344         the delegate name correctly for void delegates.
22345
22346 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
22347
22348         * rootcontext.cs (RootContext): Init the interface_resolve_order
22349         and type_container_resolve_order always.
22350
22351         (ResolveCore, BootstrapCorlib_ResolveClass,
22352         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
22353         compiler when compiling with --nostdlib
22354
22355         * class.cs (TypeContainer.DefineType): Check that our parent is
22356         not null.  This test is most important when we are bootstraping
22357         the core types.
22358
22359         * codegen.cs: Split out the symbol writing code.
22360
22361 2002-03-25  Martin Baulig  <martin@gnome.org>
22362
22363         * driver.cs (-g): Made -g an alias for --debug.
22364
22365 2002-03-24  Martin Baulig  <martin@gnome.org>
22366
22367         * codegen.cs (SymbolWriter): New public variable. Returns the
22368         current symbol writer.
22369         (CodeGen): Added `bool want_debugging_support' argument to the
22370          constructor. If true, tell the ModuleBuild that we want debugging
22371         support and ask it for the ISymbolWriter.
22372         (Save): If we have a symbol writer, call it's Close() method after
22373         saving the assembly.
22374
22375         * driver.c (--debug): New command line argument to create a
22376         debugger information file.
22377
22378         * location.cs (SymbolDocument): New public property. Returns an
22379         ISymbolDocumentWriter object for the current source file or null
22380         if we don't have a symbol writer.
22381
22382 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
22383
22384         * driver.cs (LoadAssembly): Correctly return when all the paths
22385         have been tried and not before.
22386
22387         * statement.cs (Switch.Emit): return the actual coverage for this
22388         statement (returns/not-returns)
22389
22390         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
22391         switch of the statement if we are the last switch section.  That
22392         kills two problems: try/catch problems (we used to emit an empty
22393         nop at the end) and switch statements where all branches would
22394         return. 
22395
22396 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
22397
22398         * driver.cs: Add default assemblies (the equivalent to the
22399         Microsoft CSC.RSP file)
22400
22401         * cs-tokenizer.cs: When updating `cols and setting it to zero,
22402         also update tokens_seen and set it to false.
22403
22404         * driver.cs: Implement --recurse for Mike.
22405
22406         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
22407         correctly splitting out the paths.
22408
22409 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
22410
22411         * interface.cs (Interface.PopulateProperty): Instead of using
22412         `parent' as the declaration space for the set parameters, use
22413         `this' 
22414
22415         * support.cs (InternalParameters): InternalParameters constructor
22416         takes a DeclSpace instead of a TypeContainer.
22417
22418         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
22419         types are being initialized, load the address of it before calling
22420         the function.  
22421
22422         (New): Provide a mechanism to disable the generation of local
22423         value type temporaries when the caller will be providing us with
22424         an address to store it.
22425
22426         (ArrayCreation.EmitDynamicInitializers): Use it.
22427
22428 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
22429
22430         * expression.cs (Invocation.EmitArguments): Only probe for array
22431         property if there is more than one argument.  Sorry about that.
22432
22433         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
22434         empty param arrays.
22435
22436         * class.cs (Method.LabelParameters): Fix incorrect code path that
22437         prevented the `ParamArrayAttribute' from being applied to the
22438         params attribute.
22439
22440 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
22441
22442         * support.cs (ReflectionParameters): Correctly compute whether the
22443         last argument is a params array.  Fixes the problem with
22444         string.Split ('a')
22445
22446         * typemanager.cs: Make the assemblies array always be non-null
22447         (empty, but non-null)
22448
22449         * tree.cs (RecordDecl): New function that abstracts the recording
22450         of names.  This reports error 101, and provides a pointer to the
22451         previous declaration.  Fixes a crash in the compiler.
22452
22453         * cs-parser.jay (constructor_declaration): Update to new grammar,
22454         and provide a constructor_body that can be empty.
22455
22456 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
22457
22458         * driver.cs: Add support for --resources.
22459
22460         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
22461         Make all types for the various array helper methods be integer.
22462
22463         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
22464         CheckState to ConvCast.
22465
22466         (ConvCast): Now it takes a `checked' state argument, to avoid
22467         depending on the emit context for the conversion, and just using
22468         the resolve time setting.
22469
22470         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
22471         instead of Invocation.EmitArguments.  We do not emit the original
22472         arguments, instead we emit those which have been converted to
22473         unsigned int expressions.
22474
22475         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
22476
22477         * codegen.cs: ditto.
22478
22479         * expression.cs (LocalVariableReference): Drop the use of the
22480         Store function that depended on the variable index.
22481
22482         * statement.cs (VariableInfo): Drop the `Idx' property from this
22483         class, as this is not taking into account the indexes for
22484         temporaries tat we generate during the execution, getting the
22485         indexes wrong.
22486
22487         * class.cs: First emit class initializers, then call the parent
22488         constructor. 
22489
22490         * expression.cs (Binary): Fix opcode emision.
22491         (UnaryMutator.EmitCode): Support checked code generation
22492
22493         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
22494         matches for events for both the Static and Instance scans,
22495         pointing to the same element.   Fix that.
22496
22497 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
22498
22499         * rootcontext.cs (ResolveTree): Always set the
22500         interface_resolve_order, because nested interfaces will be calling
22501         into us.
22502
22503         * class.cs (GetInterfaceOrClass): Track the same resolution
22504         process used by TypeManager.LookupType.  This fixes the nested
22505         type lookups in class declarations (separate path from
22506         LookupType). 
22507
22508         (TypeContainer.DefineType): Also define nested interfaces.
22509         (TypeContainer.RegisterOrder): New public function used to
22510         register the order in which child interfaces need to be closed.
22511
22512         Nested interfaces need to be closed after their parents have been
22513         created. 
22514
22515         * interface.cs (InterfaceAttr): Put all the logic for computing
22516         the interface attribute here. 
22517
22518         (DefineInterface): Register our interface order with the
22519         RootContext or with the TypeContainer depending on the case.
22520
22521 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22522
22523         * cs-parser.jay: rework foreach statement to work with the new
22524         changes to the policy on SimpleNames.
22525
22526         * report.cs: support Stacktrace on warnings as well.
22527
22528         * makefile: drop --unsafe and /unsafe from the compile.
22529
22530 2002-03-13  Ravi Pratap  <ravi@ximian.com>
22531
22532         * ecore.cs (StandardConversionExists): Modify to take an Expression
22533         as the first parameter. Ensure we do null -> reference type conversion
22534         checking.
22535
22536         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
22537         temporary Expression objects.
22538
22539 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
22540
22541         * interface.cs: workaround bug in method overloading resolution
22542         (there is already a bugzilla bug for it).
22543
22544 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22545
22546         We could also solve this problem by having a separate path for
22547         performing type lookups, instead of DoResolve, we could have a
22548         ResolveType entry point, and only participating pieces of the
22549         production (simplename, deref, array) would implement this. 
22550
22551         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
22552         signal SimpleName to only resolve type names and not attempt to
22553         resolve anything else.
22554
22555         * expression.cs (Cast): Set the flag.
22556
22557         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
22558
22559         * class.cs: Only report 108 if there is no `new' modifier.
22560
22561         * cs-parser.jay: rework foreach statement to work with the new
22562         changes to the policy on SimpleNames.
22563
22564         * report.cs: support Stacktrace on warnings as well.
22565
22566         * makefile: drop --unsafe and /unsafe from the compile.
22567
22568 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
22569
22570         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22571         lookups here, instead of doing that at parse time.  This means
22572         that our grammar will not introduce `LocalVariableReferences' as
22573         expressions at this point.  That solves the problem of code like
22574         this:
22575
22576         class X {
22577            static void Main ()
22578            { int X = 1;
22579             { X x = null }}}
22580
22581         This is only half the fix.  The full fix requires parameters to
22582         also be handled in this way.
22583
22584         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
22585         makes the use more obvious of the DeclSpace.  The
22586         ec.TypeContainer.TypeBuilder is now only used to pull the
22587         TypeBuilder for it.
22588
22589         My theory is that I can get rid of the TypeBuilder completely from
22590         the EmitContext, and have typecasts where it is used (from
22591         DeclSpace to where it matters).  
22592
22593         The only pending problem is that the code that implements Aliases
22594         is on TypeContainer, and probably should go in DeclSpace.
22595
22596         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22597         lookups here, instead of doing that at parse time.  This means
22598         that our grammar will not introduce `LocalVariableReferences' as
22599         expressions at this point.  That solves the problem of code like
22600         this:
22601
22602         class X {
22603            static void Main ()
22604            { int X = 1;
22605             { X x = null }}}
22606
22607         This is only half the fix.  The full fix requires parameters to
22608         also be handled in this way.
22609
22610         * class.cs (Property.DefineMethod): When implementing an interface
22611         method, set newslot, when implementing an abstract method, do not
22612         set the flag (before we tried never setting it, or always setting
22613         it, which is the difference).
22614         (Indexer.DefineMethod): same.
22615         (Method.DefineMethod): same.
22616
22617         * ecore.cs: Only set the status used flag if we get back a Field.
22618
22619         * attribute.cs: Temporary hack, so Paolo can keep working.
22620
22621 2002-03-08  Ravi Pratap  <ravi@ximian.com>
22622
22623         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
22624         the unmanaged type in the case we have a MarshalAs attribute.
22625
22626         (Resolve): Handle the case when we are parsing the special MarshalAs
22627         attribute [we need to store the unmanaged type to use later]
22628
22629         * typemanager.cs (marshal_as_attr_type): Built in type for the 
22630         MarshalAs Attribute.
22631
22632         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
22633         on parameters and accordingly set the marshalling info.
22634
22635 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
22636
22637         * class.cs: Optimizing slightly by removing redundant code after
22638         we switched to the `NoTypes' return value.
22639         (Property.DefineMethod): use NoTypes here too.
22640
22641         This fixes the bug I introduced in my last batch of changes.
22642
22643 2002-03-05  Ravi Pratap  <ravi@ximian.com>
22644
22645         * tree.cs (RecordEnum): Add. We now keep track of enums too.
22646
22647         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
22648         Enums since those are types too. 
22649
22650         * cs-parser.jay (enum_declaration): Record enums as we parse them.
22651
22652         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
22653         thanks to a call during the lookup process.
22654
22655 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
22656
22657         * statement.cs (Foreach): Lots of work to accomodate a particular
22658         kind of foreach statement that I had not kept in mind.  It is
22659         possible to have foreachs on classes that provide a GetEnumerator
22660         method that return objects that implement the "pattern" for using
22661         a foreach, there is no need to support GetEnumerator
22662         specifically. 
22663
22664         This is needed to compile nant.
22665
22666         * decl.cs: Only report 114 if the member is not `Finalize' and if
22667         the warning level is at least 2.
22668
22669         * class.cs: Moved the compare function from Method to
22670         MethodSignature. 
22671
22672         (MethodSignature.InheritableMemberSignatureCompare): Add new
22673         filter function that is used to extract inheritable methods from a
22674         class. 
22675
22676         (Method.Define): Use the new `inheritable_method_signature_filter'
22677         delegate
22678
22679         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
22680         command. 
22681
22682 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
22683
22684         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
22685
22686         * cs-parser.jay: Add opt_semicolon to the interface declaration.
22687
22688         * expression.cs: Pass location information to
22689         ConvertImplicitStandard. 
22690
22691         * class.cs: Added debugging code to track return values from
22692         interfaces. 
22693
22694 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
22695
22696         * expression.cs (Is.DoResolve): If either side of the `is' is an
22697         interface, do not flag the warning.
22698
22699         * ecore.cs (ImplicitReferenceConversion): We need a separate test
22700         for interfaces
22701
22702         * report.cs: Allow for --fatal to be used with --probe.
22703
22704         * typemanager.cs (NoTypes): Move the definition for the empty Type
22705         array here. 
22706
22707         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
22708         properties. 
22709         (TypeContainer.DefineProxy): New function used to proxy to parent
22710         implementations when implementing interfaces.
22711         (TypeContainer.ParentImplements): used to lookup if our parent
22712         implements a public function that is required by an interface.
22713         (TypeContainer.VerifyPendingMethods): Hook this up.
22714
22715         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
22716         `modules' and `assemblies' arraylists into arrays.  We only grow
22717         these are the very early start up of the program, so this improves
22718         the speedof LookupType (nicely measured).
22719
22720         * expression.cs (MakeByteBlob): Replaced unsafe code with
22721         BitConverter, as suggested by Paolo.
22722
22723         * cfold.cs (ConstantFold.Binary): Special case: perform constant
22724         folding of string concatenation, but if either side is a string,
22725         and the other is not, then return null, and let the runtime use
22726         the concatenation on the string plus the object (using
22727         `Object.ToString'). 
22728
22729 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
22730
22731         Constant Folding has been implemented now.
22732
22733         * expression.cs (Unary.Reduce): Do not throw an exception, catch
22734         the error instead on types that are not supported in one's
22735         complement. 
22736
22737         * constant.cs (Constant and all children): New set of functions to
22738         perform implict and explicit conversions.
22739
22740         * ecore.cs (EnumConstant): Implement the new functions to perform
22741         conversion by proxying to the child expression.
22742
22743         * codegen.cs: (ConstantCheckState): Constant evaluation has its
22744         own separate setting that can not be turned off from the command
22745         line using --unchecked or --checked and is only controlled using
22746         the checked/unchecked statements and expressions.  This setting is
22747         used by the constant folder to flag errors.
22748
22749         * expression.cs (CheckedExpr, UncheckedExpr): Set the
22750         ConstantCheckState as well.   
22751
22752         During Resolve, they also have to flag the state, because the
22753         constant folder runs completely in the Resolve phase.
22754
22755         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
22756         well.
22757
22758 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22759
22760         * cfold.cs: New file, this file contains the constant folder.
22761
22762         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
22763         argument to track whether we are using the resulting address to
22764         load or store a value and provide better error messages. 
22765
22766         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
22767         new AddressOf arguments.
22768
22769         * statement.cs (Foreach.EmitCollectionForeach): Update
22770
22771         * expression.cs (Argument.Emit): Call AddressOf with proper
22772         arguments to track usage.
22773
22774         (New.DoEmit): Call AddressOf with new arguments.
22775
22776         (Unary.Emit): Adjust AddressOf call.
22777
22778 2002-03-01  Ravi Pratap  <ravi@ximian.com>
22779
22780         * cs-parser.jay (member_access): Change the case for pre-defined types
22781         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
22782         this suggestion.
22783
22784         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
22785         a method body.
22786
22787         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
22788         essentially like methods and apply attributes like MethodImplOptions to them too.
22789
22790         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
22791         not being null.
22792
22793         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
22794         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
22795         is the DeclSpace.
22796
22797         * Update code everywhere accordingly.
22798
22799         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
22800
22801         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
22802
22803 2002-02-28  Ravi Pratap  <ravi@ximian.com>
22804
22805         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
22806         try performing lookups against those instead of jumping straight into using
22807         the 'using' clauses.
22808
22809         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
22810
22811         (LookupType): Perform lookups in implicit parents too.
22812
22813         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
22814         sequence as RootContext.LookupType. 
22815
22816         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
22817         the various cases of namespace lookups into this method.
22818
22819 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22820
22821         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
22822         in positional arguments)
22823
22824         * class.cs (Operator): Update the AllowedModifiers to contain
22825         extern. 
22826
22827         * cs-parser.jay: Update operator declaration to allow for the
22828         operator body to be empty.
22829
22830         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
22831         values. 
22832
22833 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
22834
22835         * class.cs (Method.Emit): Label parameters.
22836
22837         * driver.cs: Return 1 or 0 as the program exit code.
22838
22839 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
22840
22841         * expression.cs: Special case the `null' object when trying to
22842         auto-compute the type, as anything can be explicitly converted to
22843         that. 
22844
22845         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
22846         spotting this Paolo.
22847
22848         (Expression.ImplicitNumericConversion): Perform comparissions of
22849         the type using the underlying type in the case of an enumeration
22850         rather than using the enumeration type for the compare.
22851
22852         Cope with the underlying == type case, which is not possible to
22853         catch before. 
22854
22855         (Expression.ConvertNumericExplicit): Perform comparissions of
22856         the type using the underlying type in the case of an enumeration
22857         rather than using the enumeration type for the compare.
22858
22859         * driver.cs: If the user does not supply an extension, assume .exe
22860
22861         * cs-parser.jay (if_statement): Rewrote so that we can track the
22862         location for the if statement.
22863
22864         * expression.cs (Binary.ConstantFold): Only concat strings when
22865         the operation is "+", not everything ;-)
22866
22867         * statement.cs (Statement.EmitBoolExpression): Take a location
22868         argument. 
22869         (If, While, Do): Track location.
22870
22871         * expression.cs (Binary.ResolveOperator): In the object + string
22872         case, I was missing a call to ConvertImplicit
22873
22874 2002-02-25  Ravi Pratap  <ravi@ximian.com>
22875
22876         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
22877         Location arguments. Ensure we use RootContext.LookupType to do our work
22878         and not try to do a direct Type.GetType and ModuleBuilder.GetType
22879
22880         * interface.cs (PopulateMethod): Handle the type of the parameter being
22881         null gracefully.
22882
22883         * expression.cs (Invocation.BetterFunction): Handle the case when we 
22884         have a params method with no fixed arguments and a call is made with no
22885         arguments.
22886
22887 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
22888
22889         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
22890         the verbatim-string-literal
22891
22892         * support.cs (InternalParameters.ParameterModifier): handle null
22893         fixed parameters.
22894         (InternalParameters.ParameterType): ditto.
22895
22896         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
22897         duplicating the name of the variable parameter.
22898         (GetParameterByName): Fix bug where we were not looking up array
22899         paramters if they were the only present (thanks Paolo!).
22900         (GetParameterInfo): We only have an empty set of types if both
22901         fixed and array are set to null.
22902         (GetParameterInfo-idx): Handle FixedParameter == null
22903
22904         * cs-parser.jay: Handle the case where there is no catch
22905         statements (missing null test).
22906
22907 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
22908
22909         * driver.cs (MainDriver): Be conservative on our command line
22910         handling.
22911
22912         Catch DirectoryNotFoundException when calling GetFiles.
22913
22914         (SplitPathAndPattern): Used to split the input specification into
22915         a path and a pattern that we can feed to Directory.GetFiles.
22916
22917 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
22918
22919         * statement.cs (Fixed): Implement the last case of the Fixed
22920         statement (string handling).
22921
22922         * expression.cs (StringPtr): New class used to return a char * to
22923         a string;  Used by the Fixed statement.
22924
22925         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
22926
22927         * expression.cs (Binary.ResolveOperator): Remove redundant
22928         MemberLookup pn parent type.
22929         Optimize union call, we do not need a union if the types are the same.
22930         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
22931         type.
22932
22933         Specialize the use of MemberLookup everywhere, instead of using
22934         the default settings. 
22935
22936         (StackAlloc): Implement stackalloc keyword.
22937
22938         * cs-parser.jay: Add rule to parse stackalloc.
22939
22940         * driver.cs: Handle /h, /help, /?
22941
22942         * expression.cs (MakeByteBlob): Removed the hacks we had in place
22943         before we supported unsafe code.
22944
22945         * makefile: add --unsafe to the self compilation of mcs.
22946
22947 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
22948
22949         * expression.cs (PointerArithmetic): New class that is used to
22950         perform pointer arithmetic.
22951         (Binary.Resolve): Handle pointer arithmetic
22952         Handle pointer comparission.
22953         (ArrayPtr): Utility expression class that is used to take the
22954         address of an array.
22955
22956         (ElementAccess): Implement array access for pointers
22957
22958         * statement.cs (Fixed): Implement fixed statement for arrays, we
22959         are missing one more case before we are done.
22960
22961         * expression.cs (Indirection): Implement EmitAssign and set the
22962         ExprClass to Variable.  This allows pointer dereferences to be
22963         treated as variables, and to have values assigned to them.
22964
22965         * ecore.cs (Expression.StoreFromPtr): New utility function to
22966         store values dereferencing.
22967
22968 2002-02-20  Ravi Pratap  <ravi@ximian.com>
22969
22970         * expression.cs (Binary.ResolveOperator): Ensure that we are
22971         not trying to operate on a void type - this fixes the reported
22972         bug.
22973
22974         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
22975         the parent implementation is sealed.
22976
22977         * ../errors/cs0239.cs : Add.
22978
22979         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
22980
22981         * typemanager.cs (unverifiable_code_type): Corresponds to 
22982         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
22983         which have unsafe code in them.
22984
22985         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
22986         unsafe context.
22987
22988 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
22989
22990         * cs-tokenizer.cs: Add support for @"litreal strings"
22991
22992         Make tokenizer accept pre-processor directives
22993         on any column (remove the old C-like limitation). 
22994
22995         * rootcontext.cs (EmitCode): Emit any global attributes.
22996         (AddGlobalAttributes): Used to keep track of assembly attributes. 
22997
22998         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
22999
23000         * cs-parser.jay: Add support for global attributes.  
23001
23002 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
23003
23004         * expression.cs (Indirection): New helper class.  Unary will
23005         create Indirection classes to be able to implement the
23006         IMemoryLocation interface on it.
23007
23008 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
23009
23010         * cs-parser.jay (fixed_statement): reference the right statement.
23011
23012         * statement.cs (Fixed.Emit): Finish implementing the fixed
23013         statement for the &x case.
23014
23015 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
23016
23017         * class.cs (Property.Define, Method.Define): Remove newslot when
23018         `implementing'.  
23019
23020         * modifiers.cs: My use of NewSlot when `Abstract' was set was
23021         wrong.  NewSlot should only be used if the `new' keyword is present.
23022
23023         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
23024         locating our system dir.  Sorry about this.
23025
23026 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23027
23028         * driver.cs (GetSystemDir): Compute correctly the location of our
23029         system assemblies.  I was using the compiler directory instead of
23030         the library directory.
23031
23032 2002-02-13  Ravi Pratap  <ravi@ximian.com>
23033
23034         * expression.cs (BetterFunction): Put back in what Miguel commented out
23035         since it is the correct fix. The problem is elsewhere ;-)
23036
23037         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
23038         parameters of the parms method are themselves compatible or not !
23039
23040         (StandardConversionExists): Fix very dangerous bug where we were forgetting
23041         to check that a class implements an interface before saying that an implicit
23042         conversion was allowed. Use ImplementsInterface to do the checking.
23043
23044 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23045
23046         * class.cs (Method.Define): Track whether we are an explicit
23047         implementation or not.  And only call DefineMethodOverride if we
23048         are an explicit implementation.
23049
23050         (Property.DefineMethod): Ditto.
23051
23052 2002-02-11  Ravi Pratap  <ravi@ximian.com>
23053
23054         * expression.cs (BetterFunction): Catch hideous bug which was
23055          preventing us from detecting ambiguous calls due to implicit casts i.e
23056         cs0121.
23057
23058 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
23059
23060         * support.cs (Pair): Remove un-needed method.  I figured why I was
23061         getting the error in cs-parser.jay, the variable in a foreach loop
23062         is readonly, and the compiler does not really treat this as a variable.
23063
23064         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
23065         instead of EQUALS in grammar.  
23066
23067         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
23068
23069         * expression.cs (Unary.DoResolve): Check whether the argument is
23070         managed or not.
23071
23072 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
23073
23074         * support.cs: Api for Pair to set a value.  Despite the fact that
23075         the variables are public the MS C# compiler refuses to compile
23076         code that accesses the field if the variable is part of a foreach
23077         statement. 
23078
23079         * statement.cs (Fixed): Begin implementation of the fixed
23080         statement.
23081
23082         (Block.AddVariable): Return the VariableInfo on success and null
23083         on failure instead of true/false. 
23084
23085         * cs-parser.jay (foreach): Catch errors on variables already
23086         defined (we were ignoring this value before) and properly unwind
23087         the block hierarchy
23088
23089         (fixed_statement): grammar for the fixed statement.
23090
23091 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
23092
23093         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
23094         pointer types to be incretemented.
23095
23096         (SizeOf): Implement.
23097
23098         * cs-parser.jay (pointer_member_access): Implement
23099         expr->IDENTIFIER production.
23100
23101         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
23102         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
23103         on safe contexts.
23104
23105         (Unary): Implement indirection.
23106
23107         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
23108         use in non-unsafe context).
23109
23110         (SimpleName.DoResolve): Check for pointers in field access on safe
23111         contexts. 
23112
23113         (Expression.LoadFromPtr): Factor the load-indirect code in this
23114         function.  This was duplicated in UnboxCast and ParameterReference
23115
23116 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
23117
23118         * expression.cs (ComposedCast): report an error if a pointer cast
23119         is used in a safe region.
23120
23121         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
23122         pointer type casts in unsafe context.
23123
23124         * codegen.cs (EmitContext): Set up IsUnsafe.
23125
23126         * cs-parser.jay (non_expression_type): Add productions for pointer
23127         casts. 
23128
23129         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
23130         code.  We should not use force into static mode if the method is
23131         not virtual.  Fixes bug in MIS
23132
23133         * statement.cs (Do.Emit, While.Emit, For.Emit,
23134         Statement.EmitBoolExpression): Add support to Do and While to
23135         propagate infinite loop as `I do return' semantics.
23136
23137         Improve the For case to also test for boolean constants.
23138
23139         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
23140         to the list of attributes we can add.
23141
23142         Remove `EmitContext' argument.
23143
23144         * class.cs (Method.Define): Apply parameter attributes.
23145         (Constructor.Define): Apply parameter attributes.
23146         (MethodCore.LabelParameters): Move here the core of labeling
23147         parameters. 
23148
23149         * support.cs (ReflectionParameters.ParameterModifier,
23150         InternalParameters.ParameterModifier): Use IsByRef on the type and
23151         only return the OUT bit for these parameters instead of in/out/ref
23152         flags.
23153
23154         This is because I miss-understood things.  The ParameterInfo.IsIn
23155         and IsOut represent whether the parameter has the [In] and [Out]
23156         attributes set.  
23157
23158 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
23159
23160         * ecore.cs (FieldExpr.Emit): Release temporaries.
23161
23162         * assign.cs (LocalTemporary.Release): new function.
23163
23164         * codegen.cs (EmitContext.GetTemporaryStorage,
23165         EmitContext.FreeTemporaryStorage): Rework the way we deal with
23166         temporary storage.  Now we can "put back" localbuilders when we
23167         are done with them
23168
23169 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
23170
23171         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
23172         need to make a copy of the variable to generate verifiable code.
23173
23174 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
23175
23176         * driver.cs: Compute dynamically the system directory.
23177
23178         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
23179         Slower, but more generally useful.  Used by the abstract
23180         registering implementation. 
23181
23182         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
23183         the rules for the special rule on Type/instances.  First check if
23184         we have the same name, and if so, try that special static path
23185         rather than the instance path.
23186
23187 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
23188
23189         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
23190         for, while and if.
23191
23192         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
23193         Enum, ValueType, Delegate or Array for non-corlib compiles.
23194
23195         * cs-tokenizer.cs: Catch long identifiers (645)
23196
23197         * typemanager.cs (IndexerPropetyName): Ravi never tested this
23198         piece of code.
23199
23200         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
23201         fix, we were returning too early, so we were not registering
23202         pending methods from abstract classes.
23203
23204         Do not register pending methods if the class is abstract.
23205
23206         * expression.cs (Conditional.DoResolve): Report circular implicit
23207         conversions when we neecd to compute it for conditional
23208         expressions. 
23209
23210         (Is.DoResolve): If the expression is always of the provided type,
23211         flag warning 183.  If the expression can not ever be of the
23212         provided type flag warning 184.
23213
23214         * class.cs: Catch 169 as well.
23215
23216         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
23217         read. 
23218
23219 2002-01-18  Nick Drochak  <ndrochak@gol.com>
23220
23221         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
23222
23223 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
23224
23225         * interface.cs: (PopulateMethod): Check for pointers being defined
23226         only if the unsafe context is active.
23227         (PopulateProperty): ditto.
23228         (PopulateIndexer): ditto.
23229
23230         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
23231         specified.  If pointers are present, make sure that they are
23232         present in an unsafe context.
23233         (Constructor, Constructor.Define): ditto.
23234         (Field, Field.Define): ditto.
23235         (Property, Property.Define): ditto.
23236         (Event, Event.Define): ditto.
23237
23238         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
23239         hashtable if there are classes or structs defined.
23240
23241         * expression.cs (LocalVariableReference.DoResolve): Simplify this
23242         code, as the constant resolution moved.
23243
23244         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
23245         the metadata, so we can flag error 133. 
23246
23247         * decl.cs (MemberCore.UnsafeOK): New function to test that a
23248         pointer is being declared in an unsafe context.
23249
23250 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
23251
23252         * modifiers.cs (Modifiers.Check): Require a Location argument.
23253         Report error 227 for Unsafe use.
23254
23255         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
23256
23257         * statement.cs (For.Emit): If the test is null, then report that
23258         we do `return', as we wont reach anything afterwards.
23259
23260         (Switch.SwitchGoverningType): Track the expression that matched
23261         the conversion.
23262
23263         * driver.cs: Allow negative numbers as an error code to flag.
23264
23265         * cs-parser.jay: Handle 1551.
23266
23267         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
23268
23269 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23270
23271         * cs-parser.jay: Report 1518 (type declaration can only contain
23272         class, struct, interface, enum or delegate)
23273
23274         (switch_label): Report 1523 (keywords `case' or `default' must
23275         preced code)
23276
23277         (opt_switch_sections): Report 1522 (empty switch)
23278
23279         * driver.cs: Report 1515 (response file specified multiple times)
23280         Report 1516 (Source file specified multiple times).
23281
23282         * expression.cs (Argument.Resolve): Signal 1510
23283
23284         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
23285         access not allowed in static code)
23286
23287 2002-01-11  Ravi Pratap  <ravi@ximian.com>
23288
23289         * typemanager.cs (IsPointerType): Utility method which we are going
23290         to need a lot.
23291
23292         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
23293         the object type, so we take care of that.
23294
23295         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
23296
23297         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
23298         added to non-params parameters :-)
23299
23300         * typemanager.cs (CSharpName): Include 'void' type too. 
23301
23302         (void_ptr_type): Include in the set of core types.
23303
23304         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
23305         duplicating code.
23306
23307         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
23308         an unsafe context.
23309
23310         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
23311         completely forgotten about it.
23312
23313 2002-01-10  Ravi Pratap  <ravi@ximian.com>
23314
23315         * cs-parser.jay (pointer_type): Add. This begins our implementation
23316         of parsing rules for unsafe code.
23317
23318         (unsafe_statement): Implement.
23319
23320         (embedded_statement): Modify to include the above.
23321
23322         * statement.cs (Unsafe): Implement new class for unsafe blocks.
23323
23324         * codegen.cs (EmitContext.InUnsafe): Add. This determines
23325         if the current context is an unsafe one.
23326
23327         * cs-parser.jay (local_variable_pointer_type): Since local variable types
23328         are handled differently, we need separate rules for them.
23329
23330         (local_variable_declaration): Update to use local_variable_pointer_type
23331         to allow variable declarations of unmanaged pointer types.
23332
23333         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
23334         in unsafe contexts.
23335
23336         * ../errors/cs0214.cs : Add.
23337
23338 2002-01-16  Nick Drochak  <ndrochak@gol.com>
23339
23340         * makefile: remove 'response' file when cleaning.
23341
23342 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23343
23344         * cs-parser.jay: Report 1524.
23345
23346 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
23347
23348         * typemanager.cs (RegisterMethod): drop checking if we have
23349         registered this from here
23350
23351 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
23352
23353         * class.cs (Method.EmitDestructor): Implement calling our base
23354         destructor. 
23355
23356         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
23357         value of InFinally.
23358
23359         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
23360         this routine and will wrap the call in a try/catch block.  Deal
23361         with the case.
23362
23363 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
23364
23365         * ecore.cs (Expression.MemberLookup): instead of taking a
23366         parameter `same_type' that was used to tell whether we could
23367         access private members we compute our containing type from the
23368         EmitContext.
23369
23370         (FieldExpr): Added partial support for volatile fields.  This does
23371         not work for volatile fields exposed from assemblies, as I can not
23372         figure out how to extract the modreq from it.
23373
23374         Updated all the source files to use this.
23375
23376         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
23377         because it is referenced by MemberLookup very often. 
23378
23379 2002-01-09  Ravi Pratap  <ravi@ximian.com>
23380
23381         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
23382         TypeBuilder.GetCustomAttributes to retrieve what we need.
23383
23384         Get rid of redundant default_member_attr_type as this is the same as
23385         default_member_type which already exists.
23386
23387         * interface.cs, attribute.cs : Update accordingly.
23388
23389 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
23390
23391         * typemanager.cs: Enable IndexerPropertyName again.  It does not
23392         work for TYpeBuilders though.  Ravi, can you please fix this?
23393
23394         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
23395
23396         * expression.cs (Argument.Emit): Handle the case of ref objects
23397         being passed to ref functions;  
23398
23399         (ParameterReference.EmitLoad): Loads the content of the pointer
23400         without dereferencing.
23401
23402 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23403
23404         * cs-tokenizer.cs: Implemented the pre-processing expressions.
23405
23406 2002-01-08  Ravi Pratap  <ravi@ximian.com>
23407
23408         * class.cs (Indexer.DefineMethod): Incorporate the interface
23409         type in the name of the method if we are doing explicit interface
23410         implementation.
23411
23412         * expression.cs (ConversionExists): Remove as it is completely obsolete.
23413
23414         (BetterConversion): Fix extremely trivial bug where we were referring to
23415         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
23416         again !
23417
23418         * ../errors/bug16.cs : Add although we have fixed it.
23419
23420 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23421
23422         * expression.cs (BaseIndexer): Begin implementation.
23423
23424         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
23425
23426         * cs-parser.jay (indexer_declarator): Use qualified_identifier
23427         production directly to remove a shift/reduce, and implement
23428         explicit interface implementation.
23429
23430         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
23431         after a floating point suffix.
23432
23433         * expression.cs (DoNumericPromotions): Improved the conversion for
23434         uint/uint.  If we have a constant, we avoid doing a typecast to a
23435         larger type.
23436
23437         * class.cs (Indexer): Implement explicit interface implementation
23438         for indexers.
23439
23440 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
23441
23442         * class.cs: make the default instance constructor public and hidebysig.
23443
23444 2001-01-03  Ravi Pratap  <ravi@ximian.com>
23445
23446         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
23447         so we can call it from elsewhere.
23448
23449         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
23450         we emit it internally if the class has a defined indexer; otherwise the user
23451         emits it by decorating the class definition with the DefaultMemberAttribute.
23452
23453         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
23454         attribute is not used on a type which defines an indexer.
23455
23456         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
23457         character when we skip whitespace.
23458
23459         * ../errors/cs0646.cs : Add.
23460
23461 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
23462
23463         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
23464         again. 
23465
23466         * makefile: Add practical target `mcs3.exe' which builds the third
23467         generation compiler. 
23468
23469         * expression.cs (New): Fix structures constructor calling.
23470
23471         * class.cs (Property, Method, Indexer): Emit Final flag on the
23472         method if we are an interface implementation and we are not
23473         abstract. 
23474
23475         * ecore.cs (PropertyExpr): New public field `IsBase', tells
23476         whether this property is referencing a `base' method.
23477
23478         * expression.cs (Invocation.EmitCall): take an extra argument:
23479         is_base, this is used to determine whether the `call' or
23480         `callvirt' opcode should be used.
23481
23482
23483         * delegate.cs: update EmitCall.
23484
23485         * class.cs (Method.Define): Set NewSlot for the cases where we are
23486         not implementing an interface method.
23487
23488         (Property.Define): ditto.
23489
23490 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
23491
23492         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
23493         'r'.  Allows mcs to parse itself fully.
23494
23495 2002-01-02  Ravi Pratap  <ravi@ximian.com>
23496
23497         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
23498         of the number of initializers that require the InitializeArray method.
23499
23500         (CheckIndices): Store the Expression in all cases - not the plain value. Also
23501         update the above field where necessary.
23502
23503         (MakeByteBlob): Update accordingly.
23504
23505         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
23506         greater than 2.
23507
23508         (EmitDynamicInitializers): Update in accordance with the new optimization.
23509
23510         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
23511         same OpCode applies.
23512
23513         * cs-parser.jay : Fix some glaring errors I introduced.
23514
23515 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
23516
23517         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
23518         so that we can check for name clashes there too.
23519
23520         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
23521         for interface indexers.
23522
23523         * interfaces.cs (Define): Emit the default member attribute.
23524
23525         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
23526         variable was being referred to while setting the value ;-)
23527
23528 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
23529
23530         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
23531         byte-by-byte information when we know the data is zero.
23532
23533         Make the block always a multiple of 4, because
23534         DefineInitializedData has a bug.
23535
23536         * assign.cs: Fix, we should assign from the temporary, not from
23537         the source. 
23538
23539         * expression.cs (MakeByteBlob): Fix my incorrect code.
23540
23541 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
23542
23543         * typemanager.cs (EnumToUnderlying): This function is used to get
23544         the underlying type from an enumeration, because it does not
23545         always work. 
23546
23547         * constant.cs: Use the I4_S form for values between -128 and 127.
23548
23549         * statement.cs (Block.LookupLabel): Looks up a label.
23550         (Block): Drop support for labeled blocks.
23551
23552         (LabeledStatement): New kind of statement that represents a label
23553         only.
23554
23555         (Goto): Finally implement this bad boy.
23556
23557         * cs-parser.jay: Update to reflect new mechanism to implement
23558         labels.
23559
23560 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
23561
23562         * codegen.cs (EmitContext.This): a codegen property that keeps the
23563         a single instance of this instead of creating many different this
23564         instances. 
23565
23566         * delegate.cs (Delegate.DoResolve): Update to use the property;
23567
23568         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
23569
23570         * expression.cs (BaseAccess.DoResolve): Ditto.
23571
23572 2001-12-29  Ravi Pratap  <ravi@ximian.com>
23573
23574         * typemanager.cs (methodimpl_attr_type): Add to hold the type
23575         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
23576
23577         (InitCoreTypes): Update accordingly.
23578
23579         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
23580         so we can quickly store the state.
23581
23582         (ApplyAttributes): Set the correct implementation flags
23583         for InternalCall methods.
23584
23585 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
23586
23587         * expression.cs (EmitCall): if a method is not virtual, then do
23588         not use callvirt on it.
23589
23590         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
23591         user defined stuff) requires the use of stobj, which takes an
23592         address on the stack instead of an array and an index.  So emit
23593         the Ldelema operation for it.
23594
23595         (EmitStoreOpcode): Use stobj for valuetypes.
23596
23597         (UnaryMutator.EmitCode): Use the right 1 value depending on
23598         whether we are dealing with int64/uint64, float or doubles.
23599
23600         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
23601         constructors that I implemented last night.
23602
23603         (Constructor.IsDefault): Fix to work properly for static
23604         constructors.
23605
23606         * cs-parser.jay (CheckDef): report method signature errors.
23607         Update error number 103 to be 132.
23608
23609         * decl.cs: New AdditionResult enumeration value: MethodExists.
23610         Although we do this check for methods later on in the semantic
23611         analysis, catching repeated default constructors is so easy that
23612         we catch these here. 
23613
23614         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
23615         promotions code.
23616
23617         (ParameterReference.EmitAssign, Emit): handle
23618         bools as bytes.
23619
23620         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
23621         (ArrayAccess.EmitStoreOpcode): ditto.
23622
23623         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
23624
23625         * expression.cs (MakeByteBlob): Complete all the missing types
23626         (uint, short, ushort, byte, sbyte)
23627
23628         * class.cs: Only init instance field initializers on instance
23629         constructors. 
23630
23631         Rename `constructors' to instance_constructors. 
23632
23633         (TypeContainer.AddConstructor): Only add constructors to the list
23634         if it is not static.
23635
23636         Make sure that we handle default_static_constructor independently
23637         everywhere where we handle instance_constructors
23638
23639 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
23640
23641         * class.cs: Do not lookup or create a base initializer for a
23642         static constructor.
23643
23644         (ConstructorInitializer.Resolve): use the proper type to lookup
23645         for constructors.
23646
23647         * cs-parser.jay: Report error 1585 (modifiers between type and name).
23648
23649         * enum.cs, interface.cs: Remove CloseType, this is taken care by
23650         in DeclSpace. 
23651
23652         * decl.cs: CloseType is now an virtual method, the default
23653         implementation just closes this type.
23654
23655 2001-12-28  Ravi Pratap  <ravi@ximian.com>
23656
23657         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
23658         to PreserveSig by default. Also emit HideBySig on such methods.
23659
23660         Basically, set the defaults to standard values.
23661
23662         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
23663         argument, if candidate is better, it can't be worse than the best !
23664
23665         (Invocation): Re-write bits to differentiate between methods being
23666         applicable in their expanded form and their normal form - for params
23667         methods of course.
23668
23669         Get rid of use_standard everywhere as only standard conversions are allowed
23670         in overload resolution. 
23671
23672         More spec conformance.
23673
23674 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23675
23676         * driver.cs: Add --timestamp, to see where the compiler spends
23677         most of its time.
23678
23679         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
23680         `this' in static code.
23681
23682         (SimpleName.DoResolve): Implement in terms of a helper function
23683         that allows static-references to be passed upstream to
23684         MemberAccess.
23685
23686         (Expression.ResolveWithSimpleName): Resolve specially simple
23687         names when called by MemberAccess to implement the special
23688         semantics. 
23689
23690         (Expression.ImplicitReferenceConversion): Handle conversions from
23691         Null to reference types before others, as Null's type is
23692         System.Object. 
23693
23694         * expression.cs (Invocation.EmitCall): Handle the special case of
23695         calling methods declared on a reference type from a ValueType
23696         (Base classes System.Object and System.Enum)
23697
23698         (MemberAccess.Resolve): Only perform lookups on Enumerations if
23699         the left hand side is a TypeExpr, not on every enumeration. 
23700
23701         (Binary.Resolve): If types are reference types, then do a cast to
23702         object on operators != and == of both arguments.
23703
23704         * typemanager.cs (FindMembers): Extract instance and static
23705         members if requested.
23706
23707         * interface.cs (PopulateProperty): Use void_type instead of null
23708         as the return type for the setter method.
23709
23710         (PopulateIndexer): ditto.
23711
23712 2001-12-27  Ravi Pratap  <ravi@ximian.com>
23713
23714         * support.cs (ReflectionParameters): Fix minor bug where we
23715         were examining the wrong parameter for the ParamArray attribute.
23716
23717         Cope with requests for the type of the parameter at position
23718         greater than the params parameter's. We now return the element
23719         type of the params array as that makes more sense.
23720
23721         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
23722         accordingly as we no longer have to extract the element type
23723         ourselves.
23724
23725         (Invocation.OverloadResolve): Update.
23726
23727 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23728
23729         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
23730         against IEnumerator, test whether the return value is a descendant
23731         of the IEnumerator interface.
23732
23733         * class.cs (Indexer.Define): Use an auxiliary method to implement
23734         the other bits of the method definition.  Begin support for
23735         explicit interface implementation.
23736
23737         (Property.DefineMethod): Use TypeManager.void_type instead of null
23738         for an empty return value.
23739
23740 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
23741
23742         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
23743         dealing with a FieldExpr which is composed of a FieldBuilder, in
23744         the code path we did extract the constant, but we should have
23745         obtained the underlying value to be able to cast it (otherwise we
23746         end up in an infinite loop, this is what Ravi was running into).
23747
23748         (ArrayCreation.UpdateIndices): Arrays might be empty.
23749
23750         (MemberAccess.ResolveMemberAccess): Add support for section
23751         14.5.4.1 that deals with the special case of E.I when E is a type
23752         and something else, that I can be a reference to a static member.
23753
23754         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
23755         handle a particular array type to create byte blobs, it is just
23756         something we dont generate byteblobs for.
23757
23758         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
23759         arguments. 
23760
23761         * location.cs (Push): remove the key from the hashtable that we
23762         are about to add.   This happens for empty files.
23763
23764         * driver.cs: Dispose files after we have parsed them.
23765
23766         (tokenize): new function that only runs the tokenizer on its
23767         input, for speed testing.
23768
23769 2001-12-26  Ravi Pratap  <ravi@ximian.com>
23770
23771         * class.cs (Event.Define): Define the private field only if there
23772         are no accessors defined.
23773
23774         * expression.cs (ResolveMemberAccess): If there is no associated
23775         field with the event, that means we have an event defined with its
23776         own accessors and we should flag error cs0070 since transforming
23777         ourselves into a field is not valid in that case.
23778
23779         * ecore.cs (SimpleName.DoResolve): Same as above.
23780
23781         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
23782         and charset to sane values.
23783
23784 2001-12-25  Ravi Pratap  <ravi@ximian.com>
23785
23786         * assign.cs (DoResolve): Perform check on events only if they 
23787         are being accessed outside the declaring type.
23788
23789         * cs-parser.jay (event_declarations): Update rules to correctly
23790         set the type of the implicit parameter etc.
23791
23792         (add_accessor, remove_accessor): Set current local parameters.
23793
23794         * expression.cs (Binary): For delegate addition and subtraction,
23795         cast the return value from the method into the appropriate delegate
23796         type.
23797
23798 2001-12-24  Ravi Pratap  <ravi@ximian.com>
23799
23800         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
23801         of these as the workaround is unnecessary.
23802
23803         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
23804         delegate data - none of that is needed at all.
23805
23806         Re-write bits to extract the instance expression and the delegate method
23807         correctly.
23808
23809         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
23810         on delegates too.
23811
23812         * attribute.cs (ApplyAttributes): New method to take care of common tasks
23813         of attaching attributes instead of duplicating code everywhere.
23814
23815         * everywhere : Update code to do attribute emission using the above method.
23816
23817 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23818
23819         * expression.cs (IsParamsMethodApplicable): if there are not
23820         parameters, return immediately.
23821
23822         * ecore.cs: The 0 literal can be implicity converted to an enum
23823         type. 
23824
23825         (SimpleName.DoResolve): First lookup the type, then lookup the
23826         members. 
23827
23828         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
23829         want to get its address.  If the InstanceExpression is not
23830         addressable, store the result in a temporary variable, then get
23831         the address of it.
23832
23833         * codegen.cs: Only display 219 errors on warning level or above. 
23834
23835         * expression.cs (ArrayAccess): Make it implement the
23836         IMemoryLocation interface.
23837
23838         (Binary.DoResolve): handle the operator == (object a, object b)
23839         and operator != (object a, object b) without incurring into a
23840         BoxedCast (because 5 != o should never be performed).
23841
23842         Handle binary enumerator operators.
23843
23844         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
23845         value type, otherwise use Ldelem_ref.
23846
23847         Use precomputed names;
23848
23849         (AddressOf): Implement address of
23850
23851         * cs-parser.jay (labeled_statement): Fix recursive block
23852         addition by reworking the production.
23853
23854         * expression.cs (New.DoEmit): New has a special case:
23855                 
23856                  If we are dealing with a ValueType, we have a few
23857                  situations to deal with:
23858                 
23859                     * The target of New is a ValueType variable, that is
23860                       easy, we just pass this as the variable reference
23861                 
23862                     * The target of New is being passed as an argument,
23863                       to a boxing operation or a function that takes a
23864                       ValueType.
23865                 
23866                       In this case, we need to create a temporary variable
23867                       that is the argument of New.
23868
23869
23870 2001-12-23  Ravi Pratap  <ravi@ximian.com>
23871
23872         * rootcontext.cs (LookupType): Check that current_type is not null before
23873         going about looking at nested types.
23874
23875         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
23876         not implement the IAssignMethod interface any more.
23877
23878         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
23879         where we tranform them into FieldExprs if they are being resolved from within
23880         the declaring type.
23881
23882         * ecore.cs (SimpleName.DoResolve): Do the same here.
23883
23884         * assign.cs (DoResolve, Emit): Clean up code considerably. 
23885
23886         * ../errors/bug10.cs : Add.
23887
23888         * ../errors/cs0070.cs : Add.
23889
23890         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
23891
23892         * assign.cs : Get rid of EventIsLocal everywhere.
23893
23894 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23895
23896         * ecore.cs (ConvertIntLiteral): finished the implementation.
23897
23898         * statement.cs (SwitchLabel): Convert the value we are using as a
23899         key before looking up the table.
23900
23901 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23902
23903         * codegen.cs (EmitTopBlock): Require a Location argument now.
23904
23905         * cs-parser.jay (constructor_declarator): We need to setup
23906         current_local_parameters before we parse the
23907         opt_constructor_initializer, to allow the variables to be bound
23908         to the constructor arguments.
23909
23910         * rootcontext.cs (LookupType): First lookup nested classes in our
23911         class and our parents before we go looking outside our class.
23912
23913         * expression.cs (ConstantFold): Extract/debox the values at the
23914         beginnning. 
23915
23916         * rootcontext.cs (EmitCode): Resolve the constants first before we
23917         resolve the types.  This is not really needed, but it helps debugging.
23918
23919         * statement.cs: report location.
23920
23921         * cs-parser.jay: pass location to throw statement.
23922
23923         * driver.cs: Small bug fix.
23924
23925         * report.cs: Updated format to be 4-zero filled digits.
23926
23927 2001-12-22  Ravi Pratap  <ravi@ximian.com>
23928
23929         * expression.cs (CheckIndices): Fix minor bug where the wrong
23930         variable was being referred to ;-)
23931
23932         (DoEmit): Do not call EmitStaticInitializers when the 
23933         underlying type is System.Object.
23934
23935 2001-12-21  Ravi Pratap  <ravi@ximian.com>
23936
23937         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
23938         and do the usual workaround for SRE.
23939
23940         * class.cs (MyEventBuilder.EventType): New member to get at the type
23941         of the event, quickly.
23942
23943         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
23944
23945         * assign.cs (Assign.DoResolve): Handle the case when the target
23946         is an EventExpr and perform the necessary checks.
23947
23948         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
23949         interface.
23950
23951         (SimpleName.MemberStaticCheck): Include check for EventExpr.
23952
23953         (EventExpr): Set the type in the constructor itself since we 
23954         are meant to be born fully resolved.
23955
23956         (EventExpr.Define): Revert code I wrote earlier.
23957                 
23958         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
23959         instance expression is null. The instance expression is a This in that case
23960         or a null, depending on whether it is a static method or not.
23961
23962         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
23963         refers to more than one method.
23964
23965         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
23966         and accordingly flag errors.
23967
23968 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23969
23970         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
23971
23972 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23973
23974         * location.cs (ToString): Provide useful rutine.
23975
23976 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23977
23978         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
23979         objects, return the actual integral boxed.
23980
23981         * statement.cs (SwitchLabel): define an ILLabel for each
23982         SwitchLabel. 
23983
23984         (Switch.CheckSwitch): If the value is a Literal, extract
23985         the underlying literal.
23986
23987         Also in the unused hashtable we had, add the SwitchLabel so we can
23988         quickly look this value up.
23989
23990         * constant.cs: Implement a bunch of new constants.  Rewrite
23991         Literal based on this.  Made changes everywhere to adapt to this.
23992
23993         * expression.cs (Expression.MakeByteBlob): Optimize routine by
23994         dereferencing array only once, and also copes with enumrations.
23995
23996         bytes are two bytes wide, not one.
23997
23998         (Cast): Perform constant conversions.
23999
24000         * ecore.cs (TryImplicitIntConversion): Return literals instead of
24001         wrappers to the literals here.
24002
24003         * expression.cs (DoNumericPromotions): long literals can converted
24004         to ulong implicity (this is taken care of elsewhere, but I was
24005         missing this spot).
24006
24007         * ecore.cs (Expression.Literalize): Make the return type Literal,
24008         to improve type checking.
24009
24010         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
24011
24012 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24013
24014         * literal.cs: Revert code from ravi that checked the bounds.  The
24015         bounds are sane by the definition of the type itself. 
24016
24017         * typemanager.cs: Fix implementation of ImplementsInterface.  We
24018         need to actually look up in our parent hierarchy for interfaces
24019         implemented. 
24020
24021         * const.cs: Use the underlying type for enumerations
24022
24023         * delegate.cs: Compute the basename for the delegate creation,
24024         that should fix the delegate test case, and restore the correct
24025         Type Lookup semantics in rootcontext
24026
24027         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
24028         referencing a nested type with the Reflection API is using the "+"
24029         sign. 
24030
24031         * cs-parser.jay: Do not require EOF token at the end.
24032
24033 2001-12-20  Ravi Pratap  <ravi@ximian.com>
24034
24035         * rootcontext.cs (LookupType): Concatenate type names with
24036         a '.' instead of a '+' The test suite passes again.
24037
24038         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
24039         field of the enumeration.
24040
24041         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
24042         the case when the member is an EventExpr.
24043
24044         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
24045         static has an associated instance expression.
24046
24047         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
24048
24049         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
24050
24051         * class.cs (Event.Define): Register event and perform appropriate checks
24052         for error #111.
24053
24054         We define the Add and Remove methods even if the use provides none because
24055         in that case, we provide default implementations ourselves.
24056
24057         Define a private field of the type of the event. This is done by the CSC compiler
24058         and we should be doing it too ;-)
24059
24060         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
24061         More methods we use in code we generate.
24062
24063         (multicast_delegate_type, delegate_type): Two separate types since the distinction
24064         is important.
24065
24066         (InitCoreTypes): Update accordingly for the above.
24067
24068         * class.cs (Event.Emit): Generate code for default accessors that we provide
24069
24070         (EmitDefaultMethod): Do the job in the above.
24071
24072         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
24073         appropriate place.
24074
24075 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24076
24077         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
24078         builders even if we were missing one.
24079
24080         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
24081         pass the Basename as our class name instead of the Name.  The
24082         basename will be correctly composed for us.
24083
24084         * parameter.cs (Paramters): Now takes a Location argument.
24085
24086         * decl.cs (DeclSpace.LookupType): Removed convenience function and
24087         make all the code call directly LookupType in RootContext and take
24088         this chance to pass the Location information everywhere.
24089
24090         * Everywhere: pass Location information.
24091
24092 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
24093
24094         * class.cs (Constructor.Define): Updated way of detecting the
24095         length of the parameters.
24096
24097         (TypeContainer.DefineType): Use basename as the type name for
24098         nested types.
24099
24100         (TypeContainer.Define): Do not recursively define types here, as
24101         definition is taken care in order by the RootContext.
24102
24103         * tree.cs: Keep track of namespaces in a per-file basis.
24104
24105         * parameter.cs (Parameter.ComputeSignature): Update to use
24106         DeclSpace. 
24107
24108         (Parameters.GetSignature): ditto.
24109
24110         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
24111         instead of a TypeContainer.
24112
24113         (Interface.SemanticAnalysis): Use `this' instead of our parent to
24114         resolve names.  Because we need to be resolve in our context, not
24115         our parents.
24116
24117         * driver.cs: Implement response files.
24118
24119         * class.cs (TypeContainer.DefineType): If we are defined, do not
24120         redefine ourselves.
24121
24122         (Event.Emit): Emit the code for add/remove handlers.
24123         (Event.Define): Save the MethodBuilders for add/remove.
24124
24125         * typemanager.cs: Use pair here too.
24126
24127         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
24128         DictionaryEntry requires the first argument to be non-null.  
24129
24130         (enum_declaration): Compute full name for registering the
24131         enumeration.
24132
24133         (delegate_declaration): Instead of using
24134         formal_parameter_list, use opt_formal_parameter_list as the list
24135         can be empty.
24136
24137         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
24138         (EventParsing): New property that controls whether `add' and
24139         `remove' are returned as tokens or identifiers (for events);
24140
24141 2001-12-19  Ravi Pratap  <ravi@ximian.com>
24142
24143         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
24144         use MyEventBuilder only and let it wrap the real builder for us.
24145
24146         (MyEventBuilder): Revamp constructor etc.
24147
24148         Implement all operations that we perform on EventBuilder in precisely the same
24149         way here too.
24150
24151         (FindMembers): Update to use the EventBuilder member.
24152
24153         (Event.Emit): Update accordingly.
24154
24155 2001-12-18  Ravi Pratap  <ravi@ximian.com>
24156
24157         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
24158         by calling the appropriate methods.
24159
24160         (GetCustomAttributes): Make stubs as they cannot possibly do anything
24161         useful.
24162
24163         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
24164
24165 2001-12-17  Ravi Pratap  <ravi@ximian.com>
24166
24167         * delegate.cs (Delegate.Populate): Check that the return type
24168         and various parameters types are indeed accessible.
24169
24170         * class.cs (Constructor.Define): Same here.
24171
24172         (Field.Define): Ditto.
24173
24174         (Event.Define): Ditto.
24175
24176         (Operator.Define): Check that the underlying Method defined itself
24177         correctly - so it's MethodBuilder should not be null.
24178
24179         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
24180         expression happens to be null.
24181
24182         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
24183         members but as of now we don't seem to be able to do anything really useful with it.
24184
24185         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
24186         not the EventBuilder.
24187
24188 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
24189
24190         * cs-tokenizer.cs: Add support for defines.
24191         Add support for #if, #elif, #else, #endif
24192
24193         (eval_var): evaluates a variable.
24194         (eval): stubbed for evaluating functions.
24195
24196         * cs-parser.jay: Pass the defines information
24197
24198         * driver.cs: Add --define command line option.
24199
24200         * decl.cs: Move MemberCore here.
24201
24202         Make it the base class for DeclSpace.  This allows us to catch and
24203         report 108 and 109 for everything now.
24204
24205         * class.cs (TypeContainer.Define): Extract all the members
24206         before populating and emit the warning 108 (new keyword required
24207         to override) instead of having each member implement this.
24208
24209         (MemberCore.Define): New abstract method, we will be using this in
24210         the warning reporting engine in Populate.
24211
24212         (Operator.Define): Adjust to new MemberCore protocol. 
24213
24214         * const.cs (Const): This does not derive from Expression, it is a
24215         temporary object we use to create fields, it is a MemberCore. 
24216
24217         * class.cs (Method.Define): Allow the entry point to be in a
24218         specific class.
24219
24220         * driver.cs: Rewrite the argument handler to clean it up a bit.
24221
24222         * rootcontext.cs: Made it just an auxiliary namespace feature by
24223         making everything static.
24224
24225         * driver.cs: Adapt code to use RootContext type name instead of
24226         instance variable.
24227
24228         * delegate.cs: Remove RootContext argument.
24229
24230         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
24231         argument. 
24232
24233         * class.cs (Event.Define): The lookup can fail.
24234
24235         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
24236
24237         * expression.cs: Resolve the this instance before invoking the code.
24238
24239 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
24240
24241         * cs-parser.jay: Add a production in element_access that allows
24242         the thing to become a "type" reference.  This way we can parse
24243         things like "(string [])" as a type.
24244
24245         Note that this still does not handle the more complex rules of
24246         casts. 
24247
24248
24249         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
24250
24251         * ecore.cs: (CopyNewMethods): new utility function used to
24252         assemble the list of methods from running FindMembers.
24253
24254         (MemberLookup): Rework FindMembers so that 
24255
24256 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
24257
24258         * class.cs (TypeContainer): Remove Delegates who fail to be
24259         defined.
24260
24261         * delegate.cs (Populate): Verify that we dont get null return
24262         values.   TODO: Check for AsAccessible.
24263
24264         * cs-parser.jay: Use basename to emit error 574 (destructor should
24265         have the same name as container class), not the full name.
24266
24267         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
24268         possible representation.  
24269
24270         Also implements integer type suffixes U and L.
24271
24272 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
24273
24274         * expression.cs (ArrayCreation.DoResolve): We need to do the
24275         argument resolution *always*.
24276
24277         * decl.cs: Make this hold the namespace.  Hold the root context as
24278         well.
24279         (LookupType): Move here.
24280
24281         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
24282
24283         * location.cs (Row, Name): Fixed the code, it was always returning
24284         references to the first file.
24285
24286         * interface.cs: Register properties defined through interfaces.
24287
24288         * driver.cs: Add support for globbing on the command line
24289
24290         * class.cs (Field): Make it derive from MemberCore as well.
24291         (Event): ditto.
24292
24293 2001-12-15  Ravi Pratap  <ravi@ximian.com>
24294
24295         * class.cs (Event::Define): Check that the type of the event is a delegate
24296         type else flag error #66.
24297
24298         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
24299         same.
24300
24301         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
24302         values of EntryPoint, CharSet etc etc.
24303
24304         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
24305
24306         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
24307         be null and we should ignore this. I am not sure if this is really clean. Apparently,
24308         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
24309         which needs this to do its work.
24310
24311         * ../errors/cs0066.cs : Add.
24312
24313 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
24314
24315         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
24316         helper functions.
24317
24318         * class.cs: (MethodSignature.MethodSignature): Removed hack that
24319         clears out the parameters field.
24320         (MemberSignatureCompare): Cleanup
24321
24322         (MemberCore): New base class used to share code between MethodCore
24323         and Property.
24324
24325         (RegisterRequiredImplementations) BindingFlags.Public requires
24326         either BindingFlags.Instace or Static.  Use instance here.
24327
24328         (Property): Refactored code to cope better with the full spec.
24329
24330         * parameter.cs (GetParameterInfo): Return an empty array instead
24331         of null on error.
24332
24333         * class.cs (Property): Abstract or extern properties have no bodies.
24334
24335         * parameter.cs (GetParameterInfo): return a zero-sized array.
24336
24337         * class.cs (TypeContainer.MethodModifiersValid): Move all the
24338         method modifier validation to the typecontainer so we can reuse
24339         this on properties.
24340
24341         (MethodCore.ParameterTypes): return an empty sized array of types.
24342
24343         (Property.Define): Test property modifier validity.
24344
24345         Add tests for sealed/override too.
24346
24347         (Method.Emit): abstract or extern methods have no bodies.
24348
24349 2001-12-14  Ravi Pratap  <ravi@ximian.com>
24350
24351         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
24352         thing.
24353
24354         (Method::Define, ::Emit): Modify accordingly.
24355
24356         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
24357
24358         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
24359
24360         * makefile: Pass in /unsafe.
24361
24362 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
24363
24364         * class.cs (MakeKey): Kill routine.
24365
24366         * class.cs (TypeContainer.Define): Correctly define explicit
24367         method implementations (they require the full interface name plus
24368         the method name).
24369
24370         * typemanager.cs: Deply the PtrHashtable here and stop using the
24371         lame keys.  Things work so much better.
24372
24373         This of course broke everyone who depended on `RegisterMethod' to
24374         do the `test for existance' test.  This has to be done elsewhere.
24375
24376         * support.cs (PtrHashtable): A hashtable that avoid comparing with
24377         the object stupid Equals method (because, that like fails all over
24378         the place).  We still do not use it.
24379
24380         * class.cs (TypeContainer.SetRequiredInterface,
24381         TypeContainer.RequireMethods): Killed these two routines and moved
24382         all the functionality to RegisterRequiredImplementations.
24383
24384         (TypeContainer.RegisterRequiredImplementations): This routine now
24385         registers all the implementations required in an array for the
24386         interfaces and abstract methods.  We use an array of structures
24387         which can be computed ahead of time to reduce memory usage and we
24388         also assume that lookups are cheap as most classes will not
24389         implement too many interfaces.
24390
24391         We also avoid creating too many MethodSignatures.
24392
24393         (TypeContainer.IsInterfaceMethod): Update and optionally does not
24394         clear the "pending" bit if we find that there are problems with
24395         the declaration.
24396
24397         (TypeContainer.VerifyPendingMethods): Update to report errors of
24398         methods that look like implementations but are not.
24399
24400         (TypeContainer.Define): Add support for explicit interface method
24401         implementation. 
24402
24403 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
24404
24405         * typemanager.cs: Keep track of the parameters here instead of
24406         being a feature of the TypeContainer.
24407
24408         * class.cs: Drop the registration of parameters here, as
24409         InterfaceMethods are also interface declarations.
24410
24411         * delegate.cs: Register methods with the TypeManager not only with
24412         the TypeContainer.  This code was buggy.
24413
24414         * interface.cs: Full registation here.
24415
24416 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
24417
24418         * expression.cs: Remove reducer for binary expressions, it can not
24419         be done this way.
24420
24421         * const.cs: Put here the code that used to go into constant.cs
24422
24423         * constant.cs: Put here the code for constants, this is a new base
24424         class for Literals.
24425
24426         * literal.cs: Make Literal derive from Constant.
24427
24428 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
24429
24430         * statement.cs (Return.Emit): Report error 157 if the user
24431         attempts to return from a finally block.
24432
24433         (Return.Emit): Instead of emitting a return, jump to the end of
24434         the function.
24435
24436         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
24437         LocalBuilder to store the result of the function.  ReturnLabel is
24438         the target where we jump.
24439
24440
24441 2001-12-09  Radek Doulik  <rodo@ximian.com>
24442
24443         * cs-parser.jay: remember alias in current namespace
24444
24445         * ecore.cs (SimpleName::DoResolve): use aliases for types or
24446         namespaces
24447
24448         * class.cs (LookupAlias): lookup alias in my_namespace
24449
24450         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
24451         aliases hashtable
24452         (LookupAlias): lookup alias in this and if needed in parent
24453         namespaces
24454
24455 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
24456
24457         * support.cs: 
24458
24459         * rootcontext.cs: (ModuleBuilder) Made static, first step into
24460         making things static.  I need this to avoid passing the
24461         TypeContainer when calling ParameterType.
24462
24463         * support.cs (InternalParameters.ParameterType): Remove ugly hack
24464         that did string manipulation to compute the type and then call
24465         GetType.  Use Parameter.ParameterType instead.
24466
24467         * cs-tokenizer.cs: Consume the suffix for floating values.
24468
24469         * expression.cs (ParameterReference): figure out whether this is a
24470         reference parameter or not.  Kill an extra variable by computing
24471         the arg_idx during emission.
24472
24473         * parameter.cs (Parameters.GetParameterInfo): New overloaded
24474         function that returns whether a parameter is an out/ref value or not.
24475
24476         (Parameter.ParameterType): The type of the parameter (base,
24477         without ref/out applied).
24478
24479         (Parameter.Resolve): Perform resolution here.
24480         (Parameter.ExternalType): The full type (with ref/out applied).
24481
24482         * statement.cs (Using.Emit, Using.EmitExpression): Implement
24483         support for expressions on the using statement.
24484
24485 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
24486
24487         * statement.cs (Using.EmitLocalVariableDecls): Split the
24488         localvariable handling of the using statement.
24489
24490         (Block.EmitMeta): Keep track of variable count across blocks.  We
24491         were reusing slots on separate branches of blocks.
24492
24493         (Try.Emit): Emit the general code block, we were not emitting it. 
24494
24495         Check the type of the declaration to be an IDisposable or
24496         something that can be implicity converted to it. 
24497
24498         Emit conversions if required.
24499
24500         * ecore.cs (EmptyExpression): New utility class.
24501         (Expression.ImplicitConversionExists): New utility function.
24502
24503 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
24504
24505         * statement.cs (Using): Implement.
24506
24507         * expression.cs (LocalVariableReference): Support read only variables.
24508
24509         * statement.cs: Remove the explicit emit for the Leave opcode.
24510         (VariableInfo): Add a readonly field.
24511
24512 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
24513
24514         * ecore.cs (ConvCast): new class used to encapsulate the various
24515         explicit integer conversions that works in both checked and
24516         unchecked contexts.
24517
24518         (Expression.ConvertNumericExplicit): Use new ConvCast class to
24519         properly generate the overflow opcodes.
24520
24521 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24522
24523         * statement.cs: The correct type for the EmptyExpression is the
24524         element_type, not the variable type.  Ravi pointed this out.
24525
24526 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24527
24528         * class.cs (Method::Define): Handle PInvoke methods specially
24529         by using DefinePInvokeMethod instead of the usual one.
24530
24531         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
24532         above to do the task of extracting information and defining the method.
24533
24534 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24535
24536         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
24537         of the condition for string type.
24538
24539         (Emit): Move that here. 
24540
24541         (ArrayCreation::CheckIndices): Keep string literals in their expression
24542         form.
24543
24544         (EmitDynamicInitializers): Handle strings appropriately.
24545
24546 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24547
24548         * codegen.cs (EmitContext): Replace multiple variables with a
24549         single pointer to the current Switch statement.
24550
24551         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
24552         EmitContext.
24553
24554 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24555
24556         * statement.cs 
24557
24558         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
24559         default'.
24560
24561         (Foreach.Emit): Foreach on arrays was not setting
24562         up the loop variables (for break/continue).
24563
24564         (GotoCase): Semi-implented.
24565
24566 2001-12-03  Ravi Pratap  <ravi@ximian.com>
24567
24568         * attribute.cs (CheckAttribute): Handle system attributes by using
24569         Attribute.GetAttributes to examine information we need.
24570
24571         (GetValidPlaces): Same here.
24572
24573         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
24574
24575         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
24576
24577         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
24578
24579         (Method::Define): Set appropriate flags if we have a DllImport attribute.
24580
24581         (Method::Emit): Handle the case when we are a PInvoke method.
24582
24583 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24584
24585         * expression.cs: Use ResolveWithSimpleName on compound names.
24586
24587 2001-12-02  Ravi Pratap  <ravi@ximian.com>
24588
24589         * constant.cs (EmitConstant): Make sure we resolve the associated expression
24590         before trying to reduce it.
24591
24592         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
24593
24594         * constant.cs (LookupConstantValue): Implement.
24595
24596         (EmitConstant): Use the above in emitting the constant.
24597
24598         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
24599         that are user-defined by doing a LookupConstantValue on them.
24600
24601         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
24602         too, like above.
24603
24604 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
24605
24606         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
24607
24608         (BaseAccess.DoResolve): Implement.
24609
24610         (MemberAccess.DoResolve): Split this routine into a
24611         ResolveMemberAccess routine that can be used independently
24612
24613 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
24614
24615         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
24616         As that share bits of the implementation.  Is returns a boolean,
24617         while As returns the Type that is being probed.
24618
24619 2001-12-01  Ravi Pratap  <ravi@ximian.com>
24620
24621         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
24622         instead of a Literal - much easier.
24623
24624         (EnumInTransit): Remove - utterly useless :-)
24625
24626         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
24627
24628         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
24629
24630         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
24631         chain when we have no associated expression.
24632
24633 2001-11-30  Ravi Pratap  <ravi@ximian.com>
24634
24635         * constant.cs (Define): Use Location while reporting the errror.
24636
24637         Also emit a warning when 'new' is used and there is no inherited
24638         member to hide.
24639
24640         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
24641         populated.
24642
24643         (LookupEnumValue): Implement to lookup an enum member's value and define it
24644         if necessary.
24645
24646         (Populate): Re-write accordingly to use the above routine.
24647
24648 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
24649
24650         * expression.cs (This): Fix prototype for DoResolveLValue to
24651         override the base class DoResolveLValue.
24652
24653         * cs-parser.cs: Report errors cs574 and cs575 (destructor
24654         declarations) 
24655
24656         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
24657         (we need to load the address of the field here).  This fixes
24658         test-22. 
24659
24660         (FieldExpr.DoResolveLValue): Call the DoResolve
24661         function to initialize the Instance expression.
24662
24663         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
24664         correctly the GetEnumerator operation on a value type.
24665
24666         * cs-parser.jay: Add more simple parsing error catches.
24667
24668         * statement.cs (Switch): Add support for string switches.
24669         Handle null specially.
24670
24671         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
24672
24673 2001-11-28  Ravi Pratap  <ravi@ximian.com>
24674
24675         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
24676
24677         (declare_local_constant): New helper function.
24678
24679         * statement.cs (AddConstant): Keep a separate record of constants
24680
24681         (IsConstant): Implement to determine if a variable is a constant.
24682
24683         (GetConstantExpression): Implement.
24684
24685         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
24686
24687         * statement.cs (IsVariableDefined): Re-write.
24688
24689 2001-11-27  Ravi Pratap  <ravi@ximian.com>
24690
24691         * class.cs (TypeContainer::FindMembers): Look for constants
24692         in the case when we are looking for MemberTypes.Field
24693
24694         * expression.cs (MemberAccess::DoResolve): Check that in the
24695         case we are a FieldExpr and a Literal, we are not being accessed
24696         by an instance reference.
24697
24698         * cs-parser.jay (local_constant_declaration): Implement.
24699
24700         (declaration_statement): Implement for constant declarations.
24701
24702 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
24703
24704         * statement.cs (Switch): Catch double defaults.
24705
24706         (Switch): More work on the switch() statement
24707         implementation.  It works for integral values now, need to finish
24708         string support.
24709
24710
24711 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24712
24713         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
24714         integer literals into other integer literals.  To be used by
24715         switch. 
24716
24717 2001-11-24  Ravi Pratap  <ravi@ximian.com>
24718
24719         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
24720         some memory.
24721
24722         (EmitDynamicInitializers): Cope with the above since we extract data
24723         directly from ArrayData now.
24724
24725         (ExpectInitializers): Keep track of whether initializers are mandatory
24726         or not.
24727
24728         (Bounds): Make it a hashtable to prevent the same dimension being 
24729         recorded for every element in that dimension.
24730
24731         (EmitDynamicInitializers): Fix bug which prevented the Set array method
24732         from being found.
24733
24734         Also fix bug which was causing the indices to be emitted in the reverse
24735         order.
24736
24737 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24738
24739         * expression.cs (ArrayCreation): Implement the bits that Ravi left
24740         unfinished.  They do not work, because the underlying code is
24741         sloppy.
24742
24743 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24744
24745         * cs-parser.jay: Remove bogus fixme.
24746
24747         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
24748         on Switch statement.
24749
24750 2001-11-23  Ravi Pratap  <ravi@ximian.com>
24751
24752         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
24753         the same. 
24754
24755         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
24756         parameter. Apparently, any expression is allowed. 
24757
24758         (ValidateInitializers): Update accordingly.
24759
24760         (CheckIndices): Fix some tricky bugs thanks to recursion.
24761
24762         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
24763         I was being completely brain-dead.
24764
24765         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
24766         and re-write acordingly.
24767
24768         (DelegateInvocation): Re-write accordingly.
24769
24770         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
24771
24772         (MakeByteBlob): Handle types more correctly.
24773
24774         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
24775         initialization from expressions but it is incomplete because I am a complete
24776         Dodo :-|
24777
24778 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24779
24780         * statement.cs (If.Emit): Fix a bug that generated incorrect code
24781         on If.  Basically, we have to return `true' (ie, we do return to
24782         our caller) only if both branches of the if return.
24783
24784         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
24785         short-circuit operators, handle them as short circuit operators. 
24786
24787         (Cast.DoResolve): Resolve type.
24788         (Cast.Cast): Take an expression as the target type.
24789
24790         * cs-parser.jay (cast_expression): Remove old hack that only
24791         allowed a limited set of types to be handled.  Now we take a
24792         unary_expression and we resolve to a type during semantic
24793         analysis.
24794
24795         Use the grammar productions from Rhys to handle casts (this is
24796         not complete like Rhys syntax yet, we fail to handle that corner
24797         case that C# has regarding (-x), but we will get there.
24798
24799 2001-11-22  Ravi Pratap  <ravi@ximian.com>
24800
24801         * class.cs (EmitFieldInitializer): Take care of the case when we have a
24802         field which is an array type.
24803
24804         * cs-parser.jay (declare_local_variables): Support array initialization too.
24805
24806         * typemanager.cs (MakeKey): Implement.
24807
24808         (everywhere): Use the above appropriately.
24809
24810         * cs-parser.jay (for_statement): Update for array initialization while
24811         declaring variables.
24812
24813         * ecore.cs : The error message was correct, it's the variable's names that
24814         were misleading ;-) Make the code more readable.
24815
24816         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
24817         the correct type etc.
24818
24819         (ConvertExplicit): Handle Enum types by examining the underlying type.
24820
24821 2001-11-21  Ravi Pratap  <ravi@ximian.com>
24822
24823         * parameter.cs (GetCallingConvention): Always return
24824         CallingConventions.Standard for now.
24825
24826 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24827
24828         * expression.cs (Binary.ResolveOperator): Update the values of `l'
24829         and `r' after calling DoNumericPromotions.
24830
24831         * ecore.cs: Fix error message (the types were in the wrong order).
24832
24833         * statement.cs (Foreach.ProbeCollectionType): Need to pass
24834         BindingFlags.Instance as well 
24835
24836         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
24837         implicit int literal conversion in an empty cast so that we
24838         propagate the right type upstream.
24839
24840         (UnboxCast): new class used to unbox value types.
24841         (Expression.ConvertExplicit): Add explicit type conversions done
24842         by unboxing.
24843
24844         (Expression.ImplicitNumericConversion): Oops, forgot to test for
24845         the target type before applying the implicit LongLiterals to ULong
24846         literal cast.
24847
24848 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
24849
24850         * cs-parser.jay (for_statement): Reworked the way For works: now
24851         we declare manually any variables that are introduced in
24852         for_initializer to solve the problem of having out-of-band code
24853         emition (that is what got for broken).
24854
24855         (declaration_statement): Perform the actual variable declaration
24856         that used to be done in local_variable_declaration here.
24857
24858         (local_variable_declaration): Do not declare anything, just pass
24859         the information on a DictionaryEntry
24860
24861 2001-11-20  Ravi Pratap  <ravi@ximian.com>
24862
24863         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
24864         re-write of the logic to now make it recursive.
24865
24866         (UpdateIndices): Re-write accordingly.
24867
24868         Store element data in a separate ArrayData list in the above methods.
24869
24870         (MakeByteBlob): Implement to dump the array data into a byte array.
24871
24872 2001-11-19  Ravi Pratap  <ravi@ximian.com>
24873
24874         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
24875         into CheckIndices.
24876
24877         * constant.cs (Define): Implement.
24878
24879         (EmitConstant): Re-write fully.
24880
24881         Pass in location info.
24882
24883         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
24884         respectively.
24885
24886         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
24887         DictionaryEntry since we need location info too.
24888
24889         (constant_declaration): Update accordingly.
24890
24891         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
24892         code into another method : UpdateIndices.
24893
24894 2001-11-18  Ravi Pratap  <ravi@ximian.com>
24895
24896         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
24897         some type checking etc.
24898
24899 2001-11-17  Ravi Pratap  <ravi@ximian.com>
24900
24901         * expression.cs (ArrayCreation::ValidateInitializers): Implement
24902         bits to provide dimension info if the user skips doing that.
24903
24904         Update second constructor to store the rank correctly.
24905
24906 2001-11-16  Ravi Pratap  <ravi@ximian.com>
24907
24908         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
24909         and try to implement.
24910
24911         * ../errors/cs0150.cs : Add.
24912
24913         * ../errors/cs0178.cs : Add.
24914
24915 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
24916
24917         * statement.cs: Implement foreach on multi-dimensional arrays. 
24918
24919         * parameter.cs (Parameters.GetParameterByName): Also lookup the
24920         name of the params argument.
24921
24922         * expression.cs: Use EmitStoreOpcode to get the right opcode while
24923         initializing the array.
24924
24925         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
24926         we can use this elsewhere.
24927
24928         * statement.cs: Finish implementation of foreach for single
24929         dimension arrays.
24930
24931         * cs-parser.jay: Use an out-of-band stack to pass information
24932         around, I wonder why I need this.
24933
24934         foreach_block: Make the new foreach_block the current_block.
24935
24936         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
24937         function used to return a static Parameters structure.  Used for
24938         empty parameters, as those are created very frequently.
24939
24940         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
24941
24942 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24943
24944         * interface.cs : Default modifier is private, not public. The
24945         make verify test passes again.
24946
24947 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24948
24949         * support.cs (ReflectionParameters): Fix logic to determine
24950         whether the last parameter is a params one. Test 9 passes again.
24951
24952         * delegate.cs (Populate): Register the builders we define with
24953         RegisterParameterForBuilder. Test 19 passes again.
24954
24955         * cs-parser.jay (property_declaration): Reference $6 instead
24956         of $$ to get at the location.
24957
24958         (indexer_declaration): Similar stuff.
24959
24960         (attribute): Ditto.
24961
24962         * class.cs (Property): Register parameters for the Get and Set methods
24963         if they exist. Test 23 passes again.
24964
24965         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
24966         call to EmitArguments as we are sure there aren't any params arguments. 
24967         Test 32 passes again.
24968
24969         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
24970         IndexOutOfRangeException. 
24971
24972         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
24973         Test 33 now passes again.
24974
24975 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
24976
24977         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
24978         broke a bunch of things.  Will have to come up with a better way
24979         of tracking locations.
24980
24981         * statement.cs: Implemented foreach for single dimension arrays.
24982
24983 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24984
24985         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
24986         an error.  This removes the lookup from the critical path.
24987
24988         * cs-parser.jay: Removed use of temporary_loc, which is completely
24989         broken. 
24990
24991 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
24992
24993         * support.cs (ReflectionParameters.ParameterModifier): Report
24994         whether the argument is a PARAMS argument or not.
24995
24996         * class.cs: Set the attribute `ParamArrayAttribute' on the
24997         parameter argument.
24998
24999         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
25000         and cons_param_array_attribute (ConstructorInfo for
25001         ParamArrayAttribute)., 
25002
25003         * codegen.cs: Emit the return using the `Return' statement, that
25004         way we can report the error correctly for missing return values. 
25005
25006         * class.cs (Method.Emit): Clean up.
25007
25008         * expression.cs (Argument.Resolve): Take another argument: the
25009         location where this argument is used.  Notice that this is not
25010         part of the "Argument" class as to reduce the size of the
25011         structure (we know the approximate location anyways).
25012
25013         Test if the argument is a variable-reference, if not, then
25014         complain with a 206.
25015
25016         (Argument.Emit): Emit addresses of variables.
25017
25018         (Argument.FullDesc): Simplify.
25019
25020         (Invocation.DoResolve): Update for Argument.Resolve.
25021
25022         (ElementAccess.DoResolve): ditto.
25023
25024         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
25025         method should be virtual, as this method is always virtual.
25026
25027         (NewDelegate.DoResolve): Update for Argument.Resolve.
25028
25029         * class.cs (ConstructorInitializer.DoResolve): ditto.
25030
25031         * attribute.cs (Attribute.Resolve): ditto.
25032
25033 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
25034
25035         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
25036
25037         * expression.cs (ParameterReference): Drop IStackStorage and implement
25038         IAssignMethod instead. 
25039
25040         (LocalVariableReference): ditto.
25041
25042         * ecore.cs (FieldExpr): Drop IStackStorage and implement
25043         IAssignMethod instead. 
25044
25045 2001-11-13  Miguel de Icaza <miguel@ximian.com>
25046
25047         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
25048         enumerations that are used in heavily used structures derive from
25049         byte in a laughable and pathetic attempt to reduce memory usage.
25050         This is the kind of pre-optimzations that you should not do at
25051         home without adult supervision.
25052
25053         * expression.cs (UnaryMutator): New class, used to handle ++ and
25054         -- separatedly from the other unary operators.  Cleans up the
25055         code, and kills the ExpressionStatement dependency in Unary.
25056
25057         (Unary): Removed `method' and `Arguments' from this class, making
25058         it smaller, and moving it all to SimpleCall, so I can reuse this
25059         code in other locations and avoid creating a lot of transient data
25060         strucutres when not required.
25061
25062         * cs-parser.jay: Adjust for new changes.
25063
25064 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
25065
25066         * enum.cs (Enum.Populate): If there is a failure during
25067         definition, return
25068
25069         * cs-parser.jay (opt_enum_base): we used to catch type errors
25070         here, but this is really incorrect.  The type error should be
25071         catched during semantic analysis.
25072
25073 2001-12-11  Ravi Pratap  <ravi@ximian.com>
25074
25075         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
25076         current_local_parameters as expected since I, in my stupidity, had forgotten
25077         to do this :-)
25078
25079         * attribute.cs (GetValidPlaces): Fix stupid bug.
25080
25081         * class.cs (Method::Emit): Perform check on applicability of attributes.
25082
25083         (Constructor::Emit): Ditto.
25084
25085         (Field::Emit): Ditto.
25086
25087         (Field.Location): Store location information.
25088
25089         (Property, Event, Indexer, Operator): Ditto.
25090
25091         * cs-parser.jay (field_declaration): Pass in location for each field.
25092
25093         * ../errors/cs0592.cs : Add.
25094
25095 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25096
25097         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
25098
25099         (InitCoreTypes): Update accordingly.
25100
25101         (RegisterAttrType, LookupAttr): Implement.
25102
25103         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
25104         info about the same.
25105
25106         (Resolve): Update to populate the above as necessary.
25107
25108         (Error592): Helper.
25109
25110         (GetValidPlaces): Helper to the above.
25111
25112         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
25113
25114         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
25115
25116 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25117
25118         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
25119
25120         * ../errors/cs0617.cs : Add.
25121
25122 2001-11-11  Ravi Pratap  <ravi@ximian.com>
25123
25124         * enum.cs (Emit): Rename to Populate to be more consistent with what
25125         we expect it to do and when exactly it is called.
25126
25127         * class.cs, rootcontext.cs : Update accordingly.
25128
25129         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
25130         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
25131
25132         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
25133
25134         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
25135         of a fieldinfo using the above, when dealing with a FieldBuilder.
25136
25137 2001-11-10  Ravi Pratap  <ravi@ximian.com>
25138
25139         * ../errors/cs0031.cs : Add.
25140
25141         * ../errors/cs1008.cs : Add.
25142
25143         * ../errrors/cs0543.cs : Add.
25144
25145         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
25146         enum type.
25147
25148         (FindMembers): Implement.
25149
25150         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
25151         enums and delegates too.
25152
25153         (enum_types): Rename to builder_to_enum.
25154
25155         (delegate_types): Rename to builder_to_delegate.
25156
25157         * delegate.cs (FindMembers): Implement.
25158
25159 2001-11-09  Ravi Pratap  <ravi@ximian.com>
25160
25161         * typemanager.cs (IsEnumType): Implement.
25162
25163         * enum.cs (Emit): Re-write parts to account for the underlying type
25164         better and perform checking etc.
25165
25166         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
25167         of the underlying type.
25168
25169         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
25170         value
25171
25172         * enum.cs (error31): Helper to report error #31.
25173
25174         * cs-parser.jay (enum_declaration): Store location of each member too.
25175
25176         * enum.cs (member_to_location): New hashtable. 
25177
25178         (AddEnumMember): Update location hashtable.
25179
25180         (Emit): Use the location of each member while reporting errors.
25181
25182 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25183
25184         * cs-parser.jay: A for_initializer if is a
25185         local_variable_declaration really ammount to have an implicit
25186         block with the variable declaration and no initializer for for.
25187
25188         * statement.cs (For.Emit): Cope with null initializers.
25189
25190         This fixes the infinite loop on for initializers.
25191
25192 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
25193
25194         * enum.cs: More cleanup.
25195
25196         * ecore.cs: Remove dead code.
25197
25198         * class.cs (Property.Emit): More simplification.
25199         (Event.Emit): ditto.
25200
25201         Reworked to have less levels of indentation.
25202
25203 2001-11-08  Ravi Pratap  <ravi@ximian.com>
25204
25205         * class.cs (Property): Emit attributes.
25206
25207         (Field): Ditto.
25208
25209         (Event): Ditto.
25210
25211         (Indexer): Ditto.
25212
25213         (Operator): Ditto.
25214
25215         * enum.cs (Emit): Ditto.
25216
25217         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
25218         Enums too.
25219
25220         * class.cs (Field, Event, etc.): Move attribute generation into the
25221         Emit method everywhere.
25222
25223         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
25224         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
25225         as we had no way of defining nested enums !
25226
25227         * rootcontext.cs : Adjust code accordingly.
25228
25229         * typemanager.cs (AddEnumType): To keep track of enum types separately.
25230
25231 2001-11-07  Ravi Pratap  <ravi@ximian.com>
25232
25233         * expression.cs (EvalConstantExpression): Move into ecore.cs
25234
25235         * enum.cs (Enum): Rename some members and make them public and readonly
25236         according to our convention.
25237
25238         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
25239         nothing else.
25240
25241         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
25242
25243         (Enum::Emit): Write a simple version for now which doesn't try to compute
25244         expressions. I shall modify this to be more robust in just a while.
25245
25246         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
25247
25248         (TypeContainer::CloseType): Create the Enum types too.
25249
25250         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
25251
25252         * expression.cs (EvalConstantExpression): Get rid of completely.
25253
25254         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
25255         user-defined values and other cases.
25256
25257         (IsValidEnumLiteral): Helper function.
25258
25259         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
25260         out there in the case we had a literal FieldExpr.
25261
25262         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
25263
25264         (Literalize): Revamp a bit to take two arguments.
25265
25266         (EnumLiteral): New class which derives from Literal to wrap enum literals.
25267
25268 2001-11-06  Ravi Pratap  <ravi@ximian.com>
25269
25270         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
25271
25272         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
25273
25274         (Resolve): Use the above to ensure we have proper initializers.
25275
25276 2001-11-05  Ravi Pratap  <ravi@ximian.com>
25277
25278         * expression.cs (Expression::EvalConstantExpression): New method to 
25279         evaluate constant expressions.
25280
25281         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
25282
25283 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
25284
25285         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
25286         in an array.
25287
25288         (Binary.ResolveOperator): Handle operator != (object a, object b)
25289         and operator == (object a, object b);
25290
25291         (Binary.DoNumericPromotions): Indicate whether the numeric
25292         promotion was possible.
25293
25294         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
25295         Implement.  
25296
25297         Made the ArrayAccess implement interface IAssignMethod instead of
25298         IStackStore as the order in which arguments are passed reflects
25299         this.
25300
25301         * assign.cs: Instead of using expr.ExprClass to select the way of
25302         assinging, probe for the IStackStore/IAssignMethod interfaces.
25303
25304         * typemanager.cs: Load InitializeArray definition.
25305
25306         * rootcontext.cs (RootContext.MakeStaticData): Used to define
25307         static data that can be used to initialize arrays. 
25308
25309 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
25310
25311         * expression.cs: Handle operator== and operator!= for booleans.
25312
25313         (Conditioal.Reduce): Implement reducer for the ?: operator.
25314
25315         (Conditional.Resolve): Implement dead code elimination.
25316
25317         (Binary.Resolve): Catch string literals and return a new
25318         concatenated string.
25319
25320         (Unary.Reduce): Implement reduction of unary expressions.
25321
25322         * ecore.cs: Split out the expression core handling here.
25323
25324         (Expression.Reduce): New method used to perform constant folding
25325         and CSE.  This is needed to support constant-expressions. 
25326
25327         * statement.cs (Statement.EmitBoolExpression): Pass true and false
25328         targets, and optimize for !x.
25329
25330 2001-11-04  Ravi Pratap  <ravi@ximian.com>
25331
25332         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
25333         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
25334         set custom atttributes.
25335
25336         * literal.cs (Literal::GetValue): New abstract method to return the actual
25337         value of the literal, cast as an object.
25338
25339         (*Literal): Implement GetValue method.
25340
25341         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
25342         expressions to the arraylist but objects of type Argument.
25343
25344         * class.cs (TypeContainer::Emit): Emit our attributes too.
25345
25346         (Method::Emit, Constructor::Emit): Ditto.
25347
25348         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
25349         to be ignoring earlier.
25350
25351 2001-11-03  Ravi Pratap  <ravi@ximian.com>
25352
25353         * attribute.cs (AttributeSection::Define): Implement to do the business
25354         of constructing a CustomAttributeBuilder.
25355
25356         (Attribute): New trivial class. Increases readability of code.  
25357
25358         * cs-parser.jay : Update accordingly.
25359
25360         (positional_argument_list, named_argument_list, named_argument): New rules
25361
25362         (attribute_arguments): Use the above so that we are more correct.
25363
25364 2001-11-02  Ravi Pratap  <ravi@ximian.com>
25365
25366         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
25367         to perform all checks for a method with a params parameter.
25368
25369         (Invocation::OverloadResolve): Update to use the above method and therefore
25370         cope correctly with params method invocations.
25371
25372         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
25373         params too.
25374
25375         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
25376         constructors in our parent too because we can't afford to miss out on 
25377         protected ones ;-)
25378
25379         * attribute.cs (AttributeSection): New name for the class Attribute
25380
25381         Other trivial changes to improve readability.
25382
25383         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
25384         use the new class names.
25385
25386 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25387
25388         * class.cs (Method::Define): Complete definition for params types too
25389
25390         (Indexer::Define): Ditto.
25391
25392         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
25393         Cope everywhere with a request for info about the array parameter.
25394
25395 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25396
25397         * tree.cs (RecordNamespace): Fix up to check for the correct key.
25398
25399         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
25400         local_variable_type to extract the string corresponding to the type.
25401
25402         (local_variable_type): Fixup the action to use the new helper method.
25403
25404         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
25405         go.
25406
25407         * expression.cs : Clean out code which uses the above.
25408
25409 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25410
25411         * typemanager.cs (RegisterMethod): Check if we already have an existing key
25412         and bale out if necessary by returning a false.
25413
25414         (RegisterProperty): Ditto.
25415
25416         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
25417         and print out appropriate error messages.
25418
25419         * interface.cs (everywhere): Ditto.
25420
25421         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
25422         location to constructor.
25423
25424         * class.cs (Property, Event, Indexer): Update accordingly.
25425
25426         * ../errors/cs111.cs : Added.
25427
25428         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
25429         of a method, as laid down by the spec.
25430
25431         (Invocation::OverloadResolve): Use the above method.
25432
25433 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25434
25435         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
25436         now take a TypeContainer and a Parameters object.
25437
25438         (ParameterData): Modify return type of ParameterModifier method to be 
25439         Parameter.Modifier and not a string.
25440
25441         (ReflectionParameters, InternalParameters): Update accordingly.
25442
25443         * expression.cs (Argument::GetParameterModifier): Same here.
25444
25445         * support.cs (InternalParameters::ParameterType): Find a better way of determining
25446         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
25447         symbol in it at all so maybe this is only for now.
25448
25449 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25450
25451         * support.cs (InternalParameters): Constructor now takes an extra argument 
25452         which is the actual Parameters class.
25453
25454         (ParameterDesc): Update to provide info on ref/out modifiers.
25455
25456         * class.cs (everywhere): Update call to InternalParameters to pass in
25457         the second argument too.
25458
25459         * support.cs (ParameterData): Add ParameterModifier, which is a method 
25460         to return the modifier info [ref/out etc]
25461
25462         (InternalParameters, ReflectionParameters): Implement the above.
25463
25464         * expression.cs (Argument::ParameterModifier): Similar function to return
25465         info about the argument's modifiers.
25466
25467         (Invocation::OverloadResolve): Update to take into account matching modifiers 
25468         too.
25469
25470         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
25471         a new SetFormalParameters object which we pass to InternalParameters.
25472
25473 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25474
25475         * expression.cs (NewArray): Merge into the ArrayCreation class.
25476
25477 2001-10-29  Ravi Pratap  <ravi@ximian.com>
25478
25479         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
25480         NewUserdefinedArray into one as there wasn't much of a use in having
25481         two separate ones.
25482
25483         * expression.cs (Argument): Change field's name to ArgType from Type.
25484
25485         (Type): New readonly property which returns the proper type, taking into 
25486         account ref/out modifiers.
25487
25488         (everywhere): Adjust code accordingly for the above.
25489
25490         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
25491         whether we are emitting for a ref or out parameter.
25492
25493         * expression.cs (Argument::Emit): Use the above field to set the state.
25494
25495         (LocalVariableReference::Emit): Update to honour the flag and emit the
25496         right stuff.
25497
25498         * parameter.cs (Attributes): Set the correct flags for ref parameters.
25499
25500         * expression.cs (Argument::FullDesc): New function to provide a full desc.
25501
25502         * support.cs (ParameterData): Add method ParameterDesc to the interface.
25503
25504         (ReflectionParameters, InternalParameters): Implement the above method.
25505
25506         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
25507         reporting errors.
25508
25509         (Invocation::FullMethodDesc): Ditto. 
25510
25511 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
25512
25513         * cs-parser.jay: Add extra production for the second form of array
25514         creation. 
25515
25516         * expression.cs (ArrayCreation): Update to reflect the above
25517         change. 
25518
25519         * Small changes to prepare for Array initialization.
25520
25521 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
25522
25523         * typemanager.cs (ImplementsInterface): interface might be null;
25524         Deal with this problem;
25525
25526         Also, we do store negative hits on the cache (null values), so use
25527         this instead of calling t.GetInterfaces on the type everytime.
25528
25529 2001-10-28  Ravi Pratap  <ravi@ximian.com>
25530
25531         * typemanager.cs (IsBuiltinType): New method to help determine the same.
25532
25533         * expression.cs (New::DoResolve): Get rid of array creation code and instead
25534         split functionality out into different classes.
25535
25536         (New::FormArrayType): Move into NewBuiltinArray.
25537
25538         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
25539         quite useless.
25540
25541         (NewBuiltinArray): New class to handle creation of built-in arrays.
25542
25543         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
25544         account creation of one-dimensional arrays.
25545
25546         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
25547
25548         (NewUserdefinedArray::DoResolve): Implement.
25549
25550         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
25551
25552         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
25553         we maintain inside the TypeManager. This is necessary to perform lookups on the
25554         module builder.
25555
25556         (LookupType): Update to perform GetType on the module builders too.     
25557
25558         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
25559
25560         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
25561
25562 2001-10-23  Ravi Pratap  <ravi@ximian.com>
25563
25564         * expression.cs (New::DoResolve): Implement guts of array creation.
25565
25566         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
25567
25568 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
25569
25570         * expression.cs: Fix bug I introduced lsat night that broke
25571         Delegates. 
25572
25573         (Expression.Resolve): Report a 246 error (can not resolve name)
25574         if we find a SimpleName in the stream.
25575
25576         (Expression.ResolveLValue): Ditto.
25577
25578         (Expression.ResolveWithSimpleName): This function is a variant of
25579         ResolveName, this one allows SimpleNames to be returned without a
25580         warning.  The only consumer of SimpleNames is MemberAccess
25581
25582 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
25583
25584         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
25585         might arrive here.  I have my doubts that this is correct.
25586
25587         * statement.cs (Lock): Implement lock statement.
25588
25589         * cs-parser.jay: Small fixes to support `lock' and `using'
25590
25591         * cs-tokenizer.cs: Remove extra space
25592
25593         * driver.cs: New flag --checked, allows to turn on integer math
25594         checking. 
25595
25596         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
25597         Threading.Monitor.Exit 
25598
25599 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
25600
25601         * expression.cs (IndexerAccess::DoResolveLValue): Set the
25602         Expression Class to be IndexerAccess.
25603
25604         Notice that Indexer::DoResolve sets the eclass to Value.
25605
25606 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
25607
25608         * class.cs (TypeContainer::Emit): Emit code for indexers.
25609
25610         * assign.cs (IAssignMethod): New interface implemented by Indexers
25611         and Properties for handling assignment.
25612
25613         (Assign::Emit): Simplify and reuse code. 
25614
25615         * expression.cs (IndexerAccess, PropertyExpr): Implement
25616         IAssignMethod, clean up old code. 
25617
25618 2001-10-22  Ravi Pratap  <ravi@ximian.com>
25619
25620         * typemanager.cs (ImplementsInterface): New method to determine if a type
25621         implements a given interface. Provides a nice cache too.
25622
25623         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
25624         method.
25625
25626         (ConvertReferenceExplicit): Ditto.
25627
25628         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
25629         various methods, with correct names etc.
25630
25631         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
25632         Operator.UnaryNegation.
25633
25634         * cs-parser.jay (operator_declarator): Be a little clever in the case where
25635         we have a unary plus or minus operator.
25636
25637         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
25638         UnaryMinus.
25639
25640         * everywhere : update accordingly.
25641
25642         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
25643         respectively.
25644
25645         * class.cs (Method::Define): For the case where we are implementing a method
25646         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
25647         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
25648
25649 2001-10-21  Ravi Pratap  <ravi@ximian.com>
25650
25651         * interface.cs (FindMembers): Implement to work around S.R.E
25652         lameness.
25653
25654         * typemanager.cs (IsInterfaceType): Implement.
25655
25656         (FindMembers): Update to handle interface types too.
25657
25658         * expression.cs (ImplicitReferenceConversion): Re-write bits which
25659         use IsAssignableFrom as that is not correct - it doesn't work.
25660
25661         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
25662         and accordingly override EmitStatement.
25663
25664         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
25665         using the correct logic :-)
25666
25667 2001-10-19  Ravi Pratap  <ravi@ximian.com>
25668
25669         * ../errors/cs-11.cs : Add to demonstrate error -11 
25670
25671 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
25672
25673         * assign.cs (Assign::Resolve): Resolve right hand side first, and
25674         then pass this as a hint to ResolveLValue.
25675
25676         * expression.cs (FieldExpr): Add Location information
25677
25678         (FieldExpr::LValueResolve): Report assignment to readonly
25679         variable. 
25680
25681         (Expression::ExprClassFromMemberInfo): Pass location information.
25682
25683         (Expression::ResolveLValue): Add new method that resolves an
25684         LValue. 
25685
25686         (Expression::DoResolveLValue): Default invocation calls
25687         DoResolve. 
25688
25689         (Indexers): New class used to keep track of indexers in a given
25690         Type. 
25691
25692         (IStackStore): Renamed from LValue, as it did not really describe
25693         what this did.  Also ResolveLValue is gone from this interface and
25694         now is part of Expression.
25695
25696         (ElementAccess): Depending on the element access type
25697
25698         * typemanager.cs: Add `indexer_name_type' as a Core type
25699         (System.Runtime.CompilerServices.IndexerNameAttribute)
25700
25701         * statement.cs (Goto): Take a location.
25702
25703 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25704
25705         * delegate.cs (Delegate::VerifyDelegate): New method to verify
25706         if two delegates are compatible.
25707
25708         (NewDelegate::DoResolve): Update to take care of the case when
25709         we instantiate a delegate from another delegate.
25710
25711         * typemanager.cs (FindMembers): Don't even try to look up members
25712         of Delegate types for now.
25713
25714 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25715
25716         * delegate.cs (NewDelegate): New class to take care of delegate
25717         instantiation.
25718
25719         * expression.cs (New): Split the delegate related code out into 
25720         the NewDelegate class.
25721
25722         * delegate.cs (DelegateInvocation): New class to handle delegate 
25723         invocation.
25724
25725         * expression.cs (Invocation): Split out delegate related code into
25726         the DelegateInvocation class.
25727
25728 2001-10-17  Ravi Pratap  <ravi@ximian.com>
25729
25730         * expression.cs (New::DoResolve): Implement delegate creation fully
25731         and according to the spec.
25732
25733         (New::DoEmit): Update to handle delegates differently.
25734
25735         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
25736         because of which we were printing out arguments in reverse order !
25737
25738         * delegate.cs (VerifyMethod): Implement to check if the given method
25739         matches the delegate.
25740
25741         (FullDelegateDesc): Implement.
25742
25743         (VerifyApplicability): Implement.
25744
25745         * expression.cs (Invocation::DoResolve): Update to accordingly handle
25746         delegate invocations too.
25747
25748         (Invocation::Emit): Ditto.
25749
25750         * ../errors/cs1593.cs : Added.
25751
25752         * ../errors/cs1594.cs : Added.
25753
25754         * delegate.cs (InstanceExpression, TargetMethod): New properties.
25755
25756 2001-10-16  Ravi Pratap  <ravi@ximian.com>
25757
25758         * typemanager.cs (intptr_type): Core type for System.IntPtr
25759
25760         (InitCoreTypes): Update for the same.
25761
25762         (iasyncresult_type, asynccallback_type): Ditto.
25763
25764         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
25765         correct.
25766
25767         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
25768         too.
25769
25770         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
25771         the builders for the 4 members of a delegate type :-)
25772
25773         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
25774         type.
25775
25776         * expression.cs (New::DoResolve): Implement guts for delegate creation.
25777
25778         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
25779
25780 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
25781
25782         * statement.cs (Break::Emit): Implement.   
25783         (Continue::Emit): Implement.
25784
25785         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25786         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25787         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25788         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
25789         end loop
25790
25791         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
25792         properties that track the label for the current loop (begin of the
25793         loop and end of the loop).
25794
25795 2001-10-15  Ravi Pratap  <ravi@ximian.com>
25796
25797         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
25798         use of emitting anything at all.
25799
25800         * class.cs, rootcontext.cs : Get rid of calls to the same.
25801
25802         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
25803
25804         (Populate): Define the constructor correctly and set the implementation
25805         attributes.
25806
25807         * typemanager.cs (delegate_types): New hashtable to hold delegates that
25808         have been defined.
25809
25810         (AddDelegateType): Implement.
25811
25812         (IsDelegateType): Implement helper method.
25813
25814         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
25815
25816         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
25817         and accordingly handle it.
25818
25819         * delegate.cs (Populate): Take TypeContainer argument.
25820         Implement bits to define the Invoke method. However, I still haven't figured out
25821         how to take care of the native int bit :-(
25822
25823         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
25824         Qualify the name of the delegate, not its return type !
25825
25826         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
25827         conversion.
25828
25829         (StandardConversionExists): Checking for array types turns out to be recursive.
25830
25831         (ConvertReferenceExplicit): Implement array conversion.
25832
25833         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
25834
25835 2001-10-12  Ravi Pratap  <ravi@ximian.com>
25836
25837         * cs-parser.jay (delegate_declaration): Store the fully qualified
25838         name as it is a type declaration.
25839
25840         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
25841         readonly.
25842
25843         (DefineDelegate): Renamed from Define. Does the same thing essentially,
25844         as TypeContainer::DefineType.
25845
25846         (Populate): Method in which all the definition of the various methods (Invoke)
25847         etc is done.
25848
25849         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
25850         see.
25851
25852         (CloseDelegate): Finally creates the delegate.
25853
25854         * class.cs (TypeContainer::DefineType): Update to define delegates.
25855         (Populate, Emit and CloseType): Do the same thing here too.
25856
25857         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
25858         delegates in all these operations.
25859
25860 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
25861
25862         * expression.cs: LocalTemporary: a new expression used to
25863         reference a temporary that has been created.
25864
25865         * assign.cs: Handle PropertyAccess back here, so that we can
25866         provide the proper semantic access to properties.
25867
25868         * expression.cs (Expression::ConvertReferenceExplicit): Implement
25869         a few more explicit conversions. 
25870
25871         * modifiers.cs: `NEW' modifier maps to HideBySig.
25872
25873         * expression.cs (PropertyExpr): Make this into an
25874         ExpressionStatement, and support the EmitStatement code path. 
25875
25876         Perform get/set error checking, clean up the interface.
25877
25878         * assign.cs: recognize PropertyExprs as targets, and if so, turn
25879         them into toplevel access objects.
25880
25881 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
25882
25883         * expression.cs: PropertyExpr::PropertyExpr: use work around the
25884         SRE.
25885
25886         * typemanager.cs: Keep track here of our PropertyBuilders again to
25887         work around lameness in SRE.
25888
25889 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
25890
25891         * expression.cs (LValue::LValueResolve): New method in the
25892         interface, used to perform a second resolution pass for LValues. 
25893
25894         (This::DoResolve): Catch the use of this in static methods.
25895
25896         (This::LValueResolve): Implement.
25897
25898         (This::Store): Remove warning, assigning to `this' in structures
25899         is 
25900
25901         (Invocation::Emit): Deal with invocation of
25902         methods on value types.  We need to pass the address to structure
25903         methods rather than the object itself.  (The equivalent code to
25904         emit "this" for structures leaves the entire structure on the
25905         stack instead of a pointer to it). 
25906
25907         (ParameterReference::DoResolve): Compute the real index for the
25908         argument based on whether the method takes or not a `this' pointer
25909         (ie, the method is static).
25910
25911         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
25912         value types returned from functions when we need to invoke a
25913         method on the sturcture.
25914
25915
25916 2001-10-11  Ravi Pratap  <ravi@ximian.com>
25917
25918         * class.cs (TypeContainer::DefineType): Method to actually do the business of
25919         defining the type in the Modulebuilder or Typebuilder. This is to take
25920         care of nested types which need to be defined on the TypeBuilder using
25921         DefineNestedMethod.
25922
25923         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
25924         methods in RootContext, only ported to be part of TypeContainer.
25925
25926         (TypeContainer::GetInterfaceOrClass): Ditto.
25927
25928         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
25929
25930         * interface.cs (Interface::DefineInterface): New method. Does exactly
25931         what RootContext.CreateInterface did earlier, only it takes care of nested types 
25932         too.
25933
25934         (Interface::GetInterfaces): Move from RootContext here and port.
25935
25936         (Interface::GetInterfaceByName): Same here.
25937
25938         * rootcontext.cs (ResolveTree): Re-write.
25939
25940         (PopulateTypes): Re-write.
25941
25942         * class.cs (TypeContainer::Populate): Populate nested types too.
25943         (TypeContainer::Emit): Emit nested members too.
25944
25945         * typemanager.cs (AddUserType): Do not make use of the FullName property,
25946         instead just use the name argument passed in as it is already fully
25947         qualified.
25948
25949         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
25950         to TypeContainer mapping to see if a type is user-defined.
25951
25952         * class.cs (TypeContainer::CloseType): Implement. 
25953
25954         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
25955         the default constructor.
25956
25957         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
25958         twice.
25959
25960         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
25961
25962         * interface.cs (CloseType): Create the type here.
25963
25964         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
25965         the hierarchy.
25966
25967         Remove all the methods which are now in TypeContainer.
25968
25969 2001-10-10  Ravi Pratap  <ravi@ximian.com>
25970
25971         * delegate.cs (Define): Re-write bits to define the delegate
25972         correctly.
25973
25974 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
25975
25976         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
25977
25978         * expression.cs (ImplicitReferenceConversion): handle null as well
25979         as a source to convert to any reference type.
25980
25981         * statement.cs (Return): Perform any implicit conversions to
25982         expected return type.  
25983
25984         Validate use of return statement.  
25985
25986         * codegen.cs (EmitContext): Pass the expected return type here.
25987
25988         * class.cs (Method, Constructor, Property): Pass expected return
25989         type to EmitContext.
25990
25991 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
25992
25993         * expression.cs: Make DoResolve take an EmitContext instead of a
25994         TypeContainer.
25995
25996         Replaced `l' and `location' for `loc', for consistency.
25997
25998         (Error, Warning): Remove unneeded Tc argument.
25999
26000         * assign.cs, literal.cs, constant.cs: Update to new calling
26001         convention. 
26002
26003         * codegen.cs: EmitContext now contains a flag indicating whether
26004         code is being generated in a static method or not.
26005
26006         * cs-parser.jay: DecomposeQI, new function that replaces the old
26007         QualifiedIdentifier.  Now we always decompose the assembled
26008         strings from qualified_identifier productions into a group of
26009         memberaccesses.
26010
26011 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
26012
26013         * rootcontext.cs: Deal with field-less struct types correctly now
26014         by passing the size option to Define Type.
26015
26016         * class.cs: Removed hack that created one static field. 
26017
26018 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26019
26020         * statement.cs: Moved most of the code generation here. 
26021
26022 2001-10-09  Ravi Pratap  <ravi@ximian.com>
26023
26024         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
26025         seem very right.
26026
26027         (ElementAccess): Remove useless bits for now - keep checks as the spec
26028         says.
26029
26030 2001-10-08  Ravi Pratap  <ravi@ximian.com>
26031
26032         * expression.cs (ElementAccess::DoResolve): Remove my crap code
26033         and start performing checks according to the spec.
26034
26035 2001-10-07  Ravi Pratap  <ravi@ximian.com>
26036
26037         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
26038         rank_specifiers instead.
26039
26040         (rank_specifiers): Change the order in which the rank specifiers are stored
26041
26042         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
26043
26044         * expression.cs (ElementAccess): Implement the LValue interface too.
26045
26046 2001-10-06  Ravi Pratap  <ravi@ximian.com>
26047
26048         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
26049         except that user defined conversions are not included.
26050
26051         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
26052         perform the conversion of the return type, if necessary.
26053
26054         (New::DoResolve): Check whether we are creating an array or an object
26055         and accordingly do the needful.
26056
26057         (New::Emit): Same here.
26058
26059         (New::DoResolve): Implement guts of array creation.
26060
26061         (New::FormLookupType): Helper function.
26062
26063 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26064
26065         * codegen.cs: Removed most of the code generation here, and move the
26066         corresponding code generation bits to the statement classes. 
26067
26068         Added support for try/catch/finalize and throw.
26069
26070         * cs-parser.jay: Added support for try/catch/finalize.
26071
26072         * class.cs: Catch static methods having the flags override,
26073         virtual or abstract.
26074
26075         * expression.cs (UserCast): This user cast was not really doing
26076         what it was supposed to do.  Which is to be born in fully resolved
26077         state.  Parts of the resolution were being performed at Emit time! 
26078
26079         Fixed this code.
26080
26081 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26082
26083         * expression.cs: Implicity convert the result from UserCast.
26084
26085 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26086
26087         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
26088         prevented it from working correctly. 
26089
26090         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
26091         merely ConvertImplicit.
26092
26093 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26094
26095         * typemanager.cs: Make the LookupTypeContainer function static,
26096         and not per-instance.  
26097
26098         * class.cs: Make static FindMembers (the one that takes a Type
26099         argument). 
26100
26101         * codegen.cs: Add EmitForeach here.
26102
26103         * cs-parser.jay: Make foreach a toplevel object instead of the
26104         inline expansion, as we need to perform semantic analysis on it. 
26105
26106 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26107
26108         * expression.cs (Expression::ImplicitUserConversion): Rename to
26109         UserDefinedConversion.
26110
26111         (Expression::UserDefinedConversion): Take an extra argument specifying 
26112         whether we look for explicit user conversions too.
26113
26114         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
26115
26116         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
26117
26118         (ExplicitUserConversion): Make it a call to UserDefinedConversion
26119         with the appropriate arguments.
26120
26121         * cs-parser.jay (cast_expression): Record location too.
26122
26123         * expression.cs (Cast): Record location info.
26124
26125         (Expression::ConvertExplicit): Take location argument.
26126
26127         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
26128         to determine if we are doing explicit conversions.
26129
26130         (UserCast::Emit): Update accordingly.
26131
26132         (Expression::ConvertExplicit): Report an error if everything fails.
26133
26134         * ../errors/cs0030.cs : Add.
26135
26136 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
26137
26138         * modifiers.cs: If the ABSTRACT keyword is present, also set the
26139         virtual and newslot bits. 
26140
26141         * class.cs (TypeContainer::RegisterRequiredImplementations):
26142         Record methods we need.
26143
26144         (TypeContainer::MakeKey): Helper function to make keys for
26145         MethodBases, since the Methodbase key is useless.
26146
26147         (TypeContainer::Populate): Call RegisterRequiredImplementations
26148         before defining the methods.   
26149
26150         Create a mapping for method_builders_to_methods ahead of time
26151         instead of inside a tight loop.
26152
26153         (::RequireMethods):  Accept an object as the data to set into the
26154         hashtable so we can report interface vs abstract method mismatch.
26155
26156 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26157
26158         * report.cs: Make all of it static.
26159
26160         * rootcontext.cs: Drop object_type and value_type computations, as
26161         we have those in the TypeManager anyways.
26162
26163         Drop report instance variable too, now it is a global.
26164
26165         * driver.cs: Use try/catch on command line handling.
26166
26167         Add --probe option to debug the error reporting system with a test
26168         suite. 
26169
26170         * report.cs: Add support for exiting program when a probe
26171         condition is reached.
26172
26173 2001-10-03  Ravi Pratap  <ravi@ximian.com>
26174
26175         * expression.cs (Binary::DoNumericPromotions): Fix the case when
26176         we do a forcible conversion regardless of type, to check if 
26177         ForceConversion returns a null.
26178
26179         (Binary::error19): Use location to report error.
26180
26181         (Unary::error23): Use location here too.
26182
26183         * ../errors/cs0019.cs : Check in.
26184
26185         * ../errors/cs0023.cs : Check in.
26186
26187         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
26188         case of a non-null MethodInfo object with a length of 0 !
26189
26190         (Binary::ResolveOperator): Flag error if overload resolution fails to find
26191         an applicable member - according to the spec :-)
26192         Also fix logic to find members in base types.
26193
26194         (Unary::ResolveOperator): Same here.
26195
26196         (Unary::report23): Change name to error23 and make first argument a TypeContainer
26197         as I was getting thoroughly confused between this and error19 :-)
26198
26199         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
26200         (::FindMostEncompassedType): Implement.
26201         (::FindMostEncompassingType): Implement.
26202         (::StandardConversionExists): Implement.
26203
26204         (UserImplicitCast): Re-vamp. We now need info about most specific
26205         source and target types so that we can do the necessary conversions.
26206
26207         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
26208         mathematical union with no duplicates.
26209
26210 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26211
26212         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
26213         in order from base classes to child classes, so that we can in
26214         child classes look up in our parent for method names and
26215         attributes (required for handling abstract, virtual, new, override
26216         constructs: we need to instrospect our base class, and if we dont
26217         populate the classes in order, the introspection might be
26218         incorrect.  For example, a method could query its parent before
26219         the parent has any methods and would determine that the parent has
26220         no abstract methods (while it could have had them)).
26221
26222         (RootContext::CreateType): Record the order in which we define the
26223         classes.
26224
26225 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
26226
26227         * class.cs (TypeContainer::Populate): Also method definitions can
26228         fail now, keep track of this.
26229
26230         (TypeContainer::FindMembers): Implement support for
26231         DeclaredOnly/noDeclaredOnly flag.
26232
26233         (Constructor::Emit) Return the ConstructorBuilder.
26234
26235         (Method::Emit) Return the MethodBuilder. 
26236         Check for abstract or virtual methods to be public.
26237
26238         * rootcontext.cs (RootContext::CreateType): Register all the
26239         abstract methods required for the class to be complete and the
26240         interface methods that must be implemented. 
26241
26242         * cs-parser.jay: Report error 501 (method requires body if it is
26243         not marked abstract or extern).
26244
26245         * expression.cs (TypeOf::Emit): Implement.
26246
26247         * typemanager.cs: runtime_handle_type, new global type.
26248
26249         * class.cs (Property::Emit): Generate code for properties.
26250
26251 2001-10-02  Ravi Pratap  <ravi@ximian.com>
26252
26253         * expression.cs (Unary::ResolveOperator): Find operators on base type
26254         too - we now conform exactly to the spec.
26255
26256         (Binary::ResolveOperator): Same here.
26257
26258         * class.cs (Operator::Define): Fix minor quirk in the tests.
26259
26260         * ../errors/cs0215.cs : Added.
26261
26262         * ../errors/cs0556.cs : Added.
26263
26264         * ../errors/cs0555.cs : Added.
26265
26266 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26267
26268         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
26269         single integer which is really efficient
26270
26271 2001-10-01  Ravi Pratap  <ravi@ximian.com>
26272
26273         *  expression.cs (Expression::ImplicitUserConversion): Use location
26274         even in the case when we are examining True operators.
26275  
26276         * class.cs (Operator::Define): Perform extensive checks to conform
26277         with the rules for operator overloading in the spec.
26278
26279         * expression.cs (Expression::ImplicitReferenceConversion): Implement
26280         some of the other conversions mentioned in the spec.
26281
26282         * typemanager.cs (array_type): New static member for the System.Array built-in
26283         type.
26284
26285         (cloneable_interface): For System.ICloneable interface.
26286
26287         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
26288         we start resolving the tree and populating types.
26289
26290         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
26291  
26292 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26293
26294         * expression.cs (Expression::ExprClassFromMemberInfo,
26295         Expression::Literalize): Create literal expressions from
26296         FieldInfos which are literals.
26297
26298         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
26299         type casts, because they were wrong.  The test suite in tests
26300         caught these ones.
26301
26302         (ImplicitNumericConversion): ushort to ulong requires a widening
26303         cast. 
26304
26305         Int32 constant to long requires widening cast as well.
26306
26307         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
26308         for integers because the type on the stack is not i4.
26309
26310 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
26311
26312         * expression.cs (report118): require location argument. 
26313
26314         * parameter.cs: Do not dereference potential null value.
26315
26316         * class.cs: Catch methods that lack the `new' keyword when
26317         overriding a name.  Report warnings when `new' is used without
26318         anything being there to override.
26319
26320         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
26321
26322         * class.cs: Only add constructor to hashtable if it is non-null
26323         (as now constructors can fail on define).
26324
26325         (TypeManager, Class, Struct): Take location arguments.
26326
26327         Catch field instance initialization in structs as errors.
26328
26329         accepting_filter: a new filter for FindMembers that is static so
26330         that we dont create an instance per invocation.
26331
26332         (Constructor::Define): Catch errors where a struct constructor is
26333         parameterless 
26334
26335         * cs-parser.jay: Pass location information for various new
26336         constructs. 
26337
26338         * delegate.cs (Delegate): take a location argument.
26339
26340         * driver.cs: Do not call EmitCode if there were problesm in the
26341         Definition of the types, as many Builders wont be there. 
26342
26343         * decl.cs (Decl::Decl): Require a location argument.
26344
26345         * cs-tokenizer.cs: Handle properly hex constants that can not fit
26346         into integers, and find the most appropiate integer for it.
26347
26348         * literal.cs: Implement ULongLiteral.
26349
26350         * rootcontext.cs: Provide better information about the location of
26351         failure when CreateType fails.
26352
26353 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
26354
26355         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
26356         as well.
26357
26358         * expression.cs (Binary::CheckShiftArguments): Add missing type
26359         computation.
26360         (Binary::ResolveOperator): Add type to the logical and and logical
26361         or, Bitwise And/Or and Exclusive Or code paths, it was missing
26362         before.
26363
26364         (Binary::DoNumericPromotions): In the case where either argument
26365         is ulong (and most signed types combined with ulong cause an
26366         error) perform implicit integer constant conversions as well.
26367
26368 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26369
26370         * expression.cs (UserImplicitCast): Method should always be
26371         non-null. 
26372         (Invocation::BetterConversion): Simplified test for IntLiteral.
26373
26374         (Expression::ImplicitNumericConversion): Split this routine out.
26375         Put the code that performs implicit constant integer conversions
26376         here. 
26377
26378         (Expression::Resolve): Become a wrapper around DoResolve so we can
26379         check eclass and type being set after resolve.
26380
26381         (Invocation::Badness): Remove this dead function
26382
26383         (Binary::ResolveOperator): Do not compute the expensive argumnets
26384         unless we have a union for it.
26385
26386         (Probe::Emit): Is needs to do an isinst and then
26387         compare against null.
26388
26389         (::CanConvert): Added Location argument.  If the Location argument
26390         is null (Location.Null), then we do not report errors.  This is
26391         used by the `probe' mechanism of the Explicit conversion.  We do
26392         not want to generate an error for something that the user
26393         explicitly requested to be casted.  But the pipeline for an
26394         explicit cast first tests for potential implicit casts.
26395
26396         So for now, if the Location is null, it means `Probe only' to
26397         avoid adding another argument.   Might have to revise this
26398         strategy later.
26399
26400         (ClassCast): New class used to type cast objects into arbitrary
26401         classes (used in Explicit Reference Conversions).
26402
26403         Implement `as' as well.
26404
26405         Reverted all the patches from Ravi below: they were broken:
26406
26407                 * The use of `level' as a mechanism to stop recursive
26408                   invocations is wrong.  That was there just to catch the
26409                   bug with a strack trace but not as a way of addressing
26410                   the problem.
26411
26412                   To fix the problem we have to *understand* what is going
26413                   on and the interactions and come up with a plan, not
26414                   just get things going.
26415
26416                 * The use of the type conversion cache that I proposed
26417                   last night had an open topic: How does this work across
26418                   protection domains.  A user defined conversion might not
26419                   be public in the location where we are applying the
26420                   conversion, a different conversion might be selected
26421                   (ie, private A->B (better) but public B->A (worse),
26422                   inside A, A->B applies, but outside it, B->A will
26423                   apply).
26424
26425                 * On top of that (ie, even if the above is solved),
26426                   conversions in a cache need to be abstract.  Ie, `To
26427                   convert from an Int to a Short use an OpcodeCast', not
26428                   `To convert from an Int to a Short use the OpcodeCast on
26429                   the variable 5' (which is what this patch was doing).
26430
26431 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26432
26433         * expression.cs (Invocation::ConversionExists): Re-write to use
26434         the conversion cache
26435
26436         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
26437         cache all conversions done, not just user-defined ones.
26438
26439         (Invocation::BetterConversion): The real culprit. Use ConversionExists
26440         to determine if a conversion exists instead of acutually trying to 
26441         perform the conversion. It's faster too.
26442
26443         (Expression::ConvertExplicit): Modify to use ConversionExists to check
26444         and only then attempt the implicit conversion.
26445
26446 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26447
26448         * expression.cs (ConvertImplicit): Use a cache for conversions
26449         already found. Check level of recursion and bail out if necessary.
26450
26451 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26452
26453         * typemanager.cs (string_concat_string_string, string_concat_object_object):
26454         Export standard methods that we expect for string operations.
26455
26456         * statement.cs (Block::UsageWarning): Track usage of variables and
26457         report the errors for not used variables.
26458
26459         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
26460         operator. 
26461
26462 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26463
26464         * codegen.cs: remove unnneded code 
26465
26466         * expression.cs: Removed BuiltinTypeAccess class
26467
26468         Fix the order in which implicit conversions are
26469         done.  
26470
26471         The previous fixed dropped support for boxed conversions (adding a
26472         test to the test suite now)
26473
26474         (UserImplicitCast::CanConvert): Remove test for source being null,
26475         that code is broken.  We should not feed a null to begin with, if
26476         we do, then we should track the bug where the problem originates
26477         and not try to cover it up here.
26478
26479         Return a resolved expression of type UserImplicitCast on success
26480         rather than true/false.  Ravi: this is what I was talking about,
26481         the pattern is to use a static method as a "constructor" for
26482         objects. 
26483
26484         Also, do not create arguments until the very last minute,
26485         otherwise we always create the arguments even for lookups that
26486         will never be performed. 
26487
26488         (UserImplicitCast::Resolve): Eliminate, objects of type
26489         UserImplicitCast are born in a fully resolved state. 
26490
26491         * typemanager.cs (InitCoreTypes): Init also value_type
26492         (System.ValueType). 
26493
26494         * expression.cs (Cast::Resolve): First resolve the child expression.
26495
26496         (LValue): Add new method AddressOf to be used by
26497         the `&' operator.  
26498
26499         Change the argument of Store to take an EmitContext instead of an
26500         ILGenerator, because things like FieldExpr need to be able to call
26501         their children expression to generate the instance code. 
26502
26503         (Expression::Error, Expression::Warning): Sugar functions for
26504         reporting errors.
26505
26506         (Expression::MemberLookup): Accept a TypeContainer instead of a
26507         Report as the first argument.
26508
26509         (Expression::ResolvePrimary): Killed.  I still want to improve
26510         this as currently the code is just not right.
26511
26512         (Expression::ResolveMemberAccess): Simplify, but it is still
26513         wrong. 
26514
26515         (Unary::Resolve): Catch errors in AddressOf operators.
26516
26517         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
26518         index to a byte for the short-version, or the compiler will choose
26519         the wrong Emit call, which generates the wrong data.
26520
26521         (ParameterReference::Emit, ::Store): same.
26522
26523         (FieldExpr::AddressOf): Implement.
26524
26525         * typemanager.cs: TypeManager: made public variable instead of
26526         property.
26527
26528         * driver.cs: document --fatal.
26529
26530         * report.cs (ErrorMessage, WarningMessage): new names for the old
26531         Error and Warning classes.
26532
26533         * cs-parser.jay (member_access): Turn built-in access to types
26534         into a normal simplename
26535
26536 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26537
26538         * expression.cs (Invocation::BetterConversion): Fix to cope
26539         with q being null, since this was introducing a bug.
26540
26541         * expression.cs (ConvertImplicit): Do built-in conversions first.
26542
26543 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26544
26545         * expression.cs (UserImplicitCast::Resolve): Fix bug.
26546
26547 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26548
26549         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
26550         I had introduced long ago (what's new ?).
26551
26552         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
26553         the work of all the checking. 
26554         (ConvertImplicit): Call CanConvert and only then create object if necessary.
26555         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
26556
26557         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
26558         that is the right way. 
26559
26560         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
26561         overloading resolution. Use everywhere instead of cutting and pasting code.
26562
26563         (Binary::ResolveOperator): Use MakeUnionSet.
26564
26565         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
26566         we have to convert to bool types. Not complete yet.
26567
26568 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26569
26570         * typemanager.cs (TypeManager::CSharpName): support ushort.
26571
26572         * expression.cs (Expression::TryImplicitIntConversion): Attempts
26573         to provide an expression that performsn an implicit constant int
26574         conversion (section 6.1.6).
26575         (Expression::ConvertImplicitRequired): Reworked to include
26576         implicit constant expression conversions.
26577
26578         (Expression::ConvertNumericExplicit): Finished.
26579
26580         (Invocation::Emit): If InstanceExpression is null, then it means
26581         that we perform a call on this.
26582
26583 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26584
26585         * expression.cs (Unary::Emit): Remove some dead code.
26586         (Probe): Implement Resolve and Emit for `is'.
26587         (Expression::ConvertImplicitRequired): Attempt to do constant
26588         expression conversions here.  Maybe should be moved to
26589         ConvertImplicit, but I am not sure.
26590         (Expression::ImplicitLongConstantConversionPossible,
26591         Expression::ImplicitIntConstantConversionPossible): New functions
26592         that tell whether is it possible to apply an implicit constant
26593         expression conversion.
26594
26595         (ConvertNumericExplicit): Started work on explicit numeric
26596         conversions.
26597
26598         * cs-parser.jay: Update operator constants.
26599
26600         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
26601         (Parameters::GetSignature): Hook up VerifyArgs here.
26602         (Parameters::VerifyArgs): Verifies that no two arguments have the
26603         same name. 
26604
26605         * class.cs (Operator): Update the operator names to reflect the
26606         ones that the spec expects (as we are just stringizing the
26607         operator names).
26608
26609         * expression.cs (Unary::ResolveOperator): Fix bug: Use
26610         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
26611         previous usage did only work for our methods.
26612         (Expression::ConvertImplicit): Handle decimal implicit numeric
26613         conversions as well.
26614         (Expression::InternalTypeConstructor): Used to invoke constructors
26615         on internal types for default promotions.
26616
26617         (Unary::Emit): Implement special handling for the pre/post
26618         increment/decrement for overloaded operators, as they need to have
26619         the same semantics as the other operators.
26620
26621         (Binary::ResolveOperator): ditto.
26622         (Invocation::ConversionExists): ditto.
26623         (UserImplicitCast::Resolve): ditto.
26624
26625 2001-09-26  Ravi Pratap  <ravi@ximian.com>
26626
26627         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
26628         operator, return after emitting body. Regression tests pass again !
26629
26630         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
26631         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
26632         (Invocation::OverloadResolve): Ditto.
26633         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
26634
26635         * everywhere : update calls to the above methods accordingly.
26636
26637 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26638
26639         * assign.cs (Assign): Make it inherit from ExpressionStatement.
26640
26641         * expression.cs (ExpressionStatement): New base class used for
26642         expressions that can appear in statements, so that we can provide
26643         an alternate path to generate expression that do not leave a value
26644         on the stack.
26645
26646         (Expression::Emit, and all the derivatives): We no longer return
26647         whether a value is left on the stack or not.  Every expression
26648         after being emitted leaves a single value on the stack.
26649
26650         * codegen.cs (EmitContext::EmitStatementExpression): Use the
26651         facilties of ExpressionStatement if possible.
26652
26653         * cs-parser.jay: Update statement_expression.
26654
26655 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
26656
26657         * driver.cs: Change the wording of message
26658
26659 2001-09-25  Ravi Pratap  <ravi@ximian.com>
26660
26661         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
26662         the type of the expression to the return type of the method if
26663         we have an overloaded operator match ! The regression tests pass again !
26664         (Unary::ResolveOperator): Ditto.
26665
26666         * expression.cs (Invocation::ConversionExists): Correct the member lookup
26667         to find "op_Implicit", not "implicit" ;-)
26668         (UserImplicitCast): New class to take care of user-defined implicit conversions.
26669         (ConvertImplicit, ForceConversion): Take TypeContainer argument
26670
26671         * everywhere : Correct calls to the above accordingly.
26672
26673         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
26674         (ConvertImplicit): Do user-defined conversion if it exists.
26675
26676 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
26677
26678         * assign.cs: track location.
26679         (Resolve): Use implicit conversions on assignment.
26680
26681         * literal.cs: Oops.  Not good, Emit of short access values should
26682         pass (Bytes) or the wrong argument will be selected.
26683
26684         * expression.cs (Unary::Emit): Emit code for -expr.
26685
26686         (Unary::ResolveOperator): Handle `Substract' for non-constants
26687         (substract from zero from the non-constants).
26688         Deal with Doubles as well. 
26689
26690         (Expression::ConvertImplicitRequired): New routine that reports an
26691         error if no implicit conversion exists. 
26692
26693         (Invocation::OverloadResolve): Store the converted implicit
26694         expressions if we make them
26695
26696 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26697
26698         * class.cs (ConstructorInitializer): Take a Location argument.
26699         (ConstructorBaseInitializer): Same here.
26700         (ConstructorThisInitializer): Same here.
26701
26702         * cs-parser.jay : Update all calls accordingly.
26703
26704         * expression.cs (Unary, Binary, New): Take location argument.
26705         Update accordingly everywhere.
26706
26707         * cs-parser.jay : Update all calls to the above to take a location
26708         argument.
26709
26710         * class.cs : Ditto.
26711
26712 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26713
26714         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
26715         (Invocation::BetterConversion): Same here
26716         (Invocation::ConversionExists): Ditto.
26717
26718         (Invocation::ConversionExists): Implement.
26719
26720 2001-09-22  Ravi Pratap  <ravi@ximian.com>
26721
26722         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
26723         Also take an additional TypeContainer argument.
26724
26725         * All over : Pass in TypeContainer as argument to OverloadResolve.
26726
26727         * typemanager.cs (CSharpName): Update to check for the string type and return
26728         that too.
26729
26730         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
26731         a given method.
26732
26733 2001-09-21  Ravi Pratap  <ravi@ximian.com>
26734
26735         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
26736         (Invocation::BetterFunction): Implement.
26737         (Invocation::BetterConversion): Implement.
26738         (Invocation::ConversionExists): Skeleton, no implementation yet.
26739
26740         Okay, things work fine !
26741
26742 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
26743
26744         * typemanager.cs: declare and load enum_type, delegate_type and
26745         void_type. 
26746
26747         * expression.cs (Expression::Emit): Now emit returns a value that
26748         tells whether a value is left on the stack or not.  This strategy
26749         might be reveted tomorrow with a mechanism that would address
26750         multiple assignments.
26751         (Expression::report118): Utility routine to report mismatches on
26752         the ExprClass.
26753
26754         (Unary::Report23): Report impossible type/operator combination
26755         utility function.
26756
26757         (Unary::IsIncrementableNumber): Whether the type can be
26758         incremented or decremented with add.
26759         (Unary::ResolveOperator): Also allow enumerations to be bitwise
26760         complemented. 
26761         (Unary::ResolveOperator): Implement ++, !, ~,
26762
26763         (Invocation::Emit): Deal with new Emit convetion.
26764
26765         * All Expression derivatives: Updated their Emit method to return
26766         whether they leave values on the stack or not.
26767
26768         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
26769         stack for expressions that are statements. 
26770
26771 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26772
26773         * expression.cs (LValue): New interface.  Must be implemented by
26774         LValue objects.
26775         (LocalVariableReference, ParameterReference, FieldExpr): Implement
26776         LValue interface.
26777
26778         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
26779         interface for generating code, simplifies the code.
26780
26781 2001-09-20  Ravi Pratap  <ravi@ximian.com>
26782
26783         * expression.cs (everywhere): Comment out return statements in ::Resolve
26784         methods to avoid the warnings.
26785
26786 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26787
26788         * driver.cs (parse): Report error 2001 if we can not open the
26789         source file.
26790
26791         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
26792         not resolve it.
26793
26794         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
26795         object. 
26796
26797         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
26798         otherwise nested blocks end up with the same index.
26799
26800         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
26801
26802         * expression.cs:  Instead of having FIXMEs in the Resolve
26803         functions, throw exceptions so it is obvious that we are facing a
26804         bug. 
26805
26806         * cs-parser.jay (invocation_expression): Pass Location information.
26807
26808         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
26809         Use a basename for those routines because .NET does not like paths
26810         on them. 
26811
26812         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
26813         already defined.
26814
26815 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
26816
26817         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
26818         are loading the correct data types (throws an exception if not).
26819         (TypeManager::InitCoreTypes): Use CoreLookupType
26820
26821         * expression.cs (Unary::ResolveOperator): return the child
26822         expression for expressions which are just +expr.
26823         (Unary::ResolveOperator): Return negative literals for -LITERAL
26824         expressions (otherwise they are Unary {Literal}).
26825         (Invocation::Badness): Take into account `Implicit constant
26826         expression conversions'.
26827
26828         * literal.cs (LongLiteral): Implement long literal class.
26829         (IntLiteral): export the `Value' of the intliteral. 
26830
26831 2001-09-19  Ravi Pratap  <ravi@ximian.com>
26832
26833         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
26834
26835         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
26836         instead of 'Operator'
26837
26838         * expression.cs (Binary::ResolveOperator): Update accordingly.
26839         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
26840         and 'Minus'
26841
26842         * cs-parser.jay (unary_expression): Update to use the new names.
26843
26844         * gen-treedump.cs (GetUnary): Same here.
26845
26846         * expression.cs (Unary::Resolve): Implement.
26847         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
26848         operators are found instead of making noise ;-)
26849         (Unary::ResolveOperator): New method to do precisely the same thing which
26850         Binary::ResolveOperator does for Binary expressions.
26851         (Unary.method, .Arguments): Add.
26852         (Unary::OperName): Implement.   
26853         (Unary::ForceConversion): Copy and Paste !
26854
26855         * class.cs (Operator::Define): Fix a small bug for the case when we have 
26856         a unary operator.
26857
26858         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
26859         for the inbuilt operators. Only overloading works for now ;-)
26860
26861 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
26862
26863         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
26864         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
26865
26866         * expression.cs (This::Emit): Implement. 
26867         (This::Resolve): Implement.
26868         (TypeOf:Resolve): Implement.
26869         (Expression::ResolveSimpleName): Add an implicit this to instance
26870         field references. 
26871         (MemberAccess::Resolve): Deal with Parameters and Fields. 
26872         Bind instance variable to Field expressions.
26873         (FieldExpr::Instance): New field used to track the expression that
26874         represents the object instance.
26875         (FieldExpr::Resolve): Track potential errors from MemberLookup not
26876         binding 
26877         (FieldExpr::Emit): Implement.
26878
26879         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
26880         the last instruction contains a return opcode to avoid generating
26881         the last `ret' instruction (this generates correct code, and it is
26882         nice to pass the peverify output).
26883
26884         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
26885         initializer for static and instance variables.
26886         (Constructor::Emit): Allow initializer to be null in the case of
26887         static constructors.  Only emit initializer for instance
26888         constructors. 
26889
26890         (TypeContainer::FindMembers): Return a null array if there are no
26891         matches.
26892
26893         Also fix the code for the MemberTypes.Method branch, as it was not
26894         scanning that for operators (or tried to access null variables before).
26895
26896         * assign.cs (Assign::Emit): Handle instance and static fields. 
26897
26898         * TODO: Updated.
26899
26900         * driver.cs: Stop compilation if there are parse errors.
26901
26902         * cs-parser.jay (constructor_declaration): Provide default base
26903         initializer for non-static constructors.
26904         (constructor_declarator): Do not provide a default base
26905         initializers if none was specified.
26906         Catch the fact that constructors should not have parameters.
26907
26908         * class.cs: Do not emit parent class initializers for static
26909         constructors, that should be flagged as an error.
26910
26911 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26912
26913         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
26914         Move back code into TypeContainer::Populate.
26915
26916 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26917
26918         * class.cs (TypeContainer::AddConstructor): Fix the check to
26919         compare against Name, not Basename. 
26920         (Operator::OpType): Change Plus and Minus to Add and Subtract.
26921
26922         * cs-parser.jay : Update accordingly.
26923
26924         * class.cs (TypeContainer::FindMembers): For the case where we are searching
26925         for methods, don't forget to look into the operators too.
26926         (RegisterMethodBuilder): Helper method to take care of this for
26927         methods, constructors and operators.
26928         (Operator::Define): Completely revamp.
26929         (Operator.OperatorMethod, MethodName): New fields.
26930         (TypeContainer::Populate): Move the registering of builders into
26931         RegisterMethodBuilder.
26932         (Operator::Emit): Re-write.
26933
26934         * expression.cs (Binary::Emit): Comment out code path to emit method
26935         invocation stuff for the case when we have a user defined operator. I am
26936         just not able to get it right !
26937
26938 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26939
26940         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
26941         argument. 
26942
26943         (Expression::MemberLookup): Provide a version that allows to
26944         specify the MemberTypes and BindingFlags. 
26945
26946         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
26947         so it was not fetching variable information from outer blocks.
26948
26949         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
26950         Beforefieldinit as it was buggy.
26951
26952         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
26953         that Ravi put here.  
26954
26955         * class.cs (Constructor::Emit): Only emit if block is not null.
26956         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
26957         deal with this by semantically definining it as if the user had
26958         done it.
26959
26960         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
26961         constructors as we now "emit" them at a higher level.
26962
26963         (TypeContainer::DefineDefaultConstructor): Used to define the
26964         default constructors if none was provided.
26965
26966         (ConstructorInitializer): Add methods Resolve and Emit. 
26967
26968         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
26969
26970 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26971
26972         * class.cs (TypeContainer::EmitDefaultConstructor): Register
26973         the default constructor builder with our hashtable for methodbuilders
26974         to methodcores.
26975
26976         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
26977         and argument_count is 0 in which case we have a match.
26978         (Binary::ResolveOperator): More null checking and miscellaneous coding
26979         style cleanup.
26980
26981 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26982
26983         * rootcontext.cs (IsNameSpace): Compare against null.
26984
26985         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
26986
26987         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
26988         and Unary::Operator.
26989
26990         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
26991         accordingly.
26992
26993         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
26994         we have overloaded operators.
26995         (Binary::ResolveOperator): Implement the part which does the operator overload
26996         resolution.
26997
26998         * class.cs (Operator::Emit): Implement.
26999         (TypeContainer::Emit): Emit the operators we have too.
27000
27001         * expression.cs (Binary::Emit): Update to emit the appropriate code for
27002         the case when we have a user-defined operator.
27003
27004 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
27005
27006         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
27007
27008 2001-09-16  Ravi Pratap  <ravi@ximian.com>
27009
27010         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
27011         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
27012         (Constructor::Emit): Implement.
27013         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
27014         if we have no work to do. 
27015         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
27016         Emit method.
27017
27018         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
27019         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
27020
27021         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
27022         of parent.parent.
27023
27024 2001-09-15  Ravi Pratap  <ravi@ximian.com>
27025
27026         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
27027         in the source.
27028         (Tree::RecordNamespace): Method to do what the name says ;-)
27029         (Tree::Namespaces): Property to get at the namespaces hashtable.
27030
27031         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
27032         keep track.
27033
27034         * rootcontext.cs (IsNamespace): Fixed it :-)
27035
27036 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27037
27038         * class.cs (TypeContainer::FindMembers): Add support for
27039         constructors. 
27040         (MethodCore): New class that encapsulates both the shared aspects
27041         of a Constructor and a Method.  
27042         (Method, Constructor): Factored pieces into MethodCore.
27043
27044         * driver.cs: Added --fatal which makes errors throw exceptions.
27045         Load System assembly as well as part of the standard library.
27046
27047         * report.cs: Allow throwing exceptions on errors for debugging.
27048
27049         * modifiers.cs: Do not use `parent', instead use the real type
27050         container to evaluate permission settings.
27051
27052         * class.cs: Put Ravi's patch back in.  He is right, and we will
27053         have to cope with the
27054
27055 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27056
27057         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
27058         FamORAssem, not FamANDAssem.
27059
27060 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27061
27062         * driver.cs: Added --parse option that only parses its input files
27063         and terminates.
27064
27065         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
27066         incorrect.  IsTopLevel is not used to tell whether an object is
27067         root_types or not (that can be achieved by testing this ==
27068         root_types).  But to see if this is a top-level *class* (not
27069         necessarly our "toplevel" container). 
27070
27071 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27072
27073         * enum.cs (Enum::Define): Modify to call the Lookup method on the
27074         parent instead of a direct call to GetType.
27075
27076 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27077
27078         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
27079         Modifiers.TypeAttr. This should just be a call to that method.
27080
27081         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
27082         object so that we can determine if we are top-level or not.
27083
27084         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
27085         TypeContainer too.
27086
27087         * enum.cs (Enum::Define): Ditto.
27088
27089         * modifiers.cs (FieldAttr): Re-write.
27090
27091         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
27092         (TypeContainer::HaveStaticConstructor): New property to provide access
27093         to precisely that info.
27094
27095         * modifiers.cs (MethodAttr): Re-write.
27096         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
27097
27098         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
27099         of top-level types as claimed.
27100
27101 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27102
27103         * expression.cs (MemberLookup): Fruitless attempt to lookup
27104         constructors.  Maybe I need to emit default constructors?  That
27105         might be it (currently .NET emits this for me automatically).
27106         (Invocation::OverloadResolve): Cope with Arguments == null.
27107         (Invocation::EmitArguments): new function, shared by the new
27108         constructor and us.
27109         (Invocation::Emit): Handle static and instance methods.  Emit
27110         proper call instruction for virtual or non-virtual invocations.
27111         (New::Emit): Implement.
27112         (New::Resolve): Implement.
27113         (MemberAccess:Resolve): Implement.
27114         (MethodGroupExpr::InstanceExpression): used conforming to the spec
27115         to track instances.
27116         (FieldExpr::Resolve): Set type.
27117
27118         * support.cs: Handle empty arguments.
27119                 
27120         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
27121         SimpleLookup): Auxiliary routines to help parse a qualifier
27122         identifier.  
27123
27124         Update qualifier_identifier rule.
27125
27126         * codegen.cs: Removed debugging messages.
27127
27128         * class.cs: Make this a global thing, this acts just as a "key" to
27129         objects that we might have around.
27130
27131         (Populate): Only initialize method_builders_to_methods once.
27132
27133         * expression.cs (PropertyExpr): Initialize type from the
27134         PropertyType. 
27135
27136         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
27137         Resolve pattern.  Attempt to implicitly convert value to boolean.
27138         Emit code.
27139
27140         * expression.cs: Set the type for the int32/int32 argument case.
27141         (Binary::ResolveOperator): Set the return type to boolean for
27142         comparission operators
27143
27144         * typemanager.cs: Remove debugging print code.
27145
27146         (Invocation::Resolve): resolve type.
27147
27148         * class.cs: Allocate a MemberInfo of the correct size, as the code
27149         elsewhere depends on the test to reflect the correct contents.
27150
27151         (Method::) Keep track of parameters, due to System.Reflection holes
27152
27153         (TypeContainer::Populate): Keep track of MethodBuilders to Method
27154         mapping here.
27155
27156         (TypeContainer::FindMembers): Use ArrayList and then copy an array
27157         of the exact size and return that.
27158
27159         (Class::LookupMethodByBuilder): New function that maps
27160         MethodBuilders to its methods.  Required to locate the information
27161         on methods because System.Reflection bit us again.
27162
27163         * support.cs: New file, contains an interface ParameterData and
27164         two implementations: ReflectionParameters and InternalParameters
27165         used to access Parameter information.  We will need to grow this
27166         as required.
27167
27168         * expression.cs (Invocation::GetParameterData): implement a cache
27169         and a wrapper around the ParameterData creation for methods. 
27170         (Invocation::OverloadResolve): Use new code.
27171
27172 2001-09-13  Ravi Pratap  <ravi@ximian.com>
27173
27174         * class.cs (TypeContainer::EmitField): Remove and move into 
27175         (Field::Define): here and modify accordingly.
27176         (Field.FieldBuilder): New member.
27177         (TypeContainer::Populate): Update accordingly.
27178         (TypeContainer::FindMembers): Implement.
27179
27180 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27181
27182         * statement.cs: (VariableInfo::VariableType): New field to be
27183         initialized with the full type once it is resolved. 
27184
27185 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
27186
27187         * parameter.cs (GetParameterInfo): Use a type cache to compute
27188         things only once, and to reuse this information
27189
27190         * expression.cs (LocalVariableReference::Emit): Implement.
27191         (OpcodeCast::Emit): fix.
27192
27193         (ParameterReference::Resolve): Implement.
27194         (ParameterReference::Emit): Implement.
27195
27196         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
27197         that are expressions need to stay as Expressions.
27198
27199         * typemanager.cs (CSharpName): Returns the C# name of a type if
27200         possible. 
27201
27202         * expression.cs (Expression::ConvertImplicit): New function that
27203         implements implicit type conversions.
27204
27205         (Expression::ImplicitReferenceConversion): Implements implicit
27206         reference conversions.
27207
27208         (EmptyCast): New type for transparent casts.
27209
27210         (OpcodeCast): New type for casts of types that are performed with
27211         a sequence of bytecodes.
27212
27213         (BoxedCast): New type used for casting value types into reference
27214         types.  Emits a box opcode.
27215
27216         (Binary::DoNumericPromotions): Implements numeric promotions of
27217         and computation of the Binary::Type.
27218
27219         (Binary::EmitBranchable): Optimization.
27220
27221         (Binary::Emit): Implement code emission for expressions.
27222
27223         * typemanager.cs (TypeManager): Added two new core types: sbyte
27224         and byte.
27225
27226 2001-09-12  Ravi Pratap  <ravi@ximian.com>
27227
27228         * class.cs (TypeContainer::FindMembers): Method which does exactly
27229         what Type.FindMembers does, only we don't have to use reflection. No
27230         implementation yet.
27231
27232         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
27233         typecontainer objects as we need to get at them.
27234         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
27235
27236         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
27237         typecontainer object.
27238
27239         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
27240         of just a Report object.
27241
27242 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27243
27244         * class.cs (Event::Define): Go back to using the prefixes "add_" and
27245         "remove_"
27246         (TypeContainer::Populate): Now define the delegates of the type too.
27247         (TypeContainer.Delegates): Property to access the list of delegates defined
27248         in the type.
27249
27250         * delegates.cs (Delegate::Define): Implement partially.
27251
27252         * modifiers.cs (TypeAttr): Handle more flags.
27253
27254 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27255
27256         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
27257         and not <=
27258         (Operator::Define): Re-write logic to get types by using the LookupType method
27259         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
27260         (Indexer::Define): Ditto.
27261         (Event::Define): Ditto.
27262         (Property::Define): Ditto.
27263
27264 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27265
27266         * class.cs (TypeContainer::Populate): Now define operators too. 
27267         (TypeContainer.Operators): New property to access the list of operators
27268         in a type.
27269         (Operator.OperatorMethodBuilder): New member to hold the method builder
27270         for the operator we are defining.
27271         (Operator::Define): Implement.
27272
27273 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27274
27275         * class.cs (Event::Define): Make the prefixes of the accessor methods
27276         addOn_ and removeOn_ 
27277
27278         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
27279         of the location being passed in too. Ideally, this should go later since all
27280         error reporting should be done through the Report object.
27281
27282         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
27283         (Populate): Iterate thru the indexers we have and define them too.
27284         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
27285         for the get and set accessors.
27286         (Indexer::Define): Implement.
27287
27288 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
27289
27290         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
27291         my previous implementation, did not work.
27292
27293         * typemanager.cs: Add a couple of missing types (the longs).
27294
27295         * literal.cs: Use TypeManager.bool_type instead of getting it.
27296
27297         * expression.cs (EventExpr): New kind of expressions.
27298         (Expressio::ExprClassFromMemberInfo): finish
27299
27300 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
27301
27302         * assign.cs: Emit stores to static fields differently.
27303
27304 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27305
27306         * Merge in changes and adjust code to tackle conflicts. Backed out my
27307         code in Assign::Resolve ;-) 
27308
27309 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27310
27311         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
27312         instead Report.Error and also pass in the location.
27313         (CSharpParser::Lexer): New readonly property to return the reference
27314         to the Tokenizer object.
27315         (declare_local_variables): Use Report.Error with location instead of plain 
27316         old error.
27317         (CheckDef): Ditto.
27318
27319         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
27320         (Operator.CheckBinaryOperator): Ditto.
27321
27322         * cs-parser.jay (operator_declarator): Update accordingly.
27323
27324         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
27325         (CheckBinaryOperator): Same here.
27326
27327         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
27328         on the name without any prefixes of namespace names etc. This is because we
27329         already might have something already fully qualified like 
27330         'System.Console.WriteLine'
27331
27332         * assign.cs (Resolve): Begin implementation. Stuck ;-)
27333
27334 2001-09-07  Ravi Pratap  <ravi@ximian.com>
27335
27336         * cs-tokenizer.cs (location): Return a string which also contains
27337         the file name.
27338
27339         * expression.cs (ElementAccess): New class for expressions of the
27340         type 'element access.'
27341         (BaseAccess): New class for expressions of the type 'base access.'
27342         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
27343         respectively.
27344
27345         * cs-parser.jay (element_access): Implement action.
27346         (base_access): Implement actions.
27347         (checked_expression, unchecked_expression): Implement.
27348
27349         * cs-parser.jay (local_variable_type): Correct and implement.
27350         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
27351
27352         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
27353
27354         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
27355         name and the specifiers.
27356
27357         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
27358
27359         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
27360         making them all public ;-)
27361
27362         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
27363         class anyways.
27364
27365 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
27366
27367         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
27368         PropertyExprs.
27369         (FieldExpr, PropertyExprs): New resolved expressions.
27370         (SimpleName::MemberStaticCheck): Perform static checks for access
27371         to non-static fields on static methods. Maybe this should be
27372         generalized for MemberAccesses. 
27373         (SimpleName::ResolveSimpleName): More work on simple name
27374         resolution. 
27375
27376         * cs-parser.jay (primary_expression/qualified_identifier): track
27377         the parameter index.
27378
27379         * codegen.cs (CodeGen::Save): Catch save exception, report error.
27380         (EmitContext::EmitBoolExpression): Chain to expression generation
27381         instead of temporary hack.
27382         (::EmitStatementExpression): Put generic expression code generation.
27383
27384         * assign.cs (Assign::Emit): Implement variable assignments to
27385         local variables, parameters and fields.
27386
27387 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
27388
27389         * statement.cs (Block::GetVariableInfo): New method, returns the
27390         VariableInfo for a variable name in a block.
27391         (Block::GetVariableType): Implement in terms of GetVariableInfo
27392
27393         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
27394         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
27395
27396 2001-09-06  Ravi Pratap  <ravi@ximian.com>
27397
27398         * cs-parser.jay (operator_declaration): Continue on my quest : update
27399         to take attributes argument.
27400         (event_declaration): Ditto.
27401         (enum_declaration): Ditto.
27402         (indexer_declaration): Ditto.
27403
27404         * class.cs (Operator::Operator): Update constructor accordingly.
27405         (Event::Event): Ditto.
27406
27407         * delegate.cs (Delegate::Delegate): Same here.
27408
27409         * enum.cs (Enum::Enum): Same here.
27410
27411 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27412
27413         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
27414
27415         * ../tests/cs0658.cs : New file to demonstrate error 0658.
27416
27417         * attribute.cs (Attributes): New class to encapsulate all attributes which were
27418         being passed around as an arraylist.
27419         (Attributes::AddAttribute): Method to add attribute sections.
27420
27421         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
27422         (struct_declaration): Update accordingly.
27423         (constant_declaration): Update.
27424         (field_declaration): Update.
27425         (method_header): Update.
27426         (fixed_parameter): Update.
27427         (parameter_array): Ditto.
27428         (property_declaration): Ditto.
27429         (destructor_declaration): Ditto.
27430
27431         * class.cs (Struct::Struct): Update constructors accordingly.
27432         (Class::Class): Ditto.
27433         (Field::Field): Ditto.
27434         (Method::Method): Ditto.
27435         (Property::Property): Ditto.
27436         (TypeContainer::OptAttribute): update property's return type.
27437
27438         * interface.cs (Interface.opt_attributes): New member.
27439         (Interface::Interface): Update to take the extra Attributes argument.
27440
27441         * parameter.cs (Parameter::Parameter): Ditto.
27442
27443         * constant.cs (Constant::Constant): Ditto.
27444
27445         * interface.cs (InterfaceMemberBase): New OptAttributes field.
27446         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
27447         the attributes as a parameter.
27448         (InterfaceProperty): Update constructor call.
27449         (InterfaceEvent): Ditto.
27450         (InterfaceMethod): Ditto.
27451         (InterfaceIndexer): Ditto.
27452
27453         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
27454         pass the attributes too.
27455         (interface_event_declaration): Ditto.
27456         (interface_property_declaration): Ditto.
27457         (interface_method_declaration): Ditto.
27458         (interface_declaration): Ditto.
27459
27460 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
27461
27462         * class.cs (Method::Define): Track the "static Main" definition to
27463         create an entry point. 
27464
27465         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
27466         EntryPoint if we find it. 
27467
27468         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
27469         (EmitContext::ig): Make this variable public.
27470
27471         * driver.cs: Make the default output file be the first file name
27472         with the .exe extension.  
27473
27474         Detect empty compilations
27475
27476         Handle various kinds of output targets.  Handle --target and
27477         rename -t to --dumper.
27478
27479         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
27480         methods inherited from Expression return now an Expression.  This
27481         will is used during the tree rewriting as we resolve them during
27482         semantic analysis.
27483
27484         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
27485         the spec.  Missing entirely is the information about
27486         accessability of elements of it.
27487
27488         (Expression::ExprClassFromMemberInfo): New constructor for
27489         Expressions that creates a fully initialized Expression based on
27490         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
27491         a Type.
27492
27493         (Invocation::Resolve): Begin implementing resolution of invocations.
27494
27495         * literal.cs (StringLiteral):  Implement Emit.
27496
27497 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27498
27499         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
27500         member.
27501
27502 2001-09-04  Ravi Pratap  <ravi@ximian.com>
27503
27504         * cs-parser.jay (attribute_arguments): Implement actions.
27505         (attribute): Fix bug in production. Implement action.
27506         (attribute_list): Implement.
27507         (attribute_target): Implement.
27508         (attribute_target_specifier, opt_target_specifier): Implement
27509         (CheckAttributeTarget): New method to check if the attribute target
27510         is valid.
27511         (attribute_section): Implement.
27512         (opt_attributes): Implement.
27513
27514         * attribute.cs : New file to handle attributes.
27515         (Attribute): Class to hold attribute info.
27516
27517         * cs-parser.jay (opt_attribute_target_specifier): Remove production
27518         (attribute_section): Modify production to use 2 different rules to 
27519         achieve the same thing. 1 s/r conflict down !
27520         Clean out commented, useless, non-reducing dimension_separator rules.
27521
27522         * class.cs (TypeContainer.attributes): New member to hold list
27523         of attributes for a type.
27524         (Struct::Struct): Modify to take one more argument, the attribute list.
27525         (Class::Class): Ditto.
27526         (Field::Field): Ditto.
27527         (Method::Method): Ditto.
27528         (Property::Property): Ditto.
27529
27530         * cs-parser.jay (struct_declaration): Update constructor call to
27531         pass in the attributes too.
27532         (class_declaration): Ditto.
27533         (constant_declaration): Ditto.
27534         (field_declaration): Ditto.
27535         (method_header): Ditto.
27536         (fixed_parameter): Ditto.
27537         (parameter_array): Ditto.
27538         (property_declaration): Ditto.
27539
27540         * constant.cs (Constant::Constant): Update constructor similarly.
27541         Use System.Collections.
27542
27543         * parameter.cs (Parameter::Parameter): Update as above.
27544
27545 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27546
27547         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
27548         (TypeContainer.delegates): New member to hold list of delegates.
27549
27550         * cs-parser.jay (delegate_declaration): Implement the action correctly 
27551         this time as I seem to be on crack ;-)
27552
27553 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
27554
27555         * rootcontext.cs (RootContext::IsNamespace): new function, used to
27556         tell whether an identifier represents a namespace.
27557
27558         * expression.cs (NamespaceExpr): A namespace expression, used only
27559         temporarly during expression resolution.
27560         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
27561         utility functions to resolve names on expressions.
27562
27563 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
27564
27565         * codegen.cs: Add hook for StatementExpressions. 
27566
27567         * class.cs: Fix inverted test for static flag in methods.
27568
27569 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27570
27571         * class.cs (Operator::CheckUnaryOperator): Correct error number used
27572         to make it coincide with MS' number.
27573         (Operator::CheckBinaryOperator): Ditto.
27574
27575         * ../errors/errors.txt : Remove error numbers added earlier.
27576
27577         * ../errors/cs1019.cs : Test case for error # 1019
27578
27579         * ../errros/cs1020.cs : Test case for error # 1020
27580
27581         * cs-parser.jay : Clean out commented cruft.
27582         (dimension_separators, dimension_separator): Comment out. Ostensibly not
27583         used anywhere - non-reducing rule.
27584         (namespace_declarations): Non-reducing rule - comment out.
27585
27586         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
27587         with TypeContainer::AddEnum.
27588
27589         * delegate.cs : New file for delegate handling classes.
27590         (Delegate): Class for declaring delegates.
27591
27592         * makefile : Update.
27593
27594         * cs-parser.jay (delegate_declaration): Implement.
27595
27596 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
27597
27598         * class.cs (Event::Define): Implement.
27599         (Event.EventBuilder): New member.
27600
27601         * class.cs (TypeContainer::Populate): Update to define all enums and events
27602         we have.
27603         (Events): New property for the events arraylist we hold. Shouldn't we move to using
27604         readonly fields for all these cases ?
27605
27606 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27607
27608         * class.cs (Property): Revamp to use the convention of making fields readonly.
27609         Accordingly modify code elsewhere.
27610
27611         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
27612         the Define method of the Property class.
27613
27614         * class.cs : Clean up applied patch and update references to variables etc. Fix 
27615         trivial bug.
27616         (TypeContainer::Populate): Update to define all the properties we have. Also
27617         define all enumerations.
27618
27619         * enum.cs (Define): Implement.
27620
27621 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27622
27623         * cs-parser.jay (overloadable_operator): The semantic value is an
27624         enum of the Operator class.
27625         (operator_declarator): Implement actions.
27626         (operator_declaration): Implement.
27627
27628         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
27629         validity of definitions.
27630         (Operator::CheckBinaryOperator): Static method to check for binary operators
27631         (TypeContainer::AddOperator): New method to add an operator to a type.
27632
27633         * cs-parser.jay (indexer_declaration): Added line to actually call the
27634         AddIndexer method so it gets added ;-)
27635
27636         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
27637         already taken care of by the MS compiler ?  
27638
27639 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27640
27641         * class.cs (Operator): New class for operator declarations.
27642         (Operator::OpType): Enum for the various operators.
27643
27644 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27645
27646         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
27647         ostensibly handle this in semantic analysis.
27648
27649         * cs-parser.jay (general_catch_clause): Comment out
27650         (specific_catch_clauses, specific_catch_clause): Ditto.
27651         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
27652         (catch_args, opt_catch_args): New productions.
27653         (catch_clause): Rewrite to use the new productions above
27654         (catch_clauses): Modify accordingly.
27655         (opt_catch_clauses): New production to use in try_statement
27656         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
27657         and re-write the code in the actions to extract the specific and
27658         general catch clauses by being a little smart ;-)
27659
27660         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
27661         Hooray, try and catch statements parse fine !
27662
27663 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27664
27665         * statement.cs (Block::GetVariableType): Fix logic to extract the type
27666         string from the hashtable of variables.
27667
27668         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
27669         I end up making that mistake ;-)
27670         (catch_clauses): Fixed gross error which made Key and Value of the 
27671         DictionaryEntry the same : $1 !!
27672
27673 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27674
27675         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
27676
27677         * cs-parser.jay (event_declaration): Correct to remove the semicolon
27678         when the add and remove accessors are specified. 
27679
27680 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27681
27682         * cs-parser.jay (IndexerDeclaration): New helper class to hold
27683         information about indexer_declarator.
27684         (indexer_declarator): Implement actions.
27685         (parsing_indexer): New local boolean used to keep track of whether
27686         we are parsing indexers or properties. This is necessary because 
27687         implicit_parameters come into picture even for the get accessor in the 
27688         case of an indexer.
27689         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
27690
27691         * class.cs (Indexer): New class for indexer declarations.
27692         (TypeContainer::AddIndexer): New method to add an indexer to a type.
27693         (TypeContainer::indexers): New member to hold list of indexers for the
27694         type.
27695
27696 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27697
27698         * cs-parser.jay (add_accessor_declaration): Implement action.
27699         (remove_accessor_declaration): Implement action.
27700         (event_accessors_declaration): Implement
27701         (variable_declarators): swap statements for first rule - trivial.
27702
27703         * class.cs (Event): New class to hold information about event
27704         declarations.
27705         (TypeContainer::AddEvent): New method to add an event to a type
27706         (TypeContainer::events): New member to hold list of events.
27707
27708         * cs-parser.jay (event_declaration): Implement actions.
27709
27710 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27711
27712         * cs-parser.jay (dim_separators): Implement. Make it a string
27713         concatenating all the commas together, just as they appear.
27714         (opt_dim_separators): Modify accordingly
27715         (rank_specifiers): Update accordingly. Basically do the same
27716         thing - instead, collect the brackets here.
27717         (opt_rank_sepcifiers): Modify accordingly.
27718         (array_type): Modify to actually return the complete type string
27719         instead of ignoring the rank_specifiers.
27720         (expression_list): Implement to collect the expressions
27721         (variable_initializer): Implement. We make it a list of expressions
27722         essentially so that we can handle the array_initializer case neatly too.
27723         (variable_initializer_list): Implement.
27724         (array_initializer): Make it a list of variable_initializers
27725         (opt_array_initializer): Modify accordingly.
27726
27727         * expression.cs (New::NType): Add enumeration to help us
27728         keep track of whether we have an object/delegate creation
27729         or an array creation.
27730         (New:NewType, New::Rank, New::Indices, New::Initializers): New
27731         members to hold data about array creation.
27732         (New:New): Modify to update NewType
27733         (New:New): New Overloaded contructor for the array creation
27734         case.
27735
27736         * cs-parser.jay (array_creation_expression): Implement to call
27737         the overloaded New constructor.
27738
27739 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
27740
27741         * class.cs (TypeContainer::Constructors): Return member
27742         constructors instead of returning null.
27743
27744 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
27745
27746         * typemanager.cs (InitCoreTypes): Initialize the various core
27747         types after we have populated the type manager with the user
27748         defined types (this distinction will be important later while
27749         compiling corlib.dll)
27750
27751         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
27752         on Expression Classification.  Now all expressions have a method
27753         `Resolve' and a method `Emit'.
27754
27755         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
27756         generation from working.     Also add some temporary debugging
27757         code. 
27758
27759 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
27760
27761         * codegen.cs: Lots of code generation pieces.  This is only the
27762         beginning, will continue tomorrow with more touches of polish.  We
27763         handle the fundamentals of if, while, do, for, return.  Others are
27764         trickier and I need to start working on invocations soon.
27765
27766         * gen-treedump.cs: Bug fix, use s.Increment here instead of
27767         s.InitStatement. 
27768
27769         * codegen.cs (EmitContext): New struct, used during code
27770         emission to keep a context.   Most of the code generation will be
27771         here. 
27772
27773         * cs-parser.jay: Add embedded blocks to the list of statements of
27774         this block.  So code generation proceeds in a top down fashion.
27775
27776 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
27777
27778         * statement.cs: Add support for multiple child blocks.
27779
27780 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
27781
27782         * codegen.cs (EmitCode): New function, will emit the code for a
27783         Block of code given a TypeContainer and its ILGenerator. 
27784
27785         * statement.cs (Block): Standard public readonly optimization.
27786         (Block::Block constructors): Link children. 
27787         (Block::Child): Child Linker.
27788         (Block::EmitVariables): Emits IL variable declarations.
27789
27790         * class.cs: Drop support for MethodGroups here, delay until
27791         Semantic Analysis.
27792         (Method::): Applied the same simplification that I did before, and
27793         move from Properties to public readonly fields.
27794         (Method::ParameterTypes): Returns the parameter types for the
27795         function, and implements a cache that will be useful later when I
27796         do error checking and the semantic analysis on the methods is
27797         performed.
27798         (Constructor::GetCallingConvention): Renamed from CallingConvetion
27799         and made a method, optional argument tells whether this is a class
27800         or a structure to apply the `has-this' bit.
27801         (Method::GetCallingConvention): Implement, returns the calling
27802         convention. 
27803         (Method::Define): Defines the type, a second pass is performed
27804         later to populate the methods.
27805
27806         (Constructor::ParameterTypes): implement a cache similar to the
27807         one on Method::ParameterTypes, useful later when we do semantic
27808         analysis. 
27809
27810         (TypeContainer::EmitMethod):  New method.  Emits methods.
27811
27812         * expression.cs: Removed MethodGroup class from here.
27813
27814         * parameter.cs (Parameters::GetCallingConvention): new method.
27815
27816 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
27817
27818         * class.cs (TypeContainer::Populate): Drop RootContext from the
27819         argument. 
27820
27821         (Constructor::CallingConvention): Returns the calling convention.
27822         (Constructor::ParameterTypes): Returns the constructor parameter
27823         types. 
27824
27825         (TypeContainer::AddConstructor): Keep track of default constructor
27826         and the default static constructor.
27827
27828         (Constructor::) Another class that starts using `public readonly'
27829         instead of properties. 
27830
27831         (Constructor::IsDefault): Whether this is a default constructor. 
27832
27833         (Field::) use readonly public fields instead of properties also.
27834
27835         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
27836         track of static constructors;  If none is used, turn on
27837         BeforeFieldInit in the TypeAttributes. 
27838
27839         * cs-parser.jay (opt_argument_list): now the return can be null
27840         for the cases where there are no arguments. 
27841
27842         (constructor_declarator): If there is no implicit `base' or
27843         `this', then invoke the default parent constructor. 
27844
27845         * modifiers.cs (MethodAttr): New static function maps a set of
27846         modifiers flags into a MethodAttributes enum
27847         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
27848         MethodAttr, TypeAttr to represent the various mappings where the
27849         modifiers are used.
27850         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
27851
27852 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
27853
27854         * parameter.cs (GetParameterInfo): Fix bug where there would be no
27855         method arguments.
27856
27857         * interface.cs (PopulateIndexer): Implemented the code generator
27858         for interface indexers.
27859
27860 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
27861
27862         * interface.cs (InterfaceMemberBase): Now we track the new status
27863         here.  
27864
27865         (PopulateProperty): Implement property population.  Woohoo!  Got
27866         Methods and Properties going today. 
27867
27868         Removed all the properties for interfaces, and replaced them with
27869         `public readonly' fields. 
27870
27871 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
27872
27873         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
27874         initialize their hashtables/arraylists only when they are needed
27875         instead of doing this always.
27876
27877         * parameter.cs: Handle refs and out parameters.
27878
27879         * cs-parser.jay: Use an ArrayList to construct the arguments
27880         instead of the ParameterCollection, and then cast that to a
27881         Parameter[] array.
27882
27883         * parameter.cs: Drop the use of ParameterCollection and use
27884         instead arrays of Parameters.
27885
27886         (GetParameterInfo): Use the Type, not the Name when resolving
27887         types. 
27888
27889 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
27890
27891         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
27892         and instead use public readonly fields.
27893
27894         * class.cs: Put back walking code for type containers.
27895
27896 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
27897
27898         * class.cs (MakeConstant): Code to define constants.
27899
27900         * rootcontext.cs (LookupType): New function.  Used to locate types 
27901
27902
27903 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
27904
27905         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
27906         this System.Reflection code is.  Kudos to Microsoft
27907
27908         * typemanager.cs: Implement a type cache and avoid loading all
27909         types at boot time.  Wrap in LookupType the internals.  This made
27910         the compiler so much faster.  Wow.  I rule!
27911
27912         * driver.cs: Make sure we always load mscorlib first (for
27913         debugging purposes, nothing really important).
27914
27915         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
27916         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
27917
27918         * rootcontext.cs: Lookup types on their namespace;  Lookup types
27919         on namespaces that have been imported using the `using' keyword.
27920
27921         * class.cs (TypeContainer::TypeAttr): Virtualize.
27922         (Class::TypeAttr): Return attributes suitable for this bad boy.
27923         (Struct::TypeAttr): ditto.
27924         Handle nested classes.
27925         (TypeContainer::) Remove all the type visiting code, it is now
27926         replaced with the rootcontext.cs code
27927
27928         * rootcontext.cs (GetClassBases): Added support for structs. 
27929
27930 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
27931
27932         * interface.cs, statement.cs, class.cs, parameter.cs,
27933         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
27934         Drop use of TypeRefs, and use strings instead.
27935
27936 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
27937
27938         * rootcontext.cs: 
27939
27940         * class.cs (Struct::Struct): set the SEALED flags after
27941         checking the modifiers.
27942         (TypeContainer::TypeAttr): new property, returns the
27943         TypeAttributes for a class.  
27944
27945         * cs-parser.jay (type_list): Oops, list production was creating a
27946         new list of base types.
27947
27948         * rootcontext.cs (StdLib): New property.
27949         (GetInterfaceTypeByName): returns an interface by type name, and
27950         encapsulates error handling here.
27951         (GetInterfaces): simplified.
27952         (ResolveTree): Encapsulated all the tree resolution here.
27953         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
27954         types. 
27955
27956         * driver.cs: Add support for --nostdlib, to avoid loading the
27957         default assemblies.
27958         (Main): Do not put tree resolution here. 
27959
27960         * rootcontext.cs: Beginning of the class resolution.
27961
27962 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
27963
27964         * rootcontext.cs: Provide better error reporting. 
27965
27966         * cs-parser.jay (interface_base): set our $$ to be interfaces.
27967
27968         * rootcontext.cs (CreateInterface): Handle the case where there
27969         are no parent interfaces.
27970
27971         (CloseTypes): Routine to flush types at the end.
27972         (CreateInterface): Track types.
27973         (GetInterfaces): Returns an array of Types from the list of
27974         defined interfaces.
27975
27976         * typemanager.c (AddUserType): Mechanism to track user types (puts
27977         the type on the global type hash, and allows us to close it at the
27978         end). 
27979
27980 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
27981
27982         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
27983         RecordInterface instead.
27984
27985         * cs-parser.jay: Updated to reflect changes above.
27986
27987         * decl.cs (Definition): Keep track of the TypeBuilder type that
27988         represents this type here.  Not sure we will use it in the long
27989         run, but wont hurt for now.
27990
27991         * driver.cs: Smaller changes to accomodate the new code.
27992
27993         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
27994         when done. 
27995
27996         * rootcontext.cs (CreateInterface):  New method, used to create
27997         the System.TypeBuilder type for interfaces.
27998         (ResolveInterfaces): new entry point to resolve the interface
27999         hierarchy. 
28000         (CodeGen): Property, used to keep track of the code generator.
28001
28002 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
28003
28004         * cs-parser.jay: Add a second production for delegate_declaration
28005         with `VOID'.
28006
28007         (enum_body): Put an opt_comma here instead of putting it on
28008         enum_body or enum_member_declarations so we can handle trailing
28009         commas on enumeration members.  Gets rid of a shift/reduce.
28010
28011         (type_list): Need a COMMA in the middle.
28012
28013         (indexer_declaration): Tell tokenizer to recognize get/set
28014
28015         * Remove old targets.
28016
28017         * Re-add the parser target.
28018
28019 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28020
28021         * cs-parser.jay: Add precendence rules for a number of operators
28022         ot reduce the number of shift/reduce conflicts in the grammar.
28023
28024 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
28025
28026         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
28027         and put it here.
28028
28029         Get rid of old crufty code.
28030
28031         * rootcontext.cs: Use this to keep track of the parsed
28032         representation and the defined types available to the program. 
28033
28034         * gen-treedump.cs: adjust for new convention.
28035
28036         * type.cs: Split out the type manager, and the assembly builder
28037         from here. 
28038
28039         * typemanager.cs: the type manager will live here now.
28040
28041         * cil-codegen.cs: And the code generator here. 
28042
28043 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
28044
28045         * makefile: Fixed up for easy making.
28046
28047 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28048
28049         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
28050         the 
28051
28052         (unary_expression): Expand pre_increment_expression and
28053         post_decrement_expression to reduce a shift/reduce.
28054
28055 2001-07-11  Simon Cozens
28056
28057         * cs-tokenizer.cs: Hex numbers should begin with a 0.
28058
28059         Improve allow_keyword_as_indent name.
28060
28061 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
28062
28063         * Adjustments for Beta2. 
28064
28065 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
28066
28067         * decl.cs: Added `Define' abstract method.
28068         (InTransit): new property, used to catch recursive definitions. 
28069
28070         * interface.cs: Implement `Define'. 
28071
28072         * modifiers.cs: Map Modifiers.constants to
28073         System.Reflection.TypeAttribute flags.
28074
28075         * class.cs: Keep track of types and user-defined types.
28076         (BuilderInit): New method for creating an assembly
28077         (ResolveType): New function to launch the resolution process, only
28078         used by interfaces for now.
28079
28080         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
28081         that are inserted into the name space. 
28082
28083 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
28084
28085         * ARGH.  I have screwed up my tree so many times due to the use of
28086         rsync rather than using CVS.  Going to fix this at once. 
28087
28088         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
28089         load types.
28090
28091 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
28092
28093         * Experiment successful: Use System.Type rather that our own
28094         version of Type.  
28095
28096 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
28097
28098         * cs-parser.jay: Removed nsAliases from here.
28099
28100         Use new namespaces, handle `using XXX;' 
28101
28102         * namespace.cs: Reimplemented namespace handling, use a recursive
28103         definition of the class.  Now we can keep track of using clauses
28104         and catch invalid using clauses.
28105
28106 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
28107
28108         * gen-treedump.cs: Adapted for all the renaming.
28109
28110         * expression.cs (Expression): this class now has a Type property
28111         which returns an expression Type.
28112
28113         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
28114         `Type', as this has a different meaning now in the base
28115
28116 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
28117
28118         * interface.cs, class.cs: Removed from all the sources the
28119         references to signature computation, as we can not do method
28120         signature computation during the parsing time, as we are not
28121         trying to solve at that point distinguishing:
28122
28123         class X {
28124                 void a (Blah x) {}
28125                 void a (NS.Blah x) {}
28126         }
28127
28128         Which depending on the context might be valid or not, as we do not
28129         know if Blah is the same thing as NS.Blah at that point.
28130
28131         * Redid everything so the code uses TypeRefs now instead of
28132         Types.  TypeRefs are just temporary type placeholders, that need
28133         to be resolved.  They initially have a pointer to a string and the
28134         current scope in which they are used.  This is used later by the
28135         compiler to resolve the reference to an actual Type. 
28136
28137         * DeclSpace is no longer a CIR.Type, and neither are
28138         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
28139         are all DeclSpaces, but no Types. 
28140
28141         * type.cs (TypeRefManager): This implements the TypeRef manager,
28142         which keeps track of all the types that need to be resolved after
28143         the parsing has finished. 
28144
28145 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
28146
28147         * ARGH.  We are going to have to store `foreach' as a class rather
28148         than resolving it, as we need to verify error 1579 after name
28149         resolution.   *OR* we could keep a flag that says `This request to
28150         IEnumerator comes from a foreach statement' which we can then use
28151         to generate the error.
28152
28153 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
28154
28155         * class.cs (TypeContainer.AddMethod): we now add methods to the
28156         MethodGroup instead of the method hashtable.  
28157
28158         * expression.cs: Add MethodGroup abstraction, which gets us one
28159         step closer to the specification in the way we handle method
28160         declarations.  
28161
28162         * cs-parser.jay (primary_expression): qualified_identifier now
28163         tried to match up an identifier to a local variable reference or
28164         to a parameter reference.
28165
28166         current_local_parameters is now a parser global variable that
28167         points to the current parameters for the block, used during name
28168         lookup.
28169
28170         (property_declaration): Now creates an implicit `value' argument to
28171         the set accessor.
28172
28173 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
28174
28175         * parameter.cs: Do not use `param' arguments as part of the
28176         signature, per the spec.
28177
28178 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
28179
28180         * decl.cs: Base class for classes, structs and interfaces.  This
28181         is the "Declaration Space" 
28182
28183         * cs-parser.jay: Use CheckDef for checking declaration errors
28184         instead of having one on each function.
28185
28186         * class.cs: Factor out some code for handling error handling in
28187         accordance to the "Declarations" section in the "Basic Concepts"
28188         chapter in the ECMA C# spec.
28189
28190         * interface.cs: Make all interface member classes derive from
28191         InterfaceMemberBase.
28192
28193 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
28194
28195         * Many things: all interfaces are parsed and generated in
28196         gen-treedump.  Support for member variables, constructors,
28197         destructors, properties, constants is there.
28198
28199         Beginning of the IL backend, but very little done, just there for
28200         testing purposes. 
28201
28202 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
28203
28204         * cs-parser.jay: Fix labeled statement.
28205
28206         * cs-tokenizer.cs (escape): Escape " and ' always.
28207         ref_line, ref_name: keep track of the line/filename as instructed
28208         by #line by the compiler.
28209         Parse #line.
28210
28211 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
28212
28213         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
28214         to match the values in System.CodeDOM.
28215
28216         Divid renamed to Divide.
28217
28218         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
28219         statements. 
28220         (Statements.set): remove.
28221
28222         * System.CodeDOM/CodeCatchClause.cs: always have a valid
28223         statements. 
28224
28225         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
28226         falseStatements always have valid values. 
28227
28228         * cs-parser.jay: Use System.CodeDOM now.
28229