51b4274371679a751e496a64bebb8901c69c28e1
[mono.git] / mcs / mcs / ChangeLog
1 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
2
3         * expression.cs (Conditional.Emit): when emitting the ternary
4         operator, use local variables to generate code verifiable code. 
5
6         The verifier cannot infer that the type on stack before the
7         stloc.0 is executed is of type ParentB. This happens because the
8         stack merge algorithm uses only parent types when deciding which
9         is the common type.  This is described in Part III 1.8.1.3 of ECMA
10         335.
11
12         This code compiled with mcs is not verifiable under MS. The MS
13         verifier picks the first common interface of Foo and Bar, which is
14         wrong, but doesn't use a full join type of the 2 interfaces.
15
16         CSC uses a clever hack to compile such code in a verifiable
17         way. It stores the intermediate values in a local variable with
18         the expected type.
19
20         Fixes: #358102
21         
22 2008-02-14  Miguel de Icaza  <miguel@novell.com>
23
24         * expression.cs: Do not fold BitwiseAnd operators when the left
25         side is a false constant, because we still need to evaluate the
26         right-hand side.
27
28         Fixes #359789
29
30         * support.cs: Instead of throwing an InternalErrorException when
31         the position of the stream is outside the boundary of our buffer,
32         reset the state of the reader, and restart the reading from the
33         beginning of the file.
34
35 2008-02-14  Marek Safar  <marek.safar@gmail.com>
36
37         * generic.cs (TypeParameter.GetMembers): Is not supported operation. 
38         
39 2008-02-14  Marek Safar  <marek.safar@gmail.com>
40
41         A fix for bug #361686
42         * decl.cs: A protected types used inside a private class which parents 
43         derives from the protected class are accessible.
44
45 2008-02-13  Marek Safar  <marek.safar@gmail.com>
46
47         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
48         the parameterless constructor.
49
50 2008-02-13  Marek Safar  <marek.safar@gmail.com>
51
52         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
53         lookup methods to use standard member cache when doing member lookup.
54
55 2008-02-12  Marek Safar  <marek.safar@gmail.com>
56
57         * driver.cs: Don't report full path for referenced module as assembly error.
58
59 2008-02-12  Marek Safar  <marek.safar@gmail.com>
60
61         * Makefile: Fixed `qh' target to work on all machines.
62         
63         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
64         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
65         and HasElementType with TypeManager implementation.
66
67 2008-02-08  Marek Safar  <marek.safar@gmail.com>
68
69         A fix for bugs #325134, #359749
70         * expression.cs, ecore.cs: Try to resolve an extension method even if the
71         first binds point to non-method member expression.
72         
73 2008-02-08  Marek Safar  <marek.safar@gmail.com>
74
75         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
76
77 2008-02-08  Marek Safar  <marek.safar@gmail.com>
78
79         A fix for bugs #321394, #323028
80         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs: 
81         Reworked naive IsAccessibleAs implementation to handle nested types.
82
83 2008-02-05  Jb Evain  <jbevain@novell.com>
84
85         * class.cs: use generic type comparison for parameters
86         as well.
87
88 2008-02-05  Marek Safar  <marek.safar@gmail.com>
89
90         A fix for bug #325372
91         * class.cs: Use generic type comparison when testing method signatures.
92
93 2008-02-05  Marek Safar  <marek.safar@gmail.com>
94
95         A fix for bug #357047
96         * ecore.cs: Applied C# 3.0 changes to better conversion.
97
98 2008-02-05  Marek Safar  <marek.safar@gmail.com>
99
100         A fix for bug #358374
101         * cs-parser.jay: Correctly set modifiers for all constructor types.
102
103 2008-02-04  Marek Safar  <marek.safar@gmail.com>
104
105         A fix for bug #355251
106         * generic.cs: Added base class constraint based type inference.
107
108 2008-02-01  Marek Safar  <marek.safar@gmail.com>
109
110         A fix for bug #357255
111         * decl.cs: One more missing visibility check.
112
113 2008-02-01  Marek Safar  <marek.safar@gmail.com>
114
115         * support.cs: Fixed broken return.
116
117 2008-01-25  Marek Safar  <marek.safar@gmail.com>
118
119         * report.cs: Correctly reset warnings count after probing.
120         
121 2008-01-25  Martin Baulig  <martin@ximian.com>
122
123         * namespace.cs
124         (NamespaceEntry.SymbolFileID): Make this work again after
125         MemberName.ToString() is gone.
126
127 2008-01-25  Marek Safar  <marek.safar@gmail.com>
128
129         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
130         expressions.
131         
132 2008-01-25  Marek Safar  <marek.safar@gmail.com>
133
134         * generic.cs: Use full implicit conversion for type inference fixing.
135         
136 2008-01-24  Marek Safar  <marek.safar@gmail.com>
137
138         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
139         Fixed user operator conversions.
140         
141 2008-01-24  Marek Safar  <marek.safar@gmail.com>
142
143         * generic.cs: Do nullable type to null comparison optimization during
144         resolve phase.
145         
146 2008-01-24  Marek Safar  <marek.safar@gmail.com>
147
148         A fix for bug #355163
149         * generic.cs: Enabled l-value resolve on nullable expressions.
150         
151 2008-01-24  Marek Safar  <marek.safar@gmail.com>
152
153         A fix for bug #353986
154         * class.cs: Ingore static ctors with parameters for any further checks.
155         
156 2008-01-24  Marek Safar  <marek.safar@gmail.com>
157
158         A fix for bug #354310
159         * namespace.cs: Removed redundant check.
160
161 2008-01-24  Marek Safar  <marek.safar@gmail.com>
162
163         A fix for bug #354928
164         * expression.cs: ElementInitializers can be resolved only once.
165         
166 2008-01-24  Marek Safar  <marek.safar@gmail.com>
167
168         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
169         Condition expressions.
170         
171 2008-01-23  Marek Safar  <marek.safar@gmail.com>
172
173         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
174
175 2008-01-22  Marek Safar  <marek.safar@gmail.com>
176
177         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
178         not allowed.
179         
180         * generic.cs: Implemented coalesce expression.
181
182 2008-01-22  Marek Safar  <marek.safar@gmail.com>
183
184         A fix for bug #355145
185         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
186         expression tree type inference.
187
188 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
189
190         Fix #354663
191         * expression.cs (Binary.IsUnsignedType): Fix typo.
192         
193 2008-01-22  Marek Safar  <marek.safar@gmail.com>
194
195         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
196         
197 2008-01-22  Marek Safar  <marek.safar@gmail.com>
198
199         A fix for bug #355161
200         * ecore.cs, expression.cs: Wider range of extension method supported
201         expressions.
202  
203 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
204
205         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
206         AssemblyBuilder to operate in compiler context. Fixes mcs part of
207         bug #354970.
208
209 2008-01-22  Marek Safar  <marek.safar@gmail.com>
210
211         A fix for bug #355148
212         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
213         
214 2008-01-22  Miguel de Icaza  <miguel@novell.com>
215
216         * expression.cs (CreateExpressionTree): Add support for or and
217         logical or, and indent following the coding conventions.
218
219         * typemanager.cs (LinqExpression): renamed from
220         ExpressionTreeManager, for a shorter name.
221
222         Use TypeManager.CoreLookupType to lookup types from our core
223         assemblies and turn those into "Type" variables.
224
225         Consumers that previously used "Namespace" and "Type" from this
226         class should instead use the TypeExpression which is a type that
227         is fully resolved (without involving the regular C# resolution
228         rules). 
229
230         This typically looks like this:
231
232         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
233         new MemberAccess (texpr, name, type_arguments, loc)
234
235         This avoids the problem in: #355178
236
237 2008-01-21  Marek Safar  <marek.safar@gmail.com>
238
239         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
240         feature in parser only as we do in other cases.
241         
242 2008-01-21  Marek Safar  <marek.safar@gmail.com>
243
244         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
245         typemanager.cs: A refactoring of params arguments to reuse existing
246         expressions (params -> array initializer) to emit params argument instead
247         of specialized handling.
248         It was required by expression tree implementation and it has other benefits
249         as well, we now apply same optimization for params arguments as we do for
250         array initializers.
251         
252 2008-01-18  Marek Safar  <marek.safar@gmail.com>
253
254         A fix for bug #353526
255         * generic.cs: A type inference of params arguments may not required any
256         temporary array creation.
257         
258 2008-01-18  Marek Safar  <marek.safar@gmail.com>
259
260         A fix for bug #353534
261         * generic.cs, ecore.cs, expression.cs: A method group type inference is
262         supported for delegates only.
263         
264 2008-01-18  Marek Safar  <marek.safar@gmail.com>
265
266         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
267         type for more than 1 candidates.
268         
269 2008-01-18  Marek Safar  <marek.safar@gmail.com>
270
271         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
272         expressions.
273         
274 2008-01-16  Marek Safar  <marek.safar@gmail.com>
275
276         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
277         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
278         operator) expressions. 
279                 
280 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
281
282         * statement.cs: Avoid declaring an IL variable for this_variable since it is
283         not accessed from the generated IL.
284
285 2008-01-14  Marek Safar  <marek.safar@gmail.com>
286
287         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
288         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
289         statement.cs: The first expression tree implementation drop, mostly
290         infrastructure work.
291
292 2008-01-14  Marek Safar  <marek.safar@gmail.com>
293
294         * ecore.cs (IsNestedChild): Refactored.
295
296 2008-01-11  Marek Safar  <marek.safar@gmail.com>
297
298         * lambda.cs: Don't use a cast on unknown expression statement.
299
300 2008-01-10  Geoff Norton  <gnorton@novell.com>
301
302         * cs-tokenizer.cs: One more token to distinguish between method and lambda
303         arguments
304
305 2008-01-09  Marek Safar  <marek.safar@gmail.com>
306
307         * doc.cs: Report better /doc crash details.
308         
309 2008-01-09  Marek Safar  <marek.safar@gmail.com>
310
311         A fix for bug #352536
312         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
313
314 2008-01-08  Marek Safar  <marek.safar@gmail.com>
315
316         A fix for bug #352287
317         * ecore.cs, expression.cs: Do `this' access checking in all member access
318         expressions.
319         
320 2008-01-08  Marek Safar  <marek.safar@gmail.com>
321
322         * rootcontext.cs, driver.cs: Switch to linq mode by default.
323         
324         * report.cs: Reset message stacks.
325         
326 2008-01-08  Marek Safar  <marek.safar@gmail.com>
327
328         * generic.cs (InferInPhases): Correctly calculate params position.
329         
330 2008-01-08  Marek Safar  <marek.safar@gmail.com>
331
332         * cs-tokenizer.cs: No need to parse full string when parsing lambda
333         arguments.
334
335 2008-01-07  Marek Safar  <marek.safar@gmail.com>
336
337         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
338         
339         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
340         
341         * driver.cs: Updated --help option.
342         
343 2008-01-07  Marek Safar  <marek.safar@gmail.com>
344
345         * generic.cs (InferParamsTypeArguments): Removed.
346         (InferInPhases): Add params type inference.
347         (LowerBoundInference): Fixed scoring mechanism.
348         
349         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
350         
351 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
352
353         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
354         byte array for unsigned "baked" assemblies.
355
356 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
357
358         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
359         array for assemblies that are not strongnamed.
360
361 2008-01-04  Marek Safar  <marek.safar@gmail.com>
362
363         A fix for bug #351481
364         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
365         declaring type for nested generic types.
366         
367 2008-01-04  Marek Safar  <marek.safar@gmail.com>
368
369         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
370         instead of ToString.
371         
372 2008-01-03  Marek Safar  <marek.safar@gmail.com>
373
374         A fix for bug #351047
375         * expression.cs (Binary.ResolveOperator): Allow equality operators between
376         null and structs only when equality and inequality operators are defined
377         either as an user-operators or predefined operators.
378         
379 2008-01-03  Marek Safar  <marek.safar@gmail.com>
380
381         A fix for bug #351047
382         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
383         
384 2008-01-03  Marek Safar  <marek.safar@gmail.com>
385
386         A fix for bug #351257
387         * cs-tokenizer.cs: Advance line number for '\r' correctly.
388         
389 2008-01-03  Marek Safar  <marek.safar@gmail.com>
390
391         A fix for bug #351157
392         * class.cs (Using): Fixed yet another broken cloning.
393         
394         (Block): Put back more sensible default value for statements.
395         
396 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
397
398         * codegen.cs: Allow AssemblyVersion with only major version component.
399         Fixes bug #351055.
400
401 2007-12-29  Marek Safar  <marek.safar@gmail.com>
402
403         A fix for bug #324654
404         * class.cs: Use FullName property as member name.
405
406 2007-12-28  Marek Safar  <marek.safar@gmail.com>
407
408         A fix for bug #342117
409         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
410         constructor constraint.
411
412 2007-12-28  Marek Safar  <marek.safar@gmail.com>
413
414         A fix for bug #338273
415         * class.cs (ProbertyBase): Access modifier checks are required for overrides
416         only.
417
418 2007-12-28  Marek Safar  <marek.safar@gmail.com>
419
420         A fix for bug #350839
421         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
422
423 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
424
425         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
426         GHOP:
427         
428         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
429
430         * statement.cs: Changed some Hashtables to use HybridDictionaries
431         instead. It was observed that some HashTables only contained a few
432         items in the vast majority of cases. Since HybridDictionary is
433         more efficient on small sets (<10 elements), "known_variables"
434         from class ExplicitBlock as well as "labels" and "constants " from
435         class Block were changed to HybridDictionaries. 
436
437         Atsai results: (56216kb->54987kb)
438
439         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
440
441
442 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
443
444         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
445         GHOP:
446         
447         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
448         
449         * expression.cs: foreach loop to for loop, saved on allocation of
450         enumerator (59333kb->59141kb)
451
452         * statement.cs. Changed foreach loops to for loops, saved on
453         allocation of enumerator (59141kb->59006kb)
454
455         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
456         when constructed with no specified capacity. This was causing a
457         few ArrayLists to allocate more memory than they would potentially
458         need in the Block class and MemberCache class. Setting the
459         ArrayLists to construct with a capacity of 1 saves some
460         memory. (56216kb->55585kb)
461
462 2007-12-27  Marek Safar  <marek.safar@gmail.com>
463
464         A fix for bug #347189 (2nd issue)
465         * expression.cs (MemberAccess): Nested type can be found in base non-generic
466         type.
467
468 2007-12-27  Miguel de Icaza  <miguel@novell.com>
469         
470         * report.cs: Do not use colors if stdout and stderr are not a
471         terminal.
472
473 2007-12-27  Marek Safar  <marek.safar@gmail.com>
474
475         A fix for bug #346998
476         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
477         overloads.
478
479 2007-12-27  Marek Safar  <marek.safar@gmail.com>
480
481         A fix for bug #343465
482         * class.cs: Explicit method name for nested types uses dots only.
483
484 2007-12-27  Marek Safar  <marek.safar@gmail.com>
485
486         A fix for bug #343707
487         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
488
489 2007-12-27  Marek Safar  <marek.safar@gmail.com>
490
491         * ecore.cs: Report type inference errors only when arguments count matches
492         parameter count.
493         
494         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
495         
496         * expression.cs, report.cs: New warning.
497         
498         * typemanager.cs: Catch anonymous method type too.
499
500 2007-12-23  Marek Safar  <marek.safar@gmail.com>
501
502         A fix for bug #346379
503         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
504
505 2007-12-23  Marek Safar  <marek.safar@gmail.com>
506
507         A fix for bug #347359
508         * expression.cs (Invocation): Don't resolve already resolved expression.
509
510 2007-12-23  Marek Safar  <marek.safar@gmail.com>
511
512         A fix for bug #347189
513         * class.cs (FixedField): Use non-dependent code only in the define phase.
514
515 2007-12-23  Marek Safar  <marek.safar@gmail.com>
516
517         A fix for bug #348076
518         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
519
520 2007-12-22  Marek Safar  <marek.safar@gmail.com>
521
522         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
523         discovered extension methods.
524
525 2007-12-22  Marek Safar  <marek.safar@gmail.com>
526
527         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
528         method.
529
530 2007-12-21  Miguel de Icaza  <miguel@novell.com>
531
532         * report.cs (ErrorMessage): Add support for using colors on
533         terminals that support it. 
534
535 2007-12-21  Marek Safar  <marek.safar@gmail.com>
536
537         * ecore.cs: Use information about expanded params for error reporting.
538
539 2007-12-21  Marek Safar  <marek.safar@gmail.com>
540
541         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
542         and logic for params overloads.
543         
544 2007-12-15  Miguel de Icaza  <miguel@novell.com>
545
546         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
547         as this is also created from the parser.  Fixes #349034
548
549 2007-12-12  Miguel de Icaza  <miguel@novell.com>
550
551         * statement.cs (Throw.CloneTo): it is valid to have empty
552         expressions for throw. 
553
554 2007-12-03  Marek Safar  <marek.safar@gmail.com>
555
556         * cs-parser.jay: Set delegate constraint parsing region correctly.
557
558 2007-12-03  Marek Safar  <marek.safar@gmail.com>
559
560         A fix for bug #345467
561         * typemanager.cs (IsEqual): Compare generic parameters position only.
562         
563 2007-11-28  Marek Safar  <marek.safar@gmail.com>
564
565         * expression.cs (BaseAccess): Type arguments can be null.
566
567 2007-11-27  Raja R Harinath  <harinath@gmail.com>
568
569         * statement.cs (Block.Resolve): Ensure flow-branching tree is
570         consistent even when an error has occured.
571         (Switch.Resolve): Likewise.
572
573 2007-11-22  Marek Safar  <marek.safar@gmail.com>
574
575         A fix for bug #334505
576         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
577         overrides.
578         
579 2007-11-22  Marek Safar  <marek.safar@gmail.com>
580
581         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
582         refactorings required to resolve extension methods correctly when mixing
583         generics and non-generics members.
584         
585 2007-11-20  Marek Safar  <marek.safar@gmail.com>
586
587         A fix for bug #342584
588         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
589         conversion.
590         
591 2007-11-19  Marek Safar  <marek.safar@gmail.com>
592
593         A fix for bug #342512
594         * delegate.cs: Use delegate argument expression when is available. Don't
595         emit virtual call when class is sealed.
596         
597 2007-11-16  Marek Safar  <marek.safar@gmail.com>
598
599         A fix for bug #325423
600         * assign.cs (FieldInitializer): Use resolved expression for emit.
601         
602         * class.cs: Print less confusing error message.
603         
604 2007-11-16  Marek Safar  <marek.safar@gmail.com>
605
606         * cs-tokenizer.cs: Removed GMCS ifdefs.
607         
608         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
609         mcs.
610         
611         * cs-parser.jay: Disabled nullable check.
612         
613         * generic-mcs: Copied more generic stuff.
614                 
615 2007-11-16  Marek Safar  <marek.safar@gmail.com>
616
617         * gcs-parser.jay: Merged to cs-parser.jay.
618         
619         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
620         * *.csproj, *.sources: Updated to use only jay parser file.
621
622 2007-11-16  Marek Safar  <marek.safar@gmail.com>
623
624         * gcs-parser.jay: Added nullable and default expression feature checks.
625         
626 2007-11-16  Marek Safar  <marek.safar@gmail.com>
627
628         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
629         it fixes many TODOs and hidden bugs.
630         
631         * expression: Removed duplicate error check.
632
633 2007-11-15  Marek Safar  <marek.safar@gmail.com>
634
635         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
636         implicitly type local variable only when it is used in a declaration.
637
638 2007-11-15  Marek Safar  <marek.safar@gmail.com>
639
640         * attribute.cs: Use CS0612 for empty strings.
641
642 2007-11-14  Marek Safar  <marek.safar@gmail.com>
643
644         * lambda.cs, statement.cs: Contextual return may act as a statement.
645
646 2007-11-14  Marek Safar  <marek.safar@gmail.com>
647
648         A fix for a regression cause by #324222
649         * class.cs: Don't report unused even when it implements an interface.
650         
651 2007-11-13  Marek Safar  <marek.safar@gmail.com>
652
653         A fix for bug #341205
654         * ecore.cs, expression.cs: Method group expression cannot do static
655         method access with an instance reference check before overloading takes
656         a place.
657         
658 2007-11-13  Marek Safar  <marek.safar@gmail.com>
659
660         A fix for bug #325359
661         * class.cs: Use predictable name for automatically generated property.
662         
663 2007-11-12  Marek Safar  <marek.safar@gmail.com>
664
665         A fix for bug #324996
666         * expression.cs (Is): Handle case where D is nullable and T is not
667         correctly.
668         
669         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
670         
671 2007-11-12  Marek Safar  <marek.safar@gmail.com>
672
673         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
674         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
675         Flush small error reporting changes.
676         
677 2007-11-09  Marek Safar  <marek.safar@gmail.com>
678
679         A fix for bug #324996
680         * expression.cs: Rewrote Is expression implementation to work with
681         generics, nullable types, anonymous method. A const result expression 
682         uses existing infrastructure instead of custom not fully-featured one.
683         
684 2007-11-08  Marek Safar  <marek.safar@gmail.com>
685
686         A fix for bug #340202
687         * class.cs: Consider generics for volatile field.
688
689 2007-11-08  Marek Safar  <marek.safar@gmail.com>
690
691         A fix for bug #335594
692         * expression.cs: Use conversion rules when handling string addition.
693         
694 2007-11-07  Marek Safar  <marek.safar@gmail.com>
695
696         A fix for bug #336651
697         * expression.cs: Fixed a crash when probing is on.
698         
699 2007-11-07  Marek Safar  <marek.safar@gmail.com>
700
701         A fix for bug #324242
702         * covert.cs: Added a conversion from any nullable-type with an 
703         underlying enum-type to the type System.Enum.
704         
705 2007-11-07  Marek Safar  <marek.safar@gmail.com>
706
707         A fix for bug #324222
708         * class.cs: Report all non-used event fields.
709         
710 2007-11-07  Marek Safar  <marek.safar@gmail.com>
711
712         A fix for bug #325161
713         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
714         qualifier for generic types.
715         
716 2007-11-07  Marek Safar  <marek.safar@gmail.com>
717
718         A fix for bug #322971
719         * expression.cs, ecore.cs: Added intermediate result value check for
720         indexers. 
721         
722 2007-11-07  Marek Safar  <marek.safar@gmail.com>
723
724         A fix for bug #324754
725         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
726         when it was requested.
727
728 2007-11-07  Marek Safar  <marek.safar@gmail.com>
729
730         A fix for bug #325101
731         * expression.cs: Do type not value comparison for `is' expression.
732
733 2007-11-07  Marek Safar  <marek.safar@gmail.com>
734
735         A fix for bug #320236
736         * convert.cs: Don't apply user conversion on underlying target type.
737
738 2007-11-06  Marek Safar  <marek.safar@gmail.com>
739
740         * expression.cs: Don't use unresolved expression for error reporting.
741  
742 2007-11-06  Marek Safar  <marek.safar@gmail.com>
743
744         A fix for bugs #337712, #324490
745         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
746         overloading resolution too.
747         
748         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
749         the process consistent and more robust.
750         
751         * expression.cs, linq.cs, report.cs: Update.
752
753 2007-11-02  Marek Safar  <marek.safar@gmail.com>
754
755         A fix for bug #332909
756         * attribute.cs: Resolve attributes in correct context using error
757         handling procedure.
758         
759         * rootcontext.cs: Define Obsolete attribute members as core members.
760         
761 2007-11-02  Marek Safar  <marek.safar@gmail.com>
762
763         * statement.cs: Removed unused methods.
764         
765 2007-10-31  Wade Berrier  <wberrier@novell.com>
766
767         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
768         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
769         during 'make dist')
770
771 2007-10-31  Marek Safar  <marek.safar@gmail.com>
772
773         A fix for bug #338102
774         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
775         methods registered as non-generics.
776         
777 2007-10-31  Marek Safar  <marek.safar@gmail.com>
778
779         A fix for bugs #337712, #324490
780         * delegate.cs: Delegate covariance and contravariance is not allowed for
781         value types.
782         
783 2007-10-31  Marek Safar  <marek.safar@gmail.com>
784
785         A fix for bug #337719 
786         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
787         `from' keyword.
788         
789 2007-10-30  Marek Safar  <marek.safar@gmail.com>
790  
791         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
792
793 2007-10-29  Marek Safar  <marek.safar@gmail.com>
794  
795         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
796         query expressions.
797
798 2007-10-29  Raja R Harinath  <rharinath@novell.com>
799
800         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
801
802 2007-10-29  Marek Safar  <marek.safar@gmail.com>
803  
804         A fix for bug #334652
805         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
806         extension methods when we have not found the best candidate in normal
807         container.
808
809 2007-10-27  Marek Safar  <marek.safar@gmail.com>
810
811         * AssemblyInfo.cs: Keep up-to-date.
812
813 2007-10-27  Marek Safar  <marek.safar@gmail.com>
814
815         * Makefile: Fixed generics compiler name.
816         
817 2007-10-27  Marek Safar  <marek.safar@gmail.com>
818
819         * lambda.test: removed, lambda parsing is done differently.
820         
821         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
822
823 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
824
825         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
826
827 2007-10-27  Marek Safar  <marek.safar@gmail.com>
828
829         * Makefile, *.sources : All C# compilers are in mcs folder.
830         
831         * *.cs: Use existing 2_1 define for smcs.
832
833 2007-10-26  Marek Safar  <marek.safar@gmail.com>
834
835         A fix for bug #335847
836         * assign.cs, expression.cs: Couple of changes to avoid creating a
837         temporary variable for each object initializer assignment statement. It
838         simplifies struct initialization too, otherwise two temporary variables
839         would be required.
840         Implemented optimization of redundant default element initializers.
841         
842 2007-10-25  Marek Safar  <marek.safar@gmail.com>
843
844         A fix for bug #336766
845         * expression.cs (Class.CheckBase): Use generic name when method is
846         generic.
847         
848 2007-10-25  Marek Safar  <marek.safar@gmail.com>
849
850         A fix for bug #334737
851         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
852         variable and not variable argument for prepared copies.
853
854 2007-10-24  Marek Safar  <marek.safar@gmail.com>
855
856         A fix for bug #325110
857         * class.cs, expression.cs, attribute.cs: Use open generic method when
858         checking conditional attribute.
859         
860 2007-10-24  Marek Safar  <marek.safar@gmail.com>
861
862         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
863         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
864         FeatureIsNotAvailable.
865
866 2007-10-24  Marek Safar  <marek.safar@gmail.com>
867
868         ** C# 3.0 Partial methods
869         
870         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
871         methods support. Because of member cache issue with generics only
872         non-generics partial methods are fully supported.
873         
874 2007-10-23  Marek Safar  <marek.safar@gmail.com>
875         
876         * class.cs, decl.cs: Rewrote member overloads check to cope with 
877         generics and to use member cache for member checking. It also improves
878         performance and fixes remaining overloads issues.
879         
880 2007-10-20  Marek Safar  <marek.safar@gmail.com>
881         
882         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
883         roottypes.cs, typemanager.cs:
884                 
885         A member cache creation logic changed to add members immediately and
886         not rely on fallback. The member cache is now only prefered way
887         how to access and find type declaration members. It saves 5 MB of memory
888         during MWF compilation and makes code ready for more optimizations and
889         clean-ups, it's also a pre-requirement for partial methods.
890         
891 2007-10-18  Raja R Harinath  <harinath@gmail.com>
892
893         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
894         handling for generic parameters.
895
896 2007-10-15  Marek Safar  <marek.safar@gmail.com>
897         
898         * class.cs (FixedField): Removed redundant volatile check.
899         
900 2007-10-15  Marek Safar  <marek.safar@gmail.com>
901         
902         * class.cs, decl.cs: Fixed overload members verification to do only one
903         check per possible collision.
904         
905 2007-10-13  Marek Safar  <marek.safar@gmail.com>
906         
907         A fix for bug #325478
908         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
909         and create only one disposable flags container.
910         
911 2007-10-12  Marek Safar  <marek.safar@gmail.com>
912         
913         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
914         * statement.cs (Fixed): Fixed variables cloning.
915         
916 2007-10-12  Marek Safar  <marek.safar@gmail.com>
917         
918         A fix for bug #333342
919         * class.cs (EventField): Don't mark value type event as synchronized. 
920         
921 2007-10-12  Marek Safar  <marek.safar@gmail.com>
922         
923         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
924         inference to identify best candidate method correctly.
925         (ProperyExpr): A range variable is read only and cannot be modified.
926         
927 2007-10-11  Marek Safar  <marek.safar@gmail.com>
928         
929         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
930         logic to identify best candidate method correctly.
931         
932 2007-10-11  Marek Safar  <marek.safar@gmail.com>
933         
934         * location.cs (Equals, GetHashCode): Removed.
935         
936 2007-10-11  Marek Safar  <marek.safar@gmail.com>
937         
938         * report.cs: Implemented message recorder. It is used mainly for lambda
939         expressions to capture otherwise swallowed error messages.
940         
941         * anonymous.cs, lambda.cs.cs: Do full parameters check.
942
943         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
944         and not at the top.
945         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
946                 
947         * expression.cs (MemberAccess): Always report lookup failure.
948         
949         * location.cs: Implemented Equals, GetHashCode.
950         
951         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
952         
953 2007-10-10  Jb Evain  <jbevain@novell.com>
954
955         * codegen.cs: re-enable assembly version check.
956
957 2007-10-09  Marek Safar  <marek.safar@gmail.com>
958         
959         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
960         checks.
961         
962         * namespace.cs (UsingAlias): Do correct version check.
963         
964 2007-10-08  Marek Safar  <marek.safar@gmail.com>
965         
966         * expresison.cs, ecore.cs: Issue extension method error message when
967         appropriate.
968         
969         * rootcontext.cs: Added ISO_2 compiler mode option.
970
971 2007-10-08  Marek Safar  <marek.safar@gmail.com>
972         
973         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
974          message.
975         
976 2007-10-08  Marek Safar  <marek.safar@gmail.com>
977         
978         * attribute.cs (GetString, GetBoolean): Work with both literal and
979         constant.
980         
981         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
982         Moved method overload specific methods to MethodGroupExpr.
983         
984         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
985         it should be less memory consuming.
986         
987 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
988
989         * codegen.cs: remove the assembly version check until the buildbot is
990         fixed.
991
992 2007-10-07  Jb Evain  <jbevain@novell.com>
993
994         * attribute.cs (Attribute.GetString): if the value
995         expression is a StringConstant, return its string value.
996
997 2007-10-07  Jb Evain  <jbevain@novell.com>
998
999         * typemanager.cs: add `assembly_version_attribute_type`.
1000         * codegen.cs: on attribute emission, check that the
1001         AssemblyVersionAttribute doesn't overflow.
1002
1003 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1004         
1005         A fix for bug #324677
1006         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
1007         parent container of a scope container with currently resolved one. 
1008         
1009 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1010         
1011         A fix for bug #325534
1012         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
1013         only.
1014         
1015 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1016         
1017         A fix for bug #327504
1018         * class.cs (Operator.Define): Refactored implicit and explicit user
1019         operator conversion rules.
1020         
1021 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1022         
1023         A fix for bug #327520
1024         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
1025         
1026 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1027         
1028         A fix for bug #328022
1029         * class.cs (MethodData.Define): Use correct method to check whether
1030         a method implementents an accessor.
1031         
1032 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1033         
1034         A fix for bug #330069
1035         * statement.cs (Fixed.Resolve): Read the first array element only when
1036         an array is instantiated. 
1037         
1038 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1039         
1040         * expression.cs, assign.cs, generics.cs: Print correct operator when
1041         compound assignment is used.
1042         
1043 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1044         
1045         A fix for bug #325841
1046         * expression.cs (ArrayAccess): Use full argument cloning only for
1047         string compound concatenation.
1048         
1049 2007-10-03  Marek Safar  <marek.safar@gmail.com>
1050         
1051         A fix for bug #328774
1052         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
1053         assignment.
1054         (PropertyExpr.EmitAssign): Fixed string concatenation compound
1055         assignment.
1056
1057 2007-10-03  Raja R Harinath  <rharinath@novell.com>
1058
1059         Fix #328490
1060         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
1061         Event accessibility checks here.  Remove some bogus code that
1062         accidently made GenericMethods work.
1063         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
1064
1065 2007-09-25  Marek Safar  <marek.safar@gmail.com>
1066         
1067         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
1068         
1069         * statement.cs (Block): Refactored AddVariable to allow error handling
1070         customization.
1071         
1072         * generic.cs: New stub.
1073         
1074 2007-09-23  Marek Safar  <marek.safar@gmail.com>
1075         
1076         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
1077         flag.
1078         
1079 2007-09-17  Marek Safar  <marek.safar@gmail.com>
1080
1081         * class.cs: Use partial container to record whether any partial part
1082         contains static field initializer and therefore default contructor has
1083         to be defined.
1084         
1085 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1086
1087         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
1088         mono-list when only one of two partial parts has defined accessibility
1089         modifier.
1090         
1091 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1092
1093         A fix for bug #82845
1094         
1095         * class.cs (TypeContainer): Set correct resolve context for all field
1096         initializers.
1097         
1098 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1099
1100         * assign.cs: Fixed a crash when field is resolved twice with an error.
1101         
1102         * codegen.cs: Changed InFieldInitializer to be flag.
1103         
1104         * anonymous.cs, ecore.cs, expression.cs: Update after
1105         IsInFieldInitializer rename.
1106         
1107         * const.cs: Removed unused parameter.
1108         
1109         * class.cs: Changed the way how we resolve and emit field initializers.
1110         The field initilizers have to have access to contructor block to emit
1111         compiler generated code.
1112
1113 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1114
1115         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
1116         generics use TypeContainer instead.
1117         
1118 2007-09-12  Marek Safar  <marek.safar@gmail.com>
1119         
1120         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
1121
1122         * lambda.cs (ResolveParameters): Use more powerful
1123         InflateGenericArgument.
1124         
1125         * parameters.cs: Better exception message.
1126                 
1127 2007-09-10  Marek Safar  <marek.safar@gmail.com>
1128
1129         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
1130         correct expression block type. 
1131         
1132         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
1133         
1134         * expression.cs (Invocation): Extracted method group resolve to
1135         DoResolveOverload.
1136         
1137 2007-09-07  Marek Safar  <marek.safar@gmail.com>
1138
1139         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
1140         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
1141         
1142         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
1143         generic extension methods.
1144
1145 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1146
1147         A fix for bug #82676 (Do I get it right now?)
1148         * convert.cs (Binary.ResolveOperator): An interface is converted to the
1149         object before a standard conversion is applied.
1150         
1151 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1152
1153         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
1154         #82676.
1155         
1156 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1157
1158         A fix for bug #82676
1159         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
1160         non-generic interface types.
1161         
1162 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1163
1164         A fix for bug #82690
1165         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
1166         
1167 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1168
1169         A fix for bug #82571
1170         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
1171         modifier for container based methods.
1172         
1173 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1174
1175         A fix for bug #82676
1176         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
1177         any interface-type T means to any of interface type T.
1178
1179 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1180
1181         * namespace.cs: We have 2 versions of System.Core assembly.
1182
1183 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1184
1185         A fix for bug #82652
1186         * class.cs (Class.GetClassBases): Compare types and not expressions.
1187
1188 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1189
1190         A fix for bug #82620
1191         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
1192         actually never worked before.
1193         (IndexerAccess): Emit prepared arguments before they are modified.
1194         
1195 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1196
1197         A fix for bug #82563
1198         * assign.cs: Revert wrong fix.
1199         
1200         * expression.cs (VariableReference.EmitAssign): Handle ref reference
1201         correctly.
1202         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
1203         Instead of ldelema/stdind we have to use temporary variables to handle
1204         cases like String.Concat (params string[]).
1205         
1206 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1207
1208         * class.cs: EmitAttributes to Emit rename.
1209         
1210         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
1211         null.
1212         (MemberCore.HasClsCompliantAttribute): Don't depend on 
1213         GetClsCompliantAttributeValue execution.
1214         
1215 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1216
1217         * anonymous.cs: Use shorter type prefix.
1218         
1219         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
1220         when exist.
1221         
1222         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
1223         variables when probing is on.
1224         
1225         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
1226         unresolved variables.
1227         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
1228         handle transparent identifiers.
1229         
1230 2007-08-26  Marek Safar  <marek.safar@gmail.com>
1231
1232         * attribute.cs (IsClsCompliant): Add nullable types test.
1233         
1234 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
1235
1236         * doc.cs : catch other types of exception than XmlException to
1237           report CS1570. Fixed bug #82565.
1238
1239 2007-08-23  Marek Safar  <marek.safar@gmail.com>
1240
1241         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
1242         The number of delegate parameters has to match.
1243         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
1244         arrays.
1245
1246 2007-08-21  Marek Safar  <marek.safar@gmail.com>
1247
1248         * anonymous.cs (AnonymousMethod): Generate private anonymous method
1249         to fix problem with private arguments.
1250
1251 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1252
1253         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
1254         
1255         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
1256         
1257         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
1258         empty. Add cloning suport.
1259         
1260         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
1261
1262 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1263
1264         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
1265         to create EmptyCast. It handles EmptyConstantCast specialization for
1266         constants.
1267         
1268 2007-08-18  Marek Safar  <marek.safar@gmail.com>
1269
1270         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
1271         (EmitArrayArgument): One routine for array arguments.
1272         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
1273         
1274 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1275
1276         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
1277
1278 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1279
1280         * anonymous.cs: MemberLookupFinal update.
1281
1282         * class.cs (ConstructorInitializer): Is expression based.
1283         
1284         * delegate.cs: MethodGroupExpr update.
1285         
1286         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
1287         messages.
1288         (Error_MemberLookupFailed): Customizable error override.
1289         (MethodGroupExpr): Keep queried type for later usage.
1290         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
1291         resolve.
1292         
1293         * expression.cs: Error_MemberLookupFailed refactoring.
1294         (New.DoResolve): Resolve as much as possible.
1295         (ElementInitializer.Error_MemberLookupFailed): Object initializer
1296         customization for invalid member types.
1297
1298         * statement.cs: MethodGroupExpr update.
1299         
1300 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1301
1302         * modifier.cs (Check): Check all modifiers and not only accessibility
1303         ones.
1304
1305 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1306
1307         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
1308         type and not an expression.
1309
1310 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1311
1312         * statement.cs (Catch.Clone): Type and variable can be null.
1313
1314 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1315
1316         A fix for bug #81979
1317         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
1318         I am really not sure whether this is the best fix.
1319         
1320         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
1321         only once.
1322         
1323 2007-08-14  Marek Safar  <marek.safar@gmail.com>
1324
1325         ** C# 3.0 Object and collection initializers (major re-write)
1326         
1327         * assign.cs (DoResolve): Initializers are not assign related.
1328         
1329         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
1330         used during collection or object initialization.
1331         
1332         * expression.cs (Error_InvalidArguments): Add initializers specific
1333         messages. More will come later because it requires some general
1334         refactoring.
1335         (New.DoResolve): Better error handling for unsafe types.
1336         (EmptyExpressionStatement): New class.
1337         (ElementInitializer): An object initializer expression.
1338         (CollectionElementInitializer): A collection initializer expression.
1339         (CollectionOrObjectInitializers): A block of object or collection
1340         initializers.
1341         (NewInitialize): New expression with element/object initializers.
1342         
1343         * statement.cs: Reverted object/collection initializer hacks.
1344         
1345         * typemanager.cs (CSharpName): Filter __arglist type.
1346         
1347 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1348
1349         ** C# 3.0 Anonymous Types (update to the latest standard)
1350         
1351         * expression.cs (Binary.ResolveOperator): Threat all null based types
1352         same.
1353         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
1354         (AnonymousTypeParameter): Updated.
1355         
1356         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
1357         (AnonymousTypeClass): New anonymous type container.
1358         
1359         * class.cs (AddField): Return operation result.
1360         
1361         * generic.cs: Another empty TypeArguments overload.
1362         
1363         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
1364         are stored at top of normal hierarchy.
1365         
1366         * typemanager.cs (CSharpName): Filter anonymous types.
1367         
1368 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1369
1370         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
1371         as single Concat call. How could we miss that :-(
1372         
1373 2007-08-08  Marek Safar  <marek.safar@gmail.com>
1374
1375         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
1376         
1377 2007-08-07  Miguel de Icaza  <miguel@novell.com>
1378
1379         * expression.cs: Fix the previous commit, the creation of the
1380         arguments array list needs also to be conditional on the arguments
1381         not being null.
1382
1383         * class.cs: Add a little bit of help to help narrow down problems.
1384
1385         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
1386         not try to copy in that case. 
1387
1388         * driver.cs: When building SMCS, include a new different set of
1389         default assemblies here.   Do this here so we can control whether
1390         to include the default assemblies with /noconfig.
1391
1392 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1393
1394         A fix for bug #81979
1395         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
1396         only.
1397
1398 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1399
1400         A fix for bug #82300
1401
1402         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
1403         we are in probing scope.
1404
1405 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1406
1407         A fix for bug #82301
1408
1409         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
1410         (Statement.CloneTo): Clone and not map children blocks.
1411
1412 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1413
1414         A fix for bug #82299
1415
1416         * expression.cs (LocalVariableReference.CloneTo): Remap local info
1417         variable too.
1418         
1419         * statement.cs (Statement.CloneTo): Clone variables before statements
1420         to allow remaping of local variables.
1421
1422 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1423
1424         A fix for bug #82296
1425
1426         * anonymous.cs,
1427         * report.cs: Log crash details for future clone problems.
1428         
1429         * statement.cs (Return.Clone): Don't clone non-existent expression.
1430
1431 2007-08-03  Raja R Harinath  <harinath@gmail.com>
1432
1433         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
1434         (Class.AddBasesForPart): Move CS0537 check here from ...
1435         * cs-parser.jay (class_declaration): ... here.  Move calling of
1436         'AddBasesForPart' to ...
1437         (class_bases): ... here.
1438         (struct_declaration, interface_declaration): Update to changes.
1439
1440 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1441
1442         A fix for bug #81923
1443
1444         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
1445         conversion is allowed.
1446
1447 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1448
1449         A fix for bug #81564
1450
1451         * ecore.cs (EventExpr): Add IsBase handling.
1452
1453         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
1454         too.    
1455         
1456 2007-08-02  Raja R Harinath  <harinath@gmail.com>
1457
1458         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
1459         * cs-parser.jay: Some whitespace cleanups.
1460         (current_delegate): New.
1461         (type_name): New.
1462         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
1463         a dummy code block, and use 'type_name' instead of 'member_name'.
1464         (interface_declaration, class_declaration): Likewise.
1465         (delegate_declaration): Likewise.  Rearrange slightly and use
1466         'current_delegate'.
1467         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
1468         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
1469
1470 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1471
1472         A fix for bug #82039
1473
1474         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
1475         available.
1476
1477         * typemanager.cs (CSharpName): Split to string overload.
1478
1479 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1480
1481         * expression.cs,
1482         * report.cs: Updated warning CS0472.
1483
1484 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1485
1486         A fix for bug #82181
1487         * cs-parser.jay,
1488         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
1489
1490 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1491
1492         A fix for bug #82277
1493         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
1494
1495 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1496
1497         ** C# 3.0 Type Inference (major bits are working)
1498         
1499         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
1500         (.ImplicitStandardConversionExists): Uses compatible.
1501         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
1502         (.InferReturnType): New method.
1503         (.Compatible): Refactored.
1504         (.ResolveParameters): Uses factory to create resolved parameters.
1505         (.CompatibleMethod): Add probing mode support.
1506         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
1507         clearly distinguish between 2 different operations.
1508         (LambdaMethod): Moved to lambda.cs.
1509         (AnonymousMethod): Removed unused fields and methods.
1510         (AnonymousDelegate): Simplified.
1511         
1512         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
1513         
1514         * convert. cs (ImplicitConversionStandard): Compatible works differently.
1515         
1516         * delegate.cs (Delegate): New mehods to reduce code duplication.
1517         (.GetConstructor): New method.
1518         (.GetInvokeMethod): New method.
1519         (DelegateCreation): Updated.
1520         
1521         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
1522         does not exist.
1523         (OverloadResolve): Made probing little bit faster.
1524         
1525         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
1526         when probing is on.
1527         
1528         * generic.cs (TypeInferenceContext): Dummy implementation.
1529         
1530         * iterators.cs: Updated after Resolve/Define rename.
1531         
1532         * lambda.cs (LambdaExpression)
1533         (.ResolveParameters): Handles both type of arguments and type inference too.
1534         
1535         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
1536         (InflateTypes): Updated.
1537         
1538         * support.cs (InflateTypes): Changed signature and updated.
1539         
1540         * typemanager.cs (LookupMemberCache): Better dynamic type check.
1541         (MemberLookup_FindMembers): More MS tricks.
1542         (GetParameterData): Ditto.
1543         (GetDelegateParameters): Uses quick path for dynamic types.
1544         
1545 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1546
1547         * class.cs (MethodData.Define): EmitContext is required for generic stuff
1548         only.
1549
1550 2007-07-31  Marek Safar  <marek.safar@gmail.com>
1551
1552         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
1553         syntax.
1554         
1555 2007-07-26  Jb Evain  <jbevain@novell.com>
1556
1557         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
1558         which takes a boolean 'report_errors', similar to the GetMethod.
1559         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
1560         in .net 2.1, do not report errors here.
1561
1562         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
1563         System.Runtime.CompilerServices.RequiredAttributeAttribute and
1564         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
1565         in .net 2.1.
1566
1567         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
1568         of the type InternalsVisibleToAttribute before the first call
1569         to CoreLookupType which is allowed to fail (third boolean parameter
1570         to true). Because, during the resolution for a type that is not
1571         immediately found, we try to check if the type is not defined in
1572         a friend assembly, and to do so, we need the
1573         InternalVisibleToAttribute.
1574
1575 2007-07-23  Miguel de Icaza  <miguel@novell.com>
1576
1577         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
1578         feature that allows structs to be compared against null and inline
1579         the result as true or false.
1580
1581         Notice that the same code is not permitted inside a generic block
1582         of code that would do:
1583
1584         class Foo<T> where T : struct {
1585             bool Eval (T x)
1586             {
1587                  return x == null;
1588             }
1589         }
1590
1591         It is only allowed if the type of T is not bound (no where
1592         clause).   In my opinion, this CSC 2 behavior is broken but people
1593         seem to be using it (IronRuby does, a few bug reports on bugzilla
1594         have it and some people have complained about it).
1595
1596         All of the users that depend on this behavior have code that is
1597         very likely broken. 
1598         
1599         * report.cs (Warning, Error): make these take object arguments,
1600         not strings, as that allows us to take advantage of Format.
1601
1602 2007-07-20  William Holmes  <billholmes54@gmail.com>
1603
1604         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
1605           Left member variable for the Count.
1606         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
1607           MemberName.CountTypeArguments to avoid a NRE. 
1608
1609         This code is contributed under the MIT X11 license
1610
1611 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1612
1613         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
1614
1615 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1616
1617         * doc.cs : generic method arguments are written as ``x while generic
1618           type arguments are `x. Combined with the previous change, fixed bug
1619           #79706.
1620
1621 2007-07-18  Raja R Harinath  <rharinath@novell.com>
1622
1623         Fix #82120
1624         * expression.cs (Binary.ResolveOperator): When converting
1625         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
1626
1627 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1628
1629         * doc.cs : when T: or whatever x: is specified, it does not really
1630           check the doc comment's syntax correctness. Fixed bug #82006.
1631
1632 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1633
1634         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
1635         LambdaExpression better.
1636         
1637         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
1638         
1639         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
1640         
1641         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
1642         as it can be generated.
1643         
1644         * expression.cs (Invocation.Error_InvalidArguments): Show correct
1645         modifiers.
1646         
1647         * lambda.cs (LambdaExpression): Refactored to share same code with
1648         AnonymousMethodExpression.
1649         
1650 2007-07-17  Marek Safar  <marek.safar@gmail.com>
1651
1652         * anonymous.cs (MakeName): Include host name for easier debugging.
1653         (LambdaMethod): New class for lambda spcecific stuff.
1654         
1655         * attribute.cs: Set EmitContext return type.
1656
1657         * class.cs: Set EmitContext return type.
1658         
1659         * codegen.cs (EmitContext): Return type cannot be null to stop messing
1660         with null/void meaning.
1661         
1662         * iterators.cs (ContainerType): Implemented.
1663         
1664         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
1665         
1666         * statement.cs (Return): Updated to lambda expressions.
1667         (Block.CloneTo): Parent can be null.
1668                 
1669 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1670
1671         A fix for bug #81917
1672         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
1673         
1674         * class.cs (FixedField): Check whether field is in unsafe scope.
1675
1676         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
1677         (FieldExpr.Emit): Fixed buffers cannot be volatile.
1678
1679         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
1680         FieldExpr.
1681         
1682         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
1683                 
1684 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1685
1686         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
1687         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
1688         from Report class.
1689
1690 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1691
1692         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
1693         
1694 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1695
1696         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
1697         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
1698         
1699         * codegen.cs(EmitContext): Add ProbingMode flag.
1700         
1701         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
1702         
1703         * driver.cs: For now set both warning values.
1704         
1705         * ecore.cs (SimpleName): Name is readonly.
1706         (MethodGroup.OverloadResolve): One quick path for probing.
1707         
1708         * expression.cs (Unary): Set Oper r/o.
1709         (Binary): Set Oper r/o.
1710         (ParameterReference): Set few instance variables as r/o.
1711         (ParameterReference.DoResolveBase): Don't capture aruments when 
1712         the probing is on.
1713         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
1714         (Arglist): arguments are private.
1715         (SizeOf): type is private and r/o.
1716         (MemberAccess): arguments are private.
1717
1718         * report.cs: Enhanced reporting on/off capabilities.
1719         
1720         * lambda.cs: Uses ec.IsInProbingMode.
1721         (ContextualReturn): Derives from return.
1722         
1723         * rootcontext.cs: For now set both warning values.
1724         
1725         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
1726         copy if one exists.
1727         (Return.Resolve): Don't die immediately.
1728         (Block.Resolve): Speed-up probing.
1729         (Block.CloneTo): Clone only child blocks.
1730
1731 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
1732
1733         * iterators.cs: reverted Miguel's latest change (r81925) as it
1734         breaks the build in System.
1735
1736 2007-07-13  Miguel de Icaza  <miguel@novell.com>
1737
1738         * iterators.cs (Yield.CheckContext): Check for the iterator type
1739         also here as we can call into Yield even in codepaths that are not
1740         directly checked by
1741         (MethodOrOperator is the only path that was checked).
1742
1743         In addition to the standard check, use a more specific check for
1744         constructors to report a more verbose error. 
1745
1746 2007-07-12  Miguel de Icaza  <miguel@novell.com>
1747
1748         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
1749         report the warning and continue 
1750
1751         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
1752         values on the stack on the call to Emit.   Use EmitStatement if
1753         possible, or using Emit + Pop if not possible.   Fixes #82064
1754
1755 2007-07-12  Raja R Harinath  <rharinath@novell.com>
1756
1757         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
1758         avoid try...finally in some cases.
1759
1760 2007-07-10  Marek Safar  <marek.safar@gmail.com>
1761
1762         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
1763         
1764         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
1765         instead of method. Re-use standard error handling.
1766         (ConstructorInitializer.Emit): Simplified.
1767         
1768         * delegate.cs: Updated after Invocation.EmitCall change.
1769         
1770         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
1771         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
1772         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
1773         method and don't permanently changing input arguments.
1774         (MethodGroupExpr): Introduced resolved best_candidate, when method group
1775         is resolved it has one of the candidates is the best one which is later
1776         used to emit. Removed a few unused method.
1777         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
1778
1779         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
1780         (Binary.ResolveOperator): Ditto.
1781         (ConditionalLogicalOperator.DoResolve): Ditto.
1782         (Invocation): Uses method group.
1783         (Invocation.DoResolve): Simplified.
1784         (Invocation.EmitCall): Removed useless is_static.
1785         (Invocation.Emit): Delegate to method group.
1786         (Invocation.EmitStatement): Simplified.
1787         (New): Uses method group.
1788         (MemberAccess.DoResolve): Don't destroy original expression.
1789         
1790         * statement.cs (ForEach.Resolve): Use null for no method arguments.
1791         
1792 2007-07-04  Marek Safar  <marek.safar@gmail.com>
1793
1794         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
1795         
1796         * anonymous.cs,
1797         * lambda.cs: Add custom error message type.
1798
1799 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1800
1801         * lambda.cs: Simplified little bit.
1802         
1803         * parameter.cs: Introduced ImplicitLambdaParameter.
1804         (Parameters.CreateFullyResolved): New factory instead of ctor.
1805         
1806         * anonymous.cs,
1807         * class.cs,
1808         * delegate.cs: Updated parameter creation.
1809         
1810 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1811
1812         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
1813         arguments.
1814         
1815         * generic.cs: Synchronized with gmcs.
1816         
1817 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1818
1819         * class.cs (Indexer): Check return type as soon as possible.
1820         
1821         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
1822         members too.
1823         
1824         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
1825         
1826         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
1827         
1828         * parameter.cs (Parameter): Use expression type when it is available.
1829         
1830         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
1831         method modifier for the first parameter only.
1832
1833 2007-06-24  Marek Safar  <marek.safar@gmail.com>
1834
1835         A fix for bug #81938
1836         * typemanager.cs (ChangeType): Fixed couple of char conversions.
1837         
1838         * constant.cs: Tide up an exception message.
1839
1840 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1841
1842         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
1843         an uninitialized variable is used.
1844         
1845         * expression.cs (LocalVariableReference.DoResolve): Ditto.
1846
1847 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1848
1849         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
1850         not found error handling.
1851
1852         * expression.cs (ArrayCreation): Removed redundant fields and little bit
1853         simplified.
1854         (ArrayCreation.ResolveArrayElement): To be ready to customization.
1855         (ArrayCreation.DoResolve): Simplified.
1856         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
1857         its own resolve process.
1858         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
1859
1860 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1861
1862         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
1863         more error details.
1864         
1865 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1866
1867         * cs-tokenizer.cs: Removed var related stuff.
1868         
1869         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
1870         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
1871         a type and a keyword at same time.
1872         
1873         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
1874         matches to "var".
1875         
1876         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
1877         implicitly typed arrays, more changes will follow.
1878         
1879         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
1880         
1881 2007-06-19  Marek Safar  <marek.safar@gmail.com>
1882
1883         * ecore.cs (VarExpr): Removed Handled field.
1884         
1885         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
1886         build-in assign functionality.
1887         (ForEach.Resolve): Removed all implicitly typed local variable code and
1888         simplified.
1889         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
1890         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
1891
1892 2007-06-18  Marek Safar  <marek.safar@gmail.com>
1893
1894         * assign.cs: Removed implicitly typed local variable check.
1895         
1896         * expression.cs (LocalVariableReference.DoResolve): Add check for self
1897         referencing implicitly typed local variable.
1898         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
1899         variable here.
1900         
1901         * statement.cs (Fixed): Removed unsupported implicitly typed local
1902         variable code.
1903
1904 2007-06-15  Marek Safar  <marek.safar@gmail.com>
1905
1906         * decl.cs (MemberName): Moved all Unbound stuff to parser.
1907
1908 2007-06-14  Marek Safar  <marek.safar@gmail.com>
1909
1910         A fix for bugs #81855 and #76274
1911         * attribute.cs (AttachTo): Always set owner for global attributes to
1912         prefined owner.
1913         
1914         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
1915         usefull too.
1916         
1917         * cs-parser.jay: Assembly and module attributes must precede all other
1918         elements except using clauses and extern alias declarations.
1919
1920 2007-06-13  Marek Safar  <marek.safar@gmail.com>
1921
1922         A fix for bug #81748
1923         * cs-tokenizer.cs,
1924         * expression.cs: More checks for non ISO-1 features.
1925
1926 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1927
1928         A fix for bug #81807
1929         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
1930         present inside switch statement and it is required by nullable check.
1931
1932 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1933
1934         A fix for bug #81840
1935         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
1936         when type matching fails.
1937         
1938         * namespace.cs: Tiny error message change.
1939
1940 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1941
1942         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
1943         reporting. Added automatic property check.
1944         
1945         * class.cs: Updated after CheckAbstractAndExtern relocation.
1946         (AEventPropertyAccessor.GetSignatureForError): Customized.
1947         
1948 2007-06-11  Marek Safar  <marek.safar@gmail.com>
1949
1950         * class.cs (DefineBaseTypes): Base type can be undefined.
1951         
1952         * ecore.cs (TypeLookup): Minor refactoring.
1953         (DoResolveAsTypeStep): Removed redundant check.
1954
1955         * namespace.cs (Lookup): Removed redundant check.
1956                 
1957         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
1958         ResolveAsTypeTerminal step.
1959         (BootstrapCorlib_*): Simplified.
1960         (PopulateCoreType): Core types can be now external.
1961
1962 2007-06-07  Marek Safar  <marek.safar@gmail.com>
1963
1964         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
1965          verification only.
1966          (InferTypeArguments): Infers anonymous expression type arguments.
1967          (Compatible): Split to Compatible and InferTypeArguments. 
1968         
1969         * lambda.cs: Updated.
1970
1971 2007-06-08  Marek Safar  <marek.safar@gmail.com>
1972
1973         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
1974
1975 2007-06-07  Raja R Harinath  <harinath@gmail.com>
1976
1977         Fix #80477, cs0135-2.cs, cs0135-3.cs
1978         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
1979         names to the "known" variables list.
1980         (Block.CheckInvariantMeaningInBlock): Handle the fact the
1981         parameter names are also "known".
1982         (Block.CheckError136): Remove.
1983         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
1984         null.
1985
1986 2007-06-07  Marek Safar  <marek.safar@gmail.com>
1987
1988         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
1989
1990 2007-06-06  Marek Safar  <marek.safar@gmail.com>
1991
1992         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
1993         internal error not an user error.
1994          
1995         * expression.cs (IsApplicable): Refactored to make debugging easier.
1996
1997         * support.cs: More tricks for non-mono runtimes.
1998         
1999         * typemanager.cs (CoreLookupType): Made public.
2000         (InitSystemCore): All linq specific stuff moved to linq.cs
2001
2002 2007-06-05  Marek Safar  <marek.safar@gmail.com>
2003
2004         * typemanager.cs (CSharpSignature): One more missing build-in types
2005         replacement.
2006         More tricks for non-mono runtime.
2007
2008 2007-06-05  Raja R Harinath  <harinath@gmail.com>
2009
2010         * statement.cs (Block.CheckError136_InParents): Remove.
2011         (Block.AddVariable): Use GetParameterInfo instead.
2012         (ToplevelBlock.ProcessArguments): Likewise.
2013
2014 2007-06-04  Raja R Harinath  <rharinath@novell.com>
2015
2016         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
2017         information too.
2018         (ToplevelBlock.GetParameterInfo): Split out of ...
2019         (ToplevelBlock.GetParameterRefernce): ... this.
2020         (ToplevelBlock.ParameterMap): Remove.
2021         * expression.cs (ParameterReference): Update to use
2022         ToplevelParameterInfo.
2023
2024         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
2025         regression.
2026
2027         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
2028         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
2029
2030         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
2031         (ToplevelBlock.ProcessParameters) ... here.
2032         (ToplevelBlock..ctor): Invoke it.
2033
2034         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
2035         new parameters.
2036
2037         * statement.cs (IKnownVariable): New interface.
2038         (LocalInfo): Implement it.
2039         (ToplevelParameterInfo): New class.
2040         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
2041         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
2042         GetKnownVariableInfo.
2043
2044 2007-06-03  Raja R Harinath  <harinath@gmail.com>
2045
2046         Partly speed up CS0136 error checks.
2047         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
2048         'recurse' parameter.
2049         (Block.DoCheckError136): Only check errors in parameters.  Move
2050         local variable checks ...
2051         (Block.AddVariable): ... here, and ...
2052         (ToplevelBlock.ResolveMeta): ... here.
2053
2054 2007-06-02  Raja R Harinath  <harinath@gmail.com>
2055
2056         * statement.cs (Block.IsChildOf): Remove.
2057
2058         * statement.cs (Statement.Clone): Move special case code ...
2059         (Block.CloneTo): ... here.
2060
2061 2007-05-29  Raja R Harinath  <rharinath@novell.com>
2062
2063         * statement.cs (ToplevelBlock.container): Remove field.  It's
2064         redundant with 'Parent'.
2065         (ToplevelBlock.ContainerBlock): Remove accessor.
2066         (ToplevelBlock..ctor): Update to changes.  Register anonymous
2067         child with parent here, ...
2068         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
2069         current_block.
2070         (start_anonymous): Don't save current_block.
2071         (top_current_block): Remove.
2072
2073         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
2074         (Block.Resolve): Update to changes.
2075         (Block..ctor): Move setting of "correct" 'Toplevel'
2076         and 'Explicit' fields to ...
2077         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
2078
2079 2007-05-27  Raja R Harinath  <harinath@gmail.com>
2080
2081         Kill Block.Implicit
2082         * statement.cs (Block.Implicit): Remove.
2083         (Block): Update to changes.
2084         * flowanalysis.cs: Likewise.
2085
2086         Mildly speed up CheckInvariantMeaningInBlock
2087         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
2088         Recursively call AddKnownVariable to all enclosing blocks.
2089         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
2090         Remove recursive calls.
2091         (Block): Update to changes.
2092
2093         New ExplicitBlock invariants
2094         * statement.cs (Block.Explicit): New field.  It points to the
2095         immediately enclosing non-implicit block.
2096         (Block..ctor): Maintain the invariant.
2097         * cs-parser.jay: Take advantage of invariant.
2098
2099         Introduce ExplicitBlock
2100         * statement.cs (ExplicitBlock): New.
2101         (ToplevelBlock): Derive from it.
2102         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
2103         sense of flag.
2104         (Block.Implicit): Update to changes.
2105         * cs-parser.jay: Update to changes.
2106
2107         Remove unused field
2108         * codegen.cs (EmitContext.IsLastStatement): Remove.
2109         * statement.cs (Block.DoEmit): Update to changes.
2110
2111 2007-05-25  Raja R Harinath  <rharinath@novell.com>
2112
2113         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
2114         modifying current_block directly.
2115
2116 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
2117         
2118         * class.cs: Implemented automatic properties (C# 3.0)
2119           Thanks to Marek for the help.
2120
2121 2007-05-23  Raja R Harinath  <rharinath@novell.com>
2122
2123         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
2124         variable as assigned, note also that all its components are
2125         assigned too.
2126         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
2127
2128 2007-05-19  Marek Safar  <marek.safar@gmail.com>
2129
2130         * anonymous.cs, class.cs: Emit Compiler generated attribute when
2131         member is marked as compiler generated.
2132         
2133         * decl.cs (MemberCore): Refactored ModFlags into property.
2134
2135         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
2136         (Check): Check only accessibility modifiers.
2137
2138 2007-05-18  Raja R Harinath  <rharinath@novell.com>
2139
2140         Track all assignable slots in one bit array
2141         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
2142         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
2143         logic from VariableMap constructor here.  Use the same 'offset'
2144         variable that's later used for computing offsets of local
2145         variables.
2146         * flowanalysis.cs (UsageVector.parameters): Remove.
2147         (UsageVector): Update to changes.
2148         (VariableMap): Remove.
2149
2150         Avoid creating ParameterMap in every block
2151         * statement.cs (Block.ParameterMap): Move ...
2152         (ToplevelBlock.ParameterMap): ... here.
2153         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
2154         only once.
2155         * flowanalysis.cs (FlowBranching.param_map): Remove.
2156         (FlowBranching.UsageVector): Update to changes.
2157         (FlowBranchingToplevel.CheckOutParameters): Likewise.
2158
2159         * statement.cs (Block.CloneTo): Clone Toplevel field too.
2160
2161         * expression.cs (ParameterReference): Distinguish between block
2162         where parameter was referenced and declared.
2163
2164 2007-05-18  Marek Safar  <marek.safar@gmail.com>
2165
2166         * flowanalysis.cs, statement.cs: Put back improved error handling.
2167
2168 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
2169         
2170         * assign.cs:
2171         * expression.cs:
2172           Imporved object and collection initialization (C# 3.0).
2173
2174 2007-05-15  Marek Safar  <marek.safar@gmail.com>
2175
2176         A fix for bug #81380
2177         * expression.cs (Is.DoResolve): Only value types have constant `is'
2178         behaviour.
2179
2180 2007-05-15  Raja R Harinath  <rharinath@novell.com>
2181
2182         * statement.cs (ToplevelBlock.child): Remove.
2183
2184 2007-05-15  Raja R Harinath  <harinath@gmail.com>
2185
2186         Rationalize ResolveMeta: refactoring
2187         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
2188         out constant handling code into ...
2189         (Block.DoResolveConstants): ... this.
2190
2191         Rationalize ResolveMeta: kill local_map
2192         * statement.cs (Block.local_map, Block.LocalMap): Remove.
2193         (Block.AssignableSlots): New.
2194         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
2195         for locals -- move code from VariableMap here.  Avoid unnecessary
2196         allocations.
2197         * flowanalysis.cs (FlowBranching.local_map): Remove.
2198         (FlowBranching..ctor): Use Block.AssignableSlots.
2199         (VariableMap): Remove unused constructors.
2200
2201 2007-05-11  Raja R Harinath  <rharinath@novell.com>
2202
2203         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
2204
2205 2007-05-11  Marek Safar  <marek.safar@gmail.com>
2206
2207         * typemanager.cs (IsFriendAssembly): Should not be called for building
2208         assembly.
2209
2210 2007-05-09  Marek Safar  <marek.safar@gmail.com>
2211
2212         * literal.cs (NullConstant): Print null in all cases.
2213         
2214         * expression.cs (Binary.ResolveOperator): Implemented delegate
2215          comparison based on C# 2.0 changes.
2216
2217 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
2218
2219         This code is contributed under the MIT X11 license
2220         
2221         The following enables support for several C# 3.0 language features:
2222         
2223         * cs-tokenizer.cs: Added support for the "var" keyword.
2224         
2225         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
2226           Added VarExpr class to facilitate type inferencing.
2227         
2228         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
2229           to support anonymous types.
2230         
2231         * assign.cs: Added support for type inferencing and initialization.
2232         
2233         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
2234         
2235         * expression.cs: Added implicit array support to ArrayCreation.
2236           Added 5 types and 1 interface:
2237           
2238           IInitializable                Implementing classes can inject initializing
2239                                         statements after object instantiation.
2240           
2241           Initializer                   Stores data for object initialization.
2242           
2243           AnonymousType                 An expression for anonymous types.
2244           
2245           AnonymousTypeParameter        Stores data about an anonymous type's field.
2246           
2247           NewInitialize                 An expression for object initialization.
2248           
2249           CollectionInitialize          An expression for collection initialization.
2250         
2251         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
2252           statements.
2253
2254 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2255
2256         A fix for bug #81500
2257         * cs-tokenizer.cs: Add special handling for coalescing operator.
2258
2259 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2260
2261         A fix for bug #81529
2262         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
2263         its value from base class until it is redefined.
2264
2265 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2266
2267         Fix regression in cs0631-3.cs
2268         * cs-parser.jay (operator_declarator): Add opt_attributes to error
2269         fallback.  Make error fallback catch more cases.
2270
2271 2007-05-01  Miguel de Icaza  <miguel@novell.com>
2272
2273         * cs-parser.jay: Allow parameters in operator declarations to have
2274         attributes. 
2275
2276 2007-04-27  Miguel de Icaza  <miguel@novell.com>
2277
2278         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
2279         exists. 
2280
2281         * lambda.cs (ContextualReturn.Resolve): An expression is valid
2282         inside the ContextualReturn, it does not have to be an
2283         ExpressionStatement. 
2284
2285 2007-04-24  Miguel de Icaza  <miguel@novell.com>
2286
2287         * lambda.cs (ContextualReturn.Resolve): if the return type is not
2288         set, set it.
2289
2290 2007-04-23  Miguel de Icaza  <miguel@novell.com>
2291
2292         * anonymous.cs (AnonymousContainer): split the virtual Resolve
2293         method in two methods: ResolveNoDefine and Resolve.
2294
2295         ResolveNoDefine will stop just after ResolveTopBlock has been
2296         called.   
2297
2298         Resolve will then continue by creating a method and issuing the
2299         call to method.Define ().
2300
2301         (AnonymousMethod): Split and implement the new Resolve and
2302         ResolveNoDefine as well.
2303
2304         * lambda.cs (LambdaExpression): Split the anonymous method
2305         resolution code into a separate routine (CoreCompatibilityTest)
2306         from DoCompatibleTest.
2307
2308         (LambdaExpression.TryBuild): New method, this method tries to
2309         build the LambdaExpression with the given set of types to be used
2310         as the types for the various parameters of the lambda expression. 
2311
2312         If the compilation succeed with the given types, the infered type
2313         of the Anonymous method is returned, otherwise null is returned.
2314
2315 2007-04-23  Marek Safar  <marek.safar@gmail.com>
2316
2317         A fix for bug #81414
2318         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
2319
2320 2007-04-22  Miguel de Icaza  <miguel@novell.com>
2321
2322         * cs-tokenizer.cs: Change various identifiers here from the
2323         camelCasing to the recommended Linux-like style for instance
2324         variables from the Coding Guidelines. 
2325
2326 2007-04-19  Martin Baulig  <martin@ximian.com>
2327
2328         * convert.cs
2329         (Convert.ImplicitReferenceConversionCore): Allow conversions from
2330         System.Enum to System.ValueType.
2331
2332 2007-04-13  Martin Baulig  <martin@ximian.com>
2333
2334         Rewrote implicit reference conversions.  We need to distinguish
2335         between implicit reference conversions (13.1.4) and implicit
2336         boxing conversions (13.1.5).
2337
2338         According to the spec, there's an an implicit conversion
2339         "From a one-dimensional array-type S[] to IList<T> and base
2340         interfaces of this interface, provided there is an implicit
2341         reference conversion from S to T."  Note that this does not
2342         include boxing conversions.
2343
2344         * convert.cs
2345         (Convert.ImplicitTypeParameterBoxingConversion): New method.
2346         (Convert.ImplicitReferenceConversion): Split into
2347         ImplicitReferenceConversionCore() and
2348         ImplicitBoxingConversionExist().
2349         (Convert.ImplicitReferenceConversionExists): Use the new
2350         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
2351
2352 2007-04-12  Martin Baulig  <martin@ximian.com>
2353
2354         * convert.cs (Convert.ImplicitReferenceConversion): Move the
2355         `TypeManager.null_type' checks up to the top of the method.
2356
2357 2007-04-11  Marek Safar  <marek.safar@gmail.com>
2358
2359         A fix for bug #81350
2360         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
2361         extension methods.
2362
2363 2007-04-11  Martin Baulig  <martin@ximian.com>
2364
2365         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
2366         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
2367         to make this work for generic classes; fixes #79561.
2368
2369 2007-04-11  Martin Baulig  <martin@ximian.com>
2370
2371         * expression.cs (As): Add support for nullable types; fixes #79371.
2372
2373 2007-04-11  Martin Baulig  <martin@ximian.com>
2374
2375         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
2376         `type.FullName' is null; fixes #80243.
2377
2378 2007-04-11  Martin Baulig  <martin@ximian.com>
2379
2380         * expression.cs (Invocation.IsApplicable): Don't modify the method
2381         if type inference succeeded, but the method was not applicable.
2382         Fixes #81250.
2383
2384 2007-04-10  Marek Safar  <marek.safar@gmail.com>
2385
2386         A fix for bug #81324
2387         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
2388         internal and external namespaces containers.
2389
2390 2007-04-10  Martin Baulig  <martin@ximian.com>
2391
2392         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
2393         TypeManager.DropGenericMethodArguments() so we also call
2394         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
2395
2396 2007-04-10  Martin Baulig  <martin@ximian.com>
2397
2398         * iterators.cs (Iterator.CreateIterator): Don't crash if
2399         `method.ReturnType' is null.  This happens if something went wrong
2400         while resolving that typ (we already reported an error in this case).
2401
2402 2007-04-10  Martin Baulig  <martin@ximian.com>
2403
2404         * expression.cs (New.DoResolve): Don't call CheckComImport() on
2405         generic interfaces; report the CS0144 directly.
2406
2407 2007-04-10  Martin Baulig  <martin@ximian.com>
2408
2409         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
2410         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
2411
2412 2007-04-10  Martin Baulig  <martin@ximian.com>
2413
2414         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
2415
2416 2007-04-09  Raja R Harinath  <rharinath@novell.com>
2417
2418         A better fix
2419         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
2420         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
2421
2422         Fix #81338
2423         * statement.cs (For.Resolve): If resolution fails, use
2424         KillFlowBranching.
2425
2426 2007-04-08  Marek Safar  <marek.safar@gmail.com>
2427
2428         * anonymous.cs (MakeName): Make faster and zero-based.
2429         (VerifyExplicitParameterCompatibility): Back to mode where generic
2430         parameter is ignored.
2431         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
2432
2433         * class.cs (EmitType): Method can emit another new method.
2434
2435         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
2436
2437         * driver.cs: Updated.
2438
2439         * lambda.cs: Reuse predefined empty parameters.
2440
2441         * parameter.cs: Updated
2442
2443         * support.cs: Implemented InflateTypes.
2444
2445         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
2446         (InitSystemCore): Introduced to isolate 3.0 dependencies.
2447
2448 2007-04-03  Martin Baulig  <martin@ximian.com>
2449
2450         Fix #80632.
2451
2452         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
2453         version of TypeManager.IsOverride() which also works with generic
2454         types.  
2455
2456 2007-04-03  Martin Baulig  <martin@ximian.com>
2457
2458         Fix #81044.
2459
2460         * convert.cs
2461         (Convert.ExplicitReferenceConversion): We need to cast when
2462         converting from IList<T> to S[].
2463
2464 2007-04-01  Marek Safar  <marek.safar@gmail.com>
2465
2466         * decl.cs (FindExtensionMethods): Consider all candidates with same name
2467         at this level.
2468         
2469         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
2470
2471 2007-03-31  Marek Safar  <marek.safar@gmail.com>
2472
2473         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
2474         argument and return type inferring.
2475
2476         * codegen.cs (InferReturnType): Flag whether return can be inferred.
2477         (ReturnType): Turned to property.
2478
2479         * statement.cs (Return): Implemented return type inferring.
2480
2481         * support.cs (ReflectionParameters): Use local types if possible.
2482
2483 2007-03-30  Raja R Harinath  <rharinath@novell.com>
2484
2485         * flowanalysis.cs (FlowBranching.Reachability): Remove.
2486         (FlowBranching.UsageVector): Update to changes.
2487
2488         Prepare to kill 'Reachability'
2489         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
2490         argument of constructor.
2491
2492 2007-03-29  Raja R Harinath  <rharinath@novell.com>
2493
2494         Prepare to kill 'Reachability'
2495         * flowanalysis.cs (UsageVector.is_unreachable): New.
2496         (UsageVector): Update to maintain 'is_unreachable' in parallel to
2497         'reachability', and verify they're consistent.
2498
2499         Fix #81121
2500         * expression.cs (New.EmitStatement): Handle type parameters here too.
2501
2502 2007-03-29  Martin Baulig  <martin@ximian.com>
2503
2504         Fix #79148.
2505
2506         * anonymous.cs
2507         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
2508         CompilerGeneratedClass.
2509         (ScopeInfo.EmitScopeInstance): Make this protected.
2510         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
2511         `ec.CurrentAnonymousMethod.Scope == Scope'.
2512
2513         * statement.cs (Block.ScopeInfo): Make this a property.
2514
2515 2007-03-27  Raja R Harinath  <harinath@gmail.com>
2516
2517         Prepare to kill 'Reachability'
2518         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
2519         (FlowBranching.UsageVector.Reachability): Remove property.
2520         (FlowBranching.UsageVector.IsUnreachable): New property.
2521         (FlowBranching.UsageVector.ResetBarrier): New.
2522         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
2523         * codegen.cs, statement.cs: Update to changes.
2524
2525 2007-03-27  Martin Baulig  <martin@ximian.com>
2526
2527         Fix #81209.
2528
2529         * decl.cs
2530         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
2531         generic types.
2532
2533 2007-03-26  Raja R Harinath  <rharinath@novell.com>
2534
2535         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
2536         instead of TriState.  Remove all mention of TriState.
2537
2538         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
2539         replaced by a boolean.  Add boolean 'is_unreachable' field, check
2540         and maintain invariants.
2541
2542 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2543
2544         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
2545
2546 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2547
2548         * expression.cs: Stop using obsolete 2.0 opcodes.
2549
2550 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2551
2552         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
2553         one of the latests Martin's fixes.
2554
2555 2007-03-23  Miguel de Icaza  <miguel@novell.com>
2556
2557         * expression.cs: On BigEndian systems, swap the bytes, temporary
2558         solution until we get a new bitconverter class.
2559
2560 2007-03-23  Martin Baulig  <martin@ximian.com>
2561
2562         Fix #81158.
2563
2564         * decl.cs (MemberCache.AddMembers): Add generic methods both as
2565         "Method" and "Method`1".  Normally, a cache lookup is done on the
2566         "Method" form (ie. without the generic arity), but this one makes
2567         lookups on the full form work as well.
2568
2569 2007-03-22  Raja R Harinath  <rharinath@novell.com>
2570
2571         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
2572         unused properties.
2573
2574 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
2575         * class.cs: 
2576         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
2577         ordered_member_list, to TypeBuilder to store members to be defined
2578         in the order they were parsed in.
2579         - ordered_explicit_member_list contains all properties indexers
2580           and methods that are defined as explicit implementation of an
2581           interface or base class.
2582         - ordered_member_list contains all properties indexers and methods
2583           that are not defined as explicit implementation of an interface
2584           or base class.
2585
2586         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
2587         functionality in these removed classes has been replaced with 
2588         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
2589         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
2590
2591         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
2592         to CheckForDuplications inside GetMethod and SetMethod Define Method
2593         to handle method property and indexer name conflicts.
2594
2595         Fixes #79434
2596
2597         All code is contributed under the MIT/X11 license.
2598
2599 2007-03-20  Martin Baulig  <martin@ximian.com>
2600
2601         * class.cs (TypeContainer.Interfaces): Removed; they're now
2602         included in `TypeContainer.Types'.
2603
2604 2007-03-20  Martin Baulig  <martin@ximian.com>
2605
2606         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
2607
2608         * class.cs (TypeContainer.CreateType): New public method.  This is
2609         now called before DefineType() to create the TypeBuilders.
2610         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
2611         has already been created by CreateType().
2612         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
2613         don't resolve our base classes here; this has been moved into
2614         DefineBaseTypes().  We're now called from CreateType().
2615         (TypeContainer.DefineBaseTypes): New private method; resolve our
2616         base classes here.  We're now called from DefineType().
2617
2618         * rootcontext.cs
2619         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
2620         our types first to create all the TypeBuilders.  After that, call
2621         TypeContainer.DefineType() on all the types which'll resolve their
2622         base classes and setup the resolve order.
2623
2624 2007-03-20  Martin Baulig  <martin@ximian.com>
2625
2626         * class.cs (TypeContainer.Enums): Removed; they're now included in
2627         `TypeContainer.Types'.  
2628
2629 2007-03-20  Martin Baulig  <martin@ximian.com>
2630
2631         * class.cs
2632         (TypeContainer.DefineType): Don't call ResolveMembers() here.
2633         (TypeContainer.DoResolveMembers): Call DefineType() on our
2634         `compiler_generated' classes; moved here from DefineNestedTypes().
2635
2636         * rootcontext.cs
2637         (RootContext.ResolveTree): Call ResolveMembers() on all
2638         TypeContainer's in the `type_container_resolve_order'.
2639
2640 2007-03-19  Marek Safar  <marek.safar@gmail.com>
2641
2642         * class.cs: Use corlib to handle InternalMethodImplAttribute.
2643
2644 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2645
2646         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
2647         implementation flags.
2648
2649 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2650
2651         * class.cs: More optimizations for type parameters.
2652
2653 2007-03-15  Marek Safar  <marek.safar@gmail.com>
2654
2655         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
2656
2657         * ecore.cs, parameter.cs: More common code for both corlibs.
2658
2659         * typemanager.cs (IsGenericMethod): Simplified.
2660
2661 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2662
2663         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2664         'returns'.
2665         * statement.cs, iterators.cs, lambda.cs: Update to changes.
2666
2667         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
2668         unconditionally.  Simplify explanation.
2669         (Try.Resolve, Using.Resolve): Likewise.
2670
2671 2007-03-15  Martin Baulig  <martin@ximian.com>
2672
2673         Fix #80731.
2674
2675         * decl.cs (DeclSpace): If we're a partial class, use our
2676         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
2677
2678 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2679
2680         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2681         'throws'.
2682         (FlowBranching.UsageVector): Update to changes.
2683         (FlowBranching.MergeSiblings): Likewise.
2684         * statement.cs: Likewise.
2685
2686 2007-03-15  Martin Baulig  <martin@ximian.com>
2687
2688         Fix #79302.
2689
2690         * decl.cs
2691         (MemberCache): Added a special .ctor for type parameters.
2692
2693         * typemanager.cs
2694         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
2695         `MemberCache'.  
2696
2697 2007-03-09  Martin Baulig  <martin@ximian.com>
2698
2699         * enum.cs (Enum): Make this a TypeContainer.
2700         (EnumMember): Derive from `Const'.
2701
2702         * const.cs
2703         (Const.DoResolveValue): New protected virtual method; move most of
2704         the functionality of ResolveValue() here so we can override it in
2705         `EnumMember'.
2706         (Const.CreateConstantReference): Make this virtual.
2707
2708         * class.cs (Kind): Add `Kind.Enum'.
2709         (TypeContainer.Emit): Don't emit the enums here; they're already
2710         in the `RootContext.typecontainer_resolve_order'.
2711
2712         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
2713         here; they're already in the `typecontainer_resolve_order'.
2714
2715         * ecore.cs (EnumConstant.ConvertImplicitly): Add
2716         TypeManager.DropGenericTypeArguments().
2717
2718         * typemanager.cs
2719         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
2720         (TypeManager.IsEnumType): Likewise.
2721         (TypeManager.EnumToUnderlying): Likewise.
2722         (TypeManager.IsEqual): Add support for enums.
2723
2724 2007-03-12  Raja R Harinath  <rharinath@novell.com>
2725
2726         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
2727         DefaultParameterValueAttribute to be undefined, say if System.dll
2728         is not referenced.
2729
2730 2007-03-11  Marek Safar  <marek.safar@gmail.com>
2731
2732         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
2733         any mscorlib.
2734
2735 2007-03-10  Marek Safar  <marek.safar@gmail.com>
2736
2737         * class.cs, parameter.cs: Unified parameters verification.
2738
2739 2007-03-08  Martin Baulig  <martin@ximian.com>
2740
2741         * cs-parser.jay (constructor_header): Pass the location to the
2742         newly created TopLevelBlock.
2743
2744 2007-03-07  Martin Baulig  <martin@ximian.com>
2745
2746         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
2747
2748 2007-03-06  Miguel de Icaza  <miguel@novell.com>
2749
2750         * convert.cs (ExplicitReferenceConversionExists): Sync this method
2751         with the changes from David, fixes the build.
2752
2753 2007-03-05  David Mitchell  <dmitchell@logos.com>
2754
2755         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
2756         and its base interfaces to a one-dimensional array type S[],
2757         provided there is an implicit or explicit reference conversion
2758         from S to T.
2759
2760 2007-03-03  Marek Safar  <marek.safar@gmail.com>
2761
2762         * cs-tokenizer.cs: Implemented basic linq grammar.
2763
2764         * driver.cs: Set linq lang version on demand.
2765
2766 2007-02-26  Marek Safar  <marek.safar@gmail.com>
2767
2768         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
2769
2770 2007-02-25  Marek Safar  <marek.safar@gmail.com>
2771
2772         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
2773         (Fixes #80455)
2774
2775         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
2776         here.
2777         Check property and event extern attributes.
2778
2779         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
2780         charset.
2781
2782 2007-02-24  Marek Safar  <marek.safar@gmail.com>
2783
2784         A fix for bug #80407
2785         * ecore.cs: Don't report ambiguity error when methods have same parent.
2786
2787 2007-02-23  Marek Safar  <marek.safar@gmail.com>
2788
2789         A fix for bug #80878
2790         * class.cs, cs-parser.jay: Event property can host anonymous methods.
2791
2792 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2793
2794         * attribute.cs: Enable ExtensionAttribute presence test.
2795
2796 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2797
2798         * class.cs: Warn about missing GetHashCode only when Equals is override.
2799
2800         * decl.cs: Check accessibility of type arguments.
2801
2802         * typemanager.cs: Correctly report nullable array.
2803
2804 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2805
2806         * class.cs, report.cs: Capture more details when things go wrong.
2807
2808 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2809
2810         A fix for bug #80650
2811         * cs-parser.jay: Anonymous container starts at constructor declaration
2812         and not at block beginning because it has to be usable in constructor
2813         initializer.
2814
2815         * statement.cs: Use context location and not block one for error reporting.
2816
2817 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2818
2819         A fix for bug #78712
2820         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
2821         too.
2822
2823 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2824
2825         A fix for bug #80493 by Atsushi Enomoto
2826         * cs-parser.jay: Ignore invalid attribute target.
2827
2828 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2829  
2830         * cs-tokenizer.cs: Ignore '\0' as white space character.
2831
2832 2007-02-17  Miguel de Icaza  <miguel@novell.com>
2833
2834         * cs-parser.jay: Add support for lambda expressions to the mcs
2835         compiler as well.
2836
2837         * lambda.cs: Only clone when we are probing, not on the final call
2838         (Compatible is the final call). 
2839
2840         * statement.cs (CloneContext): Introduce class to provide block
2841         remapping during clone.
2842
2843         All statements Clone themselves now.
2844
2845         (Clone): special handling for blocks, when we clone a block, we
2846         register the block inside this routine, as children of the block
2847         might trigger a lookup. 
2848         
2849         * expression.cs: Add support for CloneContext in all expressions. 
2850         
2851 2007-02-17  Marek Safar  <marek.safar@gmail.com>
2852  
2853         A fix for bug #80493
2854         * statement.cs: Report ambiguous warning when interfaces are not related.
2855
2856 2007-02-15  Marek Safar  <marek.safar@gmail.com>
2857
2858         C# 3.0 extension methods.
2859
2860         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
2861         cannot be used directly.
2862
2863         * class.cs (Class.Emit): Emit extension attribute if any class method
2864         is extension method.
2865         (Method.Define): Add basic extension method validation conditions.
2866         (Method.Emit): Emit extension attribute for method.
2867
2868         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
2869         extension method exists. Currently we follow same approach as Microsoft
2870         does, emit even if a method or a class are private but this can change
2871         later.
2872
2873         * cs-parser.jay: Add handling of `this' keyword in method parameters
2874         context.
2875
2876         * decl.cs (DeclSpace.IsStaticClass): New property.
2877         (MemberCache.FindExtensionMethods): Looks for extension methods with
2878         defined name and extension type.
2879
2880         * doc.cs: Updated after OverloadResolve changes.
2881
2882         * driver.cs: Add new soft reference to System.Core.dll.
2883
2884         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
2885         (ExtensionMethodGroupExpr): Represents group of extension methods.
2886
2887         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
2888         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
2889         to MethodGroupExpr and made non-static for easier customization.
2890         (Invocation.DoResolve): Add extension method lookup when no standard
2891         method was found.
2892         (MemberAccess.DoResolve): Try extension methods if no member exists.
2893
2894         * modifiers.cs: Add METHOD_EXTENSION modifier.
2895
2896         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
2897         as well as candidate extension type.
2898         (ComputeNamespaces): When assembly constains extension methods registers
2899         them.
2900         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
2901         extension method lookup.
2902         (Namespace.LookupExtensionMethod): Looks for extension method in this
2903         namespace.
2904         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
2905         find a method which matches name and extensionType.
2906
2907         * parameter.cs (Parameter): Add This modifer.
2908         (HasExtensionMethodModifier): New property.
2909         (Resolve): Add extension parameter check.
2910         (ModFlags): turned to property to exclude this modifier as it is not real
2911         parameter modifier.
2912         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
2913
2914         * support.cs (ParameterData): Add ExtensionMethodType.
2915         (ReflectionParameters): Implemented ExtensionMethodType interface property.
2916
2917         * typemanager.cs: Add type and ctor extension attribute type.
2918
2919 2007-02-15  Miguel de Icaza  <miguel@novell.com>
2920
2921         * report.cs (DisableErrors, EnableErrors): used to prevent error
2922         output when we are "trying" to compile various methods with
2923         different types. 
2924
2925         * ecore.cs (Expression): Add Clone method that calls the virtual
2926         CloneTo method.  The current CloneTo method in Expression throws
2927         an exception so we can track down all the places where this must
2928         be implemented (not using abstract, because that would be a lot of
2929         up-front-work before we can start testing the implementation
2930         idea). 
2931
2932         Important: we only need Clone capabilities for expressions created
2933         by the parser, as the expressions we will be cloning are
2934         expressions in the pre-resolved state.   This vastly simplifies
2935         the work required. 
2936         
2937         (SimpleName): Add CloneTo that does nothing.
2938         (EmptyCast): Add CloneTo.
2939         
2940         * expression.cs (Binary): Implement CloneTo.
2941         (Invocation.IsApplicable): Store the current ec in
2942         EmitContext.TempEc and restore it on return.  This is used so we
2943         do not have to sprinkle hundres of methods with an extra
2944         EmitContext, we know that the only user is the lambda expression
2945         ImplicitConversionExists code. 
2946         
2947         (Argument): Add Cloning capabilities.
2948         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
2949         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
2950         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
2951         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
2952         IndexerAccess): Add Clone capability.
2953
2954         (LocalVariableReference, This): TODO: needs cloned Block mapping.
2955
2956         (Argument): Add cloning capability.
2957
2958         * assign.cs (Assign): Implement CloneTo.
2959
2960         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
2961         
2962         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
2963         version by calling Convert with the EmitContext (that we are
2964         currently storing in ec, this is not great, but will do for now,
2965         to avoid passing EmitContext parameters to hundreds of functions
2966         that do not need them now).
2967
2968         (SetExpression): Remove, it is not needed.
2969         
2970         (ContextualReturn): Implement CloneTo.
2971
2972         * statement.cs (Statement): Implement cloning infrastructure,
2973         similar to expressions.
2974
2975         (Block): Partial implementation of Clone for statements.
2976
2977         (Return): Implement clone.
2978         
2979         * constant.cs (Constant.CloneTo): New method, does nothing.
2980
2981         * codegen.cs (TempEc): Add a static EmitContext as a temporary
2982         solution, until we decide how to exactly do this.  
2983         
2984 2007-02-14  Marek Safar  <marek.safar@gmail.com>
2985  
2986         A fix for bug #80493
2987         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
2988         a property is override we need to use second accessor.
2989
2990 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2991  
2992         A fix for bug #80418
2993         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
2994         methods.
2995
2996 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2997
2998         Another fix for bug #80749
2999         * pending.cs: Abstract class has priority over interfaces.
3000
3001 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3002
3003         Another fix for bug #80749
3004         * pending.cs: Abstract class has priority over interfaces.
3005
3006 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3007
3008         Another fix for bug #80749
3009         * pending.cs: Abstract class has priority over interfaces.
3010
3011 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3012
3013         Another fix for bug #80749
3014         * pending.cs: Abstract class has priority over interfaces.
3015
3016 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3017
3018         * class.cs Better error message.
3019
3020         * driver.cs: Add shorter versions of -optimize option.
3021
3022 2007-02-13  Martin Baulig  <martin@ximian.com>
3023
3024         * class.cs (Constructor.Emit): Check the return value of
3025         ec.ResolveTopBlock() and return on error.
3026
3027 2007-02-13  Raja R Harinath  <rharinath@novell.com>
3028
3029         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
3030         message to fix error message regression.
3031
3032 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3033
3034         * delegate.cs: Delegate creation expression cannot be of Nullable type.
3035
3036 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3037
3038         A fix for bug #80749
3039         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
3040         its parent container.
3041
3042         * class.cs (DefineFieldInitializers): Each initializer can has different
3043         resolve context.
3044
3045         * const.cs: Updated.
3046
3047 2007-02-11  Miguel de Icaza  <miguel@novell.com>
3048
3049         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
3050         now all the heavy lifting to check that embedded statements or
3051         expressions have the right form is done in the ContextualReturn.
3052
3053         (ContextualReturn): New class.  
3054
3055         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
3056         method that can be invoked to report 201, so we do not replicate
3057         this everywhere.
3058
3059         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
3060         
3061         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
3062         treating tabs as spaces. 
3063
3064 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3065
3066         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
3067         * assign.cs: Use full implicit conversion for right side check.
3068
3069 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3070
3071         * statement.cs (Switch): Switch over boolean type is not standardized.
3072
3073 2007-02-08  Marek Safar  <marek.safar@gmail.com>
3074
3075         A fix for bug #80755
3076         * decl.cs (FindBaseEvent): Don't use method cache for events.
3077
3078 2007-02-07  Marek Safar  <marek.safar@gmail.com>
3079
3080         * cs-parser.jay: Better syntax error handling.
3081
3082         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
3083         instead of underlying type value.
3084
3085 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3086
3087         * driver.cs: Check define identifier before is registered.
3088
3089         * namespace.cs: Use existing error message.
3090
3091         * report.cs: New warning.
3092
3093 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3094
3095         A fix for bug #80742
3096         * expression.cs: Delegate Invoke method can be called directly.
3097
3098 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3099
3100         A fix for bug #80676
3101         * class.cs (IsEntryPoint): The Main method can have params modifier.
3102
3103 2007-02-04  Miguel de Icaza  <miguel@novell.com>
3104
3105         * parameter.cs (Parameter, Parameters): Add Clone method.
3106
3107         * anonymous.cs (Compatible): Turn method into virtual method, so
3108         LambdaExpression can implement a different behavior.
3109
3110         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
3111         out the basic checking here, so it can be used by
3112         LambdaExpressions.
3113         
3114         * lambda.cs: Introduce "Compatible" function that will do the
3115         heavy lifting.
3116
3117 2007-02-02  Marek Safar  <marek.safar@gmail.com>
3118
3119         * attribute.cs: Unified one error message.
3120
3121         * class.cs (Class): Use type attributes and not properties to test static
3122         class.
3123         (IsEntryPoint): Don's pass local variable.
3124
3125         * convert.cs: Removed duplicate check.
3126
3127         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
3128
3129         * driver.cs: Don't crash when soft reference does not exist.
3130
3131         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
3132         (UsingEntry): Removed redundant allocation.
3133
3134         * parameter.cs: Add fast path for type parameters.
3135
3136         * support.cs: Don't allocate attribute when it's not used.
3137
3138 2007-01-30  Miguel de Icaza  <miguel@novell.com>
3139
3140         * anonymous.cs
3141         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
3142         this into a virtual method, so we can override it in LambdaExpression.
3143
3144         * driver.cs: Improve diagnostics in case of failure. 
3145
3146         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
3147         write a function that is slightly more complex and that parses:
3148
3149         type identifier [, type identifier]* )
3150
3151         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
3152         this expression:
3153
3154                 (canEmpty ? i >= 0 : i > 0)
3155
3156 2007-01-30  Raja R Harinath  <rharinath@novell.com>
3157
3158         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
3159         exception on possibly valid code.
3160
3161 2007-01-29  Raja R Harinath  <rharinath@novell.com>
3162
3163         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
3164         Push/PopPosition.
3165         (parse_opt_type_arguments): Remove.  It's almost the same as
3166         parse_less_than.
3167         (parse_namespace_or_typename): Use parse_less_than.
3168
3169 2007-01-28  Miguel de Icaza  <miguel@novell.com>
3170
3171         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
3172         this bug took a few hours to find, because the state saved and
3173         restored by PushPosition and PopPosition was ignoring the state of
3174         parse_generic_less_than.
3175
3176         I can also now remove the handling of OP_LT and OP_GT, this solves
3177         the big mistery.
3178         
3179         * cs-tokenizer.cs: store the location for the ARROW token, we use
3180         that in the parser.
3181
3182         (PushPosition, PopPosition): save/restore also `current_token',
3183         restore `parse_generic_less_than' (was missing).
3184
3185         (parse_opt_type_arguments): use parse_type, not
3186         parse_namespace_or_typename to parse types.
3187
3188         * lambda.cs: Empty new file, will eventually have the lambda
3189         expression implementation.
3190
3191         * lambda.test: used to test the internal tokenizer. 
3192
3193         * report.cs (FeatureIsNotISO1): Rename from
3194         FeatureIsNotStandardized, because it was about the language level
3195         (1 vs 2) it was not about standarization.
3196
3197         (FeatureRequiresLINQ): New.
3198
3199         * support.cs (SeekableStreamReader): Only require that the reader
3200         is a TextReader, not a StreamReader, so we can plug StringReader. 
3201
3202         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
3203         given position in the input stream the following tokens can be
3204         parsed as a type followed by an identifier.
3205
3206         (is_punct): after a '(' if parse_type_and_parameter returns true,
3207         then return a special token OPEN_PARENS_LAMBDA which is used to
3208         avoid reduce/reduce errors in the grammar for the
3209         lambda_expression rules.
3210
3211         (parse_type): implement a type parser inside the
3212         tokenizer, the parser only returns true or false depending on
3213         whether the input at a given position can be parsed as a type.
3214
3215         (peek_token): new method used during type parsing.
3216
3217 2007-01-28  Raja R Harinath  <rharinath@novell.com>
3218
3219         Fix #80531
3220         * anonymous.cs (ScopeInfo.InflateParameters): New.
3221         (AnonymousContainer.Resolve): Use it to redirect types of
3222         delegate parameters.
3223
3224 2007-01-27  Raja R Harinath  <rharinath@novell.com>
3225
3226         Fix #80530
3227         * expression.cs (Error_InvalidArguments): Don't use two different
3228         messages for CS1503.  Use ExtraInformation and
3229         SymbolRelatedToPreviousError instead.
3230
3231         Fix #80358
3232         * decl.cs (DeclSpace.initialize_type_params): Don't access
3233         'type_params' of a partial class directly.
3234
3235 2007-01-26  Miguel de Icaza  <miguel@novell.com>
3236
3237         * constant.cs: Removed a handful of out-of-range checks that were
3238         not necessary. 
3239
3240 2007-01-25  Marek Safar  <marek.safar@gmail.com>
3241
3242         * expression.cs (CheckUselessComparison): Add additional check for char
3243         constants.
3244
3245         * namespace.cs: Fixed typo.
3246
3247 2007-01-23  Miguel de Icaza  <miguel@novell.com>
3248
3249         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
3250         gone, instead we inline the test, preventing the needless casts to
3251         longs, ulongs and doubles for the parameters, avoiding calls to
3252         methods that overchecked stuff, and instead inlined things
3253         nicely. 
3254
3255 2007-01-20  Marek Safar  <marek.safar@gmail.com>
3256
3257         * cs-parser.jay: Better parameter error handling.
3258
3259 2007-01-17  Marek Safar  <marek.safar@gmail.com>
3260
3261         A fix for bug #80368, #80522
3262         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
3263         whether array initializer contains constants only.
3264         (ArrayCreation.Emit): Use better formula to decide when
3265         are array initializers for static initialization.
3266         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
3267         have to emit even constants otherwise they are pre-initialized.
3268
3269 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
3270             Raja R Harinath  <rharinath@novell.com>
3271
3272         Fix emit order of 'get' vs. 'set'.
3273         * support.cs (Accessors): New.
3274         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
3275         Note the order in which accessors are declared in the source.
3276         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
3277         Refactored from Property.Define and Indexer.Define.
3278         (PropertyBase.DefineAccessors): New helper that calls the above in
3279         appropriate order as noted by the parser.
3280         (Property.Define, Indexer.Define): Update to changes.
3281         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
3282
3283 2007-01-17  Raja R Harinath  <rharinath@novell.com>
3284
3285         Fix cs0029-6.cs and gcs0029-2.cs (regression)
3286         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
3287         there's an implicit conversion from the current type to the target
3288         type before converting the underlying constant.
3289
3290 2007-01-16  Marek Safar  <marek.safar@gmail.com>
3291
3292         * const.cs (ResolveValue): Updated after constant conversion was made more
3293         generic.
3294
3295         * constant.cs (GetAttributableValue): constant to object conversion is
3296         used for attributes only.
3297         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
3298         constant conversions.
3299         (LongConstant.ConvertImplicitly): Ditto.
3300
3301         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
3302         (ImplicitConversionStandard): Handle constant conversion as extra step.
3303         It solves the issue when constant conversion was called indirectly like
3304         inside array initializer and constant folding was skipped.
3305
3306         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
3307         this change.
3308
3309         * statement.cs(ImplicitConversionStandard): Updated after constant
3310         conversion was made more generic.
3311
3312 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
3313
3314         * expression.cs (As.DoResolve): Use GenericConstraints instead of
3315         Constraints, solves the problem where the compiler incorrectly
3316         reported that a type parameter was not constrained to a class (Bug
3317         80518)
3318
3319 2007-01-14  Marek Habersack  <grendello@gmail.com>
3320
3321         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
3322
3323 2007-01-14  Marek Safar  <marek.safar@gmail.com>
3324
3325         A fix for bug #80368
3326         * assign.cs (FieldInitializer): New class implements field
3327         initializer statement.
3328
3329         * attribute.cs: Update after FieldMember rename.
3330
3331         * class.cs (PropertyBasedMember): New common class for property based
3332         types.
3333         (InterfaceMemberBase): New base class for all members which can be used as
3334         an interface members.
3335         (MethodCore): Moved really common code to InterfaceMemberBase.
3336         (Method.Define): Equal and GetHasCode detection is relevant for methods
3337         only.
3338         (MethodData.Define): Don't assume that public event implements an
3339         interface automatically.
3340         (MethodData.DefineMethodBuilder): Issue an error even if only extern
3341         modifier is used.
3342         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
3343         (FieldMember): Merged with FieldBase.
3344         (EventProperty.AEventPropertyAccessor): New specialization to check whether
3345         event extern modifier can be used.
3346         (EventField.EventFieldAccessor): Moved event field specific code here.
3347         (Event.AllowedModifiers): Even event can be extern.
3348         (Event.FindOutBaseMethod): New override specific to events.
3349         (Indexer.parameters): Reintroduce parameters because base class holds
3350         only properties common data.
3351         (Indexer.CheckForDuplications): Indexers are threated as methods so we
3352         need do extra parameters check.
3353
3354         * const.cs: Update after FieldMember rename.
3355
3356         * decl.cs (MemberCache.FindBaseEvent): New method.
3357
3358         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
3359         to reflect that indexer is now derived from PropertyBased.
3360
3361         * ecore.cs (GetMemberType): Made public.
3362         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
3363         obsolete event.
3364
3365         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
3366         
3367         * typemanager.cs (CSharpSignature): Correctly print event accessors.
3368         (RegisterEvent): Removed.
3369         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
3370         (GetPrivateFieldOfEvent): Renamed to GetEventField.
3371
3372 2007-01-11  Raja R Harinath  <rharinath@novell.com>
3373
3374         Fix #80249
3375         * statement.cs (CollectionForeach.TryType): Prefer generic
3376         GetEnumerator over non-generic variant.  Fix code to follow comments.
3377
3378 2007-01-09  Raja R Harinath  <rharinath@novell.com>
3379
3380         Fix #80446
3381         * support.cs (ReflectionParameter): Don't use an invalid index on
3382         the generic parameter data.
3383
3384 2007-01-08  Miguel de Icaza  <miguel@novell.com>
3385
3386         * driver.cs: Just add a tiny bit of infrastructure.
3387
3388 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3389
3390         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
3391         where field type is struct from current assembly.
3392         
3393         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
3394         it is possible.
3395
3396 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3397
3398         A fix for bug #80381
3399         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
3400         the core types.
3401
3402         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
3403         messages.
3404         (Namespace.LookupType): Always use core types from corlib when speficied.
3405
3406         * report.cs: A new warning.
3407
3408         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
3409         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
3410         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
3411
3412         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
3413         (InitCoreTypes): Set expression type of object_type and value_type
3414         immediately after lookup.
3415
3416 2007-01-01  Miguel de Icaza  <miguel@novell.com>
3417
3418         * cs-tokenizer.cs: Accept Pc class characters (Connector
3419         Punctuation) as valid identifiers.  Fixes #78259
3420
3421         * expression.cs (Invocation.DoResolve): Moved the check for the
3422         use of `this' for doing method calls to the Invocation resolution
3423         step, after overload resolution has taken place instead of doing
3424         the check at the low-level `This.DoResolve' level.
3425
3426         The `This.DoResolve'(appens before overload resolution, so it has
3427         no way of knowing if the method that will be called will be
3428         instace or static, triggering an erroneous report for cs0188 (Bug
3429         78113).
3430
3431         We now do the check for instance method invocations after we know
3432         what method will be called.
3433
3434         (This.CheckThisUsage): Move the actual use of this structure
3435         checking into its own method and expose it. 
3436
3437         * Everywhere that called Error_ValueCannotBeConverted: pass a new
3438         EmitContext.
3439
3440         Exceptions: Null.ConvertImplicitly,
3441         Constant.ImplicitConversionRequired as there are too many call
3442         sites for passing the ec. 
3443
3444         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
3445         EmitContext, if the value is null, then we do not try to provide
3446         the extra information from the error (If a userdefined conversion
3447         exists, as UserDefinedConversion requires a non null-EmitContext).
3448
3449         Fixes: #80347
3450
3451 2006-12-30  Raja R Harinath  <rharinath@novell.com>
3452
3453         * flowanalysis.cs (MyBitVector): Document some invariants.
3454         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
3455         introduced below, and add a couple of others, 
3456
3457 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3458
3459         * attribute.cs (GetMethodObsoleteAttribute): Uses new
3460         GetPropertyFromAccessor and GetEventFromAccessor.
3461         
3462         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
3463         overrides non-obsolete one.
3464         (Indexer.Define): Error message has been moved to the parser.
3465
3466         * cs-parser.jay: Better syntax errors handling.
3467
3468         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
3469         when an invocation has no arguments.
3470
3471         * ecore.cs: Removed not used caching.
3472
3473         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
3474         implementation.
3475
3476         * report.cs: Add a new warning.
3477
3478         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
3479
3480         * typemanager.cs (enumeration_type): Removed.
3481         (CSharpSignature): Reuses IsSpecialMethod.
3482         (IsEqual): Hack for MS BCL.
3483         (GetPropertyFromAccessor): New method.
3484         (GetEventFromAccessor): New method.
3485         (IsSpecialMethod): Fixed to handle more cases.
3486
3487 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3488
3489         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
3490         Made white spaces array static.
3491
3492         * ecore.cs (RemoveGenericArity): Optimized.
3493
3494         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
3495         10 times faster).
3496         (MyBitVector.initialize_vector): Simplified.
3497
3498 2006-12-22  Miguel de Icaza  <miguel@novell.com>
3499
3500         * ecore.cs: Am not entirely happy with this hack, but it seems to
3501         address the issue in 80257 (a small test case for
3502         CreativeDocs.NET). 
3503
3504         I set the MethodGroupExpr.Type to an internal compiler type
3505         (itself in this case) to force the resolution to take place.   Why
3506         it does not take place with a null is beyond me.
3507
3508 2006-12-20  Marek Safar  <marek.safar@gmail.com>
3509
3510         A fix for bug #80288
3511         * expression.cs (ResolveOperator): Consider user defined conversion for
3512         logical and operator too.
3513         (EmitBranchable): Optimization for logical and when full constant folding
3514         could not be applied but one operand is constant.
3515
3516 2006-12-19  Marek Safar  <marek.safar@gmail.com>
3517
3518         * class.cs (GetClassBases): Write 5 times every day, will never use
3519         FullName for error reporting.
3520
3521         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
3522
3523 2006-12-19  Martin Baulig  <martin@ximian.com>
3524
3525         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
3526         the symbol file info here.
3527
3528 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3529
3530         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
3531         of `elseif' is taking then following sections are not taking.
3532         Fixes an issue reported on mono mailing list.
3533
3534 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3535
3536         A fix for bug #80300
3537         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
3538         a caller is not taking.
3539
3540 2006-12-18  Raja R Harinath  <rharinath@novell.com>
3541
3542         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
3543         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
3544         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
3545         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
3546         * class.cs: Update to changes.
3547
3548 2006-12-17  Marek Safar  <marek.safar@gmail.com>
3549
3550         A fix for bug #79934
3551         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
3552         partial container.
3553
3554         * class.cs (ResolveMembers): Register an iterator in current container and
3555         not in shared one.
3556
3557 2006-12-16  Raja R Harinath  <rharinath@novell.com>
3558
3559         Fix test-543.cs
3560         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
3561         satisfy a params annotated parameter.
3562
3563 2006-12-16  Marek Safar  <marek.safar@gmail.com>
3564
3565         A fix for bug #77014
3566         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
3567         paramters correctly and not rely on hacks in Parameters class.
3568         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
3569         at any possition.
3570         (Invocation.VerifyArgumentsCompat): Ditto.
3571         (Invocation.EmitArguments): Changed to correctly emit params arguments at
3572         any possition.
3573
3574         * parameter.cs (HasParams): Don't assume that params is the last one.
3575
3576         * support.cs (ReflectionParameters.ctor): Look for params attribute
3577         correctly.
3578         (ReflectionParameters.ParameterType): Removed hack when we returned last
3579         parameter for out of range parameters.
3580         (ParameterName, ParameterModifier): Ditto.
3581
3582 2006-12-14  Marek Safar  <marek.safar@gmail.com>
3583
3584         A fix for bug #79987
3585         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
3586         when assembly is not CLS compliant but type is. I have no idea why is this
3587         allowed.
3588
3589         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
3590
3591 2006-12-13  Miguel de Icaza  <miguel@novell.com>
3592
3593         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
3594         in struct constructors, they are basically no-ops.
3595
3596 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3597
3598         * cs-tokenizer.cs (Position): Save preprocessor status too.
3599
3600 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3601
3602         A fix for bug #77794
3603         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
3604
3605 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3606
3607         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
3608         Fixes #69299.
3609         (pp_expr): Report error for an invalid expression.
3610         (handle_preprocessing_directive): Simplified; add more error checking.
3611
3612 2006-12-11  Marek Safar  <marek.safar@gmail.com>
3613
3614         A fix for bug #74939
3615         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
3616         directives handling.
3617
3618 2006-12-10  Marek Safar  <marek.safar@gmail.com>
3619
3620         A fix for bugs #80093, and #75984
3621         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
3622         logic, it seems to me as it worked before "by coincidence".
3623         (xtoken): Simplified to use reworked handle_preprocessing_directive.
3624         (cleanup): Enabled endif check.
3625
3626 2006-12-09  Marek Safar  <marek.safar@gmail.com>
3627
3628         A fix for bug #80162
3629         * statement.cs (CollectionForeach.TryType): Generics and non-generics
3630         enumerators are never ambiguous.
3631
3632 2006-12-08  Raja R Harinath  <rharinath@novell.com>
3633
3634         Fix #80060
3635         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
3636
3637 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3638
3639         A fix for bug #80144
3640         * class.cs (EventProperty.Define): Explicit implementation means
3641         that an even is used.
3642
3643 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3644
3645         Fixes the operators implementation (part II)
3646
3647         * cfold.cs (DoConstantNumericPromotions): Renamed to
3648         DoBinaryNumericPromotions and simplified.
3649         (BinaryFold): Couple of conversion fixes; simplified.
3650
3651         * constant.cs, ecore.cs, literal.cs
3652         (ToType): Renamed to ConvertImplicitly.
3653         (Reduce): Renamed to ConvertExplicitly.
3654
3655         * class.cs, convert.cs: Updated.
3656
3657         * expression.cs: TryReduce doesn't throw an exception.
3658
3659 2006-12-01  Marek Safar  <marek.safar@gmail.com>
3660
3661         A fix for bug #80108
3662         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
3663         compatible.
3664
3665 2006-11-30  Marek Safar  <marek.safar@gmail.com>
3666
3667         Fixes unary operators implementation (part I)
3668         Also fixes #80026
3669
3670         * cfold.cs (Error_CompileTimeOverflow): Made internal
3671
3672         * const.cs (IConstant): Changed to use reference to constant and
3673         not constant itself.
3674         Updated IConstant implementations.
3675
3676         * constant.cs (CreateConstant): New factory method.
3677         Updated IConstant implementation.
3678
3679         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
3680
3681         * ecore.cs: Updated to use CreateConstantReference.
3682
3683         * enum.cs: Reflects IConstant changes.
3684
3685         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
3686
3687         * literal.cs (NullConstant): Change to be independently usable.
3688
3689 2006-11-29  Martin Baulig  <martin@ximian.com>
3690
3691         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
3692         we need to emit the scope initializer before calling the base .ctor.
3693
3694         * anonymous.cs: Merged back from the new anonymous methods branch.
3695         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
3696
3697         * expression.cs (ParameterReference.DoResolveBase): Create a
3698         "normal" ScopeInfo when capturing parameters rather than using the
3699         root scope; this makes things work with anonymous methods having
3700         parameters.
3701
3702         * statement.cs
3703         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
3704
3705 2006-11-22  Marek Safar  <marek.safar@gmail.com>
3706
3707         A fix for bug #79987
3708         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
3709         check to a base class.
3710         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
3711         only when assembly has missing attribute.
3712         * report.cs: Update.
3713
3714 2006-11-21  Marek Safar  <marek.safar@gmail.com>
3715
3716         * cs-tokenizer.cs: Merged with gmcs version.
3717
3718 2006-11-20  Marek Safar  <marek.safar@gmail.com>
3719
3720         * cs-tokenizer.cs,
3721         * cs-parser.jay: Better error message when partial keyword is misplaced.
3722
3723 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
3724
3725         A fix for bug #79810
3726         report.cs: CS1058 only applies to 2.0 profile (gmcs).
3727         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
3728         a RuntimeWrappedException by default.
3729
3730 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3731
3732         A fix for bug #79843
3733         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
3734         implementation.
3735         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
3736
3737 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3738
3739         * driver.cs, namespace.cs: Uses faster IndexOf version.
3740
3741 2006-11-17  Marek Safar  <marek.safar@gmail.com>
3742
3743         A fix for bug #79941
3744         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
3745         operators.
3746         (Operator.Define): Implicit/Explicit operator of same type is duplicate
3747         even if internal name is different.
3748         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
3749         (UserDefinedConversion): Simplified as the operators cannot be internal.
3750         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
3751         conversions.
3752         (MethodLookup): Replaced EmitContext with parentType.
3753         * expression.cs: Updated.
3754
3755 2006-11-09  Raja R Harinath  <rharinath@novell.com>
3756
3757         * driver.cs (BadAssembly): Handle all the ugliness of
3758         DefineDynamicAssembly.
3759
3760 2006-11-08  Raja R Harinath  <rharinath@novell.com>
3761
3762         Address parts of #58244 -- most of what's left is in the runtime
3763         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
3764         CS1509 error checks, and handle them for all assembly loads, not
3765         just the first invocation.
3766         (LoadModule): Likewise.  Move handling of 'adder_method' ...
3767         * codegen.cs (AssemblyClass.AddModule): ... here.
3768
3769 2006-11-02  Marek Safar  <marek.safar@gmail.com>
3770
3771         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
3772         IEnumerable<T> is ambiguous.
3773
3774 2006-10-31  Marek Safar  <marek.safar@gmail.com>
3775
3776         A fix for bug #67689
3777         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
3778         GetEnumerator is ambiguous.
3779
3780         * report.cs: Add new warning.
3781
3782 2006-10-29  Marek Safar  <marek.safar@gmail.com>
3783
3784         A fix for bug #78602
3785         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3786         to protected member can be nested type.
3787
3788 2006-10-28  Marek Safar  <marek.safar@gmail.com>
3789
3790         A fix for bug #78965
3791         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3792         to protected member must derive from current type.
3793
3794 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3795
3796         assign.cs: Reuses error method.
3797
3798         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
3799         instead of type for constants.
3800         (Expression.Error_ValueAssignment): Common error method.
3801
3802         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
3803         for any assignment.
3804
3805 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3806
3807         A fix for bug #79081
3808         * expression.cs (MemberAccess.DoResolve): Check nested type
3809         accessibility.
3810
3811 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
3812
3813         * doc.cs : nested delegates were not handled. Fixed bug #79754.
3814
3815 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3816
3817         A fix for bug #76591
3818         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
3819
3820 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3821
3822         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
3823         type forwarder of the same type multiple times.
3824
3825 2006-10-26  Raja R Harinath  <rharinath@novell.com>
3826
3827         Fix #78820
3828         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
3829         instance as an rvalue, even when we later resolve as an lvalue.
3830
3831 2006-10-25  Martin Baulig  <martin@ximian.com>
3832
3833         * anonymous.cs: Fix #79673.
3834
3835 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
3836
3837         A fix for bug #79666
3838         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
3839         ignored when is optimized (= default value) as its value is already set.
3840
3841 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3842
3843         A fix for bug #79724
3844         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
3845         TypeContainer for type lookup.
3846
3847 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3848
3849         A fix for bug #79231
3850         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
3851         * expression.cs (OverloadResolve): Always convert type name for
3852         an error message.
3853         (ResolveNamespaceOrType): Don't confuse a nested type with any 
3854         other member.
3855
3856 2006-10-18  Martin Baulig <martin@ximian.com>
3857
3858         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
3859
3860 2006-10-17  Miguel de Icaza  <miguel@novell.com>
3861
3862         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
3863         an int32, but requesting an int64 from the conversion
3864
3865 2006-10-12  Martin Baulig  <martin@ximian.com>
3866
3867         * anonymous.cs
3868         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
3869         
3870 2006-10-12  Martin Baulig  <martin@ximian.com>
3871
3872         * statement.cs
3873         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
3874
3875 2006-10-11  Miguel de Icaza  <miguel@novell.com>
3876
3877         * convert.cs: Remove broken code: I was doing the "Existance"
3878         tests for Implicit conversions.
3879
3880 2006-10-10  Miguel de Icaza  <miguel@novell.com>
3881
3882         * convert.cs: Added one missing case in
3883         ImplicitStandardConversionExists uint64 to intptr.
3884
3885         Fixes #59800
3886         
3887         * typemanager.cs (uintptr_type): another core known type.   
3888
3889         * ecore.cs (OperatorCast): routine used to do cast operations that
3890         depend on op_Explicit.  We could change some of the Decimal
3891         conversions to use this.
3892
3893         This one has a probe mechanism that checks both types for an op_
3894         which it coudl be used to eliminate two classes: CastToDecimal
3895         and CastFromDecimal.
3896
3897         * convert.cs: Implement the conversions documented in #59800
3898         
3899 2006-10-10  Martin Baulig  <martin@ximian.com>
3900
3901         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
3902         before RootScope.ResolveMembers().
3903
3904         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
3905         `CurrentType' if appropriate.
3906
3907 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
3908
3909         A fix for bug #78568
3910         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
3911         when contains binary operators.
3912         * cs-parser.jay: Updated.
3913
3914 2006-10-09  Martin Baulig  <martin@ximian.com>
3915
3916         * delegate.cs
3917         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
3918         moved that into Define() and also do the other type parameter
3919         checks there.  Fixes #79094.  Added gtest-292.cs.
3920
3921         * expression.cs
3922         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
3923         since that doesn't include type parameters; don't use `Ldelema'
3924         for type parameters.  Fixes #78980.  Added gtest-293.cs.
3925
3926 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
3927
3928         A fix for #77796
3929         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
3930         conversion is allowed.
3931
3932 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3933
3934         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
3935         error reporting when no error occurs.
3936
3937 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3938
3939         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
3940         does not exist.
3941
3942 2006-10-06  Raja R Harinath  <rharinath@novell.com>
3943
3944         Fix #79584
3945         * class.cs (DefineTypeBuilder): Check circular dependencies before
3946         setting the parent of the TypeBuilder.
3947         (CheckRecursiveDefinition): Don't use 'BaseType', since
3948         it may not be valid until after DefineTypeBuilder.  Use
3949         'base_type' instead.
3950
3951 2006-10-04  Martin Baulig  <martin@ximian.com>
3952
3953         Merged the Anonymous Methods patch.
3954
3955         * anonymous.cs, iterators.cs: The new anonymous methods code.
3956
3957         * statement.cs (Variable): New public abstract class.
3958         (LocalInfo.Variable): New public property.
3959         (LocalInfo.ResolveVariable): New public method.
3960         (Block.Flags): Add `IsIterator'.
3961         (Block.AddVariable): Improved the CS0136 check.
3962         (Block.AnonymousChildren): New public property.
3963         (Block.AddAnonymousChild): New public method.
3964         (ToplevelBlock): Update to use the new anonymous method framework.
3965         (ToplevelBlock.ctor): `container' is now a `Block' and not a
3966         `ToplevelBlock'; this is required to correctly implement the
3967         CS0136 check.
3968         (Fixed, Using): Use `TemporaryVariable' instead of directly
3969         creating the `LocalBuilder'.
3970
3971         * parameter.cs (Parameter.ResolveVariable): New public method.
3972         (Parameters.ResolveVariable): Likewise.
3973
3974         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
3975
3976         * class.cs (TypeContainer): Replaced the `iterators' list and
3977         corresponding methods with a list of `CompilerGeneratedClass'es.
3978         (TypeContainer.ResolveMembers): New public method.
3979         (Method): `IIteratorContainer' has been replaced by
3980         `IAnonymousHost'.
3981
3982         * expression.cs (VariableReference): New public abstract base
3983         class for `LocalVariableReference', `ParameterReference' and
3984         `This'.
3985
3986         * codegen.cs (EmitContext): Removed `capture_context',
3987         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
3988         (EmitContext.EmitThis): Removed.
3989
3990         * cs-parser.jay: Replace `iterator_container' with
3991         `anonymous_host'.       
3992
3993 2006-10-04  Martin Baulig  <martin@ximian.com>
3994
3995         * generic.cs (GenericMethod): Don't make this abstract.
3996         (Constraints.Clone): Added dummy implementation.
3997
3998 2006-10-04  Raja R Harinath  <harinath@gmail.com>
3999
4000         Fix #79577
4001         * namespace.cs (LookForAnyGenericType): Avoid nullref on
4002         'declspaces'.  Avoid allocating arrays willy-nilly.
4003
4004         Fix #79553
4005         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
4006         cases out of the switch.
4007
4008 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4009
4010         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
4011         message when non-generic type is used with the type arguments.
4012         * expression.cs: Updated.
4013
4014 2006-09-28  Raja R Harinath  <rharinath@novell.com>
4015
4016         Fix #79013
4017         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
4018         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4019         Change semantics slightly.  Don't insist on having only one
4020         temporary EmptyExpression -- just throttle the creation of new ones.
4021
4022         Fix #79451
4023         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
4024         non-interfaces too.  If no methods are found, don't try to create
4025         a MethodGroupExpr.
4026
4027 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4028
4029         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
4030         generic type.
4031
4032         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
4033         us produce better error message.
4034
4035 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
4036
4037         * expression.cs (Binary.ResolveOperator): Warn about a side effect
4038         of the `|' operator.
4039
4040         * report.cs: A new warning added.
4041
4042 2006-09-27  Martin Baulig  <martin@ximian.com>
4043
4044         * generic.cs (GenericMethod): Don't make this abstract.
4045
4046 2006-09-27  Martin Baulig  <martin@ximian.com>
4047
4048         * report.cs
4049         (InternalErrorException): Added overloaded ctor taking a params array.
4050
4051 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
4052
4053         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
4054         Fixed the cases when same error was reported twice.
4055
4056         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
4057         now report symbol information.
4058
4059 2006-09-25  Martin Baulig  <martin@ximian.com>
4060
4061         * class.cs: Completely unified with the gmcs version.
4062
4063 2006-09-25  Martin Baulig  <martin@ximian.com>
4064
4065         * typemanager.cs (TypeManager.IsNullableType): New public function.
4066         (TypeManager.IsNullableTypeOf): Likewise.
4067         (TypeManager.IsNullableValueType): Likewise.
4068
4069         * class.cs (MethodCore): Added the `GenericMethod' argument from
4070         gmcs and also unified all classes derived from `MethodCore' with gmcs.
4071
4072 2006-09-24  Raja R Harinath  <harinath@gmail.com>
4073
4074         * convert.cs: Unify with gmcs version.
4075
4076 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4077
4078         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
4079         verify them as well.
4080
4081         * report.cs: New warning.
4082
4083 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4084
4085         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
4086         for anonymous block with out argument.
4087
4088 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4089
4090         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
4091         not used private events only.
4092
4093 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
4094
4095         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
4096
4097         * const.cs (Const.Define): Check for constant type.
4098         (Const.IsConstantTypeValid): Looks for valid constant types.
4099
4100         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
4101
4102         * ecore.cs (EmptyConstantCast): New common class for all constant based
4103         EmptyCast(s).
4104
4105         * expression.cs (Is.DoResolve): Handle null constant especially.
4106         (New.DoResolve): Check for new void().
4107         (MemberAccess.DoResolve): Cope with all kind of nulls.
4108
4109         * literal.cs (NullConstant): Uses EmptyConstantCast.
4110         (NullDefault): Based on EmptyConstantCast.
4111         (NullLiteral): Uses EmptyConstantCast.
4112
4113         * statement.cs (Block.ResolveMeta): Check for constant type.
4114
4115 2006-09-22  Martin Baulig  <martin@ximian.com>
4116
4117         * delegate.cs, attribute.cs: Merged with the gmcs versions.
4118
4119 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4120
4121         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
4122         not the null type.
4123
4124         Fix part of #79451
4125         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
4126         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
4127         code slightly.
4128
4129 2006-09-22  Martin Baulig  <martin@ximian.com>
4130
4131         * ecore.cs: Merged with the gmcs version.
4132
4133         * generic.cs (ConstructedType): New dummy class.
4134         (TypeArguments): Don't make this abstract.
4135
4136         * typemanager.cs
4137         (TypeManager.IsGenericTypeDefinition): New method.
4138         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
4139
4140 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4141
4142         * expression.cs (ComposedCast): Check for arrays of TypedReference
4143         before creating the type, not after.
4144
4145 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
4146
4147         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
4148         after ToType change.
4149
4150         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
4151         when constant must be implicitly convertible.
4152
4153         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
4154
4155         * ecore.cs (NullCast): Derives from NullConstant.
4156
4157         * expression.cs (Is.DoResolve): Removed useless variables.
4158         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
4159         (New.Constantify): Add enum support.
4160         (MemberAccess.DoResolve): Add warning when accessing null constant or
4161         variable.
4162
4163         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
4164         property.
4165
4166         * literal.cs (NullConstant): New abstract class with common
4167         functionality for all null specializations.
4168         (NullDefault): Represents default(X) when result can be
4169         reduced to null.
4170         (NullLiteral): Updated.
4171
4172         * report.cs: Add new warning.
4173
4174 2006-09-21  Martin Baulig  <martin@ximian.com>
4175
4176         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
4177
4178 2006-09-21  Martin Baulig  <martin@ximian.com>
4179
4180         * generic.cs (GenericConstraints): New dummy class.
4181         (Constraints): Likewise.
4182         (TypeParameter): Likewise.
4183         (TypeParameterName): Likewise.
4184         (GenericMethod): Likewise.
4185
4186         * typemanager.cs (TypeManager.GetGenericArguments): New method.
4187
4188         * decl.cs: Merged with the gmcs version.
4189
4190 2006-09-21  Raja R Harinath  <rharinath@novell.com>
4191
4192         * generic.cs (TypeParameter): Implement IMemberContainer.
4193         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
4194
4195         * rootcontext.cs: Unify with gmcs version.
4196
4197         * report.cs: Unify with gmcs version.
4198         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
4199         from gmcs/generics.cs.
4200         * generics.cs (TypeParameter): New dummy class.
4201
4202         * support.cs: Unify with gmcs version.
4203
4204 2006-09-20  Raja R Harinath  <rharinath@novell.com>
4205
4206         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
4207         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
4208
4209         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
4210         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
4211         * mcs.exe.sources: Add generic.cs.
4212
4213         * codegen.cs: Unify with gmcs version.
4214
4215         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
4216         (EmitContext): Add GenericDeclContainer implementation.
4217         * decl.cs (MemberCore, DeclSpace): Likewise.
4218         * namespace.cs: Remove #ifdef GMCS_SOURCE.
4219
4220         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
4221         MCS TypeManager has a corresponding dummy method.
4222
4223 2006-09-19  Martin Baulig  <martin@ximian.com>
4224
4225         * expression.cs: Completely merged with the gmcs version.
4226
4227 2006-09-19  Martin Baulig  <martin@ximian.com>
4228
4229         * expression.cs (Invocation): Merged with the gmcs version.
4230         (ArrayAccess.GetStoreOpcode): Likewise.
4231
4232 2006-09-19  Martin Baulig  <martin@ximian.com>
4233
4234         * typemanager.cs
4235         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
4236         (TypeManager.IsGenericMethodDefinition): Likewise.
4237
4238 2006-09-19  Martin Baulig  <martin@ximian.com>
4239
4240         * typemanager.cs
4241         (TypeManager.IsEqual): Moved the gmcs implementation here.
4242         (TypeManager.DropGenericTypeArguments): Likewise.
4243         (TypeManager.DropGenericMethodArguments): Likewise.
4244         (TypeManager.GetTypeArguments): Moved here from gmcs.
4245         (TypeManager.HasGenericArguments): Likewise.
4246
4247 2006-09-19  Martin Baulig  <martin@ximian.com>
4248
4249         * expression.cs (Binary): Merged with the gmcs version.
4250
4251 2006-09-19  Martin Baulig  <martin@ximian.com>
4252
4253         * expression.cs (Probe, As, Is): Merged with the gmcs version.
4254
4255 2006-09-19  Martin Baulig  <martin@ximian.com>
4256
4257         * typemanager.cs: Merged with the gmcs version.
4258
4259 2006-09-16  Raja R Harinath  <rharinath@novell.com>
4260
4261         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
4262         * driver.cs: Likewise.
4263
4264 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
4265
4266         A fix for #79401
4267         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
4268         only if parent type is class.
4269         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
4270         update.
4271
4272 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
4273
4274         * cs-parser.jay,
4275         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
4276         keywords are used.
4277         * typemanager.cs(CSharpName): Converts NullType to null.
4278
4279 2006-09-15  Martin Baulig  <martin@ximian.com>
4280
4281         * typemanager.cs
4282         (TypeManager.GetMethodName): Added mcs implementation.
4283         (TypeManager.IsEqual): Likewise.
4284
4285         * ecore.cs
4286         (SimpleName.RemoveGenericArity): Added dummy implementation.
4287
4288         * pending.cs: Merged with the gmcs version.     
4289
4290 2006-09-15  Martin Baulig  <martin@ximian.com>
4291
4292         * statement.cs: Merge with the gmcs version.
4293
4294 2006-09-15  Martin Baulig  <martin@ximian.com>
4295
4296         * statement.cs (Switch): Merge with the gmcs implementation
4297         (without nullables), which is newer.
4298
4299 2006-09-15  Martin Baulig  <martin@ximian.com>
4300
4301         * statement.cs (Block.Variables): Make this public.
4302         (ToplevelBlock.Parameters): Make this a property.
4303         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
4304
4305 2006-09-15  Martin Baulig  <martin@ximian.com>
4306
4307         * namespace.cs: Merge with the gmcs version.
4308
4309 2006-09-15  Martin Baulig  <martin@ximian.com>
4310
4311         * decl.cs (MemberName): Minor code cleanups.
4312
4313 2006-09-15  Martin Baulig  <martin@ximian.com>
4314
4315         * parameter.cs: Merge with the gmcs version.
4316
4317 2006-09-15  Martin Baulig  <martin@ximian.com>
4318
4319         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
4320         and an error in mcs.
4321
4322 2006-09-15  Martin Baulig  <martin@ximian.com>
4323
4324         * flowanalysis.cs: Merged from GMCS; added the generics code into
4325         a `GMCS_SOURCE' conditional so we can share this file.
4326
4327 2006-09-08  Martin Baulig  <martin@ximian.com>
4328
4329         * typemanager.cs (TypeManager.interlocked_type): New public field.
4330         (TypeManager.int_interlocked_compare-exchange): New public field.
4331         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
4332         enumerator types here and call InitGenericCoreTypes().
4333         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
4334         after calling InitEnumUnderlyingTypes().
4335
4336         * rootcontext.cs
4337         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
4338         `classes_second_stage'. 
4339
4340 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
4341
4342         * assign.cs, ecore.cs, expression.cs: Share error message text.
4343         * class.cs (FieldMember.Define): Check for varible of static type.
4344         * driver.cs (LoadAssembly): Uses error output for errors.
4345         * statement.cs: Updated.
4346
4347 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
4348
4349         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
4350         type instance.
4351
4352 2006-09-07  Martin Baulig  <martin@ximian.com>
4353
4354         * driver.cs
4355         (MainDriver): Revert r62663 from Marek; see #70506 for details.
4356
4357 2006-08-29  Miguel de Icaza  <miguel@novell.com>
4358
4359         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4360         
4361 2006-08-17  Miguel de Icaza  <miguel@novell.com>
4362
4363         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
4364         #52019 and #79064, the use of the \uXXXX sequence in source code
4365         to represent unicode characters.
4366
4367 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
4368
4369         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
4370         support.
4371         * class.cs, ecore.cs, statement.cs: Merged to one error message.
4372
4373 2006-08-13  Miguel de Icaza  <miguel@novell.com>
4374
4375         * assign.cs: Catch attempts to assign to a method groups in += and
4376         report as 1656
4377
4378 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
4379
4380         A fix for #79056
4381         * cs-parser.jay: Don't destroy current array type by typeof of array's.
4382
4383 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
4384
4385         * class.cs (Method.Define): Issue a warning when generic method looks like
4386         an entry point.
4387         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
4388         as well.
4389
4390 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
4391  
4392         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
4393         looking for ctor.
4394         * decl.cs (MemberCache.FindMembers): When container is interface we need to
4395         search all base interfaces as a member can be ambiguous.
4396         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
4397         Constructor member type filter. 
4398         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
4399         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
4400         reporting for returned memberinfos.
4401         * report.cs: Updated.
4402         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
4403         version to work on all runtimes.
4404         (TypeManager.RealMemberLookup): Removed members filtering.
4405
4406 2006-08-08  Raja R Harinath  <rharinath@novell.com>
4407
4408         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
4409         (PropertyExpr.EmitAssign): Likewise.
4410         * expression.cs (Indirection.EmitAssign): Likewise.
4411         (LocalVariableReference.EmitAssign): Likewise.
4412         (ParameterReference.EmitAssign): Likewise.
4413         (Invocation.EmitArguments): Likewise.
4414         (ArrayAccess.EmitAssign): Likewise.
4415         (IndexerAccess.EmitAssign): Likewise.
4416         (This.EmitAssign): Likewise.
4417         (ConditionalLogicalOperator.Emit): Likewise.
4418
4419         Fix #79026
4420         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
4421         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
4422         leave it in after returning it.
4423         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
4424
4425 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
4426
4427         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
4428         message.
4429
4430 2006-08-03  Raja R Harinath  <rharinath@novell.com>
4431
4432         Fix cs0146-3.cs and cs0146-4.cs.
4433         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
4434         enclosing types don't depend on the current type.
4435
4436 2006-08-02  Raja R Harinath  <rharinath@novell.com>
4437
4438         Fix #77963
4439         * class.cs (TypeContainer.DoDefineMembers): Use
4440         FindBaseMemberWithSameName on Parent, since we're interested in
4441         whether we hide inherited members or not.
4442         (FindBaseMemberWithSameName): Make slightly more robust.
4443
4444         Fix the non-generic testcase from #77396
4445         * decl.cs (DeclSpace.DeclContainer): Remove override.
4446
4447         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
4448         declspaces for doppelgangers too.
4449         (UsingEntry): Implement IResolveContext.
4450         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
4451         'this' as the resolve context.
4452         (LocalAliasEntry): Likewise.
4453
4454         Implement parts of #77403
4455         * roottypes.cs (RootDeclSpace): New.  Used to represent the
4456         toplevel declaration space.  Each namespace declaration introduces
4457         a "partial" root declaretion space.
4458         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
4459         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
4460         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
4461         from 'current_namespace.SlaveDeclSpace'.
4462         (namespace_declaration): Likewise.
4463         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
4464         check.  It can't happen now.
4465         * decl.cs (DeclSpace.LookupType): Likewise.
4466         * driver.cs (MainDriver): Sanity check.
4467
4468 2006-08-01  Raja R Harinath  <rharinath@novell.com>
4469
4470         * decl.cs (DeclSpace.FindNestedType): Remove.
4471         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
4472         LookupTypeContainer to get the container of the nested type.
4473         * class.cs (TypeContainer.FindNestedType): Make non-override.
4474
4475 2006-07-31  Raja R Harinath  <rharinath@novell.com>
4476
4477         * decl.cs (DeclSpace.PartialContainer): Move field from ...
4478         * class.cs (TypeContainer.PartialContainer): ... here.
4479         (TypeContainer.AddBasesForPart): New helper.
4480         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
4481         instead.
4482         * cs-parser.jay (current_class): Convert to DeclSpace.
4483         (struct_declaration, interface_declaration, class_declaration):
4484         Use AddBasesForPart instead of .Bases directly.
4485         * const.cs, iterators.cs: Update to changes.
4486
4487 2006-07-28  Raja R Harinath  <rharinath@novell.com>
4488
4489         * class.cs (TypeContainer.AddMemberType): Rename from
4490         AddToTypeContainer.
4491         (TypeContainer.AddMember): Rename from AddToMemberContainer.
4492         (AddTypeContainer): New.  Combine AddClassOrStruct and
4493         AddInterface.
4494         (AddPartial): Update.  Add 'is_partial' argument.
4495         * roottypes.cs: Update to changes.
4496         * cs-parser.jay (push_current_class): New helper for handling
4497         current_container and current_class.
4498         (struct_declaration, interface_declaration, class_declaration):
4499         Use it.
4500
4501 2006-07-26  Raja R Harinath  <rharinath@novell.com>
4502
4503         * roottypes.cs: Rename from tree.cs.
4504
4505         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
4506         * tree.cs (Tree, ITreeDump): Remove types.
4507         * rootcontext.cs (tree, Tree): Remove fields.
4508         (root, ToplevelTypes): New.
4509         * *.cs: Update to rename.
4510
4511         * tree.cs (Tree.RecordDecl): Remove.
4512         (RootTypes.AddToTypeContainer): Record the toplevel type in its
4513         namespace here.
4514         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
4515
4516 2006-07-23  Raja R Harinath  <harinath@gmail.com>
4517
4518         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
4519         DoFlowAnalysis and OmitStructFlowAnalysis here.
4520         (ec.With): Rename from WithUnsafe and generalize.
4521         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
4522         (ec.WithFlowAnalyis): New.
4523         * ecore.cs, expression.cs, statement.cs: Update.
4524
4525 2006-07-22  Raja R Harinath  <harinath@gmail.com>
4526
4527         * statement.cs (Block.ResolveMeta): Simplify slightly.
4528
4529         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
4530         multiple boolean fields.  Convert InUnsafe, constant_check_state,
4531         check_state to flags.
4532         (CheckState, ConstantCheckState): Update.
4533         (InUnsafe): New read-only property.
4534         (FlagsHandle): Rename from CheckStateHandle and convert to handle
4535         arbitrary flags.
4536         (WithUnsafe): New helper similar to WithCheckState.
4537         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
4538         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
4539
4540 2006-07-21  Raja R Harinath  <rharinath@novell.com>
4541
4542         Make comparisons use the same IL irrespective of whether they're
4543         in a 'checked' or 'unchecked' context: one of the issues in #78899
4544         * codegen.cs (EmitContext.CheckState): Make read-only property.
4545         (EmitContext.ConstantCheckState): Likewise.
4546         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
4547         helper that implement a save/restore stack for CheckState
4548         values.  This is the only way to change check-state.
4549         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
4550         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
4551         (CheckedExpr.EmitBranchable): New forwarding method.
4552         (UnCheckedExpr): Likewise.
4553         * statement.cs (Block.ResolveMeta): Use WithCheckState.
4554         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
4555         (Checked.Resolve, checked.DoEmit): Likewise.
4556
4557 2006-07-20  Miguel de Icaza  <miguel@novell.com>
4558
4559         * anonymous.cs: Cache the resolved anonymous delegate, and return
4560         this so that the ResolveTopBlock is only triggered once, not
4561         twice.
4562
4563         Currently we trigger ResolvetopBlock twice due to a first pass of
4564         argument check compatibility, and a second pass that does the
4565         actual resolution.   
4566         
4567 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4568
4569         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
4570         modifiers.
4571         * rootcontext.cs (Reset): Add helper_classes.
4572
4573 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4574
4575         A fix for #78860
4576         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
4577         correctly.
4578
4579 2006-07-13  Miguel de Icaza  <miguel@novell.com>
4580
4581         * statement.cs (Lock): Handle expressions of type
4582         TypeManager.null_type specially.  Fixes #78770
4583
4584 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4585
4586         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
4587         to an event.
4588
4589 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4590
4591         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
4592         for accessors as well.
4593         * ecore.cs (EventExpr): Add AccessorTable.
4594
4595 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
4596
4597         A fix for #78738
4598         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
4599         for CS0122 where appropriate.
4600         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
4601         level attributes.
4602         (Filter): Assembly can be null in the case of top level attributes.
4603
4604 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
4605
4606         A fix for #78690
4607
4608         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
4609         is done at global level.
4610
4611 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4612
4613         A fix for #77002, Implemented TypeForwarder support.
4614
4615         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
4616         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
4617         * typemanager.cs (): Add type_forwarder_attr_type.
4618
4619 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4620
4621         * report.cs: Add CS0469 warning.
4622
4623 2006-06-21  Martin Baulig  <martin@ximian.com>
4624
4625         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
4626         the `try'-block, so we also report CS0016 etc. there.
4627
4628 2006-06-21  Martin Baulig  <martin@ximian.com>
4629
4630         * delegate.cs
4631         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
4632
4633 2006-06-21  Martin Baulig  <martin@ximian.com>
4634
4635         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
4636         also report CS1686 for parameters.
4637
4638 2006-06-21  Martin Baulig  <martin@ximian.com>
4639
4640         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
4641         instead of an error if the value is not implicitly convertible to
4642         the switch types; fixes #77964.
4643
4644 2006-06-21  Raja R Harinath  <rharinath@novell.com>
4645
4646         Fix #78673
4647         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
4648         FieldBuilder is null.
4649
4650         Fix #78662
4651         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
4652         'left' and 'right' before error-checking.
4653
4654 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
4655
4656         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
4657         Fixed bug #78601.
4658         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
4659         (FieldExpr.DoResolve): likewise.
4660         (PropertyExpr.InstanceResolve): likewise.
4661         (EventExpr.InstanceResolve): likewise. 
4662
4663 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
4664
4665         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
4666         attribute applicable tests for attribute argument.
4667
4668 2006-06-02  Raja R Harinath  <rharinath@novell.com>
4669
4670         Fix #78079
4671         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
4672         (Binary.OverloadResolve_PredefinedIntegral): New.
4673         (Binary.OverloadResolve_PredefinedFloating): New.
4674         (Binary.OverloadResolve_PredefinedString): New.
4675         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
4676         Follow the standard more closely, and treat numeric promotions in
4677         terms of overload resolution.
4678         (Binary.CheckShiftArguments): Simplify.
4679
4680 2006-06-01  Raja R Harinath  <rharinath@novell.com>
4681
4682         * flowanalysis.cs (MyBitVector): Simplify representation.
4683         (MyBitVector.Clone): Avoid allocating BitArray.
4684         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
4685         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
4686         (*): Update.  Change all references to MyBitVector.And and
4687         MyBitVector.Or to &= and |=.
4688
4689 2006-05-29  Raja R Harinath  <rharinath@novell.com>
4690
4691         Fix cs0231-[34].cs.
4692         * cs-parser.jay (formal_parameter_list): Extend the pattern below
4693         to param arguments too.
4694
4695 2006-05-26  Miguel de Icaza  <miguel@novell.com>
4696
4697         * cs-parser.jay: Catch another parsing form for arglist being
4698         followed by other arguments.  Fixes #78313.
4699
4700 2006-05-24  Raja R Harinath  <rharinath@novell.com>
4701
4702         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
4703         checking of out parameters to ...
4704         (FlowBranchingToplevel.Merge): ... here.
4705         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
4706         set, propagate the origin upward, and only complain if there was
4707         no other error.
4708         (FlowBranchingException.AddContinueOrigin): Likewise.
4709         (FlowBranchingException.AddReturnOrigin): Likewise.
4710         (FlowBranchingException.AddGotoOrigin): Likewise.       
4711
4712 2006-05-23  Raja R Harinath  <rharinath@novell.com>
4713
4714         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
4715         unreachable, skip it.
4716         (FlowBranchingException.Merge): Always propagate jumps, even if
4717         the finally block renders subsequent code unreachable.
4718
4719 2006-05-18  Raja R Harinath  <rharinath@novell.com>
4720
4721         Fix #77601
4722         * statement.cs (Goto.Resolve): Move responsibility for resolving
4723         'goto' to FlowBranching.AddGotoOrigin.
4724         (Goto.SetResolvedTarget): New.  Callback to set the
4725         LabeledStatement that's the target of the goto.
4726         (Goto.DoEmit): Use Leave instead of Br when crossing an
4727         unwind-protect boundary.
4728         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
4729         LookupLabel and adjust to new semantics.
4730         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
4731         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
4732         Goto.SetResolvedTarget to update target.
4733         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
4734         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
4735         AddBreakOrigin & co.  Delay propagation until ...
4736         (FlowBranchingException.Merge): ... this.
4737
4738         * statement.cs (Block.Resolve): Always depend on flow-branching to
4739         determine unreachability.  Kill workaround that originally emitted
4740         only one statement after an "unreachable" label (see infloop in
4741         test-515.cs).
4742
4743         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
4744         This is still "wrong", but anything better would probably need a
4745         multi-pass algorithm.
4746         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
4747         usage vector.  Force current usage vector to be reachable, to
4748         optimistically signify backward jumps.
4749         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
4750         detected.
4751         (FlowBranchingLabeled.Merge): New.  If no backward jump was
4752         detected, return the original salted-away usage vector instead,
4753         updated with appropriate changes.  Print unreachable warning if
4754         necessary.
4755         * statement.cs (Block.Resolve): Don't print unreachable warning on
4756         a labeled statement.
4757
4758 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
4759
4760         * driver.cs: Pass filename without path to AssemblyBuilder's 
4761         AddResourceFile. Fixes bug #78407.
4762
4763 2006-05-17  Raja R Harinath  <rharinath@novell.com>
4764
4765         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
4766         * flowanalysis.cs (FlowBranchingLabeled): ... here.
4767         (FlowBranching.MergeChild): Overwrite
4768         reachability information from Labeled branchings too.
4769
4770 2006-05-16  Raja R Harinath  <rharinath@novell.com>
4771
4772         * statement.cs (Goto.Resolve): Merge jump origins here ...
4773         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
4774
4775         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
4776         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
4777         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
4778         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
4779         here, ...
4780         * statement.cs (Goto.Resolve): ... not here.
4781         (Goto.Emit): Remove CS1632 check.
4782
4783 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
4784
4785         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
4786         error message.
4787
4788 2006-05-11  Raja R Harinath  <rharinath@novell.com>
4789
4790         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
4791         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
4792         (FlowBranchingException.Label): Likewise.
4793
4794         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
4795         given value.
4796         (MyBitVector.Or): Use it to avoid losing information (Count).
4797         (FlowBranching.MergeOrigins): Likewise.
4798
4799         * flowanalysis.cs (UsageVector.IsDirty): Remove.
4800         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
4801         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
4802         (UsageVector.ToString): Simplify.
4803         (UsageVector.MergeSiblings): Move here from ...
4804         (FlowBranching.Merge): ... here.
4805         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
4806         not a MyBitVector.
4807
4808 2006-05-10  Raja R Harinath  <rharinath@novell.com>
4809
4810         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
4811         null bitvector is treated as all-true.
4812
4813         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
4814         (MyBitVector): Rationalize invariants.  'vector != null' implies
4815         that we have our own copy of the bitvector.  Otherwise,
4816         'InheritsFrom == null' implies all inherited bits are true.
4817
4818 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
4819
4820         * statement.cs (LocalInfo): Add IsConstant.
4821         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
4822         local variable for constants.
4823
4824 2006-05-09  Raja R Harinath  <rharinath@novell.com>
4825
4826         * flowanalysis.cs (MyBitVector.Empty): New.
4827         (MyBitVector): Don't allow InheritedFrom to be null.
4828         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
4829         (UsageVector, FlowBranching): Update to changes.
4830
4831         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
4832         recursion.  The 'Parent == null' condition isn't sufficient for
4833         anonymous methods.
4834         (FlowBranching.AddBreakOrigin): Likewise.
4835         (FlowBranching.AddContinueOrigin): Likewise.
4836         (FlowBranching.AddReturnOrigin): Likewise.
4837         (FlowBranching.StealFinallyClauses): Likewise.
4838         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
4839         (FlowBranching.CheckOutParameters): Likewise.
4840         (FlowBranchingToplevel): Terminate all the above recursions here.
4841         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
4842         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
4843
4844         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
4845         toplevel block.
4846         (FlowBranchingToplevel): New.  Empty for now.
4847         (FlowBranching.MergeTopBlock): Update.
4848         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
4849         branching for the anonymous delegate.
4850         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
4851
4852         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
4853         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
4854         information at the start of the merge.  Reorganize.
4855
4856 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4857
4858         * class.cs (MethodData.Define): Method cannot implement interface accessor.
4859
4860 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4861
4862         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
4863         to newly introduced ctor.
4864
4865         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
4866         message to one place.
4867         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
4868         global namespace.
4869
4870 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4871
4872         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
4873
4874         * ecore.cs (Expression.ResolveAsConstant): Updated.
4875
4876         * statement.cs (ResolveMeta): Updated.
4877
4878 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4879
4880         * cs-parser.jay: __arglist cannot be used in initializer.
4881
4882 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4883
4884         A fix for #77879
4885         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
4886         private types.
4887
4888 2006-05-05  Raja R Harinath  <rharinath@novell.com>
4889
4890         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
4891         (LabeledStatement): Add 'name' parameter.
4892         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
4893         (Block.AddLabel): Update to changes.
4894         * cs-parser.jay (labeled_statement): Likewise.
4895
4896         * flowanalysis.cs (BranchingType.Labeled): New.
4897         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
4898         (FlowBranchingLabeled): New.  Does nothing for now, but will
4899         eventually handle 'goto' flows.
4900         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
4901         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
4902         that's terminated ...
4903         (Block.Resolve): ... here.
4904
4905         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
4906         (UsageVector.MergeFinallyOrigins): Likewise.
4907         (FlowBranching.InTryOrCatch): Likewise.
4908         (FlowBranching.AddFinallyVector): Likewise.
4909         (FlowBranchingException): Update to changes.
4910
4911         Fix #78290
4912         * statement.cs (Return.Resolve): Move error checking to ...
4913         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
4914         (FlowBranchingException): Handle return origins like break and
4915         continue origins.
4916         (FlowBranching.UsageVector.CheckOutParameters): Remove.
4917
4918 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4919
4920         A fix for #76122
4921         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
4922         filter.
4923
4924 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4925
4926         A fix for #77543
4927         * class.cs (MethodData.Define): Do public accessor check only when method
4928         implements an interface.
4929
4930 2006-05-04  Raja R Harinath  <rharinath@novell.com>
4931
4932         Remove special handling of 'break'
4933         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
4934         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
4935         (UsageVector.Break): Remove.
4936         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
4937         reachability.
4938         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
4939
4940         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
4941         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
4942
4943 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
4944
4945         A fix for #75726
4946         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
4947         be the interface member.
4948
4949 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
4950
4951         A fix for #60069
4952         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
4953         for emitting small (int) values.
4954
4955 2006-05-03  Raja R Harinath  <rharinath@novell.com>
4956
4957         Fix #59427
4958         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
4959         control-flow passes through the 'finally' after merging-in all the
4960         control-flows from 'try' and the 'catch' clauses.
4961
4962         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
4963         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
4964         always true at the only non-recursive entry point.
4965         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
4966         FlowBranchingBreakable.
4967         (FlowBranchingLoop): Remove.
4968         * statement.cs (Return.DoResolve): Update to changes.
4969
4970         Fix #76471, #76665
4971         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
4972         (FlowBranching.CreateBranching): Handle it: create a
4973         FlowBranchingContinuable.
4974         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
4975         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
4976         except that it handles the 'continue' command.
4977         (FlowBranching.UsageVector.MergeOrigins): Rename from
4978         MergeBreakOrigins.
4979         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
4980         except that it overrides AddContinueOrigin.
4981         (FlowBranchingException): Override AddContinueOrigin, similar to
4982         AddBreakOrigin.
4983         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
4984         Create a new branching around the embedded statement.
4985         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
4986         control flow after the embedded statement.
4987         (Continue.Resolve): Move all error checking to AddContinueOrigin.
4988
4989         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
4990         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
4991         FlowBranchingBreakable.
4992         (FlowBranchingSwitch): Remove.
4993
4994         Fix test-503.cs
4995         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
4996         error reporting to ...
4997         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
4998         Rename from 'AddBreakVector'.  Add new location argument.  Return
4999         a bool indicating whether the 'break' crosses an unwind-protect.
5000         (FlowBranchingException.AddBreakOrigin): Add.
5001         (FlowBranchingException.Merge): Propagate 'break's to surrounding
5002         flowbranching after updating with the effects of the 'finally'
5003         clause.
5004         (FlowBranchingBreakable): New common base class for
5005         FlowBranchingLoop and FlowBranchingSwitch.
5006
5007         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
5008         embedded statement.
5009         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
5010
5011 2006-05-02  Raja R Harinath  <rharinath@novell.com>
5012
5013         * statement.cs (Do.Resolve): If the loop is infinite, set the
5014         barrier.
5015         (While.Resolve, For.Resolve): Set a barrier after the embedded
5016         statement.  There's no direct control flow that goes from the end
5017         of the embedded statement to the end of the loop.
5018         * flowanalysis.cs (FlowBranching.Infinite): Remove.
5019         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
5020         above ensure that the reachability is correctly computed.
5021
5022         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
5023         (UsageVector.MergeBreakOrigins): If the current path is
5024         unreachable, treat it as if all parameters/locals are initialized.
5025         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
5026         infinite loops before merging-in break origins.
5027
5028         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
5029         (Reachability.Reachable): Split part into ...
5030         (Reachability.Unreachable): ... this.  Simplify.
5031         (Reachability.IsUnreachable): Use 'Unreachable' instead.
5032
5033         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
5034         (Reachability.SetThrowsSometimes): Likewise.
5035         (FlowBranchingBlock.MergeTopBlock): Don't compare against
5036         TriState.Always, use corresponding property.
5037         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
5038         (Block.Resolve): Likewise.  Remove some redundant checks.
5039
5040 2006-05-02  Raja R Harinath  <harinath@gmail.com>
5041
5042         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
5043         (Reachability.Meet): Don't bother checking AlwaysThrows --
5044         barrier is always set.
5045         (FlowBranchingBlock.Merge): Likewise.
5046
5047 2006-05-01  Raja R Harinath  <harinath@gmail.com>
5048
5049         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
5050         checks for unreachable.
5051
5052 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
5053
5054         A fix for #77980
5055         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
5056
5057         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
5058         whether field is really assigned.
5059
5060 2006-04-30  Raja R Harinath  <harinath@gmail.com>
5061
5062         * flowanalysis.cs (Reachability): Make 4-argument constructor
5063         private.
5064         (Reachability.Meet): Rename from 'And'.  Remove static variant.
5065         (Reachability.Always): Rename from the highly misleading
5066         'Reachability.Never'.
5067         (FlowBranching.Merge): Update to changes.  Mark an impossible
5068         situation with a 'throw'.
5069         (*): Update to changes.
5070
5071 2006-04-29  Raja R Harinath  <harinath@gmail.com>
5072
5073         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
5074         Remove 'Undefined'.
5075         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
5076         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
5077         (*): Update to changes.
5078         * statement.cs: Update to changes.
5079
5080 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
5081
5082         A fix for #78049
5083         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
5084
5085 2006-04-28  Raja R Harinath  <harinath@gmail.com>
5086
5087         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
5088         dummy UsageVector.
5089
5090         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
5091         argument to two arguments: an usage-vector and a bool.  Move call
5092         to FlowBranching.Merge () ...
5093         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
5094
5095         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
5096         handling of loop and switch reachability to ...
5097         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
5098
5099 2006-04-27  Raja R Harinath  <harinath@gmail.com>
5100
5101         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
5102         handling to FlowBranchingLoop.InLoop.
5103         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
5104
5105 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
5106
5107         A fix for #78115
5108         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
5109         anonymous method is allowed from AnonymousContainer here.
5110
5111         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
5112
5113 2006-04-24  Raja R Harinath  <rharinath@novell.com>
5114
5115         Fix #78156
5116         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
5117
5118 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
5119
5120         A fix for #49011.
5121         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
5122         (DoubleConstant.Reduce): Ditto.
5123
5124 2006-04-23  Raja R Harinath  <rharinath@novell.com>
5125
5126         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
5127         Remove 'lvalue_right_side' argument.  Move parts to ...
5128         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
5129         (LocalVariable.DoResolveLValue): ... these.
5130
5131 2006-04-21  Raja R Harinath  <rharinath@novell.com>
5132
5133         Fix cs1655.cs
5134         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
5135         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
5136         (LocalVariableReference.DoResolveBase): Use it to implement new
5137         CS1655 check.
5138         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
5139         (Argument.Resolve): Simplify.  Move CS1510 check ...
5140         * ecore.cs (Expression.ResolveLValue): ... here.
5141         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
5142         (PropertyExpr.DoResolveLValue): Likewise.
5143         (FieldExpr.Report_AssignToReadonly): Likewise.
5144         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
5145         LValueMemberAccess or LValueMemberOutAccess on instance depending
5146         on it.
5147         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
5148         DoResolve as appropriate.
5149
5150 2006-04-20  Raja R Harinath  <rharinath@novell.com>
5151
5152         Fix #75800
5153         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
5154         implicit conversions on 'out' and 'ref' arguments.
5155
5156         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
5157         improve clarity.  Remove dead code.
5158
5159         Fix #66031
5160         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
5161         (Catch.Resolve): Resolve VarBlock if it exists.
5162
5163 2006-04-19  Miguel de Icaza  <miguel@novell.com>
5164
5165         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
5166         twice, this was some residual code, the enumerator was emitted
5167         properly in the two branche of if later.
5168
5169 2006-04-19  Raja R Harinath  <rharinath@novell.com>
5170
5171         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
5172         cast is never an lvalue.
5173         (Cast.DoResolve, Cast.ResolveRest): Combine.
5174         (Argument.Emit): Simplify slightly.  Move 'Expr is
5175         IMemoryLocation' check ...
5176         (Argument.Resolve): ... here.
5177         (Argument.Error_LValueRequired): Remove.  Inline into only user.
5178
5179         Simplifications.  Fix cs0191-2.cs
5180         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
5181         CS1649 and CS1651 to ...
5182         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
5183         the actual selection of the error code and message to a lookup
5184         table.  Add a dummy return value to simplify callsites.
5185         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
5186         readonly fields of other instances of the same type.  Move CS0197
5187         warning from ...
5188         * expression.cs (Argument.Resolve): ... here.  Simplify code.
5189         Ensure that ec.InRefOutArgumentResolving is only set during LValue
5190         resolution of an out or ref argument.  The code simplification
5191         above uses this invariant.
5192
5193 2006-04-18  Raja R Harinath  <rharinath@novell.com>
5194
5195         Possibly fix #77752.  Fix cs1690-[4-7].cs.
5196         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
5197         CheckMarshallByRefAccess.  Drop parameter.
5198         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
5199         warning.
5200         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
5201         InstanceExpression.
5202         * report.cs (AllWarnings): Add CS1690.
5203         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
5204         for ref access too.
5205         (LocalVariableReference.DoResolveBase): Update.
5206
5207 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5208
5209         * class.cs (MethodOrOperator): Moved common parts from method class.
5210         detect obsolete attributes.
5211         (Method.Define): Simplified as it reuses code from base.
5212         (Constructor.ValidAttributeTargets): Fixed issue found during
5213         refactoring.
5214         (Destructor.ValidAttributeTargets): Fixed issue found during
5215         refactoring.
5216         (Operator): Finished refactoring set off by #78020. Operator class is now
5217         ordinary method class.
5218
5219         * anonymous.cs: Updated.
5220
5221         * decl.cs (DeclSpace): Add IsGeneric
5222
5223 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5224
5225         * class.cs (Constructor.Emit): Don't emit the attributes twice.
5226
5227 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5228
5229         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
5230         detect obsolete attributes.
5231         (Method.CreateEmitContext): Moved to MethodOrOperator.
5232
5233 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5234
5235         A fix for #78048.
5236         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
5237         customized exception to make crash detection easier.
5238         (MethodOrOperator): Started to work on new base class for methods and
5239         operators.
5240         (Method): Derives from MethodOrOperator.
5241         (Constructor.Emit): Emits its own attributes.
5242         (AbstractPropertyEventMethod.Emit): Ditto.
5243         (Operator): Derives from MethodOrOperator, will refactor fully in extra
5244         patch.
5245         (Operator.Emit): It's temporary more tricky than should be.
5246         
5247         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
5248
5249         * report.cs (InternalErrorException): Add ctor with inner exception.
5250
5251 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
5252
5253         A fix for #76744.
5254         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
5255         only not visible.
5256
5257 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
5258
5259         A fix for #77916.
5260         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
5261         array.
5262
5263 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5264
5265         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
5266         attribute is present and Guid not.
5267         (Interface.ApplyAttributeBuilder): Ditto.
5268
5269         * attribute.cs: Add error message.
5270
5271 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5272
5273         A fix for #78020.
5274
5275         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
5276         sources (it's composite) so hold them in extra array as they are used in
5277         Emit phase only. It worked in the previous versions by mistake.
5278         (Attribute.Emit): Emit attribute for more owners when exist.
5279
5280         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
5281         it has now different behaviour.
5282
5283 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
5284
5285         * constant.cs (Constant.IsDefaultInitializer): New method.
5286
5287         * class.cs: Updated.
5288
5289         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
5290         re-initialize default values. It saves KBs almost for every assembly.
5291         Thanks Zoltan for the idea.
5292         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
5293         (ArrayCreation.DoResolve): Resolve only once.
5294         (ArrayCreation.Emit): Emit static initializer only when it is faster.
5295         (ArrayCreation.GetAttributableValue): Cope with optimized values.
5296
5297 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
5298
5299         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
5300         From #77961.
5301
5302 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5303
5304         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
5305         in an embedded statement too.
5306
5307 2006-04-01  Raja R Harinath  <rharinath@novell.com>
5308
5309         Fix #77958
5310         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
5311
5312 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5313
5314         A fix for #77966.
5315
5316         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
5317         was not specified.
5318
5319         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
5320
5321 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
5322
5323         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
5324         phase.
5325
5326         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
5327         LocalTemporary change.
5328
5329         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
5330         TypeContainer.
5331         (ClassOrStruct.DefineFieldInitializers): Implemented static field
5332         initializers optimization.
5333         (ClassOrStruct.TypeAttr): Moved from modifiers.
5334         (Constructor.CheckBase): Don't crash when static ctor has parameters.
5335         (FieldBase.ResolveInitializer): Resolves initializer.
5336         (FieldBase.HasDefaultInitializer): New property.
5337
5338         * cs-parser.jay: Removed message.
5339
5340         * expression.cs (CompilerGeneratedThis): New specialization.
5341
5342         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
5343
5344 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
5345
5346         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
5347
5348 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5349
5350         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
5351         be now EnumConstants only.
5352
5353 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5354
5355         * attribute.cs, driver.cs: Reset more caches.
5356
5357 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5358
5359         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
5360
5361 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5362
5363         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
5364         for easier reuse. Updated all overrides.
5365         (IntegralConstant): New base class for all integral constants.
5366         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
5367         of the constant range, report custom error.
5368         (UIntConstant.Reduce): Fixed uint conversion.
5369
5370         * ecore.cs, literal.cs: Reduce updates.
5371
5372 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5373
5374         A fix for #75813.
5375
5376         * class.cs (Constructor.Define): Removed extra if for default ctors.
5377         A patch from Atsushi Enomoto.
5378
5379 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5380
5381         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
5382         GetAttributableValue.
5383
5384         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
5385         when required.
5386
5387         * convert.cs (ImplicitConversionRequired): Error message moved to
5388         DoubleLiteral.
5389
5390         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
5391         automatic implicit conversion of an output value.
5392         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
5393
5394         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
5395         conversion.
5396         (TypeOf.GetAttributableValue): Add extra handling for object type.
5397
5398         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
5399         special error message.
5400
5401 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
5402
5403         * class.cs (Constructor.Emit): Don't crash when struct ctor is
5404         InternalCall.
5405         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
5406         compatible with MS runtime.
5407
5408 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
5409
5410         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
5411         attribute arguments here.
5412
5413         * class.cs (Indexer.Define): The check was moved to attribute class.
5414
5415 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
5416
5417         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
5418         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
5419         easier.
5420
5421 2006-03-22  Raja R Harinath  <rharinath@novell.com>
5422
5423         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
5424         mcs to keep code differences small.
5425         * attribute.cs (Attribute.GetParameterDefaultValue): New.
5426         * typemanager.cs (parameter_default_value_attribute_type): New.
5427         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
5428         CS1908 check.
5429
5430 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5431
5432         * expression.cs (StringConcat.Append): Reverted back to no warning state.
5433
5434 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5435
5436         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
5437
5438         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
5439         the blocks too.
5440
5441 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
5442
5443         * doc-bootstrap.cs : fix build.
5444
5445 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5446
5447         * expression.cs (StringConcat.Append): Issue a warning when empty string
5448         is going to append.
5449
5450 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5451
5452         * assign.cs (CompoundAssign.ResolveSource): Removed.
5453
5454         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
5455         clean up.
5456
5457         * class.cs (TypeContainer.FindMethods): Removed.
5458         (TypeContainer.CheckMemberUsage): Made static.
5459
5460         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
5461
5462         * constant.cs (CheckRange): Removed unused type argument.
5463         (CheckUnsigned): Removed unused type argument.
5464
5465         * cs-parser.jay: Updated after MemberAccess clean up.
5466         Uses Length for empty string test.
5467
5468         * cs-tokenizer.cs: Uses Length for empty string test.
5469         (IsCastToken): Made static.
5470         (is_hex): Made static.
5471         (real_type_suffix): Made static.
5472
5473         * decl.cs (SetupCache): Made static.
5474         (OnGenerateDocComment): Removed unused ds argument.
5475
5476         * delegate.cs (VerifyDelegate): Removed unused argument.
5477
5478         * doc.cs: Uses Length for empty string test.
5479
5480         * driver.cs: Uses Length for empty string test.
5481
5482         * enum.cs (IsValidEnumType): Made static
5483
5484         * expression.cs (EnumLiftUp): Removed unused argument.
5485         (ResolveMethodGroup): Ditto.
5486         (BetterConversion): Ditto.
5487         (GetVarargsTypes): Ditto.
5488         (UpdateIndices): Ditto.
5489         (ValidateInitializers): Ditto.
5490         (MemberAccess.ctor): Ditto.
5491         (GetIndexersForType): Ditto.
5492
5493         * flowanalysis.cs: (MergeFinally): Removed unused argument.
5494
5495         * iterators.cs: Updated after MemberAccess clean up.
5496
5497         * location.cs: Uses Length for empty string test.
5498
5499         * namespace.cs: Uses Length for empty string test.
5500
5501          * report.cs (CheckWarningCode): Made static.
5502
5503         * statement.cs (LabeledStatement): Removed unused argument.
5504
5505         * typemanager.cs (FilterNone): Removed.
5506
5507 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5508
5509         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
5510         obsolete.
5511
5512         * class.cs: Updated.
5513
5514 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5515
5516         * cs-parser.jay.cs: __arglist is not allowed for delegates.
5517
5518 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5519
5520         A fix for #77822.
5521
5522         * expression.cs (VerifyArgumentsCompat): Reverted to double error
5523         reporting, it's more tricky than I thought.
5524
5525 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5526
5527         A fix for #77816.
5528
5529         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
5530         host container.
5531         (AnonymousMethod.ImplicitStandardConversionExists): New method.
5532         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
5533         Add more error reporting; Fixed issue with params.
5534
5535         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
5536
5537         * cs-parser.jay: AnonymousMethod requires host container.
5538
5539         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
5540
5541 2006-03-18  Raja R Harinath  <harinath@gmail.com>
5542
5543         * class.cs: Change 'TypeContainer ds' constructor argument to
5544         'DeclSpace parent'.  Some classes were missed below due to
5545         different naming convention.
5546
5547         * class.cs (MemberCore.Parent): Delete.  This makes the
5548         ParentContainer changes below enforceable by the compiler.
5549
5550         Treat pointers to enclosing declaration space as 'DeclSpace', not
5551         'TypeContainer'.
5552         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
5553         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
5554
5555         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
5556         of TypeContainer.
5557         (Block.AddThisVariable): Likewise.
5558         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
5559         (AbstractPropertyEventMethod.Emit): Likewise.
5560         (AbstractPropertyEventMethod.EmitMethod): Likewise.
5561         (GetMethod.Define, SetMethod.Define): Likewise.
5562         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
5563         (DelegateMethod.EmitMethod): Likewise.
5564
5565         Fix regression test-partial-13.cs.
5566         Rationalize use of PartialContainer.  Ensure that the partial
5567         class semantics can be tied to type-correctness, i.e., any
5568         violation will cause a compile error.
5569         * class.cs, const.cs: Access all fields that belong to class
5570         TypeContainer via ParentContainer.  Arguments of EmitContexts and
5571         Resolve()-like functions still use 'Parent'.
5572
5573         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
5574         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
5575         (PropertyMethod.CheckModifiers): Remove unused argument.
5576         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
5577         DeclSpace.
5578
5579 2006-03-17  Raja R Harinath  <harinath@gmail.com>
5580
5581         Make semantics of PartialContainer simpler.
5582         * decl.cs (DeclSpace.IsPartial): Remove.
5583         * class.cs (TypeContainer.IsPartial): Likewise.
5584         (TypeContainer..ctor): Set PartialContainer to point to self.
5585         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
5586         (TypeContainer.FindNestedType): Likewise.
5587         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
5588
5589 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
5590
5591         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
5592
5593 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5594
5595         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
5596         classes.
5597
5598 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5599
5600         * class.cs (Operator.Define): An error for base conversion was not
5601         reported correctly.
5602
5603 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
5604
5605         * iterator.cs : yield break is allowed in try statement which has
5606           catch clauses. Fixed bug #77767.
5607
5608 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
5609
5610         A fix for #77593, #77574.
5611
5612         * class.cs (MethodCore.CheckBase): Another if for operator.
5613
5614 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
5615
5616         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
5617         were not resolved
5618
5619         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
5620         (DelegateCreation.ImplicitStandardConversionExists): New method for just
5621         conversion test.
5622         
5623         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
5624         not needed.
5625
5626         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
5627         Updated after another emitcontext usage was clean up. It should help us to
5628         synchronize with gmcs easier.
5629
5630 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
5631
5632         A fix for #77353.
5633
5634         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
5635         (Event.Define): ditto
5636         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
5637
5638         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
5639         Removed redundant code and set NewSlot for Invoke method too.
5640
5641         * parameter.cs (Parameters.ctor): Add custom, type ctor.
5642         (Parameters.MergeGenerated): New method. Use this method when you merge
5643         compiler generated argument with user arguments.
5644
5645 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
5646
5647         * attribute.cs (ResolveAsTypeTerminal): Removed.
5648
5649         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
5650         specialization for predefined types; 30% speed up.
5651         Finally placed obsolete check to right place.
5652         (Expression.ResolveType): Removed.
5653
5654         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
5655         Updated after ResolveType was removed.
5656
5657         * expression.cs (Cast.ctor): Check void cast.
5658         (Binary.ResolveAsTypeTerminal): Is never type.
5659         (Conditional.ResolveAsTypeTerminal): Is never type.
5660
5661         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
5662
5663 2006-03-01  Raja R Harinath  <rharinath@novell.com>
5664
5665         Fix #77679.
5666         * expression.cs (ParameterReference.DoResolveBase): Change return
5667         type to bool.
5668         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
5669         Update.
5670
5671         Fix #77628.
5672         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
5673
5674         Fix #77642.
5675         * typemanager.cs (GetFullNameSignature): Don't nullref on
5676         protected accessors.
5677
5678 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
5679
5680         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
5681         these two separated members to simplify the code.
5682         (Attribute.Resolve): Refactored to use new fields and methods.
5683         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
5684         implemented obsolete attribute checking.
5685         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
5686         implemented obsolete checking again. It look line never ending quest ;-)
5687         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
5688
5689         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
5690
5691         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
5692
5693         *class.cs (Property.Define): Add RegisterProperty call.
5694
5695         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
5696         argument groups (only 2).
5697
5698         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
5699         encoding expression to arguments.
5700         (Expression.ExprClassToResolveFlags): Just turned to property.
5701
5702         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
5703         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
5704         optimized as well as implemented support for zero-length attributes.
5705
5706         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
5707         Add caching of PropertyInfo's.
5708
5709 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5710
5711         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
5712         error multiple times.
5713
5714 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5715
5716         New partial class implementation.
5717         A fix for #77027, #77029, #77403
5718
5719         * attribute.cs (Attributable): Made attributes protected.
5720
5721         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
5722         the replacements of ClassPart and PartialContainer.
5723         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
5724         (TypeContainer.AddInterface): Ditto.
5725         (TypeContainer.AddPartial): The main method for partial classes. It checks
5726         for errors and merges ModFlags and attributes. At the end class is added to
5727         partial_parts list.
5728         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
5729         required here.
5730         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
5731         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
5732         from the rest of partial classes.
5733         (TypeContainer.GetClassBases): Simplified.
5734         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
5735         DefineType.
5736         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
5737         (TypeContainer.HasExplicitLayout): Uses Flags now.
5738         (PartialContainer): Removed.
5739         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
5740         (StaticClass): Was merged with Class.
5741         (Class.GetClassBases): class and static class bases are verified here.
5742         (Class.TypeAttr): Added static attributes when class is static.
5743         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
5744         (MemberBase): In some cases we need to call parent container for partial
5745         class. It should be eliminated but it's not easy now.
5746
5747         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
5748
5749         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
5750         partial classed to accumulate class comments.
5751         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
5752
5753         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
5754
5755         * driver.cs (MainDriver): Tree.GetDecl was removed.
5756
5757         * modifiers.cs (Modifiers): Add partial modifier.
5758
5759         * tree.cs (Tree.decl): Removed.
5760         (RootTypes): Started to use this class more often for root types
5761         specializations.
5762
5763 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5764
5765         A fix for #77615
5766
5767         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
5768         external interface does not have an attribute.
5769
5770 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5771
5772         Another prerequisites for new partial classs implementation.
5773         
5774         * attribute.cs (Attribute.Equal): Implemented.
5775         (Attribute.Emit): Changed as attributes can be applied more than twice.
5776         (Attributes.Emit): Check for duplicate attributes here.
5777
5778         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
5779         as a parameter, clean-up.
5780
5781 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5782
5783         A fix for #77485
5784
5785         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
5786         contains obsolete attribute check which can in some cases look for base
5787         type of current class which is not initialized yet.
5788         (TypeContainer.BaseType): Replacement of ptype.
5789
5790         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
5791
5792 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5793
5794         First of prerequisites for new partial classs implemention.
5795         
5796         * attribute.cs (Attributable): Extended by ResolveContext;
5797         Attributes finally have correct context for resolving in all cases.
5798         (AttachTo): Attribute owner is assigned here.
5799
5800         * codegen.cs (IResolveContext): Introduce new interface to hold
5801         all information needed in resolving phase.
5802         (EmitContext): Implements IResolveContext; more clean-up needed here.
5803         
5804         * decl.cs (MemberCore): Implemented IResolveContext.
5805
5806         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
5807         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
5808         parameter.cs, statement.cs, tree.cs, typemanager.cs:
5809         Refactored to use new IResolveContext instead of EmitContext; cleanup
5810
5811 2006-02-06  Miguel de Icaza  <miguel@novell.com>
5812
5813         * codegen.cs (EmitScopeInitFromBlock): check here the
5814         capture_context, there is no need to make two calls to the
5815         EmitContext. 
5816
5817         * anonymous.cs: Add some debugging messages that might help me
5818         track other instances of this problem in the future (the
5819         regression of test 467).
5820
5821         * cs-parser.jay: track the variable block, as we need to initalize
5822         any captured variables declared in this block for the "catch"
5823         portion of the "Try" statement.
5824
5825         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
5826         scope initialization for captured variables. 
5827
5828         Also, move the emit for the variables after the block location has
5829         been marked.
5830
5831 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
5832
5833         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
5834
5835 2006-02-02  Miguel de Icaza  <miguel@novell.com>
5836
5837         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
5838         commit yesterday, the initialization for the roots is necessary.
5839         What is not necessary is the scope activation.
5840
5841 2006-02-02  Raja R Harinath  <rharinath@novell.com>
5842
5843         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
5844         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
5845         CS0206 checks.
5846         (Argument.Resolve): Remove CS0206 checks.
5847
5848 2006-02-01  Miguel de Icaza  <miguel@novell.com>
5849
5850         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
5851         scopes for all the roots, the scopes will now be emitted when the
5852         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
5853
5854         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
5855         code.  This reduces a lot of existing cruft.
5856         
5857         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
5858         that the ScopeInfo is generated as we enter the scope, not at the
5859         time of use, which is what we used to do before.
5860
5861         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
5862         every time a Block is about to be emitted if we have a
5863         CaptureContext. 
5864
5865 2006-02-01  Raja R Harinath  <rharinath@novell.com>
5866
5867         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
5868         (Reset): Update.
5869         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
5870
5871         * typemanager.cs (cons_param_array_attribute): Make private.
5872         (Reset): Set it to null.
5873         (InitCoreHelpers): Don't initialize it.
5874         (ConsParamArrayAttribute): New.  Initialize it as needed.
5875         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
5876
5877 2006-01-31  Miguel de Icaza  <miguel@novell.com>
5878
5879         * expression.cs: There might be errors reported during the
5880         selection of applicable methods.  If there are errors, do not
5881         continue execution as it will lead the compiler to crash.
5882
5883 2006-01-30  Miguel de Icaza  <miguel@novell.com>
5884
5885         * expression.cs: Member access is not allowed on anonymous
5886         methods.  Fixes #77402.
5887
5888 2006-01-30  Raja R Harinath  <rharinath@novell.com>
5889
5890         Fix #77401
5891         * cs-parser.jay (VariableDeclaration): Don't set
5892         current_array_type to null.
5893         (field_declaration, event_declaration, declaration_statement):
5894         Set it to null here.
5895
5896 2006-01-28  Raja R Harinath  <harinath@gmail.com>
5897
5898         * typemanager.cs (GenericParameterPosition): New.
5899         * doc.cs: Use it.
5900
5901 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
5902
5903         * doc.cs : To process "include" elements, first we should create
5904           another list than XmlNodeList, because it could result in node
5905           removal, which could result in that the XmlNodeList gives up
5906           yielding next node.
5907
5908           (Also made code identical to gmcs again.)
5909
5910 2006-01-25  Miguel de Icaza  <miguel@novell.com>
5911
5912         * ecore.cs: Introduce an error report that we were not catching
5913         before, if not silent, we must report the error.  Gonzalo ran into
5914         it.
5915
5916 2006-01-23  Miguel de Icaza  <miguel@novell.com>
5917
5918         A fix for bug: #76957
5919         
5920         * iterators.cs (MoveNextMethod.CreateMethodHost): call
5921         ComputeMethodHost before creating the method, this is a new
5922         requirement. 
5923
5924         * anonymous.cs (AnonymousContainer): Now we track all the scopes
5925         that this method references (RegisterScope).  The actual scope
5926         where the method is hosted is computed with the ComputeMethodHost
5927         before we create the method.
5928
5929         Moved the Deepest routine here.
5930
5931         (AnonymousContainer.ComputeMethodHost): New routine used to
5932         compute the proper ScopeInfo that will host the anonymous method.
5933
5934         (ScopeInfo): Deal with multiple roots.  The problem was that we
5935         did not have a unique root where all ScopeInfos could be hanged
5936         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
5937         of roots.  
5938
5939         Remove AdjustMethodScope which is now computed at the end.  Remove
5940         LinkScope which did a partial link, instead link all ScopeInfos
5941         before code generation from the new "LinkScopes" routine. 
5942
5943         Simplify all the Add* routines as they no longer need to maintain
5944         the tree, they just need to record that they are using variables
5945         from a ScopeInfo.
5946
5947         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
5948         routines to produce the forest of ScopeInfo trees.
5949
5950         * class.cs (TypeContainer.AppendMethod): This is just like
5951         AddMethod, but ensures that an interface implementation method
5952         (IEnumerable.XXX) is not inserted at the beginning of the queue of
5953         methods, but at the end.
5954
5955         We use this functionality to ensure that the generated MoveNext
5956         method in the iterator class is resolved/emitted before the
5957         enumerator methods created.   
5958
5959         This is required because the MoveNext method computes the right
5960         ScopeInfo for the method.  And the other methods will eventually
5961         need to resolve and fetch information computed from the anonymous
5962         method. 
5963
5964 2006-01-21  Raja R Harinath  <harinath@gmail.com>
5965             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
5966
5967         Fix rest of #76995.
5968         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
5969         the 'aliases' hash.
5970         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
5971         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
5972
5973 2006-01-18  Raja R Harinath  <rharinath@novell.com>
5974
5975         Fix #76656, cs0231-2.cs.
5976         * cs-parser.jay (formal_parameter_list): Make error case catch
5977         more issues.
5978         (parenthesized_expression_0): Add CS1026 check.
5979         (invocation_expression): Remove unused { $$ = lexer.Location }.
5980
5981 2006-01-17  Raja R Harinath  <rharinath@novell.com>
5982
5983         Fix #76824.
5984         * cs-parser.jay (statement_expression): Don't list out the
5985         individual statement-expressions.  Convert syntax error into
5986         CS0201 check.
5987
5988 2006-01-16  Raja R Harinath  <rharinath@novell.com>
5989
5990         Fix #76874.
5991         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
5992         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
5993         CheckIntermediateModification.
5994         (FieldExpr.DoResolve): Add new two-argument version that
5995         allows us to resolve the InstanceExpression as an lvalue.
5996         The one-argument variant is now just a wrapper.
5997         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
5998         Resolve the lhs as an lvalue if the it has a value type.
5999         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
6000         from Assign.DoResolve.
6001         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
6002         resolved as an lvalue.
6003         (PropertyExpr.DoResolve): Update.
6004         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
6005         has a value type.  Move CS1612 check here from
6006         CheckIntermediateModification.
6007         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
6008         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
6009         'right_side' of a ResolveLValue on an 'out' argument.
6010         (EmptyExpression.LValueMemberAccess): New.  Used as the
6011         'right_side' of a propagated ResolveLValue on a value type.
6012         (LocalVariableReference.DoResolveBase): Recognize
6013         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
6014         Add CS1654 check.
6015         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
6016         EmptyExpression.Null.
6017
6018 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
6019
6020         * typemanager.cs : added IsGenericParameter(). In mcs it always
6021           return false.
6022         * doc.cs : for generic parameters, use GenericParameterPosition,
6023           not FullName.
6024
6025 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
6026
6027         * expression.cs: Fix Console.WriteLine ((this = x).foo);
6028
6029 2006-01-12  Miguel de Icaza  <miguel@novell.com>
6030
6031         This fixes the problem where we used ldfld instead of ldflda to
6032         load the "THIS" pointer on captured parameters, when THIS is a
6033         value type.  See bug #77205.
6034         
6035         * iterators.cs (CapturedThisReference.Emit): Pass false to
6036         EmitThis (we do not need the address).
6037
6038         * codegen.cs (EmitThis): it needs to know whether we need the
6039         address of `this' or not.  This is used by value types.  
6040
6041         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
6042         every other call passes false.
6043
6044 2006-01-12  Raja R Harinath  <rharinath@novell.com>
6045
6046         Fix #77221.
6047         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
6048         GetOverride.
6049         * expression.cs (Invocation.OverloadResolve): Update.
6050         (Invocation.DoResolve): Avoid double resolution of invocation.
6051
6052 2006-01-11  Raja R Harinath  <rharinath@novell.com>
6053
6054         Fix #77180.
6055         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
6056         unary negation of floating point types as 0-expr; negation cannot
6057         overflow in floating point types.
6058
6059         Fix #77204.
6060         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
6061         on operands of 'void' type.
6062
6063         Fix #77200.
6064         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
6065         and ExclusiveOr for boolean constants too.
6066
6067 2006-01-09  Raja R Harinath  <rharinath@novell.com>
6068
6069         Fix #75636.
6070         * expression.cs (Invocation.OverloadResolve): Replace reflected
6071         override methods with their base virtual methods, rather than
6072         skipping over them.
6073         * typemanager.cs (TypeManager.GetOverride): New.
6074
6075 2006-01-05  Jb Evain  <jbevain@gmail.com>
6076
6077         * class.cs (Property.Define, Indexer.Define): do not tag the
6078         properties as SpecialName | RTSpecialName.
6079
6080 2006-01-04  Miguel de Icaza  <miguel@novell.com>
6081
6082         * class.cs (MethodCore.IsDuplicateImplementation): This method was
6083         doing a low-level comparission of parameter types.  It was lacking
6084         a check for __argslist. 
6085
6086 2005-12-30  Miguel de Icaza  <miguel@novell.com>
6087
6088         * expression.cs (ParameterReference.DoResolveBase): Allow
6089         reference parameters if they are local to this block. 
6090
6091         This allows the ref and out parameters of a delegate to be used in
6092         an anonymous method, for example:
6093
6094         delegate void set (out int x);
6095
6096         set s = delegate (out int x){
6097                 x = 0;
6098         };
6099
6100         This is used by functionality introduced late in the C# language.
6101         
6102         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
6103         method that take ref and out parameters. 
6104
6105         Fixes #77119 which was a late change in the spec.
6106
6107 2005-12-23  Miguel de Icaza  <miguel@novell.com>
6108
6109         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
6110         parent if its the same scope.  Fixes #77060.
6111
6112 2005-12-21  Miguel de Icaza  <miguel@novell.com>
6113
6114         * driver.cs: Report the case of no source files and no -out:
6115         argument provided.
6116
6117 2005-12-20  Raja R Harinath  <rharinath@novell.com>
6118
6119         Fix #77035.
6120         * expression.cs (ComposedCast.GetSignatureForError): Define.
6121
6122 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
6123
6124         Fix #76995
6125
6126         * namespace.cs (NamespaceEntry): Add extern_aliases as a
6127         ListDictionary, to contain the ExternAliasEntry entries (in
6128         addition to the NamespaceEntry.aliases hashtable). This field is
6129         shared between the original entry and its doppelganger (bodyless 
6130         copy of it).
6131         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
6132         extern_aliases field.
6133         (NamespaceEntry.Lookup): Move the IsImplicit check after the
6134         lookup in extern_aliases.
6135
6136 2005-12-16  Raja R Harinath  <rharinath@novell.com>
6137
6138         Fix #77006.
6139         * class.cs (TypeContainer.Mark_HasEquals): New.
6140         (TypeContainer.Mark_HasGetHashCode): New.
6141         (ClassPart): Override them.
6142         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
6143
6144         Fix #77008.
6145         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
6146         'parent' argument to the base constructor.
6147
6148         Remove all mention of TypeContainer from decl.cs.
6149         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
6150         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
6151         (DeclSpace.DeclSpace): Likewise.
6152         (DeclSpace.DefineMembers): Remove unused argument.
6153         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
6154         debugging check -- we don't care if the debug code throws an
6155         InvalidCastException instead of an InternalErrorException.
6156         * class.cs (TypeContainer.DefineMembers): Update to changes.
6157         (TypeContainer.DoDefineMembers): Likewise.
6158         (TypeContainer.GetMethods): Likewise.
6159         (PropertyMember.Define): Likewise.
6160         (MemberBase.Parent): New property that forwards to
6161         MemberCore.Parent, but ensures that we get a TypeContainer.
6162         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
6163         (RootContext.PopulateTypes): Likewise.  Remove special case code
6164         for !RootContext.StdLib: DefineMembers is idempotent.
6165
6166 2005-12-14  Miguel de Icaza  <miguel@novell.com>
6167
6168         * convert.cs (ExplicitConversionCore): Check the return value from
6169         ExplicitConversionCore which can return null on failure.  Fixes #76914
6170
6171 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
6172
6173         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
6174
6175 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
6176
6177         * doc.cs : The search for referenced namespace was insufficient to
6178           get global one as it used to do. Fixed bug #76965.
6179
6180 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
6181
6182         * doc.cs : check name in cref in the last phase that whether it is
6183           namespace or not.
6184
6185 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6186
6187         * cs-tokenizer.cs : reverted the latest change: it somehow broke
6188           Mono.C5.
6189
6190 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6191
6192         * doc.cs : so it turned out that we cannot skip override check for 
6193           interface members. Fixed bug #76954.
6194
6195 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6196
6197         * cs-tokenizer.cs : fixed bug #75984:
6198           - #warning and #error should not be handled when the source line
6199             is disabled.
6200           - #line is not checked strictly when the source line is disabled.
6201           - #define and #undef is on the other hand checked strictly at any
6202             state.
6203
6204 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
6205
6206         * cs-tokenizer.cs : missing Location (actually, filename) in one of
6207           CS1027 report.
6208
6209 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6210
6211         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
6212
6213         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
6214         event initializers.
6215         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
6216         (FieldBase.Initializer): Initializer is now optional.
6217         (EventField.Define): Only event field can have initializer.
6218
6219         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
6220
6221         * const.cs (Const): Reuse initializer.
6222
6223         * cs-parser.jay: Updated after FieldBase changes.
6224         Added current_array_type to simplify array initializers.
6225
6226         * ecore.cs (NullCast.IsDefaultValue): Implemented.
6227
6228         * expression.cs, iterators.cs: Updated.
6229
6230         * namespace.cs (NamespaceEntry): Made UsingFound private.
6231
6232 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6233
6234         * parameterCollection.cs: Obsolete, removed.
6235         * parser.cs: Obsolete, removed.
6236
6237 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6238
6239         Fix #76849.
6240         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
6241
6242         * enum.cs (Enum.Define): Set obsolete context here.
6243
6244 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6245
6246         * doc.cs :
6247           - FindDocumentedMember() now expects 1) paramList as null
6248             when "we don't have to check the number of parameters" and
6249             2) Type.EmptyTypes when "there is no arguments".
6250           - Introduced FoundMember struct to hold the exact type which was
6251             used to find the documented member (the above change broke
6252             test-xml-044; it might be better just to use DeclaringType than
6253             what MS does, like this change does, but it depends on usage.)
6254
6255 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6256
6257         * doc.cs : documented member might be from DeclaringType for nested
6258           types. Fixed bug #76782.
6259
6260 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
6261
6262         * anonymous.cs: Have the param code handle leaving copies on the
6263         stack etc. Allows anonymous params to take part in the assignment
6264         code (++, +=, etc). Fixes bug #76550
6265
6266         * expression.cs: Handle the prepare_for_load/leave_copy by passing
6267         it down to the anon code.
6268
6269         * iterators.cs: Use dummy var here
6270
6271         * codegen.cs: Handle new vars
6272
6273 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6274
6275         Fix #76849.
6276         * class.cs (MethodData.Define): Set proper Obsolete context.
6277
6278         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
6279         obsolete context.
6280         (FieldExpr.DoResolve): Ditto.
6281
6282 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6283
6284         Fix #76849.
6285         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
6286         parent is not obsolete.
6287
6288 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
6289
6290         * doc.cs : (FindDocumentedMember) find parameterless members first
6291           and get CS0419 in the early stage. Fixed first case of bug #76727.
6292
6293 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
6294
6295         Fix #76859.
6296         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
6297         no error was reported.
6298
6299         *expression.cs (Binary.DoResolve): left can be null.
6300
6301 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
6302
6303         Fix #76783.
6304         * class.cs (MethodData.Emit): Parameters should be labeled first.
6305
6306 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
6307
6308         Fix #76761.
6309         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
6310
6311 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
6312
6313         * attribute.cs (AreParametersCompliant): Moved to Parameter.
6314
6315         * class.cs (MethodCore): Parameter clean up.
6316         (IMethodData): Added ParameterInfo.
6317         (MethodData): Parameter clean up.
6318         (Indexer.Define): Parameter clean up.
6319
6320         * anonymous.cs,
6321         * codegen.cs,
6322         * cs-parser.jay,
6323         * decl.cs,
6324         * doc.cs,
6325         * ecore.cs,
6326         * flowanalysis.cs,
6327         * iterators.cs,
6328         * pending.cs,
6329         * statement.cs,
6330         * typemanager.cs: Parameter clean up.
6331
6332         * delegate.cs (Define): Get rid of duplicated code.
6333
6334         * expression.cs (ParameterReference): Removed useless parameters
6335         and simplified.
6336         (Invocation): Ditto.
6337
6338         * parameter.cs (ParamsParameter): New class, params specialization.
6339         (ArglistParameter): Attemp to separate arglist.
6340         (Parameter): Refactored to be reusable and faster.
6341         (Parameter.Modifier): Made understandable.
6342         (Parameters): Changed to be used as a class for `this' assembly
6343         parameters. Refactored to use new specialized classes.
6344
6345         * support.cs (ParameterData): Added Types property.
6346         (InternalParameters): Deleted.
6347
6348 2005-08-20  Martin Baulig  <martin@ximian.com>
6349
6350         Merging this patch from GMCS to fix #75867.
6351
6352         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6353         scope if we don't already have it.
6354
6355 2005-11-17  Martin Baulig  <martin@ximian.com>
6356
6357         * anonymous.cs
6358         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
6359         inherit the scope from our parent.  Fixes #76653.
6360
6361 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6362
6363         * doc.cs : the previous patch does not actually fix the bug.
6364           PropertyInfo override check is now implemented and really fixed it.
6365         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
6366
6367 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6368
6369         * doc.cs : apply "override filter" also to properties.
6370           Fixed bug #76730.
6371
6372 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6373
6374         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
6375           no need to check overrides. For classes, omit those results from 
6376           interfaces since they must exist in the class. Fixed bug #76726.
6377
6378 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6379
6380         * typemanager.cs : (GetFullNameSignature) differentiate indexers
6381           with different parameters. Fixed the second problem in #76685.
6382
6383 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6384
6385         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
6386           get expected 'protected' access in CheckValidFamilyAccess()).
6387           Fixed bug #76692.
6388
6389 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6390
6391         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
6392           Fixed bug #76705.  CS1569 was incorrectly commented out.
6393
6394 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6395
6396         * doc.cs : use Invocation.IsOverride() to do real override check.
6397         * expression.cs : made Invocation.IsOverride() internal.
6398
6399 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6400
6401         * doc.cs : use TypeManager.FindMembers() instead of (possible)
6402           TypeBuilder.FindMembers() and filter overriden base members out.
6403           Fixed bug #76990.
6404
6405 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6406
6407         * doc.cs : ref/out parameters are represented as '@' (instead of
6408           '&' in type FullName). Fixed bug #76630 (additionally crefs).
6409
6410 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6411
6412         * doc.cs : when there was no '.' in cref to methods in doc comment,
6413           then parameters were missing in the output. Fixed bug #76691.
6414
6415 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6416
6417         * driver.cs : don't output docs when there is an error.
6418           Fixed bug #76693.
6419
6420 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6421
6422         * doc.cs :
6423           Now it should detect indexers. Fixed primary concern in bug #76685.
6424           Fixed CS0419 message to not show the identical member signature in
6425           the message.
6426
6427 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6428
6429         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
6430           instead of Type.FindMembers() since it does not handle events.
6431           Fixed bug #71604.
6432
6433 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
6434
6435         * codegen.cs: Fixed typo (speficied -> specified).
6436
6437 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6438
6439         Fix #76369.
6440         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
6441
6442 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6443
6444         * attribute.cs: Changed error message.
6445
6446         * cs-tokenizer.cs: One more check.
6447
6448 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6449
6450         * statement.cs (Block.Resolve): Ignore empty statement.
6451
6452 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6453
6454         * report.cs: Made error/warning methods more strict to avoid
6455         their misuse.
6456
6457         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
6458         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
6459         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
6460         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
6461
6462 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
6463
6464         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
6465         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
6466
6467         * class.cs (TypeContainer.IsComImport): New property.
6468         (Constructor.Define): Create proper ctor for ComImport types.
6469
6470         * expression.cs (New.CheckComImport): Fixed.
6471
6472 2005-11-07  Miguel de Icaza  <miguel@novell.com>
6473
6474         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
6475         that a parameter has been captured does not mean that we do not
6476         have to do the rest of the processing.  This fixes the second part
6477         of #76592.  If there was another anonymous method capturing
6478         values in the past, the Scope would never be set for the second
6479         method that captured the same parameter.
6480
6481         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
6482         properly manipulate the stack.   Second part of fix for #76592.
6483
6484         * expression.cs (New): Add support for invoking "new" on
6485         interfaces that have been flagged with the ComImport attribute and
6486         the CoClass.  Fixes #76637 
6487
6488         * statement.cs (Try.DoEmit): When a variable is captured, do not
6489         try to emit the vi.LocalBuilder variable as it has been captured.
6490         Create a temporary variable and store the results on the
6491         FieldBuilder.  Fixes #76642
6492
6493 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
6494
6495         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
6496
6497         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
6498
6499         * expression.cs (Binary.DoResolve): Added && optimalization.
6500     
6501         * typemanager.cs (AddUserType): Removed useless argument.
6502
6503 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
6504
6505         * statement.cs (Block.variables): Uses ListDictionary.
6506
6507 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6508
6509         Fix #75969.
6510         * class.cs (PartialContainer.EmitType): Customized to emit
6511         security attributes.
6512         (ClassPart.ApplyAttributeBuilder): Transform security attribute
6513         for partial classes.
6514
6515 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6516
6517         Fix #76599.
6518         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
6519         access has to be fixed.
6520         
6521         * typemanager.cs (IsUnmanagedType): Wrong common field type.
6522
6523 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
6524
6525         Fix #76590.
6526         * ecore.cs (NullCast.Reduce): Implemented.
6527
6528         * expression.cs (ArrayCreation.CheckIndices): Correcly check
6529         constant type.
6530         
6531         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
6532         properly.
6533         (Foreach.Resolve): Catch null properly.
6534
6535 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6536  
6537         * cs-tokenizer.cs: Warning text fix.
6538
6539         * driver.cs: AllWarningNumbers exposed on public interface.
6540
6541         * report.cs (): Reviewed warning numbers.
6542         (IsValidWarning): Use binary search.
6543
6544 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6545  
6546         * driver.cs: Implemeted resource visibility.
6547         (Resources): New class for code sharing between /res: and
6548         /linkres:
6549  
6550 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
6551
6552         Fix #76568.
6553         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
6554         folding.
6555         
6556         * convert (Convert.ImplicitReferenceConversion): NullCast holds
6557         contants only.
6558         
6559         * ecore.cs (NullCast): Child is contant only.
6560         
6561         * literal.cs (NullLiteral.Reduce): null can be converted to any
6562         reference type.
6563
6564 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
6565
6566         * driver.cs: Use Encoding.Default as default code page instead
6567           of ISO-28591.
6568
6569 2005-10-27  Raja R Harinath  <rharinath@novell.com>
6570
6571         Fix #76085.
6572         * expression.cs (Invocation.Error_InvalidArguments): Handle
6573         __arglist parameters.
6574         (Invocation.VerifyArgumentsCompat): Likewise.
6575         * support.cs (ReflectionParameters.GetSignatureForError): Print
6576         __arglist parameters.
6577         (InternalParamters.GetSignatureForError): Likewise.
6578         * parameter.cs (Parameters.GetSignatureForError): Likewise.
6579
6580 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
6581
6582         * attribute.cs (GetPropertyValue): Made public.
6583
6584         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
6585         Resolve.
6586         Add new property WrapNonExceptionThrows to handle 2.0 assembly
6587         attribute.
6588         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
6589         is not defined.
6590         
6591         * driver.cs: Reflect method name change.
6592         
6593         * statement.cs (Try.Resolve): Warn when try has both general
6594         exception handlers.
6595         
6596         * typemanager.cs: runtime_compatibility_attr_type new predefined
6597         type.
6598
6599 2005-10-26  Raja R Harinath  <harinath@gmail.com>
6600
6601         Fix #76419.
6602         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
6603         treat it as an empty parameter list.
6604
6605 2005-10-26  Raja R Harinath  <rharinath@novell.com>
6606
6607         Fix #76271.     
6608         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
6609         ResolveAsTypeStep silent.
6610         * statement.cs (Block.AddConstant): Mark block as used.
6611         (Block.ResolveMeta): Avoid piling on error messages
6612         if a constant initializer resolution fails.
6613
6614 2005-10-25  Raja R Harinath  <rharinath@novell.com>
6615
6616         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
6617         Remove.
6618         (NamespaceEntry.VerifyAllUsing): New.
6619         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
6620         behaviour.  Delegates actual resolution of alias to ...
6621         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
6622         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
6623         Update.
6624         * driver.cs (Driver.MainDriver): Update.
6625         
6626         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
6627         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
6628         property.
6629         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
6630         Remove.
6631         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
6632         RootNamespace.DefineNamespacesForAll.
6633
6634 2005-10-24  Raja R Harinath  <harinath@gmail.com>
6635
6636         * typemanager.cs (assemblies, external_aliases, modules)
6637         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
6638         (ComputeNamespaces, GetRootNamespace): Remove extra staging
6639         overhead.  Move resposibility ...
6640         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
6641         * driver.cs, attribute.cs, codegen.cs: Update to changes.
6642
6643 2005-10-23  Raja R Harinath  <harinath@gmail.com>
6644
6645         * namespace.cs (RootNamespace.all_namespaces): Renamed from
6646         cached_namespaces.  Improve usage.
6647         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
6648         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
6649         Move from GlobalRootNamespace and simplify.
6650         (RootNamespace.Global): Make instance variable.
6651         (RootNamespace.RootNamespace): Add "alias name" parameter.
6652         (GlobalRootNamespace): Simplify drastically.
6653         (Namespace.Lookup): Don't use GetNamespace.
6654         * typemanager.cs (GetRootNamespace): Rename from
6655         ComputeNamespaceForAlias.
6656         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
6657
6658 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6659
6660         * anonymous.cs (AnonymousContainer): Don't crash when container
6661         doesn't exist.
6662
6663 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6664
6665         * expression.cs (Binary.DoResolve): Warn when comparing same
6666         values.
6667
6668 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6669
6670         Fix #76486.
6671         * expression.cs (Binary.DoResolve): It looks like there are no
6672         convetsion rules in enum context.
6673
6674 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
6675
6676         Add support for extern alias qualifiers.
6677         * typemanager.cs: Move some LookupTypeReflection code
6678         to namespace.cs, to have cleaner code. Added some methods
6679         to help us keep track of the extern aliased references.
6680         * driver.cs: Add suport for extern alias assemblies on command
6681         line and check for their warnings/errors. Also keep track of the
6682         extern aliased assemblies.
6683         * namespace.cs: Move the global functionality of Namespace
6684         to GlobalRootNamespace/RootNamespace. Now the global namespace
6685         is GlobalRootNamespace.Globa. Also the code moved from 
6686         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
6687         Finally added LocalAliasEntry (AliasEntry before) and
6688         ExternAliasEntry, to handle alias statements.
6689         * cs-parser.jay: Add support in the grammar for extern alias
6690         statement.
6691         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
6692         Update callings to Namespace (now in GlobalRootNamespace).
6693
6694 2005-10-18  Raja R Harinath  <rharinath@novell.com>
6695
6696         Fix #76371.
6697         * class.cs (TypeContainer.DefineType): Move updating of
6698         topological sort earlier in the code.
6699         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
6700
6701 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
6702
6703         Fix #76273.
6704         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
6705         
6706         * constant.cs (Constant.TryReduce): Moved from Cast class.
6707         (Reduce): Made little bit more OO and fixed missing conversions.
6708         
6709         * ecore.cs (Reduce): Implemented.
6710         (Binary.EnumLiftUp): New method to upgrade values to enum values.
6711         
6712         * literal.cs (Reduce): Implemented.
6713         
6714         * class.cs: Reverted Miguel's wrong commit.
6715
6716 2005-10-14  Miguel de Icaza  <miguel@novell.com>
6717
6718         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
6719
6720 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
6721
6722         * cs-parser.jay, expression.cs : CS0214 was missing error location
6723           for constants. Fixed bug #76404.
6724
6725 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
6726
6727         Fix #76370.
6728         * convert.cs (ExplicitConversionCore): Fixed object->enum
6729         conversion.
6730
6731 2005-10-10  Raja R Harinath  <rharinath@novell.com>
6732
6733         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
6734         InstanceExpression.
6735         (PropertyExpr.EmitCall): Likewise.
6736         * expression.cs (Invocation.EmitArguments): Handle case where
6737         arguments == null.
6738         (Invocation.EmitCall): Avoid allocating temporary variable if
6739         there are no arguments.
6740
6741 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6742
6743         Fix #76323.
6744         * convert.cs (ImplicitConversionStandard): Move conversion of
6745         void* to arbitrary pointer types ...
6746         (ExplicitConversionStandard): .. here.
6747         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
6748         error to always print typenames.
6749
6750 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6751
6752         * convert.cs (GetConversionOperator): Rename from
6753         GetConversionOperators.  Move operator selection code from ...
6754         (UserDefinedConversion): ... here.
6755
6756 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
6757
6758         * convert.cs (ExplicitConversionCore): Removed duplicate enum
6759         conversion.
6760
6761 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
6762
6763         * assign.cs (Assign.DoResolve): Error method changed.
6764
6765         * cfold.cs (DoConstantNumericPromotions): Error method changed.
6766         
6767         * const.cs (ResolveValue): Reset in_transit immediately.
6768         
6769         * constant.cs: Error method changed.
6770         
6771         * convert.cs: Removed useless location parameter.
6772         (ExplicitNumericConversion): Don't do double enum check.
6773         (ExplicitConversionCore): Renamed from ExplicitConversion.
6774         (ExplicitUnsafe): Extracted from ExplicitConversion.
6775         (ExplicitConversion): Uses for error reporting.
6776         
6777         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
6778         error messages.
6779         (ResolveBoolean): Uses common error method.
6780         (CastToDecimal): Get rid of ec.
6781         (CastFromDecimal): Optimized.
6782         (ConvCast): Get rid of ec.
6783         
6784         * enum.cs (ResolveValue): Reset in_transit immediately.
6785         (Emit): Return after first error.
6786         
6787         * expression.cs: Convert changes.
6788         
6789         * literal.cs: Error method changed.
6790         
6791         * statement.cs: Error method changed.
6792
6793 2005-10-03  Raja R Harinath  <rharinath@novell.com>
6794
6795         * support.cs (SeekableStreamReader.Position): Don't error out when
6796         the requested position is just beyond the end of the current
6797         buffered data.
6798
6799 2005-09-28  Raja R Harinath  <rharinath@novell.com>
6800
6801         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
6802         try to keep in sync with the byte count of the underlying Stream.
6803         However, this limits us to a window size of 2048 characters: i.e.,
6804         the maximum lookahead of our lexer/parser can be 2048 characters.
6805
6806 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
6807
6808         Fix #76255.
6809         * driver.cs: Fix compilation files with full root path.
6810
6811 2005-09-25  Miguel de Icaza  <miguel@novell.com>
6812
6813         * report.cs (SymbolRelatedToPreviousError): Format the output so
6814         it does not use an open parenthesis that is never closed. 
6815
6816         * driver.cs: Follow coding guidelines
6817
6818 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6819
6820         Fix #72930.
6821         * const.cs (Const.ResolveValue): Check for assigning non-null
6822         value to reference type.
6823
6824 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6825
6826         * anonymous.cs: Implemented ExprClassName.
6827         
6828         * assign.cs (Assign.DoResolve): Don't chrash when type is not
6829         delegate.
6830         
6831         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
6832         check.
6833         
6834         * class.cs (StaticClass.DefineContainerMembers): Report protected
6835         members as error.
6836         
6837         * codegen.cs: if(ed) PRODUCTION.
6838         
6839         * convert.cs (Error_CannotImplicitConversion): Better error
6840         distinction.
6841         
6842         * cs-parser.jay: More error checks.
6843         
6844         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
6845         
6846         * driver.cs (CSCParseOption): Enabled wrong option check.
6847         
6848         * ecore.cs (Expression.ExprClassName): Turned to property.
6849         (MemberExpr.CheckIntermediateModification): For checking boxed
6850         value types     modification.
6851         
6852         * statement.cs (Fixed.Resolve): Expression type must be
6853         convertible to fixed type.
6854         (CollectionForeach.GetEnumeratorFilter,TryType):
6855         Small refactoring for easier error checking.
6856
6857 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
6858
6859         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
6860         attributes.
6861         
6862         * class.cs (GeneratedBaseInitializer): New class for customization
6863         compiler generated initializers.
6864         (MemberBase.DoDefine): Check Obsolete attribute here.
6865         (FieldMember.DoDefine): Ditto.
6866         
6867         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
6868         constants.
6869         
6870         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
6871         (MemberCore.GetObsoleteAttribute): Removed argument.
6872         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
6873         (MemberCore.CheckObsoleteType): New helper.
6874         
6875         * delegate.cs,
6876         * enum.cs,
6877         * statement.cs: Updates after MemberCore changes.
6878         
6879         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
6880         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
6881         
6882         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
6883         obsolete attribute for compiler construct.
6884         (As.DoResolve): Cache result.
6885         
6886         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
6887
6888 2005-09-26  Raja R Harinath  <rharinath@novell.com>
6889
6890         Fix #76133.
6891         * expression.cs (This.VerifyFixed): In a value type T, the type of
6892         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
6893         value type R, 'this' is treated as a value parameter.
6894
6895 2005-09-22  Miguel de Icaza  <miguel@novell.com>
6896
6897         * statement.cs (Lock): Use the TemporaryVariable class instead of
6898         manually using local variables as those do not work when variables
6899         are captured.
6900
6901         * ecore.cs: Moved the TemporaryVariable class from being a nested
6902         class inside Foreach to be a public class that can be employed in
6903         other places. 
6904
6905 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
6906
6907         * cs-parser.jay: interface_accessors replaced by
6908         accessor_declarations.
6909
6910         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
6911         location.
6912         
6913         * statement.cs (GotoCase.Resolve): Convert null constant to
6914         null case.
6915         (SwitchLabel.ResolveAndReduce): Ditto.
6916         (SwitchLabel.NullStringCase): Custom null stamp.
6917         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
6918         
6919         typemanager.cs (CSharpSignature): Don't skip first argument
6920         for full names.
6921
6922 2005-09-18  Miguel de Icaza  <miguel@novell.com>
6923
6924         * driver.cs: Set InEmacs based on the environment variable EMACS. 
6925
6926         * location.cs (InEmacs): in this mode, do not report column
6927         location as it confuses Emacs.
6928
6929 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
6930
6931         * cfold.cs, constant.cs, convert.cs, ecore.cs,
6932         expression.cs, iterators.cs, literal.cs: Store constants and
6933         literals location.
6934         
6935         * class.cs (MemberBase.ShortName): Pass location.
6936         
6937         * cs-parser.jay: Some location fixes.
6938         
6939         * ecore.cs (Expression.Location): Made virtual.
6940
6941 2005-09-05  Miguel de Icaza  <miguel@novell.com>
6942
6943         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
6944         if the underlying types are the same, otherwise we need to produce
6945         code that will do the proper cast.
6946
6947         This was exposed by Marek's constant rewrite which produced
6948         invalid code for the call site:
6949
6950         enum X : long { a }
6951         void Method (X v) {}
6952
6953         Method ((X) 5)
6954
6955         This fixes test-49.cs
6956
6957 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
6958
6959         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
6960           Type/Object should be allowed as well. Fixed bug #75968.
6961
6962 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
6963
6964         * expression.cs : (Binary.DoResolve): when one is enum constant and
6965           another is constant 0, then return enum one *as enum type*.
6966           Fixed bug 74846.
6967
6968 2005-09-02  Raja R Harinath  <rharinath@novell.com>
6969
6970         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
6971         internal.
6972
6973         Fix #75941.
6974         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
6975         flow-branching for LocalVariableReferences in case we were invoked
6976         from a MemberAccess.
6977         * expression.cs (LocalVariableReference.VerifyAssigned): New.
6978         Carved out of ...
6979         (LocalVariableReference.DoResolveBase): ... this.
6980         (MemberAccess.Resolve): Do the check that was disabled during
6981         SimpleNameResolve.
6982
6983 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
6984
6985         * class.cs :
6986           (PartialContainer.Create): check abstract/sealed/static strictly
6987           but abstract/sealed can exist only at one side. Fixed bug #75883.
6988
6989 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
6990
6991         Fix #75945.
6992         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
6993         specified, don't default to UnmanagedType.I4.
6994
6995 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
6996
6997         * expression.cs : conditional operator should check possibly
6998           incorrect assign expression. Fixed bug #75946.
6999
7000 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7001
7002         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
7003           Reverting the change. gmcs is much complex than mcs on this matter.
7004
7005 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7006
7007         * cs-tokenizer.cs : To read another token ahead of the actual 
7008           consumption, use new SavedToken and cache token instead of moving
7009           back the stream with SeekableStreamReader (it seemed problematic).
7010         * cs-parser.jay,
7011           driver.cs : Thus use StreamReader directly.
7012         * support.cs : Thus removed SeekableStreamReader.
7013
7014 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7015
7016         Fix #75934.
7017         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
7018         (ScopeInfo.EmitScopeType): Use it to construct field names from
7019         names of captured locals.
7020
7021         Fix #75929.
7022         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
7023         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
7024         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
7025         (ExplicitConversion): Remove enum cases already handled by
7026         implicit conversion.  Move implicit conversion check to the beginning.
7027         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
7028         * expression.cs (ArrayCreation.EmitDynamicInitializers):
7029         Don't treat System.Enum as a struct.
7030
7031 2005-08-30  Jb Evain  <jbevain@gmail.com>
7032
7033         * attribute.cs: handles as expression in parameters.
7034
7035 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7036
7037         Fix #75802.
7038         * class.cs (TypeContainer.VerifyClsName): Don't use a
7039         PartialContainer when verifying CLS compliance.
7040         (AbstractPropertyEventMethod): Set Parent here, ...
7041         (PropertyMethod): ... not here.
7042
7043 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
7044
7045         * attribute.cs : escaped attribute name should not be allowed to be
7046           resolved (e.g. @class as classAttribute). Fixed bug #75930.
7047
7048 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7049
7050         Fix #75927.
7051         * convert.cs (ImplicitStandardConversionExists): Allow zero also
7052         when converting a long constant to unsigned long.
7053         * expression.cs (Invocation.OverloadResolve): Add sanity check to
7054         detect where IsApplicable and VerifyArgumentsCompat disagree.
7055
7056 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7057         and Carlos Alberto Cortez  <carlos@unixmexico.org>
7058
7059         Fix #75848.
7060         * class.cs (TypeContainer.CanElideInitializer): New helper.
7061         (TypeContainer.EmitFieldInitializers): Use it to determine if we
7062         can safely emitting the initializer of a field.
7063
7064 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7065
7066         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
7067           allowed inside a switch (without loop). Fixed bug #75433.
7068
7069 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
7070
7071         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
7072         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
7073
7074 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7075
7076         * driver.cs : kinda reverting the default encoding changes (not exact 
7077           revert since I noticed that "codepage:reset" might not work fine).
7078
7079 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7080
7081         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
7082           Location. Now getter and setter store location correctly.
7083           (errors/cs0111-12.cs now reports the expected location.)
7084
7085 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7086
7087         * driver.cs : Use default encoding on the environment.
7088           Removed (now that) extra parameter for SeekableStreamReader.
7089         * support.cs : (SeekableStreamReader) third .ctor() argument for
7090           StreamReader is not required (always true). preamble size could
7091           be acquired in simpler and safe way.
7092
7093 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
7094
7095         * cs-parser.jay: report CS0642 at warning level 3
7096           and report CS0642 for an if else statement also
7097           fixes bug #74745. Patch by John Luke (and a bit
7098           modified by me).
7099           Removed extra CS0642 warning check for "while",
7100           "for" and "fixed".
7101         * statement.cs: In Block.Resolve(), CS0642 check
7102           is reimplemented to check a sequence of an empty
7103           statement and a block.
7104
7105           Both fix bug #66777.
7106
7107 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
7108
7109         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
7110         detection until I fix it.
7111         
7112         * cs-tokenizer.cs: Changed error message.
7113         
7114         * cs-parser.jay: Fixed 2 error locations.
7115         
7116         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
7117         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
7118         properties.
7119         
7120         * enum.cs (GetSignatureForError): Fixed.
7121         
7122         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
7123         method detection.
7124         
7125         * class.cs,
7126         * typemanager.cs (RegisterProperty): Removed.
7127         
7128         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
7129
7130 2005-08-24  Raja R Harinath  <rharinath@novell.com>
7131
7132         Fix #75874.
7133         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
7134         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
7135
7136 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7137
7138         * expression.cs : tiny fix is required for not warning positive ulong.
7139           See test-441.cs.
7140
7141 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7142
7143         * expression.cs : add CS0652 check for constant and integral
7144           expression. Fixed bug #53974.
7145
7146 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7147
7148         * expression.cs : in DoNumericPromotions(), check if there is implicit
7149           conversion overload for string (to check CS0034). Fixed bug #52492.
7150
7151 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7152
7153         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
7154
7155 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7156
7157         * ecore.cs : report location when it is *not* Null.
7158
7159 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7160
7161         * codegen.cs,
7162           ecore.cs,
7163           flowanalysis.cs,
7164           expression.cs:
7165           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
7166           correctly. Fixed bug #75721.
7167
7168 2005-08-23  Raja R Harinath  <rharinath@novell.com>
7169
7170         * support.cs (SeekableStreamReader.Position): Avoid an expensive
7171         loop that performs 'min (pos, char_count)'.
7172
7173         Fix #75862.
7174         * expression.cs (Unary.ResolveOperator): Don't discard implicit
7175         converted value in Operator.OnesComplement.
7176
7177 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
7178
7179         * anonymous.cs: If the anon method is pulled into a helper class,
7180         it needs to be `internal' not `private'. Fixes runtime behavior on
7181         msft. bug #75704
7182
7183 2005-08-20  Martin Baulig  <martin@ximian.com>
7184
7185         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
7186         scope if we don't already have it.
7187
7188         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
7189         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
7190         fixes #75867.
7191
7192 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
7193
7194         Fix #75803
7195         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
7196         is a partial class.
7197
7198 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
7199
7200         The big constants rewrite
7201         Fix #75746, #75685 and more
7202         As a side effect saved 1MB for MWF ;-)
7203         
7204         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
7205         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
7206         enum based for corlib compilation.
7207         
7208         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
7209         subtractions.
7210         
7211         * class.cs (FixedField.Define): Use ResolveAsConstant.
7212         
7213         * const.cs (IConstant): Interface constants and enums.
7214         (Const.ResolveValue): New method for constant resolvning.
7215         (ExternalConstant): Constants from imported assemblies.
7216         
7217         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
7218         conversion; like enums.
7219         (Constant.ToType): Converts this constant to different type.
7220         (Constant.Increment): Adds 1.
7221         
7222         * convert.cs (ImplicitConversionRequired): Simplified.
7223         
7224         * cs-parser.jay: Create EnumMember directly.
7225         
7226         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
7227         
7228         * doc.cs (GenerateEnumDocComment): Removed.
7229         
7230         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
7231         (ConvertIntLiteral): Removed.
7232         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
7233         
7234         * enum.cs (EnumMember): Implement IConstant.
7235         (Enum.IsValidEnumConstant): Removed.
7236         (Enum.GetNextDefaultValue): Removed.
7237         (Enum.FindMembers): Updated.
7238         (Enum.GenerateDocComment): Iterate enum members.
7239         
7240         * expression.cs (Cast.TryReduce): Handle enums correctly.
7241         (New.Constantify): Made public.
7242         (MemberAccess.DoResolve): Removed contant specific if(s).
7243         
7244         * literal.cs (NullLiteral): Implement new abstract methods.
7245         
7246         * statement.cs (GotoCase.Resolve): Use new constant methods.
7247         (SwitchLabel.ResolveAndReduce): Use new constant methods.
7248         
7249         * typemanager.cs (LookupEnum): Removed.
7250         (IsEnumType): Fixed to work with corlib.
7251         (RegisterConstant): Removed.
7252         (LookupConstant): Removed.
7253         (GetConstant): Changed to work with IConstant.
7254
7255 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
7256
7257         * location.cs : Fixed overflown (>255) column number.
7258
7259 2005-08-03  Raja R Harinath  <rharinath@novell.com>
7260
7261         First cut of the qualified-alias-member feature.
7262         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
7263         token.
7264         * cs-parser.jay (DOUBLE_COLON): New token.
7265         (namespace_or_type_name): Add rule for recognizing
7266         qualified-alias-members.
7267         (primary_expression): Likewise.
7268         (element_access): Allow QualifiedAliasMember as a possible
7269         type-bearing expression.
7270         (local_variable_type, local_variable_pointer_type): Likewise.
7271         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
7272         aliases in the current and enclosing namespace declarations.
7273         (NamespaceEntry.UsingAlias): Add CS0440 warning.
7274         * decl.cs (MemberName.is_double_colon): New.
7275         (MemberName.MemberName): Add new constructor for alias-member.
7276         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
7277         * expression.cs (QualifiedAliasMember): New expression type.
7278
7279 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7280
7281         * location.cs : it borked when no argument was specified.
7282
7283 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7284
7285         * location.cs : tiny ToString() format fix.
7286
7287 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7288
7289         * statement.cs : oops, it was missing.
7290
7291 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7292
7293         A set of fixes for precise line/column location.
7294
7295         * location.cs :
7296           "token" field now holds a file/line "delta", a line number offset 
7297           from the segment, and a column number. See also:
7298           http://lists.ximian.com/pipermail/mono-devel-list/2004-
7299           December/009508.html
7300           Removed static IsNull. Use instance IsNull property instead.
7301         * cs-tokenizer.cs :
7302           For some tokens it stores Location. For Identifier it stores
7303           LocatedToken which is a pair of string name and location.
7304           Column numbers are adjusted only at getChar().
7305         * report.cs :
7306           Use Location.ToString() for reporting (it now contains column).
7307         * cs-parser.jay :
7308           Largely modified to use LocatedToken instead of
7309           string (IDENTIFIER), and to acquire Location from some tokens.
7310         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
7311           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
7312           codegen.cs :
7313           Now MemberName holds Location. DeclSpace.ctor() receives Location
7314           as a parameter. Removed extra parameters to all derived classes.
7315           Replaced Location.IsNull() with instance property.
7316         * assign.cs, expression.cs :
7317           Added .ctor() overload that omits Location.
7318         * attribute.cs :
7319           Added "nameEscaped" flag that indicates the identifier was escaped
7320           in the source file. This fixes bug #57047.
7321
7322 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
7323
7324         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
7325         New method, looking for lo-case imported cls type.
7326
7327         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
7328         here.
7329
7330         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
7331
7332         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
7333
7334         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
7335         all_imported_types.
7336         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
7337
7338         Optimized to save 3.5 MB for SWF compilation.
7339
7340 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7341
7342         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
7343         (PartialContainer.Create): Moved logic AddToContainer.
7344         (PartialContainer.MarkForDuplicationCheck): Shares name.
7345         
7346         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
7347         place.
7348         
7349         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
7350         initialization.
7351         (Namespace.GetSignatureForError): New method.
7352         
7353         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
7354         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
7355
7356 2005-08-01  Raja R Harinath  <rharinath@novell.com>
7357
7358         Fix #75669.
7359         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
7360         member lookup rather than qualifier_type, since qualifier_type can
7361         be null.
7362
7363 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7364
7365         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
7366         enum member.
7367
7368 2005-07-31  Miguel de Icaza  <miguel@novell.com>
7369
7370         * statement.cs: Copy the local exception into the exception
7371         captured local.  Fixes 75674
7372
7373 2005-07-31  Raja R Harinath  <harinath@gmail.com>
7374
7375         Fix #75658.
7376         * expression.cs (Invocation.OverloadResolve): Don't report error
7377         CS1501 if error CS1502 has been reported.
7378         (New.DoResolve): Delegate CS1501 reporting to
7379         Invocation.OverloadResolve.
7380
7381         Fix #75656.
7382         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
7383         invariant-meaning-in-block property in an enclosing block if
7384         necessary.
7385
7386 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
7387
7388         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
7389         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
7390         (Switch.CheckSwitch): Just save 50kb for SWF.
7391
7392 2005-07-27  Martin Baulig  <martin@ximian.com>
7393
7394         * anonymous.cs (CaptureContext.AddField): Added
7395         `AnonymousContainer am' argument; compute its toplevel scope if
7396         it's not already computed.  Fixes #75649.
7397
7398 2005-07-26  Raja R Harinath  <rharinath@novell.com>
7399
7400         Fix #75628.
7401         * class.cs (Constructor.Emit): Reset block to null if the block
7402         resolve fails.
7403
7404 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7405
7406         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
7407
7408 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7409
7410         * class.cs (MethodData.Define): Check whether accessor implementing
7411         interface is public.
7412
7413         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
7414
7415 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
7416
7417         Fix #57245
7418         * namespace.cs (LookupType): Moved same type check to...
7419         
7420         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
7421         with the same name.
7422
7423 2005-07-21  Raja R Harinath  <rharinath@novell.com>
7424
7425         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
7426         already found a typebuilder.
7427         * class.cs (MethodCore.IsDuplicateImplementation): Compare
7428         MemberNames, not strings.
7429
7430         * const.cs (Error_ExpressionMustBeConst): 
7431         Rename from Error_EpressionMustBeConst.
7432         * const.cs, class.cs, statement.cd: Update.
7433
7434 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
7435
7436         Fix #65573
7437
7438         * const.cs (Const.LookupConstantValue): Report missing contant expression
7439         everytime.
7440         (Error_EpressionMustBeConstant): Only one error method.
7441
7442         * class.cs, statement.c: Updated.
7443
7444 2005-07-20  Raja R Harinath  <rharinath@novell.com>
7445
7446         * statement.cs (Block.Flags): Add back HasVarargs.
7447         (Block.flags): Make protected.
7448         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
7449
7450         * typemanager.cs (types, typecontainers, user_types): Remove.
7451         (UserTypes, TypeContainers): Likewise.
7452         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
7453         (CleanUp, Reset): Update.
7454         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
7455         (GetNestedType): Use Type.GetNestedType.
7456         (CoreLookupType): Take two arguments, the namespace and the
7457         basename of the type.  Update to use the Namespace.Lookup
7458         mechanism.
7459         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
7460         (RealMemberLookup): Use IsNestedChildOf instead of playing with
7461         string concatenation and substring matches.
7462         * class.cs, enum.cs, delegate.cs: Update to changes.
7463
7464 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
7465
7466         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
7467         Expression and made virtual.
7468
7469         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
7470         (ImplicitStandardConversionExists): Fixed `byte' typo ?
7471
7472         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
7473
7474         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
7475         error message.
7476
7477         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
7478         change.
7479
7480 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
7481
7482         Fix #57707
7483         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
7484         AssemblyCultureAttribute is not used on executable.
7485
7486         * rootcontext.cs,
7487         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
7488
7489 2005-07-16  Raja R Harinath  <rharinath@novell.com>
7490
7491         Fix #60638.
7492         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
7493         New.  Reports CS0252/CS0253.
7494         Mostly taken from preliminary patch by Duncak Mak.
7495         (Binary.DoResolveOperator): Store results of operator lookup.
7496         Use them to detect if we need to warn about unintended reference
7497         comparisons.
7498
7499 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7500
7501         Fix #72969.
7502         * namespace.cs (Namespace.Lookup): Add back location parameter.
7503         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
7504         * delegate.cs, ecore.cs, expression.cs: Update to changes.
7505
7506         * codegen.cs (EmitContext.DeclSpace): Make readonly.
7507         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
7508         (Namespace.LookupType): ... this.
7509         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
7510         of namespaces.
7511         * typemanager.cs (LookupTypeReflection): Remove buggy code that
7512         purported to handle pointers.
7513         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
7514         CoreLookupType.
7515
7516 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
7517
7518         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
7519         type as namespace.
7520
7521 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7522
7523         * namespace.cs (Namespace.Lookup): Drop location parameter.
7524         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
7525         (NamespaceEntry.Lookup): ... this.
7526         (NamespaceEntry.Error_AmbiguousTypeReference):
7527         Move here from DeclSpace.
7528         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
7529         names ...
7530         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
7531         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
7532         Move to NamespaceEntry.
7533         * delegate.cs, expression.cs: Update to changes.
7534
7535 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
7536
7537         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
7538         CheckAttributeType and refactored.
7539         (Attribute.ResolvePossibleAttributeType): Changed to reuse
7540         ResolveAsTypeTerminal error handling.
7541         (ResolveAsTypeTerminal): Introduced because of global attributes extra
7542         handling.
7543         (GetSignatureForError): Print errors in same way.
7544
7545         * class.cs,
7546         * codegen.cs: Reflect attribute GetSignatureForError change.
7547
7548         * ecore.cs,
7549         * expression.cs: Add silent parameter to ResolveAsTypeStep.
7550
7551         * namespace.cs (UsingEntry): Refactored to make fields private.
7552
7553         * assign.cs,
7554         statement.cs: Error_UnexpectedKind has extra parameter.
7555
7556 2005-07-14  Raja R Harinath  <rharinath@novell.com>
7557
7558         * ecore.cs (IAlias): Remove.
7559         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
7560         that implement the interface.
7561         * namespace.cs (Namespace): Likewise.
7562         (Namespace.declspaces): Renamed from 'defined_names'.
7563         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
7564         DeclSpace instead of an IAlias.
7565         * tree.cs (Tree.AddDecl): Update.
7566
7567 2005-07-12  Raja R Harinath  <rharinath@novell.com>
7568
7569         * statement.cs (Block.Flags); Remove HasVarargs.
7570         (Block.HasVarargs): Move to ToplevelBlock.
7571         (Block.ThisVariable, Block.AddThisVariable): Likewise.
7572         (Block.Variables): Make protected.  Initialize variable hashtable
7573         if necessary.
7574         (Block.AddVariable): Update.
7575         (Block.Resolve): Update to changes.
7576         (ToplevelBlock.HasVarargs): New boolean.
7577         (ToplevelBlock.ThisVariable): Move here from Block.
7578         (ToplevelBlock.AddThisVariable): Likewise.
7579         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
7580         * expression.cs (This.ResolveBase): Update to changes.
7581         (ArglistAccess.DoResolve): Likewise.
7582
7583 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7584
7585         Fix #75321
7586         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
7587
7588         * class.cs (TypeContainer.VerifyMembers): Distinguish between
7589         not used and not used & assigned.
7590         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
7591
7592 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7593
7594         Fix #75053
7595         * expression.cs (Is.DoResolve): null is never provided type.
7596
7597 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
7598
7599         Fix #52496
7600         * cs-parser.jay: Less strict event error rule to catch more errors.
7601
7602 2005-07-08  Martin Baulig  <martin@ximian.com>
7603
7604         Fix test-iter-10.cs - distinguish whether we `yield' in a property
7605         gettter (allowed) or setter (not allowed).
7606
7607         * class.cs (Accessor): Implement IIteratorContainer.
7608         (Accessor.Yields): New public field.
7609         (PropertyBase.PropertyMethod.Define): Handle iterators on a
7610         per-accessor basis.
7611
7612         * cs-parser.jay
7613         (get_accessor_declaration, set_accessor_declaration): Set the
7614         `yields' flag on the accessor, not the property.
7615         (property_declaration): Do the iterators check on a per-accessor
7616         basis and not for the whole property.
7617
7618 2005-07-08  Martin Baulig  <martin@ximian.com>
7619
7620         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
7621         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
7622
7623 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
7624
7625         Fix #74975
7626         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
7627         (ExtractSecurityPermissionSet): Cope with self referencing security
7628         attributes properly.
7629
7630         * driver.cs (SetOutputFile): Made public property OutputFile.
7631
7632 2005-07-07  Raja R Harinath  <rharinath@novell.com>
7633
7634         Fix #75486.
7635         * class.cs (TypeContainer.first_nonstatic_field): Rename from
7636         has_nonstatic_fields.  Make into a FieldBase pointer.
7637         (TypeContainer.AddField): Add CS0282 check.
7638         (TypeContainer.EmitType): Update.
7639
7640 2005-07-06  Miguel de Icaza  <miguel@novell.com>
7641
7642         * cs-tokenizer.cs (consume_identifier): Do not create strings to
7643         compare if they start with __.
7644
7645 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7646
7647         * statement.cs (Switch.SwitchGoverningType): Only look at
7648         UserCasts that don't need implicit standard conversions to one of
7649         the allowed switch types (Fixes test-322.cs).
7650         (LocalInfo.Resolve): Re-enable sanity-test.
7651
7652 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
7653
7654         * cs-tokenizer.cs (consume_identifier): Detect double undescores
7655         
7656         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
7657         
7658         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
7659
7660 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7661
7662         Fix #75472.
7663         * ecore.cs (SimpleName.GetSignatureForError): Add.
7664         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
7665         (MemberAccess.GetSignatureForError): Add.
7666
7667 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
7668  
7669         The big error and warning messages review.
7670         
7671         * anonymous.cs,
7672         * assign.cs,
7673         * attribute.cs,
7674         * class.cs,
7675         * codegen.cs,
7676         * convert.cs,
7677         * cs-parser.jay,
7678         * cs-tokenizer.cs,
7679         * decl.cs,
7680         * delegate.cs,
7681         * doc.cs,
7682         * driver.cs,
7683         * ecore.cs,
7684         * enum.cs,
7685         * expression.cs,
7686         * flowanalysis.cs,
7687         * iterators.cs,
7688         * literal.cs,
7689         * location.cs,
7690         * modifiers.cs,
7691         * namespace.cs,
7692         * parameter.cs,
7693         * pending.cs,
7694         * report.cs,
7695         * rootcontext.cs,
7696         * statement.cs,
7697         * support.cs,
7698         * tree.cs,
7699         * typemanager.cs: Updated.
7700         
7701         * class.cs: (MethodCore.SetYields): Moved here to share.
7702         (PropertyMethod.Define): Moved iterator setup here.
7703         
7704         * iterators.cs: Add orig_method to have full access to parent
7705         container.
7706
7707 2005-07-05  Raja R Harinath  <rharinath@novell.com>
7708
7709         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
7710         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
7711         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
7712         variable of struct type.
7713         * expression.cs (Unary.ResolveOperator): Update to change.
7714         (Indirection.VerifyFixed): Likewise.
7715         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
7716         (ParameterReference.VerifyFixed): Value parameters are fixed.
7717         (This.VerifyFixed): Treat 'this' as a value parameter.
7718         * statement.cs (LocalInfo.IsFixed): Remove.
7719
7720 2005-07-01  Martin Baulig  <martin@ximian.com>
7721
7722         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
7723         `ec.EmitThis ()' to get the correct scope.
7724
7725 2005-07-01  Martin Baulig  <martin@ximian.com>
7726
7727         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
7728         instance is a ParameterReference; fixes #75299.
7729
7730 2005-07-01  Martin Baulig  <martin@ximian.com>
7731
7732         Reverted Marek's latest patch (r46725):
7733         - it contains structural changes which are neither mentioned in
7734           the ChangeLog nor explained anywhere; for example the additional
7735           argument of EmitContext's and Iterator's .ctor's and the
7736           TypeContainer.DefineMembers() change.
7737         - structural changes like this should go in in seperate patches
7738           and not be hidden in a huge patch which just seems to affect
7739           warnings and errors.
7740           a big and hard to understand patch.
7741         - it breaks iterators and causes regressions, for instance in
7742           test-iter-03.cs.      
7743
7744 2005-06-30  Raja R Harinath  <rharinath@novell.com>
7745
7746         Fix #75412.
7747         * expression.cs (Indexers.map): Remove.
7748         (Indexers.Append): Filter out inaccessible setters and getters.
7749         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
7750
7751         Fix #75283.
7752         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
7753         Refactored from ...
7754         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
7755         (FieldExpr.Emit, PropertyExpr.Emit): Update.
7756         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
7757         * expression.cs (Invocation.EmitCall): Add CS0120 check.
7758
7759 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
7760
7761         Fix #75322
7762         * class.cs (FieldBase.GetInitializerExpression): One more field
7763         for backup.
7764
7765 2005-06-28  Miguel de Icaza  <miguel@novell.com>
7766
7767         * pending.cs: Do not define a proxy if the base method is virtual,
7768         it will be picked up by the runtime (bug 75270).
7769
7770 2005-06-08  Martin Baulig  <martin@ximian.com>
7771
7772         The big Iterators rewrite :-)
7773
7774         * iterators.cs: Rewrite this to use the anonymous methods framework.
7775
7776         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
7777         before the TypeContainers; see 2test-21.cs.
7778
7779         * class.cs
7780         (TypeContainer.DefineType): Don't create a new EmitContext if we
7781         already have one (this only happens if we're an Iterator).
7782         (TypeContainer.Define): Also call Define() on all our iterators.
7783         (Method.CreateEmitContext): Added support for iterators.
7784
7785         * anonymous.cs
7786         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
7787         (AnonymousContainer.CreateMethodHost): Moved here from
7788         AnonymousMethod and made abstract.
7789         (AnonymousContainer.CreateScopeType): New abstract method.
7790         (AnonymousContainer.IsIterator): New public property.
7791         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
7792         get the ScopeTypeBuilder rather than manually defining it here. 
7793         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
7794         iterators here.
7795
7796         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
7797         before RootContext.DefineTypes().
7798
7799         * codegen.cs (EmitContext.RemapToProxy): Removed.
7800         (EmitContext.CurrentAnonymousMethod): Changed type from
7801         AnonymousMethod -> AnonymousContainer.
7802         (EmitContext.ResolveTopBlock): Protect from being called twice.
7803         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
7804         (EmitContext.EmitThis): Removed the iterators hacks; use the
7805         anonymous methods framework for that.
7806
7807         * statement.cs
7808         (ToplevelBlock.Container): Make this a property, not a field.
7809         (ToplevelBlock.ReParent): New public method; move the
7810         ToplevelBlock into a new container.
7811         (Foreach.TemporaryVariable): Simplify.
7812
7813 2005-06-05  Martin Baulig  <martin@ximian.com>
7814
7815         * statement.cs (LocalInfo.CompilerGenerated): New flag.
7816         (Block.AddTemporaryVariable): New public method; creates a new
7817         `LocalInfo' for a temporary variable.
7818         (Block.EmitMeta): Create the LocalBuilders for all the temporary
7819         variables here.
7820         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
7821         non-iterator variables.
7822
7823 2005-06-05  Martin Baulig  <martin@ximian.com>
7824
7825         * statement.cs (Foreach.TemporaryVariable): Create the
7826         LocalBuilder in the Emit phase and not in Resolve since in some
7827         situations, we don't have an ILGenerator during Resolve; see
7828         2test-19.cs for an example.
7829
7830 2005-06-04  Martin Baulig  <martin@ximian.com>
7831
7832         **** Merged r45395 from GCS ****
7833
7834         The big Foreach rewrite - Part II.
7835
7836         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
7837         with `PropertyInfo ienumerator_getcurrent'.
7838
7839         * codegen.cs (VariableStorage): Removed.
7840
7841         * statement.cs
7842         (Foreach): Derive from Statement, not ExceptionStatement.
7843         (Foreach.CollectionForeach): New nested class.  Moved all the code
7844         dealing with collection foreach here.
7845         (Foreach.ForeachHelperMethods): Removed.
7846         (Foreach.TemporaryVariable): Implement IMemoryLocation.
7847
7848 2005-05-23  Martin Baulig  <martin@ximian.com>
7849
7850         * statement.cs (Try.DoResolve): Don't create a `finally' if we
7851         don't need to.  Fix #75014.
7852
7853 2005-05-20  Martin Baulig  <martin@ximian.com>
7854
7855         Merged r44808 from GMCS.
7856
7857         * class.cs (TypeContainer.CircularDepException): Removed.
7858         (TypeContainer.DefineType): Removed the `InTransit' stuff.
7859         (TypeContainer.CheckRecursiveDefinition): Check for circular class
7860         (CS0146) and interface (CS0529) dependencies here.
7861
7862 2005-06-21  Raja R Harinath  <rharinath@novell.com>
7863
7864         * expression.cs (Invocation.EmitCall): Fix initialization
7865         'this_call' to reflect current behaviour.  Fix indentation.
7866
7867         * convert.cs (FindMostEncompassedType): Add two trivial special
7868         cases (number_of_types == 0 || number_of_types == 1).
7869         (FindMostEncompasingType): Likewise.
7870
7871 2005-06-17  Raja R Harinath  <rharinath@novell.com>
7872
7873         Some cleanups preparing for the fix of #75283.
7874         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
7875         error testing.
7876         (EventExpr.InstanceResolve): Likewise.
7877         (EventExpr.DoResolve): Remove redundant checks.
7878
7879 2005-06-10  Duncan Mak  <duncan@novell.com>
7880
7881         * cs-tokenizer.cs (process_directives): New flag for controlling
7882         the processing of preprocessor directives.
7883         (x_token): After seeing a '#', return Token.NONE instead of going
7884         to handle_preprocessing_directive() when not processing
7885         directives. This avoids unnecessary processing during the token peek in
7886         is_punct().
7887
7888         This fixes #74939.
7889
7890         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
7891         the existing error reporting methods instead of Report.Error.
7892
7893         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
7894         after Raja's rewrite.
7895
7896 2005-06-08  Miguel de Icaza  <miguel@novell.com>
7897
7898         * class.cs: Small fix.
7899
7900 2005-06-08  Raja R Harinath  <rharinath@novell.com>
7901
7902         Fix #75160.
7903         * class.cs (GetPartialBases): Fix return value check of
7904         part.GetClassBases.
7905
7906 2005-06-07  Raja R Harinath  <rharinath@novell.com>
7907
7908         Ensure that partial classes are registered in their enclosing
7909         namespace.  Initial part of fix of #75160.
7910         * tree.cs (Tree.RecordDecl): Add new namespace argument.
7911         Register declspace with namespace here, not in
7912         DeclSpace.RecordDecl.
7913         * cs-parser.jay: Pass namespace to RecordDecl.
7914         * class.cs (PartialContainer.Create): Likewise.
7915         (ClassPart.DefineType): New sanity-check.  Throws an exception if
7916         called.
7917         * decl.cs (Declspace.RecordDecl): Remove.
7918         * namespace.cs (NamespaceEntry.DefineName): Remove.
7919
7920 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
7921
7922         * rootcontext.cs: Reset TargetExt as well.
7923
7924 2005-06-03  Raja R Harinath  <rharinath@novell.com>
7925
7926         * ecore.cs (Expression.Resolve): Emit CS0654 error when
7927         -langversion:ISO-1.
7928
7929 2005-06-02  Raja R Harinath  <rharinath@novell.com>
7930
7931         Fix #75080, cs0119.cs.
7932         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
7933         of ...
7934         (Expression.Resolve): ... this.  Use it.  Remove bogus code
7935         allowing ExprClass.Type and ExprClass.Namespace for
7936         ResolveFlags.VariableOrValue.
7937         (Expression.Resolve) [1-argument variant]: Change default resolve
7938         flags based on language version.
7939         (Expression.Error_UnexpectedKind): Use a simple string array
7940         rather than an ArrayList.
7941         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
7942         not ExprClass.Type.
7943         (TypeOfVoid.DoResolve): Likewise.
7944         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
7945         flags argument -- it always has the same value.
7946
7947 2005-05-31  Raja R Harinath  <rharinath@novell.com>
7948
7949         Fix #75081.
7950         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
7951         Use it in the error message.
7952         * assign.cs, expression.cs, statement.cs: Update.
7953
7954 2005-05-30  Raja R Harinath  <rharinath@novell.com>
7955
7956         Fix #75088.
7957         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
7958         the "almostMatchedMember" case too.
7959         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
7960         that failed the accessibility checks to 'almost_match'.
7961
7962 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
7963
7964         * attribute.cs: Use internal MethodBuilder methods to set
7965         ExactSpelling and SetLastError on PInvoke methods, instead
7966         of passing them via charset.  Fixes #75060.
7967
7968 2005-05-27  Raja R Harinath  <rharinath@novell.com>
7969
7970         * parameter.cs (Parameter): Remove TODO comment.
7971         (Parameter.DefineParameter): Remove Location parameter.
7972         (Parameters.LabelParameters): Likewise.
7973         * class.cs (Constructor.Emit): Update to change.
7974         (MethodData.Emit): Likewise.
7975         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
7976         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
7977
7978 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
7979
7980         * parameter.cs,
7981           Removed Parameters.Location and added Parameter.Location instead.
7982           Removed Location parameter from Emit() and GetSignature().
7983         * anonymous.cs,
7984           class.cs,
7985           cs-parser.jay,
7986           delegate.cs,
7987           iterators.cs,
7988           statement.cs :
7989           Modified all related calls.
7990
7991 2005-05-26  Raja R Harinath  <rharinath@novell.com>
7992
7993         Improve user-defined conversion handling.
7994         * convert.cs (GetConversionOperators): Rewrite.  Return only the
7995         applicable operators.
7996         (AddConversionOperators): New.  Helper for GetConversionOperators.
7997         (FindMostEncompassedType, FindMostEncompassingType): Verify that
7998         there is only one most encompassed/encompassing type.
7999         (FindMostSpecificSource, FindMostSpecificTarget): Remove
8000         "applicable operator" handling.
8001         (UserConversion): Move cache here from GetConversionOperators.
8002         Directly cache the chosen operator, rather than the whole
8003         MethodGroup.
8004         (ExplicitNumericConversion): Fix buggy implementation of Decimal
8005         case.  Allow conversion of decimal to sbyte and byte too.
8006         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8007         New static methods.  Used to avoid allocating EmptyExpressions in
8008         convert.cs.
8009
8010 2005-05-24  Duncan Mak  <duncan@novell.com>
8011
8012         * ecore.cs (CastFromDecimal): New class for casting a decimal to
8013         another class, used in Convert.ExplicitNumericConversion.
8014         (CastToDecimal): New class, similar to above, but casts to
8015         System.Decimal, used in Convert.ImplicitNumericConversion and also
8016         in explicit convesion from double/float to decimal.
8017
8018         * convert.cs (ImplicitNumericConversion): Handle implicit
8019         conversions to System.Decimal.
8020         (ExplicitNumericConversion): handle explicit conversions to
8021         System.Decimal.
8022
8023         This fixes #68711.
8024         
8025 2005-05-20  Miguel de Icaza  <miguel@novell.com>
8026
8027         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
8028         know the type at this stage, just break through.   Fixes #75008 
8029
8030 2005-05-19  Martin Baulig  <martin@ximian.com>
8031
8032         * delegate.cs
8033         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
8034         to disable error reporting.
8035
8036         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
8037         here since we don't want to report an error; see the new test-336.cs.
8038
8039 2005-05-19  Raja R Harinath  <rharinath@novell.com>
8040
8041         * statement.cs (ToplevelBlock.GetParameterReference)
8042         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
8043         Move here from class Block.
8044         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
8045         * expression.cs (ParameterReference.DoResolveBase): Likewise.
8046
8047 2005-05-18  Martin Baulig  <martin@ximian.com>
8048
8049         Fix #74978.
8050
8051         * flowanalysis.cs
8052         (FlowBranching.Reachability): Add non-static public And() and Or()
8053         methods.
8054         (FlowBranchingSwitch): New class; do the `break_origins' thing
8055         like in FlowBranchingLoop.
8056         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
8057         reachability, not just locals and parameters.
8058         (FlowBranching.MergeChild): Remove some of the hacks for loop and
8059         switch; MergeBreakOrigins() now takes care of that.
8060
8061 2005-05-18  Martin Baulig  <martin@ximian.com>
8062
8063         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
8064         a loop and may leave it, reset the barrier; fixes #74974.
8065
8066 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
8067         
8068         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
8069         is back.
8070         
8071         * cs-parser.jay: Catch more lexical errors.
8072         
8073         * report.cs: Add one more Error method.
8074         
8075         * rootcontext.cs,
8076         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
8077
8078 2005-05-17  Martin Baulig  <martin@ximian.com>
8079
8080         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
8081         #70970. 
8082
8083 2005-05-16  Raja R Harinath  <rharinath@novell.com>
8084
8085         Fix test-382.cs.  Emit values of decimal constants.
8086         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
8087         Carved out of ...
8088         (TypeContainer.AddField): ... this.
8089         (TypeContainer.EmitFieldInitializers): Allow the list of fields
8090         with initializers to include 'Const's.
8091         (ClassPart.RegisterFieldForInitialization): Forward to
8092         PartialContainer.
8093         * const.cs (Const.Const): Pass initializer to base class.
8094         (Const.Define): In case of decimal constants, register them for
8095         initialization in a static constructor.
8096
8097 2005-05-14  Martin Baulig  <martin@ximian.com>
8098
8099         * statement.cs (Block.Resolve): Correctly handle unreachable code;
8100         do not call ResolveUnreachable() on unreachable statements in
8101         here, see the comment in the source code.
8102
8103 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8104
8105         Fix #74934.
8106         * expression.cs (BinaryResolveOperator): If one of the operands of
8107         an equality comparison is 'null' and the other is a pointer type,
8108         convert the null to a NullPointer.
8109         * convert.cs (ImplicitReferenceConversion): If the expression is a
8110         NullLiteral and the target type is a pointer type, return a
8111         NullPointer instead.
8112         (ImplicitConversionStandard): Likewise.
8113
8114 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
8115         
8116         * cs-parser.jay: Set readonly context based on special constructs.
8117         
8118         * expression.cs (LocalVariableReference.DoResolveBase): Improved
8119         readonly variable error handling.
8120         
8121         * rootcontext.cs (EmitCode): Don't verify members when error
8122         occurred.
8123         
8124         * statement.cs (LocalInfo): Add reaodnly context information.
8125         (SetReadOnlyContext, GetReadOnlyContext): New methods.
8126
8127 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8128
8129         * statement.cs (Block.Resolve): Revert change below.  Modify fix
8130         for #74041 to initialize 'resolved' to false only for explicit
8131         blocks.  Fixes #74873.
8132
8133 2005-05-12  Raja R Harinath  <harinath@gmail.com>
8134
8135         Fix #74920.
8136         * typemanager.cs (unmanaged_enclosing_types): New.
8137         (IsUnmanagedType): Avoid infloops by using
8138         'unmanaged_enclosing_types' to talk with recursive invocations.
8139
8140 2005-05-13  Martin Baulig  <martin@ximian.com>
8141
8142         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
8143         instance variable, not a local.  Fix #74873.
8144         (Block.ResolveUnreachable): Set it to true here.
8145
8146 2005-05-11  Duncan Mak  <duncan@novell.com>
8147
8148         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
8149         continuing to process for 'arg'.
8150         (handle_preprocessing_directive): Check the argument of the #endif
8151         directive and report error CS1025 if there are any trailing
8152         characters.
8153
8154         According to the C# spec, having even whitespace after the #endif
8155         directive is illegal; however, because we call arg.TrimEnd ()
8156         beforehand, we have the same behavior as csc, allowing whitespace
8157         after the directive.
8158
8159         Fixes #74892.
8160
8161 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
8162
8163         Fix #74863.
8164         
8165         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
8166         (Constructor.GetObsoleteAttribute): Implemented correctly.
8167
8168 2005-05-10  Martin Baulig  <martin@ximian.com>
8169
8170         * support.cs (ReflectionParameters.ParameterModifier): Use
8171         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
8172         and `ParameterAttributes.In'.  Fixes #74884.
8173
8174 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
8175
8176         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
8177         
8178         * expression.cs (Argument.GetParameterModifier): Turned to property.
8179         (Invocation.Error_InvalidArguments): Add more descriptive errors.
8180         
8181         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
8182         its C# equivalent.
8183         
8184 2005-05-09  Raja R Harinath  <rharinath@novell.com>
8185
8186         Fix #74852.
8187         * decl.cs (MemberCache.AddMethods): Register override methods,
8188         rather than non-override methods.
8189         * typemanager.cs (RegisterOverride): New.
8190         (IsOverride): Update.
8191
8192 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
8193
8194         Fix #73105.
8195         
8196         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
8197         recursive declaration.
8198         
8199         * statement.cs (Block.ResolveMeta): Report any error in resolving.
8200         
8201 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
8202
8203         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
8204         
8205         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
8206
8207 2005-05-05  Raja R Harinath  <rharinath@novell.com>
8208
8209         Fix #74797.
8210         * decl.cs (DeclSpace.FamilyAccessible): 
8211         Use TypeManager.IsNestedFamilyAccessible.
8212
8213         Fix reopened #64812.
8214         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
8215         internal'.
8216
8217 2005-05-04  Raja R Harinath  <rharinath@novell.com>
8218             Abin Thomas  <projectmonokochi@rediffmail.com>
8219             Anoob V E  <projectmonokochi@rediffmail.com>
8220             Harilal P R  <projectmonokochi@rediffmail.com>
8221
8222         Fix #64812.
8223         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
8224         allow access to all static members.
8225
8226 2005-05-04  Martin Baulig  <martin@ximian.com>
8227
8228         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
8229
8230 2005-05-04  Martin Baulig  <martin@ximian.com>
8231
8232         Fix #74655.
8233
8234         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
8235         section at the end; make things work if `default' is not the last
8236         section.        
8237
8238 2005-05-04  Martin Baulig  <martin@ximian.com>
8239
8240         Fix #70400.
8241
8242         * statement.cs (Switch): Replaced the `got_default' field with a
8243         `default_section' one.
8244         (Switch.CheckSwitch): Set `default_section' here.
8245         (Switch.Resolve): If we're a constant switch and the constant is
8246         not found, use the default section.
8247
8248 2005-05-03  Martin Baulig  <martin@ximian.com>
8249
8250         * expression.cs (ArrayAccess.EmitGetLength): New public method.
8251
8252         * statement.cs (Foreach.ArrayForeach): New nested class.
8253         (Foreach.TemporaryVariable): New nested class.
8254         (Foreach.EmitArrayForeach): Removed; this is now in the new
8255         ArrayForeach class.
8256
8257 2005-05-03  Raja R Harinath  <rharinath@novell.com>
8258
8259         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
8260         more conservative.
8261         (VerifyPendingMethods): Revert change below.
8262
8263         * typemanager.cs (IsOverride, RegisterNonOverride): New.
8264         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
8265         that used to trigger warning -28.  Remove warning -28.
8266         * expression.cs (Invocation.OverloadResolve): Use
8267         TypeManager.IsOverride to distinguish override methods.
8268
8269         Fix #74773.
8270         * pending.cs (VerifyPendingMethods): If a base type implements the
8271         requested interface, don't bother checking individual methods of
8272         the base type.  As a side-effect, this prevents the creation of
8273         unnecessary proxies.
8274
8275 2005-05-02  Martin Baulig  <martin@ximian.com>
8276
8277         Fix #70182.
8278
8279         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
8280         Also `And' the locals if the old vector is null.
8281         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
8282         null; in this case we basically reset all the variables.        
8283
8284 2005-05-02  Martin Baulig  <martin@ximian.com>
8285
8286         Fix #74529.
8287
8288         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
8289         Added `FlowBranching branching' argument; always `and' the
8290         variables instead of `or'ing them unless we're an infinite loop.
8291
8292         * statement.cs (While.Resolve): Create a new sibling unless we're
8293         infinite.       
8294
8295 2005-05-02  Martin Baulig  <martin@ximian.com>
8296
8297         Fix #70140.
8298
8299         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
8300         arguments; use it instead of creating a new TopLevelBlock.
8301         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
8302         our ConstructorInitializer.
8303
8304         * statement.cs
8305         (TopLevelBlock.TopLevelBranching): New public property.
8306         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
8307         and create our `TopLevelBranching'.
8308
8309         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
8310         anonymous method host, use `block.TopLevelBranching' rather than
8311         creating a new branching.
8312
8313 2005-04-20  Miguel de Icaza  <miguel@novell.com>
8314
8315         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
8316         a ScopeInfo, if any of the current children is a child of the new
8317         entry, move those children there.
8318
8319 2005-04-30  Martin Baulig  <martin@ximian.com>
8320
8321         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
8322         at the beginning of a SwitchSection.  Fix #73335.
8323
8324 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
8325
8326         Fix #74378
8327         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
8328         
8329         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
8330         (FieldExpr.DoResolve): Obsolete members are ignored for field
8331         initializers.
8332         
8333 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
8334
8335         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
8336         of arrays detection.
8337
8338         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
8339         verification.
8340         (Field.VerifyClsCompliance): Volatile fields are not compliant.
8341
8342         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
8343         arrays report.
8344
8345 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
8346
8347         * cs-parser.jay: Use the prefered version of -unsafe in error
8348         message.
8349
8350 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
8351
8352         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
8353         circumstances.
8354
8355 2005-04-20  John Luke  <john.luke@gmail.com>
8356
8357         * driver.cs: fix typo in error message, --outout to --output
8358
8359 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
8360
8361         * codegen.cs (InRefOutArgumentResolving): New field.
8362         
8363         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
8364         fields outside contructor.
8365         
8366         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
8367         
8368 2005-04-19  Miguel de Icaza  <miguel@novell.com>
8369
8370         * anonymous.cs (CaptureContext.EmitParameterInstance): The
8371         parameter code was not completed ever, so it was not as up-to-date
8372         as local variables.  Must finish it.
8373
8374         The bug fix was to compare the Toplevel of the block, not the
8375         current block.  Thanks for Ben for pointing this out. 
8376
8377 2005-04-19  Raja R Harinath  <rharinath@novell.com>
8378
8379         * decl.cs (AddMethods): Use the declaring type of the problem
8380         method to determine if we want to squash a warning.
8381
8382 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
8383
8384         * attribute.cs: Removed debug output.
8385
8386         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
8387         
8388         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
8389         Report.Stderr.
8390         
8391 2005-04-18  Raja R Harinath  <rharinath@novell.com>
8392
8393         Fix #74481.
8394         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
8395         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
8396         all null comparisons against reference types.
8397
8398 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
8399
8400         Fix# 74565
8401         * class.cs (TypeContainer.CircularDepException) New nested
8402         exception class.
8403         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
8404         (TypeContainer.DefineType): Removed error, reset InTransit before
8405         exit.
8406         (Class.DefineType): Throw exception when is in Transit.
8407         Catch exception and report error.
8408         (Struct.DefineType): Throw exception when is in Transit.
8409         Catch exception and report error.
8410         (Interface.DefineType): Throw exception when is in Transit.
8411         Catch exception and report error.
8412
8413         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
8414         handle nested exception handlers.
8415
8416         * flowanalysis.cs (InTryWithCatch): New method, search for try with
8417         a catch.
8418
8419         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
8420         InFinally and InCatch storage.
8421
8422         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
8423         (Catch.Resolve): Set and Restore ec.InCatch.
8424         (Try.Resolve): Set and Restore ec.InFinally.
8425         (Try.HasCatch): True when try has catch.
8426
8427 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
8428
8429         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
8430           for the same event member, so exclude such cases from warning 419.
8431           Fixed bug #74633.
8432
8433 2005-04-16  Miguel de Icaza  <miguel@novell.com>
8434
8435         * expression.cs (Binary.ResolveOperator): Apply patch from John
8436         Luke to fix bug 59864: operators &, | and ^ on enumerations
8437         require that the same enum type on both sides.
8438
8439         * driver.cs: Add warnings to old flag usage, this is to assist
8440         people who produce Makefiles and hope that the Makefiles will be
8441         used on Windows.
8442
8443         * class.cs (TypeContainer.EmitType): Moved the definition of the
8444         special $PRIVATE$ field from the resolve phase to the Emit phase.
8445         During resolve we do not know if we are a struct with
8446         HasExplicitLayout, we know this only after the attributes for the
8447         type are emitted.
8448
8449         Set the FieldOffset to zero on the dummy field that we create for
8450         the class.   Fixes 74590.
8451
8452 2005-04-16  Raja R Harinath  <rharinath@novell.com>
8453
8454         Fix #73834.
8455         * ecore.cs (PropertyExpr.resolved): New.
8456         (DoResolve): Use it to handle a case of double resolution here.
8457         Handle a case of identical-name-and-type-name.
8458         * expression.cs (ArrayCreation.CheckIndices): Avoid double
8459         resolution by storing the results of expression resolution back
8460         into the "probes" array.
8461
8462 2005-04-15  Raja R Harinath  <rharinath@novell.com>
8463
8464         Fix cs0208-7.cs and cs0208-8.cs.
8465         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
8466         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
8467         error reporting to point out the reason a struct is not unmanaged.
8468
8469 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8470
8471         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
8472           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
8473
8474 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8475
8476         Fix #74528.
8477         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
8478         IdenticalNameAndTypeName here.
8479         (EventExpr.InstanceResolve): Likewise.
8480
8481 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
8482
8483         C# 2.0 DefaultCharSetAttribute implementation
8484         
8485         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
8486         which allows us to set GlobalNamespace for every resolve.
8487         (Attribute.ResolveArguments): Cut from Resolve.
8488         (Attribute.GetCharSetValue): Returns CharSet named argument.
8489         (Attribute.DefinePInvokeMethod): Gets default charset from
8490         module settings.
8491         (GlobalAttribute.ResolveAsTypeStep): Override.
8492         (GlobalAttribute.ResolveArguments): Override.
8493         
8494         * class.cs (TypeAttr): Is protected.
8495         
8496         * codegen.cs (ModuleClass.DefaultCharSet): New member.
8497         (ModuleClass.DefaultCharSetType): New memeber.
8498         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
8499         
8500         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
8501         charset from module.
8502         
8503         * delegate.cs (TypeAttr): Override.
8504         (Delegate.DefineType): Use this TypeAttr.
8505         
8506         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
8507         at very early stage (before types are defined) to resolve model
8508         module attributes. It will probably not work with corlib but it
8509         should be ok.
8510         
8511         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
8512         charset from module.
8513         
8514         * typemanager.cs (default_charset_type): New type.
8515
8516 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8517
8518         * decl.cs (MemberCache.AddMethods): Don't warn if
8519         System.Object.Finalize has buggy MethodAttributes.
8520
8521         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
8522         removed below.
8523
8524 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8525
8526         * doc.cs : detect ambiguous reference to overloaded members.
8527           Fixed bug #71603. MS 1.1 csc does not detect it.
8528
8529 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8530
8531         * doc.cs : delegates must not be referenced with parameters.
8532           Fixed bug #71605.
8533
8534 2005-04-12  Miguel de Icaza  <miguel@novell.com>
8535
8536         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
8537
8538 2005-04-10  Miguel de Icaza  <miguel@novell.com>
8539
8540         * driver.cs (MainDriver): Stop processing if the CLS stage found
8541         errors. 
8542
8543         (CompilerCallableEntryPoint.InvokeCompiler): Always
8544         reset after execution;   Take a TextWriter argument for the
8545         output.
8546
8547         * report.cs: Use the error stream instead of hardcoding stderr. 
8548
8549 2005-04-09  Miguel de Icaza  <miguel@novell.com>
8550
8551         * class.cs: Reduce code paths to test, too small of an
8552         optimization to make it worth the extra testing.  Always perform
8553         it. 
8554
8555 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8556
8557         Fix #74510.
8558         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
8559         operators that had errors reported on them.
8560
8561 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
8562
8563         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
8564         argument types.
8565         (Attribute.Resolve): Add named argument type checking.
8566         
8567         * class.cs (FixedField.Define): Use IsPrimitiveType
8568         
8569         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
8570         
8571         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
8572         unsafe parameter types.
8573         
8574         * statement.cs (Using.ResolveExpression): Add better error description.
8575         
8576         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
8577         
8578 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8579
8580         Fix #74484.
8581         * attribute.cs (Attribute.GetAttributeUsage): Resolve
8582         AttributeUsageAttribute in the emitcontext of the attribute class,
8583         not in the emitcontext of the attributable entity it was attached to.
8584         * cs-parser.jay: Use 'current_class', not 'current_container',
8585         when creating a GlobalAttribute.
8586
8587 2005-04-08  Alp Toker  <alp@atoker.com>
8588
8589         * pending.cs: The fix to #58413 failed to compile methods implementing
8590         interfaces with/without params modifiers and vice versa, even though
8591         params modifiers aren't part of the signature. Make the modifier check
8592         less strict as in csc.
8593
8594 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
8595             Anoob V E  <projectmonokochi@rediffmail.com>
8596             Harilal P R  <projectmonokochi@rediffmail.com>
8597
8598         Fix #58413.
8599         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
8600         modifiers of pending methods.
8601         (PendingImplementation.PendingImplementation): Initialize it.
8602         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
8603         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
8604         with ParameterData.  Add check for modifiers.
8605         * class.cs (MethodData.Define): Update to changes.
8606
8607 2005-04-07  Raja R Harinath  <rharinath@novell.com>
8608
8609         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
8610
8611 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
8612
8613         * class.cs (PropertyMethod.Define): Check private accessor in abstract
8614         property.
8615         
8616         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
8617         
8618         * rootcontext.cs,
8619         * typemanager.cs: Registered RequiredAttributeAttribute.
8620         
8621 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
8622
8623         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
8624         Warning CS0169 is back at level 3.
8625         (IMethodData.SetMemberIsUsed): New method.
8626         
8627         * decl.cs (IsUsed): New value; moved from FieldBase.Status
8628         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
8629         
8630         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
8631
8632         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
8633         contants.
8634         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
8635         is used.
8636         
8637         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
8638         is used.
8639         
8640         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
8641         to avoid the problems with nested types.
8642
8643 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
8644             Anoob V.E  <projectmonokochi@rediffmail.com>
8645             Harilal P.R  <projectmonokochi@rediffmail.com>
8646             Raja R Harinath  <rharinath@novell.com>
8647
8648         Fix #73820.
8649         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
8650         attribute.
8651         * typemanager (GetConstructor): Make public.
8652
8653 2005-04-05  John Luke  <john.luke@gmail.com>
8654             Raja R Harinath  <rharinath@novell.com>
8655
8656         Fix #62232.
8657         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
8658         struct too.  Return false quicker in a few cases.
8659         (VerifyUnManaged): Use it.
8660
8661 2005-04-05  Raja R Harinath  <rharinath@novell.com>
8662
8663         Fix #74041.
8664         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
8665         not 'unreachable_seen'.
8666
8667 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
8668
8669         * attribute.cs (Attribute.GetValue): Removed unused.
8670         
8671         * codegen.cs (CodeGen.TrimExt): Removed unused.
8672         
8673         * cs-parser.jay (output): Removed unused.
8674         
8675         * cs-tokenizer.cs (hex_digits): Removed unused.
8676         
8677         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
8678         
8679         * expression.cs (Indirection.LoadExprValue): Removed unused.
8680         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
8681         
8682         * iterators.cs (Iterator.param_types): Removed unused.
8683         
8684         * statement.cs (Goto.block): Removed unused.
8685         (ToplevelBlock.did): Removed unused.
8686         (Switch.ResolveConstantSwitch): Removed unused.
8687
8688 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
8689
8690         * rootcontext.cs: Allow mcs to bootstrap with the compilation
8691         resetting thingy.
8692
8693 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8694
8695         Fix #74232 and cs0208-3.cs.
8696         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
8697         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
8698         unmanaged type.  Don't use FieldBuilders when 't' is a
8699         TypeBuilder.  Use ModFlags and MemberType fields.
8700         * class.cs (MemberBase.member_type): Rename from MemberType.
8701         (MemberBase.MemberType): New property.  Determines member_type on
8702         demand.
8703         (MemberBase.DoDefine): Don't initialize MemberType here.
8704         (FieldMember.Define): Likewise.
8705
8706 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
8707
8708         Fix #74241
8709         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
8710         Attributes are emitted there.
8711         
8712 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8713
8714         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
8715         keyword in 'partial enum' too.
8716         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
8717         is not allowed).
8718         Report from Kamil Skalski <nazgul@omega.pl>.
8719
8720         Fix #74309.
8721         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
8722         have partial containers too.
8723
8724         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
8725         in block' checks to Block.CheckInvariantMeaningInBlock.
8726         * statement.cs (Block.GetKnownVariableInfo): Make private.
8727         (Block.IsVariableUsedInChildBlock): Remove.
8728         (Block.IsVariableUsedInBlock): Likewise.
8729         (Block.CheckInvariantMeaningInBlock): New.  Show location of
8730         conflicting declaration.
8731         (Block.AddVariable): Make error messages less long-winded and more
8732         specific.  Show location of conflicting declaration.
8733         * parameter.cs (Parameters.Location): New readonly property.
8734
8735 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8736
8737         Clean up semantics of invoking ResolveMemberAccess.
8738         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
8739         can have an instance, ensure that we pass in a non-TypeExpression
8740         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
8741         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
8742         argument.  Update to changes and simplify.
8743         (FieldExpr.Emitinstance): Remove CS0120 check.
8744         (PropertyExpr.EmitInstance): Likewise.
8745         * expression.cs (Argument.Resolve): Likewise.
8746         (Invocation.DoResolve): Update to changes in semantics of
8747         InstanceExpression.
8748
8749 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
8750
8751         Fix #74241
8752         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
8753         customization.
8754         
8755         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
8756
8757 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8758
8759         Fix difference in behaviour with commandline invocation.
8760         * driver.cs (Driver.Reset): New.
8761         (CompilerCallableEntryPoint): Call it.
8762
8763         * statement.cs (If.Resolve): Avoid spurious "uninitialized
8764         variable" warnings if the boolean expression failed to resolve.
8765
8766 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
8767
8768         * attribute.cs: Fix the union of several permissions when some of them
8769         are unrestricted (so the result isn't an unrestricted permission set).
8770         Fix #74036.
8771
8772 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8773
8774         * ecore.cs (MemberExpr): New class.  Convert from interface
8775         IMemberExpr.
8776         (MemberExpr.ResolveMemberAccess): Refactor and move here from
8777         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
8778         error checks.
8779         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
8780         (MethodGroupExpr.IsExplicitImpl): Remove.
8781         (Expression.GetFieldFromEvent): Remove.
8782         (SimpleName.MemberStaticCheck): Remove.
8783         (SimpleName.DoSimpleNameResolve): Update to changes.
8784         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
8785         (MemberAccess.IdenticalNameAndTypeName): Remove.
8786         (MemberAccess.error176): Move to MemberExpr.
8787         (MemberAccess.DoResolve): Update to changes.
8788         (BaseAccess.DoResolve): Likewise.
8789
8790 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
8791
8792         C# 2.0 Conditional attribute class implementation
8793         
8794         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
8795         Analyzes class whether it has attribute which has ConditionalAttribute
8796         and its condition is not defined.
8797         
8798         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
8799         (Class.IsExcluded): New method. Search for at least one defined
8800         condition in ConditionalAttribute of attribute class.
8801
8802 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8803
8804         * ecore.cs (PropertyExpr): Derive from Expression, not
8805         ExpressionStatement.
8806         (PropertyExpr.EmitStatement): Remove.
8807
8808 2005-03-29  Raja R Harinath  <rharinath@novell.com>
8809
8810         Fix #74060.
8811         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
8812         internal field "value__" of an enum be private.  The examples for
8813         "value__" that I found on MSDN all used FieldAttributes.Private.
8814
8815         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
8816         Don't mention IL method attribute names.
8817
8818         Fix #47991.  Remove a TODO.
8819         * statement.cs (Block.Toplevel): Make into a field.
8820         (Block.Parameters): Move into ToplevelBlock.
8821         (Block.known_variables): Rename from child_variable_names.
8822         (Block.Block): Remove variants that take Parameters.  Initialize
8823         'Toplevel' with the immediately surrounding toplevel block.
8824         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
8825         LocalInfo parameter.
8826         (Block.GetKnownVariableInfo): New.
8827         (Block.IsVariableNameUsedInChildBlock): Update.
8828         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
8829         the block, even though it may not be in scope.
8830         (Block.AddVariable): Remove Parameters parameter.  Use
8831         Toplevel.Parameters instead.
8832         (Block.AddConstant): Remove Parameters parameter.
8833         (Block.GetParameterReference): Update to use Toplevel.Parameters.
8834         (Block.IsParamaterReference): Likewise.
8835         (Block.IsLocalParameter): Likewise.  Simplify a lot.
8836         (ToplevelBlock.Parameters): New.  Moved from Block.
8837         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
8838         initialize Parameters to a non-null value.
8839         * cs-parser.jay: Update to changes.
8840         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
8841         simple names that mean different things in the same block.  Use
8842         Block.IsVariableNameUsedInBlock.
8843
8844 2005-03-28  Raja R Harinath  <rharinath@novell.com>
8845
8846         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
8847         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
8848         GetTypeHandle.  It is possible for a reflected type to derive from
8849         a TypeBuilder (e.g., int[] derives from the TypeBuilder
8850         System.Array during mscorlib compilation).
8851         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
8852         contain a method_hash, don't create one either.  Don't create a
8853         deep copy of the base cache's method_hash.
8854         (MemberCache.SetupCache): Rename back from DeepCopy.
8855         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
8856         already initialized.  If we see an override function, add its
8857         underlying base virtual function to the member_hash too.
8858
8859         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
8860
8861 2005-03-26  Raja R Harinath  <harinath@acm.org>
8862
8863         Fix #73038.
8864         * assign.cs (Assign.DoResolve): When the RHS of an assignment
8865         fails to resolve, ensure that the LHS is still resolved as an
8866         lvalue.
8867
8868 2005-03-25  Raja R Harinath  <harinath@acm.org>
8869
8870         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
8871         ec.ContainerType.
8872         (Enum.current_ec): Remove.
8873         (Enum.LookupEnumValue): Remove EmitContext argument.
8874         Just uses the one created during DefineType.
8875         (Enum.FindMembers): Update.
8876         * expression.cs (MemberAccess.DoResolve): Update.
8877
8878 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
8879
8880         * assign.cs (Assign.DoResolve): Check for CS1717 when
8881         source and target are same (uses Equals).
8882
8883         * expression.cs (LocalVariableReference, ParameterReference,
8884         This): Implemented Equals, GetHashCode.
8885
8886         * statement.cs (Block.GetParameterReference): Removed useless
8887         local variable.
8888
8889 2005-03-22  Raja R Harinath  <rharinath@novell.com>
8890
8891         Fix cs0128.cs
8892         * statement.cs (Block.AddVariable): Ensure that we skip implicit
8893         blocks before deciding whether the error is cs0136 or cs0128.
8894
8895         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
8896         (using_alias_directive, using_namespace_directive): Pass
8897         MemberName, not an expression to Namespace.UsingAlias and
8898         Namespace.Using.
8899         (MakeName): Use the MemberName of the namespace.
8900         * namespace.cs (Namespace.MemberName): New.
8901         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
8902         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
8903         Likewise.
8904         * decl.cs (MemberName.Name): Make readonly.
8905         (MemberName.FromDotted): New "constructor".
8906         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
8907         (MemberCore.Name): Compute from MemberName on demand.
8908         (MemberCore.SetMemberName): Provide a way to change the
8909         MemberName.
8910         (MemberCore.AddToContainer): Don't take a fullname parameter.
8911         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
8912         fully qualified name of the container to the member name.
8913         (TypeContainer.AddToTypeContainer): Use a fully qualified name
8914         only if the type is a member of the root container.
8915         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
8916         MemberName.Left rather than searching for an embedded ".".
8917         (PartialContainer.CreatePart): Update to changes in RootContext.
8918         (MemberBase.ShortName): Turn into a property.  Use
8919         MemberCore.SetMemberName.
8920         (MemberBase.ExplicitInterfaceName): Remove.
8921         (MemberBase.UpdateMemberName): Remove.
8922         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
8923         (PropertyBase.SetMemberName): New override.
8924         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
8925         (Tree.GetDecl): New.
8926         (Tree.AllDecls): Rename from Decls.
8927         * attribute.cs, enum.cs, report.cs: Update to changes.
8928         * driver.cs (MainDriver): Use MemberName.FromDotted on
8929         RootContext.MainClass.
8930
8931 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
8932
8933         * class.cs (FixedField.Define): Check for CS1664 and more sanity
8934         checks.
8935
8936         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
8937
8938 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
8939
8940         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
8941         property accessor modifiers.
8942
8943         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
8944         fixed buffer attribute (CS1716).
8945         (PropertyMethod.HasCustomAccessModifier): When property accessor
8946         has custom modifier.
8947
8948         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
8949         modifiers.
8950         (PropertyExpr.DoResolveLValue): Add CS0272.
8951
8952 2005-03-17  Miguel de Icaza  <miguel@novell.com>
8953
8954         * convert.cs: When converting to a pointer, use the proper Conv.U
8955         or Conv.I depending on the source data type.
8956
8957         * cs-tokenizer.cs: Make the size for large decimal constants,
8958         fixes #72957.
8959
8960 2005-03-17  Martin Baulig  <martin@ximian.com>
8961
8962         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
8963         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
8964
8965 2005-03-17  Martin Baulig  <martin@ximian.com>
8966
8967         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
8968         to bool so we can return an error condition.
8969         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
8970         returned an error.
8971
8972 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
8973
8974         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
8975         attributes.
8976
8977 2005-03-16  Raja R Harinath  <rharinath@novell.com>
8978
8979         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
8980         Refactor to avoid traversing the list of assemblies, and to avoid
8981         string concatenation.
8982         * typemanager.cs (guid_attr_type): Remove.
8983         (negative_hits, pointers, references): Remove hashes.
8984         (type_hash): New.
8985         (GetConstructedType): New.  Uses type_hash to handle constructed
8986         types (arrays, references, pointers).
8987         (GetReferenceType, GetPointerType): Use it.
8988         (GetNestedType): New.  Uses type_hash to handle nested types of
8989         reflected types.
8990         (LookupType, LookupTypeDirect): Remove.
8991         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
8992         'types' hash and LookupTypeReflection directly.
8993         (params_string, params_object): Use GetConstructedType.
8994         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
8995         top-level types.
8996         (Namespace.Lookup): Use cached_types.
8997         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
8998         provided by old TypeManager.LookupType.
8999         * rootcontext.cs (MakeFQN): Remove.
9000         * decl.cs (DeclSpace.MakeFQN): Likewise.
9001         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
9002         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
9003         TypeManager.GetConstructedType.
9004         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
9005
9006 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
9007
9008         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
9009         indexers.
9010
9011         * cs-parser.jay: Reports CS1527 for any namespace element.
9012
9013         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
9014         Added CS0407.
9015
9016         * expression.cs (ParameterReference.IsAssigned): Changed error to
9017         CS0269.
9018         (Error_WrongNumArguments): Moved CS0245 detection here.
9019
9020         * statement.cs (Return.Resolve): Add CS1622 report.
9021
9022 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
9023
9024         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
9025
9026 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
9027
9028         * attribute.cs expression.cs: Get rid of some allocations.
9029
9030 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
9031
9032         * doc.cs : just eliminate the latest change.
9033
9034 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9035
9036         * doc.cs : commented out the latest change. It breaks xml-030.cs
9037
9038 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9039
9040         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
9041           fail. So invoke CreateType() in FindDocumentedType().
9042
9043 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9044
9045         * cs-tokenizer.cs : added IsKeyword().
9046         * doc.cs : Detect keyword incorrectly used as identifier.
9047           Allow identifiers prefixed by @.
9048
9049 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
9050
9051         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
9052         It caused exception in namespace resolving (again!).
9053         
9054         * class.cs (Class.ctor): Removed exit.
9055         (PropertyMethod.ctor): ditto.
9056         
9057         * codegen.cs (Codegen.Reset): Reset static data.
9058         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
9059         
9060         * cs-tokenizer.cs (Cleanup): Removed.
9061         
9062         * driver.cs (GetSystemDir): Rewrote to one line command.
9063         It caused problem with unloaded dynamic modules.
9064         (UnixParseOption): Removed Exit.
9065         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
9066         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
9067         Now can be mcs used as library.
9068         
9069         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
9070         empty location.
9071         
9072         * location.cs (Reset): Reset static data.
9073         
9074         * namespace.cs (Reset): Reset static data.
9075         
9076         * report.cs (Report.Reset): Reset static data.
9077         
9078         * rootcontext.cs (RootContext.Reset): Reset static data.
9079         
9080         * tree.cs (RootTypes.ctor): Use Location.Null
9081         
9082         * typemanager.cs (TypeManager.Reset): Reset static data.
9083         (CoreLookupType): Removed Exit.
9084         (TypeHandle.Reset): Reset static data.
9085         
9086 2005-03-10  Raja R Harinath  <rharinath@novell.com>
9087
9088         Fix #73516.
9089         * typemanager.cs (ComputeNamespaces): Import namespaces from
9090         referenced modules too.
9091
9092 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9093
9094         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
9095         than '.'.
9096
9097 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9098
9099         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
9100         enclosing DeclSpace.  This ensures that a name-lookup populates
9101         more caches and there are fewer 'TypeExpression's.  Carve out
9102         nested type lookup into ...
9103         (LookupNestedTypeInHierarchy): ... this.
9104
9105 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9106
9107         Clean up a few partial-class semantics.  
9108         Fixes test-357.cs and cs1618-2.cs.
9109         * cs-parser.jay (struct_declaration): Use 'current_class' as
9110         parent of newly-created struct.  Remove call to Register ().
9111         Use 'pop_current_class' to complete handing the current struct.
9112         (interface_declaration): Likewise.
9113         (class_declaration): Likewise.
9114         (enum_declaration): Use 'current_class' as parent of newly created
9115         enum.
9116         (delegate_declaration): Likewise.
9117         (pop_current_class): New function.  This is used to handle closing
9118         up the 'current_class' and 'current_container', and pointing them
9119         to the enclosing class/container.
9120         (CSharpParser): Initialize 'current_class' too.
9121         * decl.cs (MemberCore): Add check for invariant: a partial
9122         container is not a parsed entity, and thus does not enclose any
9123         parsed members.
9124         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
9125         (DeclSpace.BaseTypeExpr): Use it.
9126         (DeclSpace.LookupType): Add check for invariant.
9127         * class.cs (TypeContainer): Add check for invariant: a nested
9128         class should have the same NamespaceEntry as its enclosing class.
9129         (TypeContainer.EmitFieldInitializers): Make virtual.
9130         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
9131         MemberCore.
9132         (TypeContainer.Register): Remove.
9133         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
9134         null.  Use TypeResolveEmitContext for resolving base types and
9135         interfaces.  Move initialization of Parts.TypeBuilder here from
9136         ...
9137         (TypeContainer.DefineNestedTypes): ... here.
9138         (PartialContainer): Take a Namespace not a NamespaceEntry.
9139         (PartialContainer.Create): Don't use Register.  Call the
9140         appropriate Add... function directly.
9141         (ClassPart): Take both the PartialContainer and the enclosing
9142         class as constructor arguments.
9143         (ClassPart.EmitFieldInitializers): Override.
9144         (ClassPart.PartFindNestedTypes): Remove.
9145         (FieldBase.GetInitializerExpression): Resolve the initializer
9146         expression in the emit context of the enclosing class.
9147         * tree.cs (RootTypes): Remove Register ().
9148         
9149 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
9150
9151         * cs-parser.jay: Removed CS0134.
9152         
9153         * driver.cs: Removed CS1901.
9154         
9155         * expression.cs (SizeOf.DoResolve): Don't report CS0233
9156         for predefined types.
9157
9158 2005-03-07  Duncan Mak  <duncan@novell.com>
9159
9160         * codegen.cs (Save):  Catch UnauthorizedAccessException as
9161         well. Fixes bug #73454.
9162
9163 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
9164
9165         * cs-tokenizer.cs (xtoken): Add CS1035.
9166         
9167         * class.cs (MethodData.Define): Add CS0683.
9168         (FieldMember.ctor): Add CS0681.
9169
9170 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9171
9172         * ecore.cs (SimpleName.DoResolve): Rename from
9173         SimpleName.DoResolveAllowStatic.
9174         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
9175         Pass 'intermediate' flag to MemberStaticCheck.
9176         (SimpleName.MemberStaticCheck): Skip "static check" only in case
9177         of "intermediate" lookups via MemberAccess.
9178         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
9179         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
9180
9181 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9182
9183         Fix #73394.
9184         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
9185         slipped in because of variable names that are identical to a
9186         builtin type's BCL equivalent ('string String;', 'int Int32;').
9187         (PropertyExpr.EmitInstance): Likewise.
9188
9189 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
9190
9191         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
9192         
9193         * report.cs (warning_ignore_table): Made public.
9194
9195 2005-03-04  Raja R Harinath  <rharinath@novell.com>
9196
9197         Fix #73282.
9198         * class.cs (MethodData.Emit): Pass 'container' to
9199         container.GetObsoleteAttribute instead of 'container.Parent'.
9200
9201 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
9202
9203         * cs-parser.jay: Add 1534 error test.
9204
9205         * iterators.cs (Yield.CheckContext): Add error 1629.
9206         (Iterator.ctor): Save unsafe modifier.
9207         (MoveNextMethod.DoEmit): Restore unsafe context.
9208
9209         * namespace.cs (UsingAlias): Better error message.
9210
9211 2005-03-03  Dan Winship  <danw@novell.com>
9212
9213         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
9214         the warning message [#73219]
9215
9216 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9217
9218         Fix compile with MCS 1.0.0.0.
9219         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
9220         w_restore to not depend on string constant folding.
9221
9222 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9223
9224         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
9225         CS0246 check to users who passed 'silent = false'.
9226         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
9227         check.
9228         (SimpleName.SimpleNameResolve): Update.
9229         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
9230         (MemberAccess.IdenticalNameAndTypeName): Update.
9231         * doc.cs (FindDocumentedTypeNonArray): Update.
9232
9233 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
9234
9235         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
9236         * parameters.cs (ComputeAndDefineParameters): Remove.
9237         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
9238         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
9239         Use GetParameterInfo.
9240
9241 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
9242
9243         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
9244
9245 2005-03-02  Raja R Harinath  <rharinath@novell.com>
9246
9247         Unify DeclSpace.LookupType and DeclSpace.FindType.
9248         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
9249         is in charge of defining nested types on demand.
9250         (DeclSpace.LookupType): Use it when the current_type is a
9251         TypeBuilder.  Use LookupTypeDirect for reflected types.
9252         (DeclSpace.FindType): Remove.
9253         (DeclSpace.LookupInterfaceOrClass): Likewise.
9254         (DeclSpace.DefineTypeAndParents): Likewise.
9255         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
9256         DeclSpace.LookupType.
9257         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
9258         * typemanager.cs (LookupType): Simplify.
9259         (AddUserType): Remove type from negative_hits.
9260         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
9261         * class.cs (TypeContainer.FindMembers): Move handling of nested
9262         types ...
9263         (TypeContainer.FindMembers_NestedTypes): ... here.
9264         (TypeContainer.FindNestedType): Implement override.
9265         (ClassPart.FindNestedType): Delegate to PartialContainer.
9266         (ClassPart.PartFindNestedType): Looks up the nested types of the
9267         part alone.
9268
9269 2005-03-02  Martin Baulig  <martin@ximian.com>
9270
9271         * class.cs (TypeContainer.DoDefineMembers): We also need a default
9272         static constructor in static classes.
9273
9274 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
9275
9276         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
9277         sizeParamIndex is not specified.
9278
9279 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
9280
9281         Fix #73117
9282         * report.cs (WarningMessage.IsEnabled): Missing null check.
9283
9284 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9285
9286         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
9287         in the fields and not in the properties.
9288
9289 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
9290
9291         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
9292         fields as well.
9293
9294 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9295
9296         * attribute.cs: Small refactoring (improved robustness).
9297         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
9298         (ValidateGuid): Removed.
9299         (Resolve): Removed referenced to above mentioned.
9300         (GetAttributeUsage): Made private and changed to work without
9301         class assistance.
9302         (GetIndexerAttributeValue): Don't crash.
9303         (GetConditionalAttributeValue): Ditto.
9304         (GetClsCompliantAttributeValue): Ditto.
9305         (ExtractSecurityPermissionSet): All attributes exceptions are
9306         error 648.
9307         (GetPropertyValue): New helper.
9308         (GetMethodImplOptions): New method.
9309         (DefinePInvokeMethod): Reuse common code. Implemented handling of
9310         some missing properties.
9311         
9312         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
9313         (Method.ApplyAttributeBuilder): Updated.
9314         
9315         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
9316         exception.
9317
9318 2005-02-28  Raja R Harinath  <rharinath@novell.com>
9319
9320         Fix #73052.
9321         * report.cs (Report.SymbolRelatedToPreviousError): Handle
9322         non-simple types (array, pointer, reference).
9323
9324 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9325
9326         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
9327
9328         * class.cs (MethodCore.IsDuplicateImplementation): Special error
9329         for operators.
9330         (Method.CheckBase): Catch wrong destructor here.
9331         (MethodData.Define): Add errors 550, 668.
9332
9333         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
9334
9335         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
9336
9337         * pending.cs (VerifyPendingMethods): Add error 551.
9338
9339         * typemanager.cs (CSharpName): Next error report helper.
9340
9341 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
9342
9343         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
9344         attributes. Removed useless attribute double check.
9345         It saves almost 2MBs for corlib.
9346
9347 2005-02-25  Raja R Harinath  <rharinath@novell.com>
9348
9349         Fix #72924.
9350         * statement.cs (ExpressionStatement.Resolve): Make robust to being
9351         called twice in case of error.
9352
9353 2005-02-23  Chris Toshok  <toshok@ximian.com>
9354
9355         Fix compiler portions of #72827.
9356         * statement.cs (Block.Emit): call Begin/EndScope on the
9357         EmitContext instead of the ILGenerator.
9358
9359         * codegen.cs (EmitContext.BeginScope): new method, call
9360         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
9361         we have one.)
9362         (EmitContext.BeginScope): same, but EndScope and CloseScope
9363
9364         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
9365         offset and call the superclass's OpenScope(int) with it.
9366         (SymbolWriter.CloseScope): get the current il
9367         offset and call superclass's CloseScope(int) with it.
9368
9369 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
9370
9371         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
9372         CS1677 for out and ref as well.
9373
9374         * class.cs (Method.Define): Add error CS1599 detection.
9375         
9376         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
9377         
9378         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
9379         
9380         * delegate.cs (Delegate.Define): Add error CS1599 detection.
9381         
9382         * support.cs.cs (ModifierDesc): New helper method.
9383
9384 2005-02-23  Raja R Harinath  <rharinath@novell.com>
9385             Abin Thomas  <projectmonokochi@rediffmail.com>
9386             Anoob V E  <projectmonokochi@rediffmail.com>
9387             Harilal P R  <projectmonokochi@rediffmail.com>
9388
9389         Fix #57851, #72718.
9390         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
9391         MemberLookup (used for error reporting) actually returns a result.
9392         Fix error report number (122, not 112).
9393
9394 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
9395             Anoob V E  <projectmonokochi@rediffmail.com>
9396             Harilal P R  <projectmonokochi@rediffmail.com>
9397
9398         Fix #71134.
9399         * pending.cs (PendingImplementation.GetAbstractMethods):
9400         Find NonPublic members too.
9401
9402 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
9403
9404         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
9405         Fixed error 217.
9406         
9407         * class.cs (MethodCore.CheckMethodAgainstBase):
9408         Add error 239 report.
9409
9410 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9411
9412         Fix #68955.
9413         * expression.cs (Invocation.IsApplicable): Make public.
9414         (Invocation.IsParamsMethodApplicable): Likewise.
9415         * delegate.cs (Delegate.VerifyApplicability): Don't use
9416         Invocation.VerifyArgumentCompat for parameter applicability
9417         testing.  Use Invocation.IsApplicable and
9418         Invocation.IsParamsMethodApplicable.
9419
9420 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9421
9422         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
9423         
9424         * class.cs (Operator.Define): Add error 217 report.
9425         
9426 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9427
9428         * namespace.cs (UsingEntry.Resolve): Undo change below.
9429
9430 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9431
9432         Fix #72756.
9433         * ecore.cs (Expression.MemberLookupFailed): Add argument to
9434         disable the error message when the extended MemberLookup also
9435         fails.
9436         (Expression.MemberLookupFinal): Update.
9437         (SimpleName.DoSimpleNameResolve): Update.
9438         * expression.cs (MemberAccess.ResolveNamespaceOrType):
9439         Don't use MemberLookupFinal.
9440         (New.DoResolve): Update.
9441         (BaseAccess.CommonResolve): Update.
9442
9443 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9444
9445         Fix #72732.
9446         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
9447         occured previously, don't resolve again.
9448
9449 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9450
9451         Fix #69949
9452         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
9453         argument. Call ResolveAttributeUsage for unresolved.
9454         when types doesn't match ctor arguments.
9455         
9456         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
9457         for nested attribute classes.
9458         (Class.attribute_usage): Removed.
9459         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
9460         for attribute class.
9461         
9462         * ecore.cs (IsAttribute): Removed.
9463         
9464         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
9465         
9466         * rootcontext.cs (RegisterAttribute): Removed, attributes are
9467         now normal types.
9468         (attribute_types): Removed.
9469         (EmitCode): Global attributes are emited as the latest.
9470
9471 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
9472
9473         * class.cs (EmitFieldInitializers): Don't emit field initializer
9474         for default values when optimilization is on.
9475         
9476         * constant.cs (Constant.IsDefaultValue): New property.
9477         
9478         * driver.cs: Add /optimize handling.
9479         
9480         * constant.cs,
9481         * ecore.cs,
9482         * literal.cs: Implement new IsDefaultValue property.
9483         
9484         * rootcontext.cs (Optimize): New field, holds /optimize option.
9485
9486 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9487
9488         Fix crasher in re-opened #72347.
9489         * namespace.cs (Namespace.Lookup): Return null if
9490         DeclSpace.DefineType returns null.
9491
9492         Fix #72678.
9493         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
9494
9495 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9496
9497         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
9498         now returns null if it cannot resolve to an lvalue.
9499         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
9500         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
9501         returned null.  Remove check for SimpleName.
9502         (EventExpr.DoResolveLValue): New.
9503         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
9504         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
9505         error from ...
9506         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
9507         avoid CS0131 error.
9508         (Unary.ResolveOperator): Move CS0211 check ...
9509         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
9510         CS0131 error.
9511         (Unary.DoResolveLValue): Simplify.
9512         (AddressOf.DoResolveLValue): New.
9513         (ArrayAccess.DoResolveLValue): New.
9514
9515 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
9516
9517         * attribute.cs (Attribute.Resolve): Add arguments casting for
9518         when types doesn't match ctor arguments.
9519
9520 2005-02-16  Raja R Harinath  <rharinath@novell.com>
9521
9522         Fix parts of #63202.
9523         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
9524         lookup of operator in base type.  Ensure that all checks happen
9525         when the operator resolves to an "op_..." method.
9526
9527 2005-02-15  Raja R Harinath  <rharinath@novell.com>
9528
9529         Fix #71992.
9530         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
9531         'ignore_cs0104' parameter.  Pass it to ...
9532         (NamespaceEntry.Lookup): ... this.
9533         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
9534         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
9535         (TypeLookupExpression.DoResolveAsTypeStep): Update.
9536         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
9537         Update.  Request that cs0104 errors be ignored.
9538         (ComposedCast.ResolveAsTypeStep): Update.
9539
9540 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9541
9542         Fix #59209.
9543         * expression.cs (Invocation.BetterFunction): Remove support for
9544         comparing virtual functions and their overrides.
9545         (Invocation.IsOverride): New.
9546         (Invocation.OverloadResolve): Don't consider 'override' functions
9547         during candidate selection.  Store them in a lookaside list.
9548         If the selected method is a 'virtual' function, use the list to
9549         find any overrides that are closer to the LHS type.
9550
9551 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
9552
9553         * expression.cs (New.DoResolve): Add complex core type reduction.
9554         (New.Constantify): Converts complex core type syntax like 'new int ()'
9555         to simple constant.
9556         
9557 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9558
9559         * decl.cs (EntryType.EntryType): New constructor to create an
9560         updated copy of a cache entry.
9561         (MemberCache.AddMethods): Use it.
9562         (MemberCache.ClearDeclaredOnly): Remove.
9563         (MemberCache.MemberCache): Update.
9564
9565 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9566
9567         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
9568         variable.  This one is represents the actual low-level declaration
9569         of the method, as opposed to the semantic level `IsStatic'.   
9570
9571         An anonymous method which is hosted into a static method might be
9572         actually an instance method.  IsStatic would reflect the
9573         container, while MethodIsStatic represents the actual code
9574         generated.
9575
9576         * expression.cs (ParameterReference): Use the new MethodIsStatic
9577         instead of IsStatic.
9578
9579         * anonymous.cs (AnonymousMethod.Compatible): Pass the
9580         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
9581         set on the current EmitContext. 
9582
9583         * expression.cs (Cast): Overload DoResolveLValue so we can pass
9584         resolve our casted expression as an LValue.  This triggers the
9585         proper LValue processing that is later required by Assign.
9586
9587         This fixes 72347.
9588
9589         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
9590
9591 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
9592
9593         C# 2.0 Fixed buffer implementation
9594
9595         * anonymous.cs: Update after RegisterHelperClass renaming.
9596
9597         * attribute.cs (AttributeTester.fixed_buffer_cache):
9598         Cache of external fixed buffers.
9599         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
9600         implementation if field is fixed buffer else null.
9601
9602         * class.cs
9603         (TypeContainer.AddField): Accept FieldMember instead of Field.
9604         (FieldBase.IsFieldClsCompliant): Extracted code from
9605         VerifyClsCompliance descendant customization.
9606         (FixedField): New class handles fixed buffer fields.
9607         (FixedFieldExternal): Keeps information about imported fixed
9608         buffer.
9609         (IFixedField): Make access to internal or external fixed buffer
9610         same.
9611
9612         * cs-parser.jay: Add fixed buffer parsing.
9613
9614         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
9615         buffer.
9616
9617         * expression.cs (Indirection): Extended implementation to accept
9618         fixed buffer field.
9619         (PointerArithmetic.Emit): Get element from fixed buffer as well.
9620         (ElementAccess.MakePointerAccess): Get type as parameter.
9621         (DoResolve): Add fixed buffer field expression conversion.
9622         (DoResolveLValue): Ditto.
9623         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
9624         (ArrayPtr): Derives from FixedBufferPtr.
9625         (ArrayPtr.Emit): Add extra emit for array elements.
9626
9627         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
9628
9629         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
9630         for compiler generated types.
9631         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
9632
9633         * statement.cs (Fixed): Refactored to be easier add fixed buffer
9634         and consume less memory.
9635         (Fixed.Resolve): Add fixed buffer case.
9636
9637         * typemanager.cs (compiler_generated_attr_ctor,
9638         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
9639         (HasElementType): Add our own implementation to work on every
9640         runtime.
9641
9642 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9643
9644         * anonymous.cs (CaptureContext): Track whether `this' has been
9645         referenced.   
9646
9647         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
9648         only captured `this' if it was implicitly done (instance
9649         methods/variables were used). 
9650
9651         * codegen.cs (EmitContext.CaptureThis): New method to flag that
9652         `this' must be captured.
9653
9654 2005-01-30  Miguel de Icaza  <miguel@novell.com>
9655  
9656         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
9657         is null it means that there has been no need to capture anything,
9658         so we just create a sibling.
9659
9660         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
9661
9662         Just a partial fix.  The other half is fairly elusive.
9663         
9664 2005-02-10  Raja R Harinath  <rharinath@novell.com>
9665
9666         Fix #52586, cs0121-4.cs.
9667         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
9668         and return a hashtable.
9669         (MemberCache.ClearDeclaredOnly): New.
9670         (MemberCache.MemberCache): Update to change.  Make a deep copy of
9671         the method_hash of a base type too.
9672         (MemberCache.AddMethods): Adapt to having a deep copy of the base
9673         type methods.  Overwrite entries with the same MethodHandle so
9674         that the ReflectedType is correct.  The process leaves in base
9675         virtual functions and their overrides as distinct entries.
9676         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
9677         matters since it was boxed in a ArrayList before.
9678         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
9679         modifier.
9680         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
9681         case of a virtual function and its override (choose the overload
9682         as better).
9683         (Invocation.OverloadResolve): Avoid 'override' members during
9684         'applicable_type' calculation.
9685
9686 2005-02-09  Raja R Harinath  <rharinath@novell.com>
9687
9688         Combine two near-redundant caches.
9689         * typemanager.cs (method_params): Rename from method_internal_params.
9690         (TypeManager.GetParameterData): New.  Replace
9691         Invocation.GetParameterData.
9692         (TypeManager.LookupParametersByBuilder): Remove.
9693         * expression.cs (Invocation.method_parameter_cache): Remove.
9694         (Invocation.GetParameterData): Remove.
9695         Update to changes.
9696         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
9697         Update to changes.
9698
9699 2005-02-08  Raja R Harinath  <rharinath@novell.com>
9700
9701         Fix #72015.
9702         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
9703         TypeManager.multicast_delegate_type is null, resolve it by looking
9704         up "System.MulticastDelegate".
9705         * rootcontext.cs (RootContext.ResolveCore): Simplify.
9706
9707 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
9708             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
9709             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
9710
9711         Fix cs0164.cs.
9712         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
9713         (LabeledStatement.AddReference): New.  Set 'referenced'.
9714         (Goto.Resolve): Use it.
9715
9716 2005-02-05  John Luke  <john.luke@gmail.com>
9717
9718         * driver.cs: remove duplicate -doc line in Usage ()
9719
9720 2005-02-04  Raja R Harinath  <rharinath@novell.com>
9721
9722         * location.cs (Location.AddFile): Fix CS2002 error report.
9723
9724 2005-02-02  Martin Baulig  <martin@ximian.com>
9725
9726         * delegate.cs (Delegate.DefineType): Report an internal error if
9727         TypeManager.multicast_delegate_type is null.  See bug #72015 for
9728         details.        
9729
9730 2005-02-02  Raja R Harinath  <rharinath@novell.com>
9731
9732         Fix a crasher in a variant of #31984.
9733         * const.cs (Constant.CheckBase): New override that defers the
9734         new-or-override check in case the base type hasn't been populated
9735         yet.
9736         (Constant.Define): Ensure the new-or-override check is performed.
9737
9738 2005-02-01  Duncan Mak  <duncan@ximian.com>
9739
9740         * const.cs (LookupConstantValue): Check that `ce' is not null
9741         before calling GetValue ().
9742
9743 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9744
9745         Fix test-334.cs (#69519).
9746         * cs-parser.jay (using_alias_directive): Pass in an expression to
9747         NamespaceEntry.UsingAlias.
9748         (using_namespace_directive): Pass in an expression to
9749         NamespaceEntry.Using.
9750         (namespace_name): Don't flatten to a string.
9751         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
9752         (NamespaceEntry.AliasEntry.Resolve): Lookup using
9753         ResolveAsTypeStep.
9754         (NamespaceEntry.UsingEntry): Likewise.
9755         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
9756         changes.
9757         (NamespaceEntry.LookupForUsing): Remove.
9758         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
9759         names.
9760         (NamespaceEntry.Lookup): Remove support for dotted names.
9761
9762 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9763
9764         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
9765         split into two.
9766         (NamespaceEntry.ImplicitParent): Compute on demand.
9767         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
9768         parallels the current.
9769         (NamespaceEntry.LookupForUsing): Use it.
9770         (NamespaceEntry.Lookup): If the current namespace-entry is
9771         implicit, don't search aliases and using tables.
9772
9773 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9774
9775         Fix #31984.
9776         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
9777         BaseCache here.
9778         (TypeContainer.BaseCache): Compute on demand.
9779         (TypeContainer.FindMembers): Define constants and types if they're
9780         not already created.
9781         (FieldMember.Define): Move resetting of ec.InUnsafe before error
9782         check.
9783         * const.cs (Constant.Define): Make idempotent.
9784
9785 2005-01-29  Miguel de Icaza  <miguel@novell.com>
9786
9787         * pending.cs: Produce better code (no nops produced by using Ldarg
9788         + value).
9789         
9790         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
9791         i - 1' it should be arg + 1.
9792
9793         Fixes bug #71819.
9794
9795 2005-01-28  Raja R Harinath  <rharinath@novell.com>
9796
9797         * attribute.cs (Attribute.CheckAttributeType): Make private
9798         non-virtual.
9799         (Attribute.ResolveType): Make virtual.
9800         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
9801         handling of RootContext.Tree.Types.
9802
9803 2005-01-27  Raja R Harinath  <rharinath@novell.com>
9804
9805         Update attribute-handling to use the SimpleName/MemberAccess
9806         mechanisms.
9807         * cs-parser.jay (attribute): Pass in an expression to the
9808         constructors of Attribute and GlobalAttribute.
9809         * attribute.cs (Attribute): Take an expression for the name.
9810         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
9811         passed in attribute name expression.
9812         (Attribute.CheckAttributeType): Use it.
9813         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
9814         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
9815         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
9816         argument to prevent error messages if the lookup fails.
9817
9818 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
9819
9820         * expression.cs (Indirection): Implemented IVariable interface
9821         to support indirection in AddressOf operator.
9822         (PointerArithmetic.Emit): Add optimalization for case where
9823         result can be precomputed.
9824
9825 2005-01-26  Martin Baulig  <martin@ximian.com>
9826
9827         * class.cs (TypeContainer.AttributeTargets): Return the correct
9828         AttributeTargets depending on our `Kind' instead of throwing an
9829         exception; fixes #71632.
9830
9831 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
9832
9833         Fix #71257
9834         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
9835         constant members.
9836
9837 2005-01-25  Raja R Harinath  <rharinath@novell.com>
9838
9839         Fix #71602.
9840         * expression.cs (MemberAccess.DoResolve): Don't complain with
9841         cs0572 when the LHS of a member access has identical name and type
9842         name.
9843
9844 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
9845
9846         Fix #71651, #71675
9847         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
9848         CreatePermission.
9849         Create custom PermissionSet only for PermissionSetAttribute.
9850
9851 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
9852
9853         Fix #71649
9854         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
9855         delegates in static class.
9856
9857 2005-01-24  Martin Baulig  <martin@ximian.com>
9858
9859         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9860         merging an implicit block, just use its reachability.
9861
9862         * statement.cs (Block.Resolve): Make the unreachable code check
9863         work wrt. implicit blocks; see test-337 from #63842.
9864
9865 2005-01-21  Alp Toker  <alp@atoker.com>
9866  
9867         * cs-parser.jay: destructor_declaration's container is PartialContainer
9868         not Class when partial types are used, so use Kind prop instead of
9869         'is'.
9870         
9871 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
9872
9873         * cs-parser.jay: Improve error reporting when an interface
9874         declares new types.
9875
9876 2005-01-20  Dick Porter  <dick@ximian.com>
9877
9878         * support.cs: SeekableStreamReader fix from Sandor Dobos
9879         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
9880         chars are read.  Fixes bug 70369.
9881
9882 2005-01-20  Raja R Harinath  <rharinath@novell.com>
9883
9884         * cs-parser.jay (catch_clause): Simplify current_block handling
9885         somewhat.
9886
9887 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
9888
9889         * convert.cs (ImplicitStandardConversionExists): Synchronize the
9890         code with ImplicitStandardConversion to handle the implicit
9891         conversion of method groups into valid delegate invocations. 
9892
9893         The problem is that in parameter handling we were using this code
9894         path.  Fixes bug #64698
9895
9896 2005-01-19  Raja R Harinath  <rharinath@novell.com>
9897
9898         * cs-parser.jay: Fix several infelicities.
9899         - Avoid assigning to the parser value stack.  Code like 
9900           '$3 = null' is unclean.  Synthesize a value for the code block
9901           instead. 
9902         - Avoid using oob_stack for storing location information.  Use ...
9903         (_mark_): ... this.  New (empty) rule.  Saves the current location
9904         in $$.
9905         (foreach_statement): Avoid using oob_stack for current_block
9906         handling.  Use technique used in for_statement and
9907         using_statement.  Synthesize a value for the code block to store
9908         additional intermediate information.
9909
9910 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
9911
9912         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
9913         of a different type is only allowed to private fields of a
9914         containing type, not on fields of a base class.
9915
9916         See test-174.cs and error cs0122-9.cs
9917
9918 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9919
9920         Fix test-335.cs (bug #58126).
9921         * cs-parser.jay (argument): Split out non-expression parts of the
9922         rule into 'non_simple_argument'.
9923         (invocation_expression): Support parenthesized invocations with
9924         multiple arguments, and with single non-simple arguments.
9925
9926 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9927
9928         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
9929         places.
9930
9931 2005-01-12  Raja R Harinath  <rharinath@novell.com>
9932
9933         Fix cs0038-1.cs, cs1640-6.cs.
9934         * ecore.cs (Expression.Resolve): Remove special-case for
9935         SimpleName in error-handling.
9936         (Expression.almostMatchedMembers): Relax access permission to
9937         protected.
9938         (Expression.MemberLookupFailed): Handle duplicates in
9939         almostMatchedMembers list.
9940         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
9941         * expression.cs (New.DoResolve): Report CS1540 for more cases.
9942         * typemanager.cs (GetFullNameSignature): Use the MethodBase
9943         overload if the passed in MemberInfo is a MethodBase.
9944
9945 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
9946
9947         Fix #70749
9948         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
9949         for non-CAS & merge permission sets properly.
9950
9951 2005-01-11  Raja R Harinath  <rharinath@novell.com>
9952
9953         Improve standard-compliance of simple name and member access 
9954         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
9955         * ecore.cs (FullNamedExpression): New abstract base class 
9956         for Namespaces and TypeExpressions.
9957         (ResolveFlags.SimpleName): Remove.
9958         (SimpleName): Remove support for dotted names.
9959         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
9960         DeclSpace.FindType and DeclSpace.LookupType.
9961         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
9962         (Expression.ExprClassName): Make member function.
9963         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
9964         a namespace.  Remove creation of dotted "SimpleName"s.
9965         (MemberAccess.DoResolve): Likewise.
9966         * decl.cs (DeclSpace.Cache): Make private.
9967         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
9968         (DeclSpace.FindType): Update.
9969         (DeclSpace.LookupType): Move here from RootContext.  Return a 
9970         FullNamedExpression.
9971         * namespace.cs (Namespace): Derive from FullNamedExpression
9972         so that it can be part of expression resolution.
9973         (Namespace.Lookup): Return an FullNamedExpression.
9974         (NamespaceEntry.LookupAlias): Lookup aliases only in current
9975         namespace.
9976         * rootcontext.cs (NamespaceLookup): Remove.
9977         (LookupType): Move to DeclSpace.
9978         * attribute.cs (CheckAttributeType): Update.
9979         * doc.cs (FindDocumentedType): Remove allowAlias argument.
9980         (FindDocumentedTypeNonArray): Likewise.
9981
9982 2005-01-11  Raja R Harinath  <rharinath@novell.com>
9983
9984         Fix cs0509.cs, cs1632.cs.
9985         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
9986         is the same as IsInterface.
9987         (TypeContainer.GetClassBases): Likewise.
9988         * statement.cs (LabeledStatement.ig): New field.
9989         (LabeledStatement.LabelTarget): Save ILGenerator which created the
9990         label.
9991         (LabeledStatement.DoEmit): Check that the label was created with
9992         the same ILGenerator.
9993
9994 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
9995
9996         Fix #71058
9997         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
9998         accessors to its properties.
9999
10000         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
10001         from accessors to property.
10002         
10003 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10004
10005         Fix #70722
10006         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
10007         only for overrides.
10008         
10009 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
10010
10011         * attribute.cs: Check for null and empty strings.  
10012
10013         I have lost another battle to Paolo.
10014
10015 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
10016
10017         Fix #70942
10018         * class.cs (PropertyMethod): Set Parent field in ctors.
10019         (SetMethod.InternalParameters): Add unsafe switch hack.
10020         Override MarkForDuplicationCheck where it is appropriate.
10021
10022         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
10023         It says whether container allows members with the same name.
10024         Base default is no.
10025         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
10026         Removed is_method parameter.
10027
10028 2005-01-06  Duncan Mak  <duncan@ximian.com>
10029
10030         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
10031         because the previous change led to incorrect reporting of CS1032
10032         ("Cannot define/undefine preprocessor symbols after first token in
10033         file"). Instead of using `tokens_seen' as the only flag that
10034         triggers CS1040, introduce `comments_seen'. This new flag is used
10035         to signify having seen comments on the current line, so it is
10036         unset after a newline.
10037
10038 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10039
10040         * doc.cs : When searching for a type, find nested type too.
10041           This fixes bug #71040.
10042
10043 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10044
10045         * doc.cs :
10046           - Warn missing member comment on those classes which also does not
10047             have doc comments. Fixed bug #71041.
10048           - Don't warn missing doc comment on default constructor.
10049             Fixed bug #71042.
10050
10051 2005-01-06  Duncan Mak  <duncan@ximian.com>
10052
10053         * cs-tokenizer.cs (xtoken): After handling traditional C-style
10054         comments, set `tokens_seen' to true. This allows us to detect
10055         misplaced preprocessor directives (i.e. not at the beginning of
10056         the a line, nor after whitespaces). In that case, report error
10057         CS1040. This fixes bug #56460.
10058
10059         * cs-parser.jay (interface_member_declaration): Add checks for
10060         IsExplicitImpl, and report CS0541 error if an interface member is
10061         defined as an explicit interface declaration.
10062
10063 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
10064
10065         Fix #70817
10066         * class.cs (PropertyMethod): Set Parent field in ctors.
10067         (SetMethod.InternalParameters): Add unsafe switch hack.
10068         
10069         * decl.cs (MemberCore.Parent): Cannot be readonly.
10070
10071 2005-01-06  Raja R Harinath  <rharinath@novell.com>
10072
10073         * decl.cs (DeclSpace.ResolveType): Remove.
10074         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
10075         Merge in code from ...
10076         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
10077         * class.cs, enum.cs: Update to changes.
10078
10079 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
10080
10081         * anonymous.cs: Ensure that we init the scope of our parent if it
10082         has not been initialized yet.
10083
10084 2004-12-30  Duncan Mak  <duncan@ximian.com>
10085
10086         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
10087         if field.FieldBuilder is null. Fixes #70758.
10088
10089         * convert.cs: Fixed some typos and updated some of the comments.
10090         (ImplicitStandardConversionExists):
10091         (TryImplicitIntConversion): If `target_type' is an interface and
10092         the type of `ic' implements this interface, return true or a new
10093         BoxedCast instead of null. This fixes #70468.
10094
10095 2004-12-29  Duncan Mak  <duncan@ximian.com>
10096
10097         * expression.cs (Argument.Emit): Check that Expr is
10098         IMemoryLocation before casting to it, and report CS1510 otherwise.
10099
10100         This fixes #70402.
10101
10102 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
10103
10104         * statement.cs (Block.ThisVariable): remove the recursion here, to
10105         make the --profile more sane.
10106
10107 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
10108
10109         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
10110         assembly, by JB Evain.
10111
10112 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10113
10114         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
10115           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
10116         "parent" refers to enclosing type/class.  "base" refers to superclass.
10117
10118 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10119
10120         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10121         Ensure that we only have GlobalAttributes.
10122         * attribute.cs (Attribute.Emit): Make non-virtual.
10123         (GlobalAttribute.Emit): Remove.
10124         (Attribute.Resolve): Make virtual.
10125         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
10126         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
10127         the argument. Don't create one.
10128         (Attribute.GetObsoleteAttribute): Likewise.
10129         (Attribute.GetClsCompliantAttributeValue): Likewise.
10130         * class.cs, decl.cs: Update to changes.
10131
10132 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
10133
10134         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
10135         
10136         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
10137         
10138         * statement.cs (Foreach.Resolve): Add error 186 report.
10139
10140 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
10141
10142         * expression.cs (Conditional.DoResolve): Add warning 429.
10143         
10144         * statement.cs (If.Resolve): Add warning 665.
10145
10146 2004-12-16  Raja R Harinath  <rharinath@novell.com>
10147
10148         New invariant: RootContext.Tree.Types.NamespaceEntry == null
10149         except when in the parser, and in GlobalAttribute.
10150         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
10151         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
10152         RootContext.Tree.Types.NamespaceEntry once work is done.
10153         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
10154         and resets RootContext.Tree.Types.NamespaceEntry.
10155
10156 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
10157
10158         * cs-parser.jay: Don't create a block for every variable.
10159
10160 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
10161
10162         * location.cs: Provide extra information.
10163
10164         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
10165         variables from the captured environment, it is the ldarg_0.
10166
10167 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10168
10169         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
10170         find a conclusion.
10171         
10172         * class.cs: Changed warning level for 169 to avoid developer
10173         displeasure from warning flooding. It will be changed back when they
10174         fix most of current BCL warnings.
10175         
10176         * RootContext.cs: Pushed default WarningLevel to 3.
10177         
10178         * statement.cs: Removed unused variable.
10179
10180 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10181
10182         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
10183         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
10184         Add error 502 report.
10185         (StaticClass.DefineType): Add error 441 report.
10186         (Class.AllowedModifiersProp): New virtual property as temporary
10187         extension to AllowedModifiers.
10188         (Class.DefineType): Add error 418 report. Moved ModFlags check here
10189         to share implementation with StaticClass and don't call virtual
10190         methods from ctor.
10191         
10192         * driver.cs (MainDriver): Add error 1558 test.
10193
10194         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
10195         report. Moved error 36 test here.
10196
10197         * statement.cs (Throw.Resolve): Add error 724 report.
10198
10199         * typemanager.cs: Add out_attribute_type core type.
10200         
10201 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
10202
10203         * class.cs (TypeContainer.VerifyClsCompliance): Add error
10204         3018 report.
10205         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
10206
10207         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
10208         3017 report.
10209         
10210         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
10211
10212         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
10213         Add error 3023 report.
10214         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
10215
10216         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
10217         implementation.
10218
10219 2004-12-12  John Luke  <john.luke@gmail.com>
10220
10221         * driver.cs (AddArgs): take -- into account when
10222         adding arguments, fixes bug 65710 
10223
10224 2004-12-12  Martin Baulig  <martin@ximian.com>
10225
10226         * expression.cs (Unary.TryReduceNegative): Added support for
10227         SByteConstant and ByteConstant.
10228         (Unary.Reduce): Check error values from TryReduceNegative().
10229
10230 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
10231
10232         * attributes.cs (Attribute.Resolve): Avoid multiple error report
10233         and report exception as error 182.
10234
10235 2004-12-10  Raja R Harinath  <rharinath@novell.com>
10236
10237         * driver.cs (Main): Fix message when there are warnings.
10238
10239 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
10240
10241         * delegate.cs: Fixed my fix from yesterday, sorry about that.
10242
10243 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
10244
10245         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
10246         Reduced number of warnings.
10247         
10248         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
10249
10250 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
10251
10252         * driver.cs: Removed message.
10253
10254         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
10255
10256 2004-12-08    <vargaz@freemail.hu>
10257
10258         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
10259
10260 2004-12-08  Martin Baulig  <martin@ximian.com>
10261
10262         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
10263         instead of a CS3002 for properties and indexer.
10264
10265 2004-12-08  Martin Baulig  <martin@ximian.com>
10266
10267         * decl.cs (MemberName.ToString): Make this work again.
10268
10269 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
10270
10271         * attribute.cs (Resolve): Add error 591 detection.
10272
10273         * class.cs (FieldMember.Define): Add error 1547 detection.
10274         (Indexer.Define): Add error 620 detection.
10275         (Operator.Define): Add error 590 detection.
10276
10277         * ecore.cs: Missing argument for error 79.
10278
10279         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
10280         detection.
10281
10282 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
10283
10284         Fix #70106
10285         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
10286         only.
10287
10288 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
10289
10290         * cs-parser.jay : handle doc comments on implicit/explicit operators.
10291           Some operator comments were suppressed.
10292         * doc.cs : Implicit/explicit operator name in doc comments are like
10293           "op_Explicit(type)~returnType", so added suffix handling.
10294
10295 2004-12-07  Martin Baulig  <martin@ximian.com>
10296
10297         * decl.cs
10298         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
10299         (MemberCore.GetClsCompliantAttributeValue): Likewise.
10300         (DeclSpace.ec): New protected field; store the EmitContext here.
10301         (DeclSpace.EmitContext): New public property; moved here from
10302         `TypeContainer'.
10303         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
10304         EmitContext.
10305
10306         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
10307         (Enum.Emit): Don't create a new EmitContext.
10308
10309         * delegate.cs (Delegate.DefineType): Always create the
10310         EmitContext.
10311
10312         * iterators.cs (Iterators.DefineIterator): Create a new
10313         EmitContext and store it in `ec'.
10314
10315 2004-08-24  Martin Baulig  <martin@ximian.com>
10316
10317         * typemanager.cs
10318         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10319         this for accessibility checks.
10320         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10321         IsNestedFamilyAccessible.
10322         (TypeManager.IsSubclassOf): New method, do what the name actually
10323         says.   
10324
10325 2004-12-06  Raja R Harinath  <rharinath@novell.com>
10326
10327         Fix crash on cs0657-17.cs.
10328         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10329         Use RootContext.Tree.Types, not 'new RootTypes ()'.
10330         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
10331         the case where the NamespaceEntry gets overwritten.
10332
10333 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
10334
10335         Fixed #69195, #56821
10336         * ecore.cs (ResolveBoolean): Tiny refactoring.
10337
10338         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
10339         of right expression resolving when left is false constant and
10340         operator is LogicalAnd OR true constant and operator is LogicalOr.
10341
10342         * statement.cs (ResolveUnreachable): Always reports warning.
10343
10344 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
10345
10346         * class.cs: Distinguish between 1721 and 1722 (just a little help
10347         for the programmer).
10348
10349 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
10350
10351         * delegate.cs: Only allow this on new versions of the language. 
10352
10353 2004-12-02  Duncan Mak  <duncan@ximian.com>
10354
10355         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
10356         Expression class.
10357         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
10358         here as a static method. Take an additional bool out parameter
10359         `must_do_cs1540_check' for signaling to InstanceResolve.
10360         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
10361         member field from PropertyExpr class and made it an argument of
10362         the method instead.
10363         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
10364         check for MarshalByRefObject, and report CS0122 instead of CS1540.
10365         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
10366         and `remove_accessor' as well as InstanceResolve: report CS0122
10367         where applicable.
10368
10369         Fixes #70129.
10370
10371 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10372
10373         Fix test-327.cs, test-328.cs, and put in early infrastructure
10374         for eventually fixing #52697.
10375         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
10376         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
10377         from other methods.
10378         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
10379         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
10380         (VerifyUsing, error246): Update.
10381         * rootcontext.cs (RootContext.NamespaceLookup): Just use
10382         'NamespaceEntry.LookupNamespaceOrType'.
10383
10384 2004-12-03  Martin Baulig  <martin@ximian.com>
10385
10386         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10387         method as our child, call AnonymousMethod.Compatible() on it.
10388
10389 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10390
10391         Disable XML documentation support in 'basic' profile.
10392         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
10393         Redirect XmlElement to System.Object.
10394         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
10395         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
10396         * mcs.exe.sources: Add doc-bootstrap.cs.
10397         * doc-bootstrap.cs: New file.  Contains empty stub implementation
10398         of doc.cs.
10399
10400 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
10401
10402         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
10403           comments are allowed.
10404
10405 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10406
10407         * delegate.cs: Add checks for subtypes in paramaters and return values
10408         in VerifyMethod () to add support for Covariance/Contravariance
10409         in delegates.
10410         
10411 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
10412
10413         * report.cs: Remove extra closing parenthesis.
10414
10415         * convert.cs (Error_CannotImplicitConversion): If the name of the
10416         types are the same, provide some extra information.
10417
10418         * class.cs (FieldBase): Use an unused bit field from the field to
10419         encode the `has_offset' property from the FieldMember.  This saves
10420         a couple of Ks on bootstrap compilation.
10421
10422         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10423         method as our child, return the AnonymousMethod resolved
10424         expression.
10425
10426         * expression.cs (New.DoResolve): Allow return values from
10427         NewDelegate to also include AnonymousMethods.
10428
10429         Fixes #70150.
10430
10431 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
10432
10433         Fix bug #70102
10434         * attribute.cs (Resolve): Improved implementation of params
10435         attribute arguments.
10436
10437         * support.cs (ParameterData): Add HasParams to be faster.
10438
10439 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
10440
10441         all things are for /doc support:
10442
10443         * doc.cs: new file that supports XML documentation generation.
10444         * mcs.exe.sources: added doc.cs.
10445         * driver.cs:
10446           Handle /doc command line option.
10447           Report error 2006 instead of 5 for missing file name for /doc.
10448           Generate XML documentation when required, after type resolution.
10449         * cs-tokenizer.cs:
10450           Added support for picking up documentation (/// and /** ... */),
10451           including a new XmlCommentState enumeration.
10452         * cs-parser.jay:
10453           Added lines to fill Documentation element for field, constant,
10454           property, indexer, method, constructor, destructor, operator, event
10455           and class, struct, interface, delegate, enum.
10456           Added lines to warn incorrect comment.
10457         * rootcontext.cs :
10458           Added Documentation field (passed only when /doc was specified).
10459         * decl.cs:
10460           Added DocComment, DocCommentHeader, GenerateDocComment() and
10461           OnGenerateDocComment() and some supporting private members for
10462           /doc feature to MemberCore.
10463         * class.cs:
10464           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
10465         * delegate.cs:
10466           Added overriden DocCommentHeader.
10467         * enum.cs:
10468           Added overriden DocCommentHeader and GenerateDocComment().
10469
10470 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
10471
10472         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
10473         unwrapping the enumeration values, chain to
10474         DoConstantNumericPromotions again, so we can promote things to the
10475         fundamental types (takes care of enums that are bytes, sbytes).
10476
10477         Fixes bug #62054.
10478
10479 2004-12-01  Raja R Harinath  <rharinath@novell.com>
10480
10481         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
10482         Fix long-standing bug in type-lookup.  Use FindType instead of
10483         LookupType when ec.ResolvingTypeTree.
10484         (Attribute.ResolveType, Attribute.Resolve)
10485         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
10486         Update to changes.
10487         (Attributes.Search): Remove internal version.  Update.
10488         (Attributes.SearchMulti): Update.
10489         (Attributes.GetClsCompliantAttribute): Remove.
10490         (Attributes.GetIndexerNameAttribute): Remove.
10491         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
10492         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
10493         * class.cs (Indexer.Define): Likewise.
10494
10495 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
10496
10497         Fix bug #68790
10498         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
10499         MarshallByReference members access.
10500
10501         * expression.cs: Use CheckMarshallByRefAccess;
10502         Better error CS0197 message.
10503
10504         * report.cs: Print whole related error message.
10505
10506 2004-11-30  Raja R Harinath  <rharinath@novell.com>
10507
10508         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
10509         the current directory to help debugging.
10510
10511 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10512
10513         * class (GetClassBases): Better error 60 report.
10514         (EventProperty): Disabled warning 67 detection.
10515
10516 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10517
10518         Fix bug #60324
10519         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
10520
10521         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
10522         precise values.
10523
10524 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10525
10526         Fix bug #49488
10527         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
10528
10529         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
10530
10531 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
10532
10533         * attribute.cs (Attribute.Resolve): Refine error reporting and
10534         report a cs0117 if the identifier does not exist, to distinguish
10535         from 0617 which is a miss-use of the actual identifier.
10536
10537         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
10538         between cs0070 and cs0079.
10539
10540         * class.cs (MemberBase.DoDefine): When reporting a wrong
10541         accessibility level, we use MethodCore to compare instead of
10542         Method (this was a regression in some refactoring effort).
10543
10544         So now we correctly report cs0056 again.
10545
10546         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
10547         testing the target_type (which was known to be object_type) and
10548         not the source type (which is anonymous_method).
10549
10550         Fixed reporting of error cs1660.
10551
10552         * expression.cs (UserCast.Source): Expose the underlying cast.
10553
10554         * statement.cs (Switch.SwitchGoverningType): Sort the list of
10555         allowed types to find a match to int32 first (most common).
10556
10557         In addition, it ignores any ImplicitUserConversions that did an
10558         internal implicit conversion (as the switch statement allows only
10559         one integral conversion to exist).
10560
10561         * class.cs (PartialContainer.Create): rename `name' to
10562         `member_name' for clarity.  Then replace the string calls with a
10563         call to MemberName.GetPartialName, as now using
10564         MemberName.ToString is an error (this is due to the side effects
10565         it had, that were fixed in the past).
10566
10567         This will restore the error reporting on a number of partial class
10568         errors that were missusing this (and getting an exception as a
10569         results, which is now just a plain textual warning, because
10570         yyparse debug output would crash otherwise).
10571
10572 2004-11-26  Raja R Harinath  <rharinath@novell.com>
10573
10574         * Makefile (PROGRAM_INSTALL_DIR): Remove.
10575
10576 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10577
10578         * rootcontext.cs (LookupType): Make sure to cache lookups that
10579         don't give us a negative result. This saves about 5% of corlib
10580         compilation time.
10581
10582 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10583
10584         * report.cs (AbstractMessage.Print): messages are sent to stderr
10585
10586         * class.cs (TypeContainer.GetClassBases): It is an error to have a
10587         non-interface in the list of interfaces (at this point, either
10588         parent was properly set, or a base class is being listed in the
10589         interfaces section).
10590
10591         This flags error 1722, and resolves the crash from bug 69259.
10592
10593 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10594
10595         * statement.cs (Using.EmitExpressionFinally): make this work right
10596         for valuetypes. Fixes 69926.
10597
10598 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10599
10600         * const.cs (Const.ChangeType): Cope with the "0 literal can be
10601         converted to an enum" here, before we try to change the underlying
10602         type.  This code exists, but it is a different code path than the
10603         one used while encoding constants.
10604
10605         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
10606         old bug: when converting from the null literal to a pointer,
10607         return an EmptyCast, not the NullLiteral.
10608
10609         This fixes #69921, the recent null_type changes probably made this
10610         bug more prominent.
10611
10612         (ImplicitReferenceConversionExists): In addition, resynchronized
10613         the code here, so it matches the same code in
10614         ImplicitReferenceConversionExists for the `from any class-type S
10615         to any interface-type T'.
10616         
10617
10618 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
10619
10620         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
10621
10622 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
10623
10624         * cs-parser.jay: Use verbosity accordingly. 
10625
10626 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10627
10628         * expression.cs (Unary.ResolveOperator): Do not report warning;
10629         AddressOf reads from variable.
10630         
10631         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
10632
10633 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10634
10635         Fix bug #69462
10636
10637         * attribute.cs (Attributable): Removed CheckTargets.
10638         (Attributes.Emit): Explicit attribute targets are tested here.
10639
10640         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
10641         not enabled for interfaces.
10642
10643         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
10644         (GetAssemblyName): Ouch next bug there.
10645
10646 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10647
10648         * expression.cs: Error 275 added.
10649         
10650 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
10651
10652         Fix bug #69177 (Implemented decimal constant support)
10653
10654         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
10655         (BinaryFold): Add DecimalConstant.
10656
10657         * const.cs (Define): Decimal constant 
10658         (is not constant.
10659         (ChangeType): Add decimal type handling.
10660         (LookupConstantValue): Don't set value for decimal type but
10661         emit DecimalConstantAttribute. Needed for constant optimization.
10662
10663         * constant.cs (ToDecimal): New method.
10664         (ConvertToDecimal): New method.
10665         (IntConstant): Implemented ConvertToDecimal.
10666         (DecimalConstant.Emit): Emit optimized version for decimals in
10667         int range.
10668
10669         * expression.cs (ResolveOperator): Changed order of constant
10670         reduction to work correctly with native types which have
10671         overloaded operators.
10672         (ResolveMemberAccess): Extract constant value from attribute
10673         for decimal type.
10674
10675         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
10676
10677         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
10678         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
10679         (ChangeType): Decimal is special.
10680         (TypeToCoreType): Add decimal type.
10681
10682 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10683
10684         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
10685         decimal types.
10686
10687 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10688
10689         * class.cs (EventField.ApplyAttributeBuilder): Fix error
10690         test cs1667-5.cs.
10691
10692 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10693
10694         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
10695
10696         * pending.cs (PendingImplementation): Grab only interfaces.
10697
10698 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10699
10700         * statement.cs (ForeachHelperMethods): Add location member and
10701         error 202 detection.
10702
10703 2004-11-19  Raja R Harinath  <rharinath@novell.com>
10704
10705         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
10706         automatically handled by executable.make.
10707         (PROGRAM): Make profile-specific.
10708
10709 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
10710
10711         * expression.cs (DoResolveBase): Fixed wrong warning for out
10712         variables.
10713
10714 2004-11-18  Martin Baulig  <martin@ximian.com>
10715
10716         Merged latest changes into gmcs.  Please keep this comment in
10717         here, it makes it easier for me to see what changed in MCS since
10718         the last time I merged.
10719
10720 2004-11-17  Raja R Harinath  <rharinath@novell.com>
10721
10722         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
10723         (TypeHandle.GetMemberCache): New.
10724         (TypeHandle.TypeHandle): Update.
10725         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
10726         (TypeManager.LookupParentInterfacesCache):
10727         Rename from LookupInterfaceCache.  Optimize slightly.
10728         (TypeManager.MemberLookup_FindMembers): Update.
10729         * decl.cs (MemberCache.MemberCache): Set Container to null in the
10730         multi-type variant.
10731         (AddCacheContents): Rename from AddHashtable.
10732         * class.cs (TypeContainer.parent_container): Remove.
10733         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
10734         (TypeContainer.DoDefineMembers): Don't initialize it.
10735         Update to name changes.
10736         
10737 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
10738
10739         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
10740         that factors the code to check access modifiers on override.  
10741
10742         (PropertyBase): Use the code here.
10743
10744         Patch from Lluis S'anchez, fixes bug #69361.
10745
10746 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
10747
10748         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
10749         routine that is used to report the use of a captured variable
10750         whose address has been taken.
10751
10752         There are two checks: one when variables are being captured and
10753         the other check is when the address of a variable is taken. 
10754         
10755         (because an anonymous methods might be resolved before *or* after
10756         the address has been taken) and 
10757
10758         * expression.cs (Conditional.DoResolve): Remove the special
10759         casing that Martin added to trueExpr and falseExpr being both
10760         NullLiteral.  We get the right behavior now just by introducing
10761         the null_type into the compiler. 
10762
10763         * convert.cs (ExplicitConversion): Change the code to use
10764         null_type instead of testing `expr is NullLiteral'.
10765         (ImplicitConversionStandard): use null_type too.
10766         (ImplicitReferenceConversionExists): use null_type too.
10767         (ImplicitReferenceConversion): use null_type too.
10768
10769         * literal.cs: The type of `NullLiteral' is now null_type instead
10770         of object_type. 
10771         (Resolve): Set the type here.
10772
10773         * typemanager.cs: Introduce null_type.
10774
10775 2004-11-17  Martin Baulig  <martin@ximian.com>
10776
10777         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
10778         direction, like FindMembers() does.  Fixes #69546, testcase is in
10779         test-315.cs.    
10780
10781 2004-11-16  Martin Baulig  <martin@ximian.com>
10782
10783         This is based on a patch from Marek Safar, see bug #69082.
10784         Fixes bugs #63705 and #67130.
10785
10786         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
10787         method; create a MemberCache for an interface type and cache the
10788         result.
10789
10790         * decl.cs (IMemberContainer.ParentContainer): Removed.
10791         (IMemberContainer.ParentCache): New property.
10792         (MemberCache.SetupCacheForInterface): Removed.
10793         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
10794         to create a cache for an interface's "parent".
10795
10796         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
10797         interfaces too.
10798
10799 2004-11-16  Martin Baulig  <martin@ximian.com>
10800
10801         Merged back from gmcs; these changes already went into gmcs a
10802         couple of weeks ago.
10803
10804         * typemanager.cs
10805         (TypeManager.AddUserType): Removed the `ifaces' argument.
10806         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
10807         `TypeExpr []'.
10808         (TypeManager.AddUserInterface): Removed.
10809         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
10810         `TypeExpr []'.
10811         (TypeManager.GetInterfaces): Likewise.
10812         (TypeManager.GetExplicitInterfaces): Likewise.
10813
10814         * ecore.cs (TypeExpr.GetInterfaces): Removed.
10815
10816         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
10817         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
10818
10819 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
10820
10821         * statement.cs: Avoid adding bools to a hashtable.
10822
10823 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
10824
10825         * expression.cs (Invocation.OverloadResolve): Flag error if we are
10826         calling an unsafe method from a safe location.
10827
10828 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
10829
10830         Fix #69167
10831         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
10832
10833 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
10834
10835         * namespace.cs (VerifyUsing): use GetPartialName instead of
10836         ToString. 
10837
10838 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
10839
10840         * statement.cs (Return.Resolve): Fix regression in typo: if
10841         `in_exc', we have to request a NeedReturnLabel, this was a typo
10842         introduced in the anonymous method check-in.  Fixes #69131.
10843
10844         * Indexers were using the ShortName when defining themselves,
10845         causing a regression in the compiler bootstrap when applying the
10846         patch from 2004-11-02 (first part), now they use their full name
10847         and the bug is gone.
10848
10849 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
10850
10851         * driver.cs: Strip the path from the names of embedded resources. Fixes
10852         #68519.
10853
10854 2004-11-04  Raja R Harinath  <rharinath@novell.com>
10855
10856         Fix error message regression: cs0104-2.cs.
10857         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
10858         (AliasEntry.Resolve): Update.
10859         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
10860         'silent' flag.
10861         (RootContext.LookupType): Update.
10862
10863 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
10864
10865         * cs-parser.jay: Add support for handling accessor modifiers
10866         * class: Add support port accessor modifiers and error checking,
10867         define PropertyMethod.Define as virtual (not abstract anymore)
10868         * ecore.cs: Add checking for proeprties access with access modifiers
10869         * iterators.cs: Modify Accessor constructor call based in the modified
10870         constructor
10871 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
10872
10873         * expression.cs (StringConcat): Handle being called twice,
10874         as when we have a concat in a field init with more than two
10875         ctors in the class
10876
10877 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
10878
10879         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
10880         special case explicit implementations, we should always produce
10881         the .property or .event declaration.
10882         
10883         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
10884         since it will not return correct data if people use this
10885         unresolved in the presence of using statements (see test-313).
10886
10887         * class.cs (MethodData.Define): If we are an explicit interface
10888         implementation, set the method name to the full name of the
10889         interface plus the name of the method.  
10890
10891         Notice that using the method.MethodName.GetFullName() does not
10892         work, as it will only contain the name as declared on the source
10893         file (it can be a shorthand in the presence of using statements)
10894         and not the fully qualifed type name, for example:
10895
10896         using System;
10897
10898         class D : ICloneable {
10899                 object ICloneable.Clone ()  {
10900                 }
10901         }
10902
10903         Would produce a method called `ICloneable.Clone' instead of
10904         `System.ICloneable.Clone'.
10905
10906         * namespace.cs (Alias.Resolve): Use GetPartialName.
10907         
10908 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10909
10910         * cs-parser.jay: Add error 1055 report.
10911
10912 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
10913
10914         * assign.cs (Assign.DoResolve): Only do the transform of
10915         assignment into a New if the types are compatible, if not, fall
10916         through and let the implicit code deal with the errors and with
10917         the necessary conversions. 
10918
10919 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10920
10921         * cs-parser.jay: Add error 1031 report.
10922
10923         * cs-tokenizer.cs: Add location for error 1038.
10924
10925 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10926
10927         * cs-parser.jay: Add error 1016 report.
10928
10929 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10930
10931         * cs-parser.jay: Add errors 1575,1611 report.
10932
10933 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10934
10935         * cs-parser.jay: Add error 1001 report.
10936
10937 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10938
10939         Fix #68850
10940         * attribute.cs (GetMarshal): Add method argument for
10941         caller identification.
10942
10943         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
10944         agument for GetMarshal and RuntimeMissingSupport.
10945
10946 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10947
10948         * attribute.cs (ExtractSecurityPermissionSet): Removed
10949         TypeManager.code_access_permission_type.
10950
10951         * typemanager.cs: Removed TypeManager.code_access_permission_type.
10952
10953 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
10954
10955         * expression.cs (LocalVariableReference.DoResolveLValue): Check
10956         for obsolete use of a variable here.   Fixes regression on errors
10957         cs0619-25 and cs0619-26.
10958
10959 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
10960
10961         Fix #62358, implemented security attribute encoding.
10962
10963         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
10964         Tests permitted SecurityAction for assembly or other types.
10965         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
10966         data from SecurityPermissionAttribute to PermisionSet class.
10967
10968         * class.cs (ApplyAttributeBuilder): Added special handling
10969         for System.Security.Permissions.SecurityAttribute based types.
10970
10971         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
10972         special handling for System.Security.Permissions.SecurityAttribute
10973         based types.
10974
10975         * enum.cs (ApplyAttributeBuilder): Added special handling
10976         for System.Security.Permissions.SecurityAttribute based types.
10977
10978         * parameter.cs (ApplyAttributeBuilder): Added special handling
10979         for System.Security.Permissions.SecurityAttribute based types.
10980
10981         * rootcontext.cs: Next 2 core types.
10982
10983         * typemanager.cs (TypeManager.security_permission_attr_type):
10984         Built in type for the SecurityPermission Attribute.
10985         (code_access_permission_type): Build in type.
10986
10987 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
10988
10989         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
10990         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
10991         all of this information into
10992         EmitContext.EmitCapturedVariableInstance.
10993         
10994         * codegen.cs (EmitCapturedVariableInstance): move here the
10995         funcionality of emitting an ldarg.0 in the presence of a
10996         remapping.   This centralizes the instance emit code.
10997
10998         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
10999         then emit a load of this: it means that we have reached the
11000         topmost ScopeInfo: the one that contains the pointer to the
11001         instance of the class hosting the anonymous method.
11002
11003         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
11004         captures to the topmost CaptureContext.
11005
11006 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
11007
11008         * expression.cs (LocalVariableReference): Move the knowledge about
11009         the iterators into codegen's EmitCapturedVariableInstance.
11010
11011 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
11012
11013         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
11014         all code paths return a value from an anonymous method (it is the
11015         same as the 161 error, but for anonymous methods).
11016
11017 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
11018
11019         The introduction of anonymous methods in the compiler changed
11020         various ways of doing things in the compiler.  The most
11021         significant one is the hard split between the resolution phase
11022         and the emission phases of the compiler.
11023
11024         For instance, routines that referenced local variables no
11025         longer can safely create temporary variables during the
11026         resolution phase: they must do so from the emission phase,
11027         since the variable might have been "captured", hence access to
11028         it can not be done with the local-variable operations from the runtime.
11029         
11030         * statement.cs 
11031
11032         (Block.Flags): New flag `IsTopLevel' to indicate that this block
11033         is a toplevel block.
11034
11035         (ToplevelBlock): A new kind of Block, these are the blocks that
11036         are created by the parser for all toplevel method bodies.  These
11037         include methods, accessors and anonymous methods.
11038
11039         These contain some extra information not found in regular blocks:
11040         A pointer to an optional CaptureContext (for tracking captured
11041         local variables and parameters).  A pointer to the parent
11042         ToplevelBlock.
11043         
11044         (Return.Resolve): Catch missmatches when returning a value from an
11045         anonymous method (error 1662).
11046         Invoke NeedReturnLabel from the Resolve phase instead of the emit
11047         phase.
11048
11049         (Break.Resolve): ditto.
11050
11051         (SwitchLabel): instead of defining the labels during the
11052         resolution phase, we now turned the public ILLabel and ILLabelCode
11053         labels into methods called GetILLabelCode() and GetILLabel() that
11054         only define the label during the Emit phase.
11055
11056         (GotoCase): Track the SwitchLabel instead of the computed label
11057         (its contained therein).  Emit the code by using
11058         SwitchLabel.GetILLabelCode ().
11059
11060         (LocalInfo.Flags.Captured): A new flag has been introduce to track
11061         whether the Local has been captured or not.
11062
11063         (LocalInfo.IsCaptured): New property, used to tell whether the
11064         local has been captured.
11065         
11066         * anonymous.cs: Vastly updated to contain the anonymous method
11067         support.
11068
11069         The main classes here are: CaptureContext which tracks any
11070         captured information for a toplevel block and ScopeInfo used to
11071         track the activation frames for various local variables.   
11072
11073         Each toplevel block has an optional capture context associated
11074         with it.  When a method contains an anonymous method both the
11075         toplevel method and the anonymous method will create a capture
11076         context.   When variables or parameters are captured, they are
11077         recorded on the CaptureContext that owns them, for example:
11078
11079         void Demo () {
11080              int a;
11081              MyDelegate d = delegate {
11082                  a = 1;
11083              }
11084         }
11085
11086         Here `a' will be recorded as captured on the toplevel
11087         CapturedContext, the inner captured context will not have anything
11088         (it will only have data if local variables or parameters from it
11089         are captured in a nested anonymous method.
11090
11091         The ScopeInfo is used to track the activation frames for local
11092         variables, for example:
11093
11094         for (int i = 0; i < 10; i++)
11095                 for (int j = 0; j < 10; j++){
11096                    MyDelegate d = delegate {
11097                         call (i, j);
11098                    }
11099                 }
11100
11101         At runtime this captures a single captured variable `i', but it
11102         captures 10 different versions of the variable `j'.  The variable
11103         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
11104         recorded on a child.  
11105
11106         The toplevel ScopeInfo will also track information like the `this'
11107         pointer if instance variables were referenced (this is necessary
11108         as the anonymous method lives inside a nested class in the host
11109         type of the method). 
11110
11111         (AnonymousMethod): Expanded to track the Toplevel, implement
11112         `AnonymousMethod.Compatible' to tell whether an anonymous method
11113         can be converted to a target delegate type. 
11114
11115         The routine now also produces the anonymous method content
11116
11117         (AnonymousDelegate): A helper class that derives from
11118         DelegateCreation, this is used to generate the code necessary to
11119         produce the delegate for the anonymous method that was created. 
11120
11121         * assign.cs: API adjustments for new changes in
11122         Convert.ImplicitStandardConversionExists.
11123
11124         * class.cs: Adjustments to cope with the fact that now toplevel
11125         blocks are of type `ToplevelBlock'. 
11126
11127         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
11128         insteda of standard blocks.
11129
11130         Flag errors if params arguments are passed to anonymous methods.
11131
11132         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
11133         `CurrentAnonymousMethod' which points to the current Anonymous
11134         Method.  The variable points to the AnonymousMethod class that
11135         holds the code being compiled.  It is set in the new EmitContext
11136         created for the anonymous method.
11137
11138         (EmitContext.Phase): Introduce a variable and an enumeration to
11139         assist in enforcing some rules about when and where we are allowed
11140         to invoke certain methods (EmitContext.NeedsReturnLabel is the
11141         only one that enfonces this right now).
11142
11143         (EmitContext.HaveCaptureInfo): new helper method that returns
11144         whether we have a CapturedContext initialized.
11145
11146         (EmitContext.CaptureVariable): New method used to register that a
11147         LocalInfo must be flagged for capturing. 
11148
11149         (EmitContext.CapturedParameter): New method used to register that a
11150         parameters must be flagged for capturing. 
11151         
11152         (EmitContext.CapturedField): New method used to register that a
11153         field must be flagged for capturing. 
11154
11155         (EmitContext.HaveCapturedVariables,
11156         EmitContext.HaveCapturedFields): Return whether there are captured
11157         variables or fields. 
11158
11159         (EmitContext.EmitMethodHostInstance): This is used to emit the
11160         instance for the anonymous method.  The instance might be null
11161         (static methods), this (for anonymous methods that capture nothing
11162         and happen to live side-by-side with the current method body) or a
11163         more complicated expression if the method has a CaptureContext.
11164
11165         (EmitContext.EmitTopBlock): Routine that drives the emission of
11166         code: it will first resolve the top block, then emit any metadata
11167         and then emit the code.  The split is done so that we can extract
11168         any anonymous methods and flag any captured variables/parameters.
11169         
11170         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
11171         during this phase, the ILGenerator should not be used as labels
11172         and local variables declared here might not be accessible to any
11173         code that is part of an anonymous method.  
11174
11175         Exceptions to this include the temporary variables that are
11176         created by some statements internally for holding temporary
11177         variables. 
11178         
11179         (EmitContext.EmitMeta): New routine, in charge of emitting all the
11180         metadata for a cb
11181
11182         (EmitContext.TemporaryReturn): This method is typically called
11183         from the Emit phase, and its the only place where we allow the
11184         ReturnLabel to be defined other than the EmitMeta.  The reason is
11185         that otherwise we would have to duplicate a lot of logic in the
11186         Resolve phases of various methods that today is on the Emit
11187         phase. 
11188
11189         (EmitContext.NeedReturnLabel): This no longer creates the label,
11190         as the ILGenerator is not valid during the resolve phase.
11191
11192         (EmitContext.EmitThis): Extended the knowledge in this class to
11193         work in anonymous methods in addition to iterators. 
11194
11195         (EmitContext.EmitCapturedVariableInstance): This emits whatever
11196         code is necessary on the stack to access the instance to a local
11197         variable (the variable will be accessed as a field).
11198
11199         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
11200         EmitContext.EmitAddressOfParameter): Routines to support
11201         parameters (not completed at this point). 
11202         
11203         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
11204         will also remove the parameters.
11205
11206         * convert.cs (Convert): Define a `ConstantEC' which points to a
11207         null.  This is just to prefity some code that uses
11208         ImplicitStandardConversion code and do not have an EmitContext
11209         handy.
11210
11211         The idea is to flag explicitly that at that point in time, it is
11212         known that the conversion will not trigger the delegate checking
11213         code in implicit conversions (which requires a valid
11214         EmitContext). 
11215
11216         Everywhere: pass new EmitContext parameter since
11217         ImplicitStandardConversionExists now requires it to check for
11218         anonymous method conversions. 
11219
11220         (Convert.ImplicitStandardConversionExists): If the type of an
11221         expression is the anonymous_method_type, and the type is a
11222         delegate, we invoke the AnonymousMethod.Compatible method to check
11223         whether an implicit conversion is possible. 
11224
11225         (Convert.ImplicitConversionStandard): Only do implicit method
11226         group conversions if the language level is not ISO_1.
11227
11228         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
11229         MethodInfo for the Invoke method.  used by Delegate and
11230         AnonymousDelegate.
11231
11232         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
11233         method conversions if the target type is a delegate.
11234
11235         Removed extra debugging nops.
11236
11237         (LocalVariableReference): Turn the `local_info' into a public
11238         field. 
11239
11240         Add `prepared' field, the same hack used for FieldExprs to cope
11241         with composed assignments, as Local variables do not necessarily
11242         operate purely on the stack as they used to: they can be captured
11243         fields. 
11244
11245         Add `temp' for a temporary result, like fields.
11246
11247         Refactor DoResolve and DoResolveLValue into DoResolveBase.
11248
11249         It now copes with Local variables that are captured and emits the
11250         proper instance variable to load it from a field in the captured
11251         case. 
11252
11253         (ParameterReference.DoResolveBase): During the resolve phase,
11254         capture parameters if we are in an anonymous method.
11255
11256         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
11257         anonymous method, use the EmitContext helper routines to emit the
11258         parameter reference.
11259
11260         * iterators.cs: Set RemapToProxy to true/false during the
11261         EmitDispose class.
11262
11263         * parameters.cs (GetParameterByName): New helper method. 
11264
11265         * typemanager.cs (anonymous_method_type) a new type that
11266         represents an anonyous method.  This is always an internal type,
11267         used as a fencepost to test against the anonymous-methodness of an
11268         expression. 
11269         
11270 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
11271
11272         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
11273         561 report.
11274         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
11275
11276 2004-10-18  Martin Baulig  <martin@ximian.com>
11277
11278         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
11279         `Type' directly, but call ResolveType() on it.
11280         (Catch.Resolve): Likewise.
11281         (Foreach.Resolve): Likewise.
11282
11283 2004-10-18  Martin Baulig  <martin@ximian.com>
11284
11285         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
11286         `Type' directly, but call ResolveType() on it.
11287         (Probe.DoResolve): Likewise.
11288         (ArrayCreation.LookupType): Likewise.
11289         (TypeOf.DoResolve): Likewise.
11290         (SizeOf.DoResolve): Likewise.
11291
11292 2004-10-18  Martin Baulig  <martin@ximian.com>
11293
11294         * expression.cs (Invocation.BetterFunction): Put back
11295         TypeManager.TypeToCoreType().
11296
11297 2004-10-18  Raja R Harinath  <rharinath@novell.com>
11298
11299         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
11300         the ResolveType.
11301
11302 2004-10-18  Martin Baulig  <martin@ximian.com>
11303
11304         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
11305         `Type' directly, but call ResolveType() on it.
11306
11307 2004-10-18  Martin Baulig  <martin@ximian.com>
11308
11309         * class.cs (FieldMember.Define): Don't access the TypeExpr's
11310         `Type' directly, but call ResolveType() on it.
11311         (MemberBase.DoDefine): Likewise.
11312
11313         * expression.cs (New.DoResolve): Don't access the TypeExpr's
11314         `Type' directly, but call ResolveType() on it.
11315         (ComposedCast.DoResolveAsTypeStep): Likewise.
11316
11317         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
11318         `Type' directly, but call ResolveType() on it.
11319
11320 2004-10-17  John Luke  <john.luke@gmail.com>
11321
11322         * class.cs (Operator.GetSignatureForError): use CSharpName
11323
11324         * parameter.cs (Parameter.GetSignatureForError): Returns
11325         correct name even if was not defined.
11326
11327 2004-10-13  Raja R Harinath  <rharinath@novell.com>
11328
11329         Fix #65816.
11330         * class.cs (TypeContainer.EmitContext): New property.
11331         (DefineNestedTypes): Create an emitcontext for each part.
11332         (MethodCore.DoDefineParameters): Use container's emitcontext.
11333         Pass type array to InternalParameters.
11334         (MemberBase.DoDefine): Use container's emitcontext.
11335         (FieldMember.Define): Likewise.
11336         (Event.Define): Likewise.
11337         (SetMethod.GetParameterInfo): Change argument to EmitContext.
11338         Pass type array to InternalParameters.
11339         (SetIndexerMethod.GetParameterInfo): Likewise.
11340         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
11341         * delegate.cs (Define): Pass emitcontext to
11342         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
11343         array to InternalParameters.
11344         * expression.cs (ParameterReference.DoResolveBase): Pass
11345         emitcontext to GetParameterInfo.
11346         (ComposedCast.DoResolveAsTypeStep): Remove check on
11347         ec.ResolvingTypeTree.
11348         * parameter.cs (Parameter.Resolve): Change argument to
11349         EmitContext.  Use ResolveAsTypeTerminal.
11350         (Parameter.GetSignature): Change argument to EmitContext.
11351         (Parameters.ComputeSignature): Likewise.
11352         (Parameters.ComputeParameterTypes): Likewise.
11353         (Parameters.GetParameterInfo): Likewise.
11354         (Parameters.ComputeAndDefineParameterTypes): Likewise.
11355         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
11356         * support.cs (InternalParameters..ctor): Remove variant that takes
11357         a DeclSpace.
11358         * typemanager.cs (system_intptr_expr): New.
11359         (InitExpressionTypes): Initialize it.
11360
11361 2004-10-12  Chris Toshok  <toshok@ximian.com>
11362
11363         * cs-parser.jay: fix location for try_statement and catch_clause.
11364
11365 2004-10-11  Martin Baulig  <martin@ximian.com>
11366
11367         * report.cs: Don't make --fatal abort on warnings, we have
11368         -warnaserror for that.
11369
11370 2004-10-07  Raja R Harinath  <rharinath@novell.com>
11371
11372         More DeclSpace.ResolveType avoidance.
11373         * decl.cs (MemberCore.InUnsafe): New property.
11374         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
11375         with newly created EmitContext.
11376         (FieldMember.Define): Likewise.
11377         * delegate.cs (Delegate.Define): Likewise.
11378         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
11379         only if normal name-lookup fails.
11380         (TypeExpr.DoResolve): Enable error-checking.
11381         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
11382         (SizeOf.DoResolve): Likewise.
11383         (ComposedCast.DoResolveAsTypeStep): Likewise.
11384         (StackAlloc.DoResolve): Likewise.
11385         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
11386         (Block.Unsafe): New property.
11387         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
11388         (Unsafe): Set 'unsafe' flag of contained block.
11389         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
11390         (Fixed.Resolve): Likewise.
11391         (Catch.Resolve): Likewise.
11392         (Using.ResolveLocalVariableDecls): Likewise.
11393         (Foreach.Resolve): Likewise.
11394
11395 2004-10-05  John Luke <john.luke@gmail.com>
11396
11397         * cs-parser.jay: add location to error CS0175
11398
11399 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
11400
11401         * ecore.cs (Expression.Constantity): Add support for turning null
11402         into a constant.
11403
11404         * const.cs (Const.Define): Allow constants to be reference types
11405         as long as the value is Null.
11406
11407 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
11408
11409         * namespace.cs (NamespaceEntry.Using): No matter which warning
11410         level is set, check if this namespace name has already been added.
11411
11412 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
11413
11414         * expression.cs: reftype [!=]= null should always use br[true,false].
11415         # 67410
11416
11417 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
11418
11419         Fix #67108
11420         * attribute.cs: Enum conversion moved to 
11421         GetAttributeArgumentExpression to be applied to the all
11422         expressions.
11423
11424 2004-10-01  Raja R Harinath  <rharinath@novell.com>
11425
11426         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
11427         * class.c (TypeContainer.DefineType): Flag error if
11428         base types aren't accessible due to access permissions.
11429         * decl.cs (DeclSpace.ResolveType): Move logic to
11430         Expression.ResolveAsTypeTerminal.
11431         (DeclSpace.ResolveTypeExpr): Thin layer over
11432         Expression.ResolveAsTypeTerminal.
11433         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
11434         Refactor code into NestedAccess.  Use it.
11435         (DeclSpace.NestedAccess): New.
11436         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
11437         argument to silence errors.  Check access permissions.
11438         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
11439         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
11440         (Cast.DoResolve): Likewise.
11441         (New.DoResolve): Likewise.
11442         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
11443         (TypeOf.DoResolve): Likewise.
11444
11445         * expression.cs (Invocation.BetterConversion): Return the Type of
11446         the better conversion.  Implement section 14.4.2.3 more faithfully.
11447         (Invocation.BetterFunction): Make boolean.  Make correspondence to
11448         section 14.4.2.2 explicit.
11449         (Invocation.OverloadResolve): Update.
11450         (Invocation): Remove is_base field.
11451         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
11452         (Invocation.Emit): Likewise.
11453
11454 2004-09-27  Raja R Harinath  <rharinath@novell.com>
11455
11456         * README: Update to changes.
11457
11458 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
11459
11460         * cs-parser.jay: Reverted 642 warning fix.
11461
11462 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11463
11464         Fix bug #66615
11465         * decl.cs (FindMemberWithSameName): Indexer can have more than
11466         1 argument.
11467
11468 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11469
11470         * expression.cs (LocalVariableReference.DoResolveLValue):
11471         Do not report warning 219 for out values.
11472         (EmptyExpression.Null): New member to avoid extra allocations.
11473
11474 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11475
11476         * cs-parser.jay: Fix wrong warning 642 report.
11477
11478         * cs-tokenizer.cs (CheckNextToken): New helper;
11479         Inspect next character if is same as expected.
11480
11481 2004-09-23  Martin Baulig  <martin@ximian.com>
11482
11483         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
11484         (Convert.ImplicitReferenceConversionExists): Likewise.
11485
11486 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11487
11488         * class.cs (Operator.Define): Add error 448 and 559 report.
11489
11490 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11491
11492         * class.cs (MemberBase.IsTypePermitted): New protected
11493         method for checking error CS0610.
11494
11495 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11496
11497         * class.cs (TypeContainer.HasExplicitLayout): New property
11498         Returns whether container has StructLayout attribute set Explicit.
11499         (FieldMember): New abstract class for consts and fields.
11500         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
11501         (Field): Reuse FieldMember.
11502
11503         * const.cs (Const): Reuse FieldMember.
11504
11505         * rootcontext.cs: EmitConstants call moved to class.
11506
11507 2004-09-22  Martin Baulig  <martin@ximian.com>
11508
11509         Thanks to Peter Sestoft for this bug report.
11510
11511         * expression.cs (Conditional): If both the `trueExpr' and the
11512         `falseExpr' is a NullLiteral, return a NullLiteral.
11513
11514 2004-09-22  Martin Baulig  <martin@ximian.com>
11515
11516         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
11517         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
11518         for the "get_Current" call.
11519
11520 2004-09-22  Martin Baulig  <martin@ximian.com>
11521
11522         Marek and me just fixed one of our oldest bugs: #28562 :-)
11523
11524         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
11525
11526         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
11527         we're an EnumConstant, just return that.
11528         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
11529         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
11530         to get the value which'll actually be written into the attribute.
11531         However, we have to use GetValue() to access the attribute's value
11532         in the compiler.        
11533
11534 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11535
11536         * constant.cs (Constant.IsNegative): New abstract property
11537         IsNegative.
11538
11539         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
11540         (StackAlloc.DoResolve): Reused IsNegative.
11541
11542 2004-09-21  Martin Baulig  <martin@ximian.com>
11543
11544         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
11545         if we're used in an iterator, we may be called from different
11546         methods.
11547
11548         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
11549         we actually have an exception block.
11550
11551 2004-09-20  John Luke <jluke@cfl.rr.com>
11552
11553         * class.cs, cs-parser.jay: Improve the error report for 1520:
11554         report the actual line where the error happens, not where the
11555         class was declared.
11556
11557         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
11558         Pass location information that was available elsewhere.
11559
11560 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
11561
11562         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
11563         runtime to delay sign assemblies.
11564
11565 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11566
11567         * cs-parser.jay: Do not report the stack trace, this is barely
11568         used nowadays.
11569
11570 2004-08-22  John Luke  <john.luke@gmail.com>
11571  
11572         * driver.cs : check that a resource id is not already used
11573         before adding it, report CS1508 if it is, bug #63637
11574
11575 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11576
11577         * ecore.cs: Removed dead code.
11578
11579 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
11580
11581         * class.cs: Do not report warning CS0067 on the interfaces.
11582
11583 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11584
11585         * cs-parser.jay: Add error 504 report.
11586
11587 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11588
11589         * rootcontext.cs: WarningLevel is 4 by default now.
11590
11591         * statement.cs (Fixed.Resolve): Do not null
11592         VariableInfo.
11593
11594 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11595
11596         Fixed bug #55780
11597         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
11598         deep search when property is not virtual.
11599         (PropertyExpr.ResolveAccessors): Make one call for both
11600         accessors.
11601
11602 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11603
11604         Fixed bug #65766
11605         * statement.cs: Error 152 report constains also location.
11606
11607 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11608
11609         Fixed bug #65766
11610         * const.cs: Explicitly set constant as static.
11611
11612 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11613
11614         Fixed bug #64226
11615         * cs-parser.jay: Add error 1017 report.
11616
11617 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11618
11619         Fixed bug #59980, #64224
11620         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
11621
11622         * typemanager.cs (IsSpecialMethod): Simplified
11623
11624 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11625
11626         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
11627         condition with better params.
11628
11629 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11630
11631         Fixed bug #65238
11632         * attribute.cs (Resolve): Property has to have both
11633         accessors.
11634
11635 2004-09-14  Martin Baulig  <martin@ximian.com>
11636
11637         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
11638
11639 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11640
11641         Fixed bug #61902
11642         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
11643         called and is obsolete then this member suppress message
11644         when call is inside next [Obsolete] method or type.
11645
11646         * expression.cs: Use TestObsoleteMethodUsage member.
11647
11648 2004-09-14  Martin Baulig  <martin@ximian.com>
11649
11650         * cs-parser.jay: Sync a bit with the GMCS version.
11651
11652 2004-09-14  Martin Baulig  <martin@ximian.com>
11653
11654         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
11655         (CSharpParser.yacc_verbose_flag): New public field.
11656
11657         * genericparser.cs: Removed.
11658
11659 2004-09-14  Raja R Harinath  <rharinath@novell.com>
11660
11661         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
11662
11663 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
11664
11665         * class.cs (MethodCore.CheckBase): Fix bug #65757.
11666
11667 2004-09-10  Martin Baulig  <martin@ximian.com>
11668
11669         Backported my MemberName changes from GMCS into MCS.
11670
11671         - we are now using a special `MemberName' class instead of using
11672         strings; in GMCS, the `MemberName' also contains the type
11673         arguments.
11674
11675         - changed the grammar rules a bit:
11676           * the old `member_name' is now a `namespace_or_type_name':
11677             The rule is that we use `namespace_or_type_name' everywhere
11678             where we expect either a "member name" (GetEnumerator) or a
11679             "member name" with an explicit interface name
11680             (IEnumerable.GetEnumerator).
11681             In GMCS, the explicit interface name may include type arguments
11682             (IEnumerable<T>.GetEnumerator).
11683           * we use `member_name' instead of just `IDENTIFIER' for
11684             "member names":
11685             The rule is that we use `member_name' wherever a member may
11686             have type parameters in GMCS.       
11687
11688         * decl.cs (MemberName): New public class.
11689         (MemberCore.MemberName): New public readonly field.
11690         (MemberCore.ctor): Take a `MemberName' argument, not a string.
11691         (DeclSpace): Likewise.
11692
11693         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
11694         * enum.cs (Enum.ctor): Likewise.
11695
11696         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
11697         MemberName.     
11698         (AliasEntry.ctor): Take a MemberName, not an Expression.
11699         (AliasEntry.UsingAlias): Likewise.
11700
11701         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
11702         (IMethodData.MemberName): Changed type from string to MemberName.
11703         (MemberBase.ExplicitInterfaceName): Likewise.
11704         (AbstractPropertyEventMethod.SetupName): Make this private.
11705         (AbstractPropertyEventMethod.ctor): Added `string prefix'
11706         argument; compute the member name here.
11707         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
11708         on the `member.MemberName' and the `prefix'.
11709
11710         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
11711         not `type_name'.
11712         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
11713         thus, we get a `MemberName' instead of a `string'.  These
11714         declarations may have type parameters in GMCS.
11715         (interface_method_declaration, delegate_declaration): Likewise.
11716         (class_declaration, interface_declaration): Likewise.
11717         (method_header): Use `namespace_or_type_name' instead of
11718         `member_name'.  We may be an explicit interface implementation.
11719         (property_declaration, event_declaration): Likewise.
11720         (member_name): This is now just an `IDENTIFIER', not a
11721         `namespace_or_type_name'.
11722         (type_name, interface_type): Removed.
11723         (namespace_or_type_name): Return a MemberName, not an Expression.
11724         (primary_expression): Use `member_name' instead of `IDENTIFIER';
11725         call GetTypeExpression() on the MemberName to get an expression.
11726         (IndexerDeclaration.interface_type): Changed type from string to
11727         MemberName.
11728         (MakeName): Operate on MemberName's instead of string's.
11729
11730 2004-09-13  Raja R Harinath  <rharinath@novell.com>
11731
11732         Fix bug #55770.
11733         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
11734         (NamespaceEntry.Lookup): Add new argument to flag if we want the
11735         lookup to avoid symbols introduced by 'using'.
11736         * rootcontext.cs (NamespaceLookup): Update.
11737
11738 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11739
11740         * class.cs (TypeContainer.DoDefineMembers): Do not call
11741         DefineDefaultConstructor for static classes.
11742
11743 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11744
11745         * attribute.cs (Attribute.Resolve): Add error 653 report.
11746
11747         * class.cs (Class.ApplyAttributeBuilder): Add error 641
11748         report.
11749         (Method.ApplyAttributeBuilder): Add error 685 report.
11750         (Operator.Define): Add error 564 report.
11751
11752         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
11753
11754         * expression.cs (Invocation.DoResolve): Add error
11755         245 and 250 report.
11756
11757         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
11758         error 674 report.
11759
11760 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11761
11762         * class.cs (ConstructorInitializer.Resolve):
11763         Wrong error number (515->516).
11764
11765 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11766
11767         * class.cs (Indexer.Define): Add error 631 report.
11768
11769 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11770
11771         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
11772
11773 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11774
11775         * expression.cs (Probe.DoResolve): Add error CS0241 report.
11776
11777 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
11778
11779         * cs-parser.jay: Added error CS0241 report.
11780
11781 2004-09-10  Raja R Harinath  <rharinath@novell.com>
11782
11783         * cs-parser.jay (fixed_statement): Introduce a scope for the
11784         declaration in the 'fixed' statement.
11785
11786 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11787
11788         * cs-parser.jay: Added CS0230 error report.
11789
11790 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11791
11792         * cs-parser.jay: Added errors CS0231 and CS0257 report.
11793
11794 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11795
11796         * expression.cs (Argument.Resolve): Added error CS0192 and
11797         CS0199 report.
11798
11799 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11800
11801         C# 2.0 #pragma warning feature
11802
11803         * cs-tokenizer.cs (PreProcessPragma): New method; 
11804         Handles #pragma directive.
11805
11806         * report.cs (WarningRegions): New class; Support
11807         class for #pragma warning directive. It tests whether
11808         warning is enabled for a given line.
11809
11810 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
11811
11812         * const.cs: Add more descriptive error report, tahnks to
11813         Sebastien. 
11814
11815 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
11816
11817         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
11818
11819 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
11820
11821         * expression.cs: Apply patch from Ben: Remove dead code from
11822         ArrayCreation, and remove the TurnintoConstant call in const.cs,
11823         as that code just threw an exception anwyays.
11824
11825         * const.cs: Remove the call to the turnintoconstant, for details
11826         see bug: #63144
11827         
11828         * literal.cs: The type of the null-literal is the null type;  So
11829         we use a placeholder type (literal.cs:System.Null, defined here)
11830         for it.
11831
11832         * expression.cs (Conditional.DoResolve): Remove some old code that
11833         is no longer needed, conversions have been fixed.
11834
11835         (ArrayCreationExpression.DoResolve): Return false if we fail to
11836         resolve the inner expression.
11837
11838 2004-09-07  Raja R Harinath  <rharinath@novell.com>
11839
11840         Fix test-290.cs.
11841         * cs-parser.jay (delegate_declaration): Record a delegate
11842         declaration as a type declaration.
11843         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
11844
11845 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
11846
11847         * parameter.cs: Do not crash if the type can not be resolved. 
11848
11849         * expression.cs: Report errors with unsafe pointers, fixes #64896
11850
11851 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11852
11853         * expression.cs: Pointer arith always needs to do a conv.i
11854         if the operand is a long. fix 65320
11855
11856 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11857
11858         Fixed cs0619-37.cs, cs0619-38.cs
11859
11860         * enum.cs (GetObsoleteAttribute): Removed.
11861
11862         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
11863         on Enum member is double staged. The first is tested member
11864         and then enum.
11865
11866 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11867
11868         Fixed #56986, #63631, #65231
11869
11870         * class.cs: (TypeContainer.AddToMemberContainer): New method,
11871         adds member to name container.
11872         (TypeContainer.AddToTypeContainer): New method, adds type to
11873         name container.
11874         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
11875         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
11876         AddOperator): Simplified by reusing AddToMemberContainer.
11877         (TypeContainer.UserDefinedStaticConstructor): Changed to property
11878         instead of field.
11879         (Method.CheckForDuplications): Fixed implementation to test all
11880         possibilities.
11881         (MemberBase): Detection whether member is explicit interface
11882         implementation is now in constructor.
11883         (MemberBase.UpdateMemberName): Handles IndexerName.
11884         (Accessor): Changed to keep also location information.
11885         (AbstractPropertyEventMethod): Is derived from MemberCore.
11886         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
11887         will be emited or not.
11888         (PropertyBase.AreAccessorsDuplicateImplementation):
11889         Tests whether accessors are not in collision with some method.
11890         (Operator): Is derived from MethodCore to simplify common
11891         operations.
11892
11893         * decl.cs (Flags.TestMethodDuplication): Test for duplication
11894         must be performed.
11895         (DeclSpace.AddToContainer): Adds the member to defined_names
11896         table. It tests for duplications and enclosing name conflicts.
11897
11898         * enum.cs (EnumMember): Clean up to reuse the base structures
11899
11900 2004-09-03  Martin Baulig  <martin@ximian.com>
11901
11902         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
11903         into TypeContainer, to make partial classes work again.
11904
11905 2004-09-03  Martin Baulig  <martin@ximian.com>
11906
11907         * rootcontext.cs (RootContext.V2): Removed.
11908
11909 2004-03-23  Martin Baulig  <martin@ximian.com>
11910
11911         * expression.cs (Invocation.OverloadResolve): Added `bool
11912         may_fail' argument and use it instead of the Location.IsNull() hack.
11913
11914 2004-09-03  Martin Baulig  <martin@ximian.com>
11915
11916         Merged latest changes into gmcs.  Please keep this comment in
11917         here, it makes it easier for me to see what changed in MCS since
11918         the last time I merged.
11919
11920 2004-09-03  Raja R Harinath  <rharinath@novell.com>
11921
11922         Fix #61128.
11923         * expression.cs (BetterConversion): Don't allow either conversion 
11924         to be null.  Remove redundant implicit conversion test when 'q ==
11925         null' -- when this function is invoked, we already know that the
11926         implicit conversion exists.
11927         (BetterFunction): Assume that 'best' is non-null.  Remove
11928         redundant reimplementation of IsApplicable when 'best' is null.
11929         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
11930         number of arguments.
11931         (IsAncestralType): Extract from OverloadResolve.
11932         (OverloadResolve): Make robust to the MethodGroupExpr being
11933         unsorted.  Implement all the logic of Section 14.5.5.1, and
11934         support overloading of methods from multiple applicable types.
11935         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
11936
11937         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
11938         (RealError, Warning): Append type of report to related symbol.
11939
11940 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
11941
11942         * enum.cs: Fixed CLS-Compliance checks for enum members.
11943         Error tests cs3008-8.cs, cs3014-8.cs
11944
11945 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
11946
11947         Fixed bug #62342, #63102
11948         * class.cs: ImplementIndexer uses member.IsExplicitImpl
11949         like ImplementMethod.
11950
11951 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
11952
11953         * attribute.cs (Attribute.GetAttributeArgumentExpression):
11954         Fixed bug #65170.
11955
11956 2004-09-02  Martin Baulig  <martin@ximian.com>
11957
11958         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
11959         TypeManager.GetArgumentTypes() rather than calling GetParameters()
11960         on the MethodBase.
11961
11962 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
11963
11964         C# 2.0 Static classes implemented
11965
11966         * class.cs (TypeContainer): instance_constructors,
11967         initialized_fields, initialized_static_fields,
11968         default_constructor, base_inteface_types are protected to be
11969         accessible from StaticClass.
11970         (TypeContainer.DefineDefaultConstructor): New virtual method
11971         for custom default constructor generating
11972         (StaticClass): New class to handle "Static classes" feature.
11973
11974         * cs-parser.jay: Handle static keyword on class like instance
11975         of StaticClass.
11976
11977         * driver.cs: Added "/langversion" command line switch with two
11978         options (iso-1, default).
11979
11980 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
11981
11982         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
11983
11984 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
11985
11986         * delegate.cs: Style.
11987
11988 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
11989
11990         * delegate.cs: Add seperate instance expr field for miguel.
11991
11992 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11993
11994         * PointerArithmetic (Resolve): make sure we are not doing
11995         pointer arith on void*. Also, make sure we are resolved
11996         by not setting eclass until resolve.
11997
11998         All callers: Make sure that PointerArithmetic gets resolved.
11999
12000 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12001
12002         * ArrayCreation (LookupType): If the type does not resolve 
12003         to an array, give an error.
12004
12005 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
12006
12007         * statement.cs (Try.Resolve): Fixed bug #64222
12008
12009 2004-08-27  Martin Baulig  <martin@ximian.com>
12010
12011         * class.cs
12012         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
12013         crash here.     
12014
12015 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12016
12017         * ecore.cs (Constantify): Get underlying type via
12018         System.Enum.GetUnderlyingType to avoid StackOverflow on the
12019         Windows in special cases.
12020
12021 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12022
12023         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
12024         for obtaining also private methods.
12025         (GetRemoveMethod): Used GetRemoveMethod (true)
12026         for obtaining also private methods.
12027
12028 2004-08-24  Martin Baulig  <martin@ximian.com>
12029
12030         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
12031         MethodAttributes.HideBySig for operators.
12032
12033 2004-08-23  Martin Baulig  <martin@ximian.com>
12034
12035         Back to the old error reporting system :-)
12036
12037         * report.cs (Message): Removed.
12038         (Report.MessageData, ErrorData, WarningData): Removed.
12039         (Report.Error, Warning): Back to the old system.
12040
12041 2004-08-23  Martin Baulig  <martin@ximian.com>
12042
12043         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
12044
12045         * class.cs (TypeContainer.ParentContainer): New public virtual
12046         method; replaces the explicit interface implementation.
12047         (ClassPart.ParentContainer): Override.
12048
12049 2004-08-23  Martin Baulig  <martin@ximian.com>
12050
12051         * statement.cs (Switch): Added support for constant switches; see
12052         #59428 or test-285.cs.
12053
12054 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12055
12056         Fixed bug #62740.
12057         * statement.cs (GetEnumeratorFilter): Removed useless
12058         logic because C# specs is strict. GetEnumerator must be
12059         public.
12060
12061 2004-08-22  Martin Baulig  <martin@ximian.com>
12062
12063         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12064         a switch and may break, reset the barrier.  Fixes #59867.
12065
12066 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12067
12068         CLS-Compliance speed up (~5% for corlib)
12069
12070         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
12071         New method. Tests container for CLS-Compliant names
12072
12073         * class.cs (TypeContainer.VerifyClsName): New method.
12074         Checks whether container name is CLS Compliant.
12075         (Constructor): Implements IMethodData.
12076
12077         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
12078         low-case table for CLS Compliance test.
12079         (MemberCache.VerifyClsParameterConflict): New method.
12080         Checks method parameters for CS3006 error.
12081
12082         * enum.cs (EnumMember): Is derived from MemberCore.
12083         (Enum.VerifyClsName): Optimized for better performance.
12084
12085 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12086
12087         * report.cs: Renamed Error_T to Error and changed all
12088         references.
12089
12090 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12091
12092         * class.cs (TypeContainer.IndexerArrayList): New inner class
12093         container for indexers.
12094         (TypeContainer.DefaultIndexerName): New constant for default
12095         indexer name. Replaced all "Item" with this constant.
12096         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
12097
12098         * typemanager.cs (TypeManager.default_member_ctor): Cache here
12099         DefaultMemberAttribute constructor.
12100
12101 2004-08-05  Martin Baulig  <martin@ximian.com>
12102
12103         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12104         Fix bug #59429.
12105
12106 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
12107
12108         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
12109         multi platforms problem.
12110
12111         * compiler.csproj: Included shared files.
12112
12113 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12114
12115         Fix bug 60333, 55971 in the more general way
12116         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12117         Added arg_type argument for constant conversion.
12118         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
12119
12120 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12121
12122         Fix bug #59760
12123         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
12124         OperatorArrayList, MethodCoreArrayList for typecontainer
12125         containers. Changed class member types to these new types.
12126         (MethodArrayList.DefineMembers): Added test for CS0659.
12127
12128 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
12129
12130         * cfold.cs: Synchronize the folding with the code in expression.cs
12131         Binary.DoNumericPromotions for uint operands.
12132
12133         * attribute.cs: Revert patch from Raja, it introduced a regression
12134         while building Blam-1.2.1 (hard to isolate a test case).
12135
12136 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12137
12138         Fix for #55382
12139         * class.cs:
12140         (TypeContainer.Define): Renamed to DefineContainerMembers because of
12141         name collision.
12142         (MethodCore.parent_method): New member. The method we're overriding
12143         if this is an override method.
12144         (MethodCore.CheckBase): Moved from Method class and made common.
12145         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
12146         private.
12147         (MethodCore.CheckForDuplications): New abstract method. For custom
12148         member duplication search in a container
12149         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
12150         method and its return type.
12151         (Event.conflict_symbol): New member. Symbol with same name in the
12152         parent class.
12153
12154         * decl.cs:
12155         (MemberCache.FindMemberWithSameName): New method. The method
12156         is looking for conflict with inherited symbols.
12157
12158 2004-08-04  Martin Baulig  <martin@ximian.com>
12159
12160         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
12161
12162         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
12163
12164 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12165
12166         * report.cs (Message): New enum for better error, warning reference in
12167         the code.
12168         (MessageData): New inner abstract class. It generally handles printing of
12169         error and warning messages.
12170         Removed unused Error, Warning, Message methods.
12171
12172 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12173
12174         Fix for cs0592-8.cs test
12175         * attribute.cs
12176         (Attributable.ValidAttributeTargets): Made public.
12177         (Attribute.ExplicitTarget): New member for explicit target value.
12178         (Attribute.CheckTargets): Now we translate explicit attribute
12179         target to Target here.
12180
12181 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
12182
12183         * ecore.cs (MethodGroupExpr): new IsBase property.
12184
12185         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
12186
12187         * delegate.cs (DelegateCreation): store a MethodGroupExpr
12188         rather than an instance expr.
12189
12190         (DelegateCreation.Emit): Use the method group rather than
12191         the instance expression. Also, if you have base.Foo as the
12192         method for a delegate, make sure to emit ldftn, not ldftnvirt.
12193
12194         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
12195
12196         (NewDelegate.DoResolve): Only check for the existance of Invoke
12197         if the method is going to be needed. Use MethodGroupExpr.
12198
12199         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
12200
12201         * expression.cs: For pointer arith., make sure to use
12202         the size of the type, not the size of the pointer to
12203         the type.
12204
12205 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12206
12207         Fix for #60722
12208         * class.cs (Class): Added error CS0502 test.
12209
12210 2004-08-03  John Luke  <jluke@cfl.rr.com>
12211             Raja R Harinath  <rharinath@novell.com>
12212
12213         Fix for #60997.
12214         * attribute.cs (Attribute.complained_before): New flag.
12215         (Attribute.ResolveType, Attribute.Resolve),
12216         (Attribute.DefinePInvokeMethod): Set it.
12217         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
12218         
12219 2004-08-03  Martin Baulig  <martin@ximian.com>
12220
12221         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
12222         use a user-defined operator; we still need to do numeric
12223         promotions in case one argument is a builtin type and the other
12224         one has an implicit conversion to that type.  Fixes #62322.
12225
12226 2004-08-02  Martin Baulig  <martin@ximian.com>
12227
12228         * statement.cs (LocalInfo.Flags): Added `IsThis'.
12229         (LocalInfo.IsThis): New public property.
12230         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
12231
12232 2004-08-01  Martin Baulig  <martin@ximian.com>
12233
12234         * class.cs (TypeContainer.GetClassBases): Don't set the default
12235         here since we may get called from GetPartialBases().
12236         (TypeContainer.DefineType): If GetClassBases() didn't return a
12237         parent, use the default one.
12238
12239 2004-07-30  Duncan Mak  <duncan@ximian.com>
12240
12241         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
12242
12243 2004-07-30  Martin Baulig  <martin@ximian.com>
12244
12245         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
12246
12247         * class.cs (SourceMethod): New public class, derive from the
12248         symbol writer's ISourceMethod.
12249         (Method): Use the new symbol writer API.
12250
12251         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
12252         as argument and use the new symbol writer.
12253
12254         * location.cs
12255         (SourceFile): Implement the symbol writer's ISourceFile.
12256         (Location.SymbolDocument): Removed.
12257         (Location.SourceFile): New public property.
12258
12259         * symbolwriter.cs: Use the new symbol writer API.
12260
12261 2004-07-30  Raja R Harinath  <rharinath@novell.com>
12262
12263         * Makefile (install-local): Remove.  Functionality moved to
12264         executable.make.
12265
12266 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
12267
12268         * Makefile: Install mcs.exe.config file together with mcs.exe.
12269         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
12270         correct runtime version.
12271         
12272 2004-07-25  Martin Baulig  <martin@ximian.com>
12273
12274         * class.cs
12275         (TypeContainer.RegisterOrder): Removed, this was unused.
12276         (TypeContainer, interface_order): Removed.
12277         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
12278         TypeContainer as argument since we can also be called with a
12279         `PartialContainer' for a partial class/struct/interface.
12280         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
12281         of checking whether we're an `Interface' - we could be a
12282         `PartialContainer'.
12283         (PartialContainer.Register): Override; call
12284         AddClass()/AddStruct()/AddInterface() on our parent.
12285
12286         * cs-parser.jay (interface_member_declaration): Add things to the
12287         `current_container', not the `current_class'.
12288
12289         * rootcontext.cs (RegisterOrder): The overloaded version which
12290         takes an `Interface' was unused, removed.
12291
12292         * typemanager.cs (TypeManager.LookupInterface): Return a
12293         `TypeContainer', not an `Interface'.
12294         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
12295         contain a `PartialContainer' for an interface, so check it's
12296         `Kind' to figure out what it is.
12297
12298 2004-07-25  Martin Baulig  <martin@ximian.com>
12299
12300         * class.cs (Class.DefaultTypeAttributes): New public constant.
12301         (Struct.DefaultTypeAttributes): Likewise.
12302         (Interface.DefaultTypeAttributes): Likewise.
12303         (PartialContainer.TypeAttr): Override this and add the
12304         DefaultTypeAttributes.
12305
12306 2004-07-25  Martin Baulig  <martin@ximian.com>
12307
12308         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
12309         we can just use the `Parent' field instead.
12310
12311 2004-07-25  Martin Baulig  <martin@ximian.com>
12312
12313         * class.cs (TypeContainer.Emit): Renamed to EmitType().
12314
12315 2004-07-25  Martin Baulig  <martin@ximian.com>
12316
12317         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
12318         our parts before defining any methods.
12319         (TypeContainer.VerifyImplements): Make this virtual.
12320         (ClassPart.VerifyImplements): Override and call VerifyImplements()
12321         on our PartialContainer.
12322
12323 2004-07-25  Martin Baulig  <martin@ximian.com>
12324
12325         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
12326
12327         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
12328         argument, we can just use the `Parent' field instead.
12329
12330         * class.cs
12331         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
12332         (MemberBase.DoDefine): Likewise.
12333
12334 2004-07-24  Martin Baulig  <martin@ximian.com>
12335
12336         * decl.cs (MemberCore.Parent): New public field.
12337         (DeclSpace.Parent): Moved to MemberCore.
12338
12339         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
12340         (MemberBase.ctor): Added TypeContainer argument, pass it to our
12341         parent's .ctor.
12342         (FieldBase, Field, Operator): Likewise.
12343         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
12344         (EventField, Event): Likewise.
12345
12346 2004-07-23  Martin Baulig  <martin@ximian.com>
12347
12348         * class.cs (PartialContainer): New public class.
12349         (ClassPart): New public class.
12350         (TypeContainer): Added support for partial classes.
12351         (TypeContainer.GetClassBases): Splitted some of the functionality
12352         out into GetNormalBases() and GetPartialBases().
12353
12354         * cs-tokenizer.cs (Token.PARTIAL): New token.
12355         (Tokenizer.consume_identifier): Added some hacks to recognize
12356         `partial', but only if it's immediately followed by `class',
12357         `struct' or `interface'.
12358
12359         * cs-parser.jay: Added support for partial clases.
12360
12361 2004-07-23  Martin Baulig  <martin@ximian.com>
12362
12363         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
12364         a `DeclSpace' and also made it readonly.
12365         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
12366         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
12367         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
12368
12369         * cs-parser.jay: Pass the `current_class', not the
12370         `current_container' (at the moment, this is still the same thing)
12371         to a new Method, Property, Event, Indexer or Constructor.
12372
12373 2004-07-23  Martin Baulig  <martin@ximian.com>
12374
12375         * cs-parser.jay (CSharpParser): Added a new `current_class' field
12376         and removed the `current_interface' one.
12377         (struct_declaration, class_declaration, interface_declaration):
12378         Set `current_class' to the newly created class/struct/interface;
12379         set their `Bases' and call Register() before parsing their body.
12380
12381 2004-07-23  Martin Baulig  <martin@ximian.com>
12382
12383         * class.cs (Kind): New public enum.
12384         (TypeContainer): Made this class abstract.
12385         (TypeContainer.Kind): New public readonly field.
12386         (TypeContainer.CheckDef): New public method; moved here from
12387         cs-parser.jay.
12388         (TypeContainer.Register): New public abstract method.
12389         (TypeContainer.GetPendingImplementations): New public abstract
12390         method.
12391         (TypeContainer.GetClassBases): Removed the `is_class' and
12392         `is_iface' parameters.
12393         (TypeContainer.DefineNestedTypes): Formerly known as
12394         DoDefineType().
12395         (ClassOrStruct): Made this class abstract.
12396
12397         * tree.cs (RootTypes): New public type. 
12398
12399 2004-07-20  Martin Baulig  <martin@ximian.com>
12400
12401         * tree.cs (Tree.RecordNamespace): Removed.
12402         (Tree.Namespaces): Removed.
12403
12404         * rootcontext.cs (RootContext.IsNamespace): Removed.
12405
12406         * cs-parser.jay (namespace_declaration): Just create a new
12407         NamespaceEntry here.
12408
12409 2004-07-20  Martin Baulig  <martin@ximian.com>
12410
12411         * statement.cs (ExceptionStatement): New abstract class.  This is
12412         now used as a base class for everyone who's using `finally'.
12413         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
12414         our local variables before using them.
12415
12416         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
12417         virtual method.  This is used by Yield.Resolve() to "steal" an
12418         outer block's `finally' clauses.
12419         (FlowBranchingException): The .ctor now takes an ExceptionStatement
12420         argument.
12421
12422         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
12423         version which takes an ExceptionStatement.  This version must be
12424         used to create exception branchings.
12425
12426         * iterator.cs
12427         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
12428         (Iterator.EmitMoveNext): Added exception support; protect the
12429         block with a `fault' clause, properly handle 'finally' clauses.
12430         (Iterator.EmitDispose): Run all the `finally' clauses here.
12431
12432 2004-07-20  Martin Baulig  <martin@ximian.com>
12433
12434         * iterator.cs: This is the first of a set of changes in the
12435         iterator code.  Match the spec more closely: if we're an
12436         IEnumerable, then GetEnumerator() must be called.  The first time
12437         GetEnumerator() is called, it returns the current instance; all
12438         subsequent invocations (if any) must create a copy.
12439
12440 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
12441
12442         * expression.cs: Resolve the constant expression before returning
12443         it. 
12444
12445 2004-07-19  Martin Baulig  <martin@ximian.com>
12446
12447         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
12448         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
12449         the return type of the new EmitContext.
12450
12451 2004-07-18  Martin Baulig  <martin@ximian.com>
12452
12453         * class.cs (Property.Define): Fix iterators.
12454
12455         * iterators.cs (Iterator.Define): Moved the
12456         `container.AddInterator (this)' call here from the .ctor; only do
12457         it if we resolved successfully.
12458
12459 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
12460
12461         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
12462         `true' for preprocessing directives that we parse.  The return
12463         value indicates whether we should return to regular tokenizing or
12464         not, not whether it was parsed successfully.
12465
12466         In the past if we were in: #if false ... #line #endif, we would
12467         resume parsing after `#line'.  See bug 61604.
12468
12469         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
12470         building: IsEnumType should return true only for enums, not for
12471         enums or System.Enum itself.  This fixes #61593.
12472
12473         Likely what happened is that corlib was wrong: mcs depended on
12474         this bug in some places.  The bug got fixed, we had to add the
12475         hack, which caused bug 61593.
12476
12477         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
12478         that was a workaround for the older conditions.
12479
12480 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
12481
12482         * assign.cs: IAssignMethod has a new interface, as documented
12483         inline. All assignment code now uses this new api.
12484
12485         * ecore.cs, expression.cs: All classes which implement
12486         IAssignMethod now use the new interface.
12487
12488         * expression.cs (Invocation): add a hack to EmitCall so that
12489         IndexerAccess can be the target of a compound assignment without
12490         evaluating its arguments twice.
12491
12492         * statement.cs: Handle changes in Invocation api.
12493
12494 2004-07-16  Martin Baulig  <martin@ximian.com>
12495
12496         * iterators.cs: Rewrote this.  We're now using one single Proxy
12497         class for both the IEnumerable and the IEnumerator interface and
12498         `Iterator' derives from Class so we can use the high-level API.
12499
12500         * class.cs (TypeContainer.AddIterator): New method.
12501         (TypeContainer.DoDefineType): New protected virtual method, which
12502         is called from DefineType().
12503         (TypeContainer.DoDefineMembers): Call DefineType() and
12504         DefineMembers() on all our iterators.
12505         (TypeContainer.Emit): Call Emit() on all our iterators.
12506         (TypeContainer.CloseType): Call CloseType() on all our iterators.
12507
12508         * codegen.cs (EmitContext.CurrentIterator): New public field.
12509
12510 2004-07-15  Martin Baulig  <martin@ximian.com>
12511
12512         * typemanager.cs
12513         (TypeManager.not_supported_exception_type): New type.   
12514
12515 2004-07-14  Martin Baulig  <martin@ximian.com>
12516
12517         * iterators.cs: Use real error numbers.
12518
12519 2004-07-14  Martin Baulig  <martin@ximian.com>
12520
12521         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
12522         requires this to be a System.Collection.IEnumerable and not a
12523         class implementing that interface.
12524         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
12525
12526 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
12527
12528         * class.cs: Fixed previous fix, it broke some error tests.
12529
12530 2004-07-12  Martin Baulig  <martin@ximian.com>
12531
12532         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
12533         Fixes #61293.
12534
12535 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
12536
12537         * assign.cs (LocalTemporary): Add new argument: is_address,If
12538         `is_address' is true, then the value that we store is the address
12539         to the real value, and not the value itself.
12540         
12541         * ecore.cs (PropertyExpr): use the new local temporary
12542         stuff to allow us to handle X.Y += z (where X is a struct)
12543
12544 2004-07-08  Martin Baulig  <martin@ximian.com>
12545
12546         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
12547         not always return, just like we're doing in Using.Resolve().
12548
12549 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
12550
12551         * cs-parser.jay (fixed_statement): flag this as Pinned.
12552
12553 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
12554
12555         * typemanager.cs (TypeManager): Removed MakePinned method, this
12556         mechanism is replaced with the .NET 2.x compatible mechanism of
12557         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
12558
12559         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
12560         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
12561         `IsFixed' property which has a different meaning.
12562
12563 2004-07-02  Raja R Harinath  <rharinath@novell.com>
12564
12565         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
12566         visible from inside a nested class, not just the names of the
12567         immediately enclosing class.
12568         Fix for bug #60730.
12569
12570 2004-06-24  Raja R Harinath  <rharinath@novell.com>
12571
12572         * expression.cs (BetterConversion): Remove buggy special-case
12573         handling of "implicit constant expression conversions".  At this
12574         point, we already know that the conversion is possible -- we're
12575         only checking to see which is better.
12576
12577 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12578
12579         * cs-parser.jay: Added error CS0210 test.
12580
12581 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12582
12583         * cs-parser.jay: Added error CS0134 test.
12584
12585 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12586
12587         Fix bug #52507
12588         * cs-parser.jay: Added error CS0145 test.
12589
12590 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12591
12592         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
12593
12594 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
12595         
12596         * expression.cs (StackAlloc.Resolve): The argument may not
12597         be a constant; deal with this case.
12598         
12599 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
12600
12601         * attribute.cs (IndexerName_GetIndexerName): Renamed to
12602         GetIndexerAttributeValue.
12603         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
12604
12605         * class.cs (Indexer.Define): Added error tests for CS0415,
12606         CS0609.
12607
12608 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
12609
12610         * attribute.cs (Attribute.Resolve): Keep field code in sync with
12611         property code.
12612
12613 2004-06-23  Martin Baulig  <martin@ximian.com>
12614
12615         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
12616         neither return nor throw, reset the barrier as well.  Fixes #60457.
12617
12618 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
12619
12620         * class.cs : EventAttributes is now set to None by default.
12621           This fixes bug #60459.
12622
12623 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12624
12625         Fix bug #60219
12626         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12627         Don't throw exception but return null (it's sufficient now).
12628
12629 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12630
12631         * typemanager.cs (GetArgumentTypes): Faster implementation.
12632
12633 2004-06-18  Martin Baulig  <martin@ximian.com>
12634
12635         * attribute.cs (Attribute.Resolve): Check whether we're an
12636         EmptyCast which a Constant child.  Fixes #60333.
12637
12638 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
12639
12640         * statement.cs (EmitCollectionForeach): Account for the fact that
12641         not all valuetypes are in areas which we can take the address of.
12642         For these variables, we store to a temporary variable. Also, make
12643         sure that we dont emit a `callvirt' on a valuetype method.
12644
12645 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12646
12647         * expression.cs (StackAlloc.DoReSolve): Added test for
12648         negative parameter (CS0247).
12649
12650 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12651
12652         Fix bug #59792
12653         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
12654
12655 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12656
12657         Fix bug #59781
12658         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
12659         ulong.
12660
12661 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12662
12663         Fix bug #58254 & cs1555.cs, cs1556.cs
12664         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
12665
12666 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12667
12668         * cs-parser.jay: Added error CS1669 test for indexers.
12669
12670 2004-06-11  Martin Baulig  <martin@ximian.com>
12671
12672         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
12673         call this twice: for params and varargs methods.
12674
12675 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12676
12677         * class.cs:
12678         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
12679
12680 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12681
12682         * attribute.cs (Attribute.GetValidTargets): Made public.
12683
12684         * class.cs: 
12685         (AbstractPropertyEventMethod): New class for better code sharing.
12686         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
12687         CS1667 report.
12688         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
12689
12690 2004-06-11  Raja R Harinath  <rharinath@novell.com>
12691
12692         Fix bug #59477.
12693         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
12694         that the call to Resolve is part of a MemberAccess.
12695         (Expression.Resolve): Use it for SimpleName resolution.
12696         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
12697         Add 'intermediate' boolean argument.
12698         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
12699         error message when the SimpleName can be resolved ambiguously
12700         between an expression and a type.
12701         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
12702         public.
12703         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
12704         call on the left-side.
12705
12706 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12707
12708         * class.cs:
12709         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
12710
12711 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12712
12713         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
12714
12715 2004-06-11  Martin Baulig  <martin@ximian.com>
12716
12717         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
12718         varargs methods if applicable.
12719
12720 2004-06-11  Martin Baulig  <martin@ximian.com>
12721
12722         * expression.cs (Invocation.EmitCall): Don't use
12723         `method.CallingConvention == CallingConventions.VarArgs' since the
12724         method could also have `CallingConventions.HasThis'.
12725
12726 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12727
12728         * class.cs (Event.GetSignatureForError): Implemented.
12729         Fixed crash in error test cs3010.cs
12730
12731 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
12732
12733         * cs-tokenizer.cs: Change the way we track __arglist to be
12734         consistent with the other keywords.
12735
12736 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
12737
12738         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
12739         tomorrow.
12740
12741 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
12742
12743         * codegen.cs: Check that all referenced assemblies have a strongname
12744         before strongnaming the compiled assembly. If not report error CS1577.
12745         Fix bug #56563. Patch by Jackson Harper.
12746         * typemanager.cs: Added a method to return all referenced assemblies.
12747         Fix bug #56563. Patch by Jackson Harper.
12748
12749 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12750
12751         * class.cs:
12752         (Method.ApplyAttributeBuilder): Moved and added conditional
12753         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
12754
12755         * delegate.cs:
12756         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
12757
12758 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12759
12760         Fixed #59640
12761         * class.cs: (EventField.attribute_targets): Changed default target.
12762
12763 2004-06-08  Martin Baulig  <martin@ximian.com>
12764
12765         * expression.cs (Invocation.EmitCall): Enable varargs methods.
12766
12767 2004-06-08  Martin Baulig  <martin@ximian.com>
12768
12769         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
12770
12771 2004-06-07  Martin Baulig  <martin@ximian.com>
12772
12773         Added support for varargs methods.
12774
12775         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
12776         keyword.
12777
12778         * cs-parser.jay: Added support for `__arglist'.
12779
12780         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
12781
12782         * expression.cs (Argument.AType): Added `ArgList'.
12783         (Invocation): Added support for varargs methods.
12784         (ArglistAccess): New public class.
12785         (Arglist): New public class.
12786
12787         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
12788
12789         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
12790         a method's top-level block if the method has varargs.
12791
12792         * support.cs (ReflectionParameters, InternalParameters): Added
12793         support for varargs methods.    
12794
12795 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
12796
12797         * class.cs: Provide location in indexer error report.
12798
12799         * driver.cs: Use standard names.
12800
12801         * namespace.cs: Catch the use of using after a namespace has been
12802         declared also on using aliases.
12803
12804 2004-06-03  Raja R Harinath  <rharinath@novell.com>
12805
12806         Bug #50820.
12807         * typemanager.cs (closure_private_ok, closure_invocation_type)
12808         (closure_qualifier_type, closure_invocation_assembly)
12809         (FilterWithClosure): Move to ...
12810         (Closure): New internal nested class.
12811         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
12812         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
12813         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
12814         (MemberLookup, MemberLookupFailed): Use it.
12815         * expression.cs (New.DoResolve): Treat the lookup for the
12816         constructor as being qualified by the 'new'ed type.
12817         (Indexers.GetIndexersForTypeOrInterface): Update.
12818
12819 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
12820
12821         * attribute.cs
12822         (GetConditionalAttributeValue): New method. Returns
12823         condition of ConditionalAttribute.
12824         (SearchMulti): New method.  Returns all attributes of type 't'.
12825         Use it when attribute is AllowMultiple = true.
12826         (IsConditionalMethodExcluded): New method.
12827
12828         * class.cs
12829         (Method.IsExcluded): Implemented. Returns true if method has conditional
12830         attribute and the conditions is not defined (method is excluded).
12831         (IMethodData): Extended interface for ConditionalAttribute support.
12832         (PropertyMethod.IsExcluded): Implemented.
12833
12834         * decl.cs
12835         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
12836
12837         * expression.cs
12838         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
12839         on the method.
12840
12841 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
12842
12843         * expression.cs (ArrayCreationExpression): Make this just an
12844         `expression'. It can't be a statement, so the code here was
12845         dead.
12846
12847 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12848
12849         Fixed #59072
12850         * typemanager.cs (GetFullNameSignature): New method for
12851         MethodBase types.
12852
12853 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12854
12855         Fixed #56452
12856         * class.cs (MemberBase.GetSignatureForError): New virtual method.
12857         Use this method when MethodBuilder is null.
12858         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
12859         Added test for error CS0626 (MONO reports error for this situation).
12860         (IMethodData.GetSignatureForError): Extended interface.
12861
12862 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12863
12864         * attribute.cs
12865         (AttributeTester.GetObsoleteAttribute): Returns instance of
12866         ObsoleteAttribute when type is obsolete.
12867
12868         * class.cs
12869         (TypeContainer.VerifyObsoleteAttribute): Override.
12870         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
12871         (MethodCode.VerifyObsoleteAttribute): Override.
12872         (MemberBase.VerifyObsoleteAttribute): Override.
12873
12874         * decl.cs
12875         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
12876         and report proper error.
12877
12878         *delegate.cs
12879         Delegate.VerifyObsoleteAttribute): Override.
12880
12881         * ecore.cs
12882         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
12883         and report proper error.
12884         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
12885
12886         * enum.cs
12887         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
12888         and enum member.
12889
12890         * expression.cs
12891         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
12892         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
12893         Added test for ObsoleteAttribute.
12894
12895         * statement.cs
12896         (Catch): Derived from Statement.
12897
12898 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12899  
12900         Fixed bug #59071 & cs0160.cs
12901  
12902         * statement.cs (Try.Resolve): Check here whether order of catch
12903         clauses matches their dependencies.
12904
12905 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
12906
12907         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
12908         caused a regression: #59343.  Referencing nested classes from an
12909         assembly stopped working.
12910
12911 2004-05-31  Martin Baulig  <martin@ximian.com>
12912
12913         MCS is now frozen for beta 2.
12914
12915 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12916
12917         * convert.cs: add a trivial cache for overload operator resolution.
12918
12919 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12920
12921         * decl.cs: If possible, use lookuptypedirect here. We can only do
12922         this if there is no `.' after the namespace. Avoids using
12923         LookupType, which does lots of slow processing.
12924         (FindNestedType) New method, does what it says :-).
12925         * namespace.cs: use LookupTypeDirect.
12926         * rootcontext.cs: use membercache, if possible.
12927         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
12928
12929 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12930
12931         * expression.cs:
12932         According to the spec, 
12933
12934         In a member access of the form E.I, if E is a single identifier,
12935         and if the meaning of E as a simple-name (§7.5.2) is a constant,
12936         field, property, localvariable, or parameter with the same type as
12937         the meaning of E as a type-name (§3.8), then both possible
12938         meanings of E are permitted.
12939
12940         We did not check that E as a simple-name had the same type as E as
12941         a type name.
12942
12943         This trivial check gives us 5-7% on bootstrap time.
12944
12945 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12946
12947         * expression.cs (Invocation.OverloadResolve): Avoid the
12948         use of hashtables and boxing here by allocating on demand.
12949
12950 2004-05-30  Martin Baulig  <martin@ximian.com>
12951
12952         * rootcontext.cs (RootContext.LookupType): Don't cache things if
12953         we're doing a silent lookup.  Don't try to lookup nested types in
12954         TypeManager.object_type (thanks to Ben Maurer).
12955
12956 2004-05-30  Martin Baulig  <martin@ximian.com>
12957
12958         Committing a patch from Ben Maurer.
12959
12960         * rootcontext.cs (RootContext.LookupType): Cache negative results.
12961
12962 2004-05-29  Martin Baulig  <martin@ximian.com>
12963
12964         * class.cs (IMethodData.ShouldIgnore): New method.
12965
12966         * typemanager.cs (TypeManager.MethodFlags): Don't take a
12967         `Location' argument, we don't need it anywhere.  Use
12968         `IMethodData.ShouldIgnore ()' instead of
12969         `MethodData.GetMethodFlags ()'.
12970         (TypeManager.AddMethod): Removed.
12971         (TypeManager.AddMethod2): Renamed to AddMethod.
12972
12973 2004-05-29  Martin Baulig  <martin@ximian.com>
12974
12975         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
12976
12977         * convert.cs (Convert.ImplicitReferenceConversion): If we're
12978         converting from a class type S to an interface type and we already
12979         have an object on the stack, don't box it again.  Fixes #52578.
12980
12981 2004-05-29  Martin Baulig  <martin@ximian.com>
12982
12983         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12984         Added support for `params' parameters.  Fixes #59267.
12985
12986 2004-05-29  Martin Baulig  <martin@ximian.com>
12987
12988         * literal.cs (NullPointer): Provide a private .ctor which sets
12989         `type' to TypeManager.object_type.  Fixes #59048.
12990
12991 2004-05-29  Martin Baulig  <martin@ximian.com>
12992
12993         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
12994         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
12995
12996         * ecore.cs (EventExpr.instance_expr): Make the field private.
12997
12998 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
12999
13000         Fixed bug #50080 & cs0214-2.cs
13001         * expression.cs (Cast.DoResolve): Check unsafe context here.
13002         
13003         * statement.cs (Resolve.DoResolve): Likewise.
13004
13005 2004-05-26  Martin Baulig  <martin@ximian.com>
13006
13007         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
13008
13009         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
13010         (RootContext.LookupType): Pass down the `silent' flag.
13011
13012 2004-05-25  Martin Baulig  <martin@ximian.com>
13013
13014         * expression.cs
13015         (MethodGroupExpr.IdenticalTypeName): New public property.
13016         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
13017         expression actually refers to a type.
13018
13019 2004-05-25  Martin Baulig  <martin@ximian.com>
13020
13021         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
13022         for #56176 and made it actually work.
13023
13024 2004-05-25  Martin Baulig  <martin@ximian.com>
13025
13026         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
13027         (FieldExpr, PropertyExpr): Override and implement
13028         CacheTemporaries.  Fixes #52279.
13029
13030 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
13031
13032         * location.cs: In the new compiler listing a file twice is a
13033         warning, not an error.
13034
13035 2004-05-24  Martin Baulig  <martin@ximian.com>
13036
13037         * enum.cs (Enum.DefineType): For the `BaseType' to be a
13038         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
13039
13040 2004-05-24  Martin Baulig  <martin@ximian.com>
13041
13042         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
13043         walking the `using' list.  Fixes #53921.
13044
13045 2004-05-24  Martin Baulig  <martin@ximian.com>
13046
13047         * const.cs (Const.LookupConstantValue): Added support for
13048         EmptyCast's; fixes #55251.
13049
13050 2004-05-24  Martin Baulig  <martin@ximian.com>
13051
13052         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
13053         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
13054         which does the CS0135 check.  The reason is that we first need to
13055         check whether the variable actually exists.
13056
13057 2004-05-24  Martin Baulig  <martin@ximian.com>
13058
13059         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
13060         than RootContext.LookupType() to find the explicit interface
13061         type.  Fixes #58584.
13062
13063 2004-05-24  Raja R Harinath  <rharinath@novell.com>
13064
13065         * Makefile: Simplify.  Use executable.make.
13066         * mcs.exe.sources: New file.  List of sources of mcs.exe.
13067
13068 2004-05-24  Anders Carlsson  <andersca@gnome.org>
13069
13070         * decl.cs:
13071         * enum.cs:
13072         Use the invariant culture when doing String.Compare for CLS case
13073         sensitivity.
13074         
13075 2004-05-23  Martin Baulig  <martin@ximian.com>
13076
13077         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
13078         don't have any dots.  Fixes #52622, added cs0246-8.cs.
13079
13080         * namespace.cs (NamespaceEntry.Lookup): Likewise.
13081         
13082 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13083
13084         * class.cs (MemberBase.Define): Reuse MemberType member for 
13085         resolved type. Other methods can use it too.
13086
13087 2004-05-23  Martin Baulig  <martin@ximian.com>
13088
13089         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
13090         the variable also exists in the current block (otherwise, we need
13091         to report a CS0103).  Fixes #58670.
13092
13093 2004-05-23  Martin Baulig  <martin@ximian.com>
13094
13095         * flowanalysis.cs (Reachability.Reachable): Compute this
13096         on-the-fly rather than storing it as a field.
13097
13098 2004-05-23  Martin Baulig  <martin@ximian.com>
13099
13100         * flowanalysis.cs (Reachability.And): Manually compute the
13101         resulting `barrier' from the reachability.      
13102        
13103 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13104
13105         Fix bug #57835
13106         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
13107         instance of ObsoleteAttribute when symbol is obsolete.
13108
13109         * class.cs
13110         (IMethodData): Extended interface for ObsoleteAttribute support.
13111
13112 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13113
13114         * attribute.cs: Fix bug #55970
13115
13116 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13117
13118         Fix bug #52705
13119         * attribute.cs
13120         (GetObsoleteAttribute): New method. Creates the instance of
13121         ObsoleteAttribute.
13122         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
13123         ObsoleteAttribute when member is obsolete.
13124         (AttributeTester.Report_ObsoleteMessage): Common method for
13125         Obsolete error/warning reporting.
13126
13127         * class.cs
13128         (TypeContainer.base_classs_type): New member for storing parent type.
13129
13130         * decl.cs
13131         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
13132         for this MemberCore.
13133
13134 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13135
13136         * attribute.cs, const.cs: Fix bug #58590
13137
13138 2004-05-21  Martin Baulig  <martin@ximian.com>
13139
13140         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
13141         out parameters if the end of the method is unreachable.  Fixes
13142         #58098. 
13143
13144 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13145
13146         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
13147         Hari was right, why extra method.
13148
13149 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13150
13151         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
13152
13153 2004-05-20  Martin Baulig  <martin@ximian.com>
13154
13155         Merged this back from gmcs to keep the differences to a minumum.
13156
13157         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
13158         instead of a Declspace.
13159         (Attribute.ResolveType): Likewise.
13160         (Attributes.Search): Likewise.
13161         (Attributes.Contains): Likewise.
13162         (Attributes.GetClsCompliantAttribute): Likewise.
13163
13164         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
13165         argument.
13166         (MethodData.ApplyAttributes): Take an EmitContext instead of a
13167         DeclSpace.
13168
13169 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
13170
13171         Fix bug #58688 (MCS does not report error when the same attribute
13172         is assigned twice)
13173
13174         * attribute.cs (Attribute.Emit): Distinction between null and default.
13175
13176 2004-05-19  Raja R Harinath  <rharinath@novell.com>
13177
13178         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
13179         of a top-level attribute without an attribute target.
13180         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
13181         Make non-static.
13182         (Attribute.Conditional_GetConditionName), 
13183         (Attribute.Obsolete_GetObsoleteMessage): Update.
13184         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
13185         part of ScanForIndexerName.
13186         (Attribute.CanIgnoreInvalidAttribute): New function.
13187         (Attribute.ScanForIndexerName): Move to ...
13188         (Attributes.ScanForIndexerName): ... here.
13189         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
13190         (Attributes.Search): New internal variant that can choose not to
13191         complain if types aren't resolved.  The original signature now
13192         complains.
13193         (Attributes.GetClsCompliantAttribute): Use internal variant, with
13194         complaints suppressed.
13195         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
13196         only if it not useful.
13197         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
13198         top-level for attributes that are shared between the assembly
13199         and a top-level class.
13200         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
13201         * class.cs: Update to reflect changes.
13202         (DefineIndexers): Fuse loops.
13203         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
13204         a couple more variants of attribute names.
13205
13206 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
13207
13208         Fix bug #52585 (Implemented explicit attribute declaration)
13209
13210         * attribute.cs:
13211         (Attributable.ValidAttributeTargets): New abstract method. It gets
13212         list of valid attribute targets for explicit target declaration.
13213         (Attribute.Target): It holds target itself.
13214         (AttributeSection): Removed.
13215         (Attribute.CheckTargets): New method. It checks whether attribute
13216         target is valid for the current element.
13217
13218         * class.cs:
13219         (EventProperty): New class. For events that are declared like
13220         property (with add and remove accessors).
13221         (EventField): New class. For events that are declared like field.
13222         class.cs
13223
13224         * cs-parser.jay: Implemented explicit attribute target declaration.
13225
13226         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
13227         Override ValidAttributeTargets.
13228
13229         * parameter.cs:
13230         (ReturnParameter): Class for applying custom attributes on 
13231         the return type.
13232         (ParameterAtribute): New class. Class for applying custom
13233         attributes on the parameter type.
13234
13235 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
13236
13237         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
13238         definitions. 
13239
13240         (Method): Allow UNSAFE here.
13241
13242         * modifiers.cs: Support unsafe reporting.
13243
13244 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
13245
13246         * decl.cs: Fix bug #58478.
13247
13248 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13249
13250         * statement.cs: When checking for unreachable code on an EmptyStatement,
13251         set the location. Fixes bug #58488.
13252
13253 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
13254
13255         * driver.cs: Add -pkg handling.
13256
13257         From Gonzalo: UseShelLExecute=false
13258
13259 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
13260
13261         * attribute.cs:
13262         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
13263         for attribute.
13264         (Attribute.IsClsCompliaceRequired): Moved to base for better
13265         accesibility.
13266         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
13267         when attribute is AttributeUsageAttribute.
13268         (Attribute.GetValidTargets): Simplified.
13269         (Attribute.GetAttributeUsage): New method returns AttributeUsage
13270         attribute for this type.
13271         (Attribute.ApplyAttributes): Method renamed to Emit and make
13272         non-static.
13273         (GlobalAttributeSection): New class for special handling of global
13274         attributes (assembly, module).
13275         (AttributeSection.Emit): New method.
13276
13277         * class.cs: Implemented Attributable abstract methods.
13278         (MethodCore.LabelParameters): Moved to Parameter class.
13279         (Accessor): Is back simple class.
13280         (PropertyMethod): Implemented Attributable abstract class.
13281         (DelegateMethod): Implemented Attributable abstract class.
13282         (Event): New constructor for disctintion between normal Event
13283         and Event with accessors.
13284
13285         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
13286
13287         * codegen.cs, const.cs, decl.cs, delegate.cs:
13288         (CommonAssemblyModulClass): Implemented Attributable abstract class
13289         and simplified.
13290
13291         * enum.cs: Implement IAttributeSupport interface.
13292         (EnumMember): New class for emum members. Implemented Attributable
13293         abstract class
13294
13295         * parameter.cs:
13296         (ParameterBase): Is abstract.
13297         (ReturnParameter): New class for easier [return:] attribute handling.
13298
13299         * typemanager.cs: Removed builder_to_attr.
13300
13301 2004-05-11  Raja R Harinath  <rharinath@novell.com>
13302
13303         Fix bug #57151.
13304         * attribute.cs (Attribute.GetPositionalValue): New function.
13305         * class.cs (TypeContainer.VerifyMembers): New function.
13306         (TypeContainer.Emit): Use it.
13307         (ClassOrStruct): New base class for Class and Struct.
13308         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
13309         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
13310         class.
13311         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
13312         then each non-static field should have a FieldOffset attribute.
13313         Otherwise, none of the fields should have a FieldOffset attribute.
13314         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
13315         and FieldOffset attributes.
13316         * typemanager.cs (TypeManager.struct_layout_attribute_type)
13317         (TypeManager.field_offset_attribute_type): New core types.
13318         (TypeManager.InitCoreTypes): Initialize them.
13319
13320 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
13321
13322         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
13323         Return correct type.
13324         From bug #58270.
13325
13326 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
13327
13328         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
13329         be implicitly converted to ulong.
13330         
13331         * expression.cs: The logic for allowing operator &, | and ^ worked
13332         was wrong, it worked before because we did not report an error in
13333         an else branch.  Fixes 57895.
13334
13335         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
13336         allow volatile fields to be reference types.
13337
13338 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
13339
13340         * driver.cs: Add support for /debug-
13341
13342 2004-05-07  Raja R Harinath  <rharinath@novell.com>
13343
13344         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
13345         Add a 'complain' parameter to silence errors.
13346         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
13347         silently overlooked type-resolutions.
13348         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
13349         to reflect changes.
13350         (Attributes.Search): New function.
13351         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
13352         (Attributes.GetAttributeFullName): Remove hack.
13353         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
13354         Update to reflect changes.
13355         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
13356         Use Attributes.Search instead of nested loops.
13357
13358 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
13359
13360         * decl.cs:
13361         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
13362         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
13363         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
13364
13365         * report.cs: (Report.Warning): Renamed to Warning_T because of
13366         parameter collision.
13367
13368 2004-05-05  Raja R Harinath  <rharinath@novell.com>
13369
13370         * expression.cs (MemberAccess.ResolveMemberAccess):
13371         Exit with non-zero status after Report.Error.
13372         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
13373         Likewise.
13374         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
13375
13376 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13377
13378         * support.cs: Don't hang when the file is empty.
13379
13380 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13381
13382         * support.cs: In SeekableStreamReader, compute the preamble size of the
13383           underlying stream. Position changes should take into account that initial
13384           count of bytes.
13385
13386 2004-05-03  Todd Berman  <tberman@sevenl.net>
13387
13388         * driver.cs: remove unused GetSysVersion function.
13389
13390 2004-05-03  Todd Berman  <tberman@sevenl.net>
13391
13392         * driver.cs: Remove the hack from saturday, as well as the hack
13393         from jackson (LoadAssemblyFromGac), also adds the CWD to the
13394         link_paths to get that bit proper.
13395
13396 2004-05-01  Todd Berman  <tberman@sevenl.net>
13397
13398         * driver.cs: Try a LoadFrom before a Load, this checks the current
13399         path. This is currently a bug in mono that is be fixed, however, this
13400         provides a workaround for now. This will be removed when the bug
13401         is fixed.
13402
13403 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
13404
13405         * CryptoConvert.cs: Updated to latest version. Fix issue with 
13406         incomplete key pairs (#57941).
13407
13408 2004-05-01  Todd Berman  <tberman@sevenl.net>
13409
13410         * driver.cs: Remove '.' from path_chars, now System.* loads properly
13411         from the GAC
13412
13413 2004-04-30  Jackson Harper  <jackson@ximian.com>
13414
13415         * codegen.cs: Open keys readonly.
13416         
13417 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13418
13419         * typemanager.cs: don't report cyclic struct layout when a struct
13420         contains 2 or more fields of the same type. Failed for Pango.AttrShape
13421         which has 2 Pango.Rectangle fields.
13422
13423 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13424
13425         * expression.cs: Handle IntPtr comparisons with IL code
13426         rather than a method call.
13427
13428 2004-04-29  Martin Baulig  <martin@ximian.com>
13429
13430         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
13431         the list of PropertyInfo's in class hierarchy and find the
13432         accessor.  Fixes #56013.
13433
13434 2004-04-29  Martin Baulig  <martin@ximian.com>
13435
13436         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
13437
13438 2004-04-29  Martin Baulig  <martin@ximian.com>
13439
13440         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13441
13442         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
13443
13444 2004-04-29  Martin Baulig  <martin@ximian.com>
13445
13446         * class.cs (ConstructorInitializer.Resolve): Check whether the
13447         parent .ctor is accessible.  Fixes #52146.
13448
13449 2004-04-29  Martin Baulig  <martin@ximian.com>
13450
13451         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13452
13453         * statement.cs (Using.EmitLocalVariableDecls): Use
13454         TypeManager.idisposable_type, not typeof (IDisposable).
13455         (Foreach.EmitCollectionForeach): Added support for valuetypes.
13456
13457 2004-04-29  Martin Baulig  <martin@ximian.com>
13458
13459         * class.cs (Event.Define): Don't emit the field and don't set
13460         RTSpecialName and SpecialName for events on interfaces.  Fixes
13461         #57703. 
13462
13463 2004-04-29  Raja R Harinath  <rharinath@novell.com>
13464
13465         Refactor Attribute.ApplyAttributes.
13466         * attribute.cs (Attributable): New base class for objects that can
13467         have Attributes applied on them.
13468         (Attribute): Make AttributeUsage fields public.
13469         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
13470         (Attribute.IsInternalCall): New property.
13471         (Attribute.UsageAttr): Convert to a public read-only property.
13472         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
13473         (Attribute.ResolveType, Attribute.Resolve)
13474         (Attribute.ScanForIndexerName): Update to reflect changes.
13475         (Attribute.CheckAttributeTarget): Re-format.
13476         (Attribute.ApplyAttributes): Refactor, to various
13477         Attributable.ApplyAttributeBuilder methods.
13478         * decl.cs (MemberCore): Make Attributable.
13479         * class.cs (Accessor): Make Attributable.
13480         (MethodData.ApplyAttributes): Use proper attribute types, not
13481         attribute names.
13482         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
13483         (TypeContainer.ApplyAttributeBuilder)
13484         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
13485         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
13486         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
13487         (Operator.ApplyAttributeBuilder): New factored-out methods.
13488         * const.cs (Const.ApplyAttributeBuilder): Likewise.
13489         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
13490         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
13491         * parameter.cs (ParameterBase): New Attributable base class
13492         that can also represent Return types.
13493         (Parameter): Update to the changes.
13494
13495 2004-04-29  Jackson Harper  <jackson@ximian.com>
13496
13497         * driver.cs: Prefer the corlib system version when looking for
13498         assemblies in the GAC. This is still a hack, but its a better hack
13499         now.
13500         
13501 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
13502
13503         * decl.cs, enum.cs: Improved error 3005 reporting.
13504   
13505         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
13506         (related_symbols): New private member for list of symbols
13507         related to reported error/warning.
13508         
13509         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
13510
13511 2004-04-29  Martin Baulig  <martin@ximian.com>
13512
13513         * ecore.cs (Expression.Constantify): If we're an enum and
13514         TypeManager.TypeToCoreType() doesn't give us another type, use
13515         t.UnderlyingSystemType.  Fixes #56178.  
13516
13517 2004-04-29  Martin Baulig  <martin@ximian.com>
13518
13519         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
13520         interfaces and for each interface, only add members directly
13521         declared in that interface.  Fixes #53255.
13522
13523 2004-04-28  Martin Baulig  <martin@ximian.com>
13524
13525         * expression.cs (ConditionalLogicalOperator): Use a temporary
13526         variable for `left' to avoid that we evaluate it more than once;
13527         bug #52588.
13528
13529 2004-04-28  Martin Baulig  <martin@ximian.com>
13530
13531         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
13532         `void[]' (CS1547).
13533
13534 2004-04-28  Martin Baulig  <martin@ximian.com>
13535
13536         * statement.cs (LocalInfo.Resolve): Check whether the type is not
13537         void (CS1547).
13538
13539         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
13540         whether the type is not void (CS1547).
13541
13542 2004-04-28  Martin Baulig  <martin@ximian.com>
13543
13544         * expression.cs (Unary.DoResolveLValue): Override this and report
13545         CS0131 for anything but Operator.Indirection.
13546
13547 2004-04-28  Martin Baulig  <martin@ximian.com>
13548
13549         Committing a patch from Ben Maurer; see bug #50820.
13550
13551         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13552         check for classes.
13553
13554         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13555         classes.        
13556
13557 2004-04-28  Martin Baulig  <martin@ximian.com>
13558
13559         Committing a patch from Ben Maurer; see bug #50820.
13560
13561         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13562         check for classes.
13563
13564         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13565         classes.        
13566
13567 2004-04-28  Martin Baulig  <martin@ximian.com>
13568
13569         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
13570         (Block.AddLabel): Call DoLookupLabel() to only search in the
13571         current block.
13572
13573 2004-04-28  Martin Baulig  <martin@ximian.com>
13574
13575         * cfold.cs (ConstantFold.BinaryFold): Added special support for
13576         comparing StringConstants and NullLiterals in Equality and Inequality.
13577
13578 2004-04-28  Jackson Harper  <jackson@ximian.com>
13579
13580         * driver.cs: Attempt to load referenced assemblies from the
13581         GAC. This is the quick and dirty version of this method that
13582         doesnt take into account versions and just takes the first
13583         canidate found. Will be good enough for now as we will not have more
13584         then one version installed into the GAC until I update this method.
13585
13586 2004-04-28  Martin Baulig  <martin@ximian.com>
13587
13588         * typemanager.cs (TypeManager.CheckStructCycles): New public
13589         static method to check for cycles in the struct layout.
13590
13591         * rootcontext.cs (RootContext.PopulateTypes): Call
13592         TypeManager.CheckStructCycles() for each TypeContainer.
13593         [Note: We only need to visit each type once.]
13594
13595 2004-04-28  Martin Baulig  <martin@ximian.com>
13596
13597         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
13598
13599         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
13600         success and added `out object value'.  Use a `bool resolved' field
13601         to check whether we've already been called rather than
13602         `ConstantValue != null' since this breaks for NullLiterals.
13603
13604 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13605
13606         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
13607         setting of this flag, since the 'set' method may be non-public.
13608
13609 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13610
13611         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
13612         check on current_vector.Block.
13613
13614 2004-04-27  Martin Baulig  <martin@ximian.com>
13615
13616         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
13617         a field initializer.  Fixes #56459.
13618
13619 2004-04-27  Martin Baulig  <martin@ximian.com>
13620
13621         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
13622         we're not attempting to use an indexer.  Fixes #52154.
13623
13624 2004-04-27  Martin Baulig  <martin@ximian.com>
13625
13626         * statement.cs (Return): Don't create a return label if we don't
13627         need it; reverts my change from January 20th.  Thanks to Ben
13628         Maurer for this.
13629
13630 2004-04-27  Martin Baulig  <martin@ximian.com>
13631
13632         According to the spec, `goto' can only leave a nested scope, but
13633         never enter it.
13634
13635         * statement.cs (Block.LookupLabel): Only lookup in the current
13636         block, don't recurse into parent or child blocks.
13637         (Block.AddLabel): Check in parent and child blocks, report
13638         CS0140/CS0158 if we find a duplicate.
13639         (Block): Removed this indexer for label lookups.
13640         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
13641         this already does the error reporting for us.
13642
13643         * flowanalysis.cs
13644         (FlowBranching.UsageVector.Block): New public variable; may be null.
13645         (FlowBranching.CreateSibling): Added `Block' argument.
13646         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
13647         label for the target of a `goto' and check whether we're not
13648         leaving a `finally'.
13649
13650 2004-04-27  Martin Baulig  <martin@ximian.com>
13651
13652         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13653         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
13654         just for returns).
13655
13656 2004-04-27  Martin Baulig  <martin@ximian.com>
13657
13658         * statement.cs (Block.AddLabel): Also check for implicit blocks
13659         and added a CS0158 check.
13660
13661 2004-04-27  Martin Baulig  <martin@ximian.com>
13662
13663         * flowanalysis.cs (FlowBranchingLoop): New class.
13664         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
13665         UsageVector's instead of an ArrayList.
13666         (FlowBranching.Label): Likewise.
13667         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
13668         (FlowBranching.AddBreakVector): New method.
13669
13670 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
13671
13672         * attribute.cs: Small regression fix: only convert the type if we
13673         the type is different, fixes System.Drawing build.
13674
13675 2004-04-27  Martin Baulig  <martin@ximian.com>
13676
13677         * attribute.cs (Attribute.Resolve): If we have a constant value
13678         for a named field or property, implicity convert it to the correct
13679         type.
13680
13681 2004-04-27  Raja R Harinath  <rharinath@novell.com>
13682
13683         * statement.cs (Block.Block): Implicit blocks share
13684         'child_variable_names' fields with parent blocks.
13685         (Block.AddChildVariableNames): Remove.
13686         (Block.AddVariable): Mark variable as "used by a child block" in
13687         every surrounding block.
13688         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
13689         been used in a child block, complain about violation of "Invariant
13690         meaning in blocks" rule.
13691         * cs-parser.jay (declare_local_variables): Don't use
13692         AddChildVariableNames.
13693         (foreach_statement): Don't create an implicit block: 'foreach'
13694         introduces a scope.
13695
13696 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
13697
13698         * convert.cs (ImplicitNumericConversion): 0 is also positive when
13699         converting from 0L to ulong.  Fixes 57522.
13700
13701 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13702
13703         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
13704         derived class hides via 'new' keyword field from base class (test-242.cs).
13705         TODO: Handle this in the more general way.
13706         
13707         * class.cs (CheckBase): Ditto.
13708
13709 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13710
13711         * decl.cs (caching_flags): New member for storing cached values
13712         as bit flags.
13713         (MemberCore.Flags): New enum where bit flags for caching_flags
13714         are defined.
13715         (MemberCore.cls_compliance): Moved to caching_flags.
13716         (DeclSpace.Created): Moved to caching_flags.
13717
13718         * class.cs: Use caching_flags instead of DeclSpace.Created
13719         
13720 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
13721
13722         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
13723         if we are only a derived class, not a nested class.
13724
13725         * typemanager.cs: Same as above, but do this at the MemberLookup
13726         level (used by field and methods, properties are handled in
13727         PropertyExpr).   Allow for the qualified access if we are a nested
13728         method. 
13729
13730 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
13731
13732         * class.cs: Refactoring.
13733         (IMethodData): New inteface; Holds links to parent members
13734         to avoid member duplication (reduced memory allocation).
13735         (Method): Implemented IMethodData interface.
13736         (PropertyBase): New inner classes for get/set methods.
13737         (PropertyBase.PropertyMethod): Implemented IMethodData interface
13738         (Event): New inner classes for add/remove methods.
13739         (Event.DelegateMethod): Implemented IMethodData interface.
13740
13741         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
13742         EmitContext (related to class.cs refactoring).
13743
13744 2004-04-21  Raja R Harinath  <rharinath@novell.com>
13745
13746         * delegate.cs (Delegate.VerifyApplicability): If the number of
13747         arguments are the same as the number of parameters, first try to
13748         verify applicability ignoring  any 'params' modifier on the last
13749         parameter.
13750         Fixes #56442.
13751
13752 2004-04-16  Raja R Harinath  <rharinath@novell.com>
13753
13754         * class.cs (TypeContainer.AddIndexer): Use
13755         'ExplicitInterfaceName' to determine if interface name was
13756         explicitly specified.  'InterfaceType' is not initialized at this time.
13757         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
13758         Indexers array is already in the required order.  Initialize
13759         'IndexerName' only if there are normal indexers.
13760         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
13761         (TypeContainer.Emit): Emit DefaultMember attribute only if
13762         IndexerName is initialized.
13763         Fixes #56300.
13764
13765 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
13766
13767         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
13768         Fixes #57007
13769
13770 2004-04-15  Raja R Harinath  <rharinath@novell.com>
13771
13772         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
13773         attributes.
13774         Fix for #56456.
13775
13776         * attribute.cs (Attribute.Resolve): Check for duplicate named
13777         attributes.
13778         Fix for #56463.
13779
13780 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
13781
13782         * iterators.cs (MarkYield): track whether we are in an exception,
13783         and generate code accordingly.  Use a temporary value to store the
13784         result for our state.
13785
13786         I had ignored a bit the interaction of try/catch with iterators
13787         since their behavior was not entirely obvious, but now it is
13788         possible to verify that our behavior is the same as MS .NET 2.0
13789
13790         Fixes 54814
13791
13792 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
13793
13794         * iterators.cs: Avoid creating temporaries if there is no work to
13795         do. 
13796
13797         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
13798         Enumerations, use TypeManager.EnumToUnderlying and call
13799         recursively. 
13800
13801         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
13802         bug #57013
13803
13804         (This.Emit): Use EmitContext.EmitThis to emit our
13805         instance variable.
13806
13807         (This.EmitAssign): Ditto.
13808
13809         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
13810         codepaths, we will move all the functionality into
13811         Mono.CSharp.This 
13812
13813         (FieldExpr.EmitAssign): Ditto.
13814
13815         This fixes several hidden bugs that I uncovered while doing a code
13816         review of this today.
13817
13818         * codegen.cs (EmitThis): reworked so the semantics are more clear
13819         and also support value types "this" instances.
13820
13821         * iterators.cs: Changed so that for iterators in value types, we
13822         do not pass the value type as a parameter.  
13823
13824         Initialization of the enumerator helpers is now done in the caller
13825         instead of passing the parameters to the constructors and having
13826         the constructor set the fields.
13827
13828         The fields have now `assembly' visibility instead of private.
13829
13830 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
13831
13832         * expression.cs (Argument.Resolve): Check if fields passed as ref
13833         or out are contained in a MarshalByRefObject.
13834
13835         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
13836         another compiler type.
13837
13838 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
13839
13840         * class.cs (Indexer.Define): use the new name checking method.
13841         Also, return false on an error.
13842         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
13843         (is_identifier_[start/part]_character): make static.
13844
13845 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
13846
13847         * expression.cs (Binary.ResolveOperator): Do no append strings
13848         twice: since we can be invoked more than once (array evaluation)
13849         on the same concatenation, take care of this here.  Based on a fix
13850         from Ben (bug #56454)
13851
13852 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
13853
13854         * codegen.cs: Fix another case where CS1548 must be reported (when 
13855         delay-sign isn't specified and no private is available #56564). Fix
13856         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
13857         error when MCS is used on the MS runtime and we need to delay-sign 
13858         (which seems unsupported by AssemblyBuilder - see #56621).
13859
13860 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
13861
13862         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
13863         (TypeManager.ComputeNamespaces): Faster implementation for
13864         Microsoft runtime.
13865
13866         * compiler.csproj: Updated AssemblyName to mcs.
13867
13868 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
13869
13870         * rootcontext.cs: Add new types to the boot resolution.
13871
13872         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
13873         MulticastDelegate is not allowed.
13874
13875         * typemanager.cs: Add new types to lookup: System.TypedReference
13876         and ArgIterator.
13877
13878         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
13879         check for TypedReference or ArgIterator, they are not allowed. 
13880
13881         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
13882         makes us properly catch 1510 in some conditions (see bug 56016 for
13883         details). 
13884
13885 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
13886
13887         * CryptoConvert.cs: update from corlib version
13888         with endian fixes.
13889
13890 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
13891
13892         * class.cs (Indexer.Define): Check indexername declaration
13893
13894 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
13895
13896         * attribute.cs (IsClsCompliant): Fixed problem with handling
13897         all three states (compliant, not-compliant, undetected).
13898
13899 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
13900
13901         * attribute.cs (Attribute): Location is now public.
13902         (Resolve): Store resolved arguments (pos_values) in attribute class.
13903         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
13904         (GetClsCompliantAttributeValue): New method that gets
13905         CLSCompliantAttribute value.
13906         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
13907         if exists else null.
13908         (AttributeTester): New class for CLS-Compliant verification routines.
13909
13910         * class.cs (Emit): Add CLS-Compliant verification.
13911         (Method.GetSignatureForError): Implemented.
13912         (Constructor.GetSignatureForError): Implemented
13913         (Constructor.HasCompliantArgs): Returns if constructor has
13914         CLS-Compliant arguments.
13915         (Constructor.Emit): Override.
13916         (Construcor.IsIdentifierClsCompliant): New method; For constructors
13917         is needed to test only parameters.
13918         (FieldBase.GetSignatureForError): Implemented.
13919         (TypeContainer): New member for storing base interfaces.
13920         (TypeContainer.FindMembers): Search in base interfaces too.
13921
13922         * codegen.cs (GetClsComplianceAttribute): New method that gets
13923         assembly or module CLSCompliantAttribute value.
13924         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
13925         for assembly.
13926         (ModuleClass.Emit): Add error 3012 test.
13927
13928         * const.cs (Emit): Override and call base for CLS-Compliant tests.
13929
13930         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
13931         state for all decl types.
13932         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
13933         if CLS-Compliant tests are required.
13934         (IsClsCompliaceRequired): New method. Analyze whether code
13935         must be CLS-Compliant.
13936         (IsExposedFromAssembly): New method. Returns true when MemberCore
13937         is exposed from assembly.
13938         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
13939         value or gets cached value.
13940         (HasClsCompliantAttribute): New method. Returns true if MemberCore
13941         is explicitly marked with CLSCompliantAttribute.
13942         (IsIdentifierClsCompliant): New abstract method. This method is
13943         used to testing error 3005.
13944         (IsIdentifierAndParamClsCompliant): New method. Common helper method
13945         for identifier and parameters CLS-Compliant testing.
13946         (VerifyClsCompliance): New method. The main virtual method for
13947         CLS-Compliant verifications.
13948         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
13949         null. I don't know why is null (too many public members !).
13950         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
13951         and get value of first CLSCompliantAttribute that found.
13952
13953         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
13954         (VerifyClsCompliance): Override and add extra tests.
13955
13956         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
13957         clscheck- disable CLS-Compliant verification event if assembly is has
13958         CLSCompliantAttribute(true).
13959
13960         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
13961         ApllyAttribute is now called in emit section as in the other cases.
13962         Possible future Emit integration.
13963         (IsIdentifierClsCompliant): New override.
13964         (VerifyClsCompliance): New override.
13965         (GetEnumeratorName): Returns full enum name.
13966
13967         * parameter.cs (GetSignatureForError): Implemented.
13968
13969         * report.cs (WarningData): New struct for Warning message information.
13970         (LocationOfPreviousError): New method.
13971         (Warning): New method. Reports warning based on the warning table.
13972         (Error_T): New method. Reports error based on the error table.
13973
13974         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
13975         verifications are done here.
13976
13977         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
13978
13979         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
13980         CLSCompliantAttribute.
13981         (all_imported_types): New member holds all imported types from other
13982         assemblies.
13983         (LoadAllImportedTypes): New method fills static table with exported types
13984         from all referenced assemblies.
13985         (Modules): New property returns all assembly modules.
13986
13987 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
13988
13989         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
13990         throwing a parser error.
13991
13992         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
13993         which removes the hardcoded get_/set_ prefixes for properties, as
13994         IL allows for the properties to be named something else.  
13995
13996         Bug #56013
13997
13998         * expression.cs: Do not override operand before we know if it is
13999         non-null.  Fix 56207
14000
14001 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14002
14003         * typemanager.cs: support for pinned variables.
14004
14005 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14006
14007         * decl.cs, typemanager.cs: Avoid using an arraylist
14008         as a buffer if there is only one result set.
14009
14010 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14011
14012         * expression.cs: Make sure you cant call a static method
14013         with an instance expression, bug #56174.
14014
14015 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
14016
14017         * class.cs (IsDuplicateImplementation): Improve error reporting to
14018         flag 663 (method only differs in parameter modifier).
14019
14020         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
14021         in preprocessor directives.
14022
14023         * location.cs (LookupFile): Allow for the empty path.
14024
14025         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
14026         better approach for some of that patch, but its failing with the
14027         CharSet enumeration.  For now try/catch will do.
14028
14029         * typemanager.cs: Do not crash if a struct does not have fields.
14030         Fixes 56150.
14031
14032 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14033
14034         * expression.cs: cs0213, cant fix a fixed expression.
14035         fixes 50231.
14036
14037 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14038
14039         * cs-parser.jay: detect invalid embeded statements gracefully.
14040         bug #51113.
14041
14042 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14043
14044         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
14045         As a regex:
14046         s/
14047         the invocation type may not be a subclass of the tye of the item/
14048         The type of the item must be a subclass of the invocation item.
14049         /g
14050
14051         Fixes bug #50820.
14052
14053 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
14054
14055         * attribute.cs: Added methods to get a string and a bool from an
14056         attribute. Required to information from AssemblyKeyFileAttribute,
14057         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
14058         * codegen.cs: Modified AssemblyName creation to include support for
14059         strongnames. Catch additional exceptions to report them as CS1548.
14060         * compiler.csproj: Updated include CryptoConvert.cs.
14061         * compiler.csproj.user: Removed file - user specific configuration.
14062         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
14063         Mono.Security assembly. The original class is maintained and tested in
14064         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
14065         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
14066         like CSC 8.0 (C# v2) supports.
14067         * Makefile: Added CryptoConvert.cs to mcs sources.
14068         * rootcontext.cs: Added new options for strongnames.
14069
14070 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
14071
14072         * driver.cs: For --expect-error, report error code `2'
14073         if the program compiled with no errors, error code `1' if
14074         it compiled with an error other than the one expected.
14075
14076 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
14077
14078         * compiler.csproj: Updated for Visual Studio .NET 2003.
14079         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
14080         * compiler.sln: Updated for Visual Studio .NET 2003.
14081
14082 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
14083
14084         * expression.cs: Fix bug #47234. We basically need to apply the
14085         rule that we prefer the conversion of null to a reference type
14086         when faced with a conversion to 'object' (csc behaviour).
14087
14088 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14089
14090         * statement.cs: Shorter form for foreach, eliminates
14091         a local variable. r=Martin.
14092
14093 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14094
14095         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
14096         checks if we can use brtrue/brfalse to test for 0.
14097         * expression.cs: use the above in the test for using brtrue/brfalse.
14098         cleanup code a bit.
14099
14100 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14101
14102         * expression.cs: Rewrite string concat stuff. Benefits:
14103
14104         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
14105         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
14106         rather than a concat chain.
14107
14108         * typemanager.cs: Add lookups for more concat overloads.
14109
14110 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14111
14112         * expression.cs: Emit shorter il code for array init.
14113
14114         newarr
14115         dup
14116         // set 1
14117
14118         // set 2
14119
14120         newarr
14121         stloc.x
14122
14123         ldloc.x
14124         // set 1
14125
14126         ldloc.x
14127         // set 2
14128
14129 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
14130
14131         * statement.cs: Before, two switch blocks would be merged if the
14132         total size of the blocks (end_item - begin_item + 1) was less than
14133         two times the combined sizes of the blocks.
14134
14135         Now, it will only merge if after the merge at least half of the
14136         slots are filled.
14137
14138         fixes 55885.
14139
14140 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
14141
14142         * class.cs : csc build fix for GetMethods(). See bug #52503.
14143
14144 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
14145
14146         * expression.cs: Make sure fp comparisons work with NaN.
14147         This fixes bug #54303. Mig approved this patch a long
14148         time ago, but we were not able to test b/c the runtime
14149         had a related bug.
14150
14151 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
14152
14153         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
14154
14155 2004-03-19  Martin Baulig  <martin@ximian.com>
14156
14157         * class.cs (MemberCore.IsDuplicateImplementation): Report the
14158         error here and not in our caller.
14159
14160 2004-03-19  Martin Baulig  <martin@ximian.com>
14161
14162         * interface.cs: Completely killed this file.
14163         (Interface): We're now a TypeContainer and live in class.cs.
14164
14165         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
14166         argument; we're now also called for interfaces.
14167         (TypeContainer.DefineMembers): Allow this method being called
14168         multiple times.
14169         (TypeContainer.GetMethods): New public method; formerly known as
14170         Interface.GetMethod().  This is used by PendingImplementation.
14171         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
14172         it's now private and non-static.
14173         (Interface): Moved this here; it's now implemented similar to
14174         Class and Struct.
14175         (Method, Property, Event, Indexer): Added `bool is_interface'
14176         argument to their .ctor's.
14177         (MemberBase.IsInterface): New public field.
14178
14179         * cs-parser.jay: Create normal Method, Property, Event, Indexer
14180         instances instead of InterfaceMethod, InterfaceProperty, etc.
14181         (opt_interface_base): Removed; we now use `opt_class_base' instead.
14182         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
14183
14184 2004-03-19  Martin Baulig  <martin@ximian.com>
14185
14186         * class.cs (MethodCore.IsDuplicateImplementation): New private
14187         method which does the CS0111 checking.
14188         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
14189         Use IsDuplicateImplementation().
14190
14191 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
14192
14193         * decl.cs (FindMemberToOverride): New method to find the correct
14194         method or property to override in the base class.
14195         * class.cs
14196             - Make Method/Property use the above method to find the
14197               version in the base class.
14198             - Remove the InheritableMemberSignatureCompare as it is now
14199               dead code.
14200
14201         This patch makes large code bases much faster to compile, as it is
14202         O(n) rather than O(n^2) to do this validation.
14203
14204         Also, it fixes bug 52458 which is that nested classes are not
14205         taken into account when finding the base class member.
14206
14207         Reviewed/Approved by Martin.
14208
14209 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
14210
14211         * interface.cs: In all interface classes removed redundant
14212         member initialization.
14213
14214 2004-03-16  Martin Baulig  <martin@ximian.com>
14215
14216         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
14217
14218 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
14219
14220         * decl.cs (DefineTypeAndParents): New helper method to define a
14221         type's containers before the type itself is defined;  This is a
14222         bug exposed by the recent changes to Windows.Forms when an
14223         implemented interface was defined inside a class that had not been
14224         built yet.   
14225
14226         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
14227
14228         (Check): Loop correctly to report errors modifiers
14229         (UNSAFE was not in the loop, since it was the same as TOP).
14230
14231         * interface.cs: Every interface member now takes a ModFlags,
14232         instead of a "is_new" bool, which we set on the base MemberCore. 
14233
14234         Every place where we called "UnsafeOk" in the interface, now we
14235         call the proper member (InterfaceMethod.UnsafeOK) instead to get
14236         the unsafe settings from the member declaration instead of the
14237         container interface. 
14238
14239         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
14240
14241         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
14242         `set_indexer_name' to the pending bits (one per type).
14243
14244         We fixed a bug today that was picking the wrong method to
14245         override, since for properties the existing InterfaceMethod code
14246         basically ignored the method name.  Now we make sure that the
14247         method name is one of the valid indexer names.
14248
14249 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
14250  
14251         * support.cs (SeekableStreamReader): Keep track of stream byte
14252         positions and don't mix them with character offsets to the buffer.
14253
14254         Patch from Gustavo Giráldez
14255
14256 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
14257
14258         * interface.cs (InterfaceSetGetBase): Removed double member
14259         initialization, base class does it as well.
14260
14261 2004-03-13  Martin Baulig  <martin@ximian.com>
14262
14263         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
14264         when compiling corlib.
14265
14266 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
14267
14268         * convert.cs (ExplicitConversion): We were reporting an error on
14269         certain conversions (object_type source to a value type, when the
14270         expression was `null') before we had a chance to pass it through
14271         the user defined conversions.
14272
14273         * driver.cs: Replace / and \ in resource specifications to dots.
14274         Fixes 50752
14275
14276         * class.cs: Add check for duplicate operators.  Fixes 52477
14277
14278 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
14279
14280         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
14281         that are in the middle of the statements, not only at the end.
14282         Fixes #54987
14283
14284         * class.cs (TypeContainer.AddField): No longer set the
14285         `HaveStaticConstructor' flag, now we call it
14286         `UserDefineStaticConstructor' to diferentiate the slightly
14287         semantic difference.
14288
14289         The situation is that we were not adding BeforeFieldInit (from
14290         Modifiers.TypeAttr) to classes that could have it.
14291         BeforeFieldInit should be set to classes that have no static
14292         constructor. 
14293
14294         See:
14295
14296         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
14297
14298         And most importantly Zoltan's comment:
14299
14300         http://bugzilla.ximian.com/show_bug.cgi?id=44229
14301
14302         "I think beforefieldinit means 'it's ok to initialize the type sometime 
14303          before its static fields are used', i.e. initialization does not need
14304          to be triggered by the first access to the type. Setting this flag
14305          helps the JIT to compile better code, since it can run the static
14306          constructor at JIT time, and does not need to generate code to call it
14307          (possibly lots of times) at runtime. Unfortunately, mcs does not set
14308          this flag for lots of classes like String. 
14309          
14310          csc sets this flag if the type does not have an explicit static 
14311          constructor. The reasoning seems to be that if there are only static
14312          initalizers for a type, and no static constructor, then the programmer
14313          does not care when this initialization happens, so beforefieldinit
14314          can be used.
14315          
14316          This bug prevents the AOT compiler from being usable, since it 
14317          generates so many calls to mono_runtime_class_init that the AOT code
14318          is much slower than the JITted code. The JITted code is faster, 
14319          because it does not generate these calls if the vtable is type is
14320          already initialized, which is true in the majority of cases. But the
14321          AOT compiler can't do this."
14322
14323 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
14324
14325         * class.cs (MethodData.Emit): Refactor the code so symbolic
14326         information is generated for destructors;  For some reasons we
14327         were taking a code path that did not generate symbolic information
14328         before. 
14329
14330 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14331
14332         * class.cs: Create a Constructor.CheckBase method that
14333         takes care of all validation type code. The method
14334         contains some code that was moved from Define.
14335
14336         It also includes new code that checks for duplicate ctors.
14337         This fixes bug #55148.
14338
14339 2004-03-09  Joshua Tauberer <tauberer@for.net>
14340
14341         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
14342         a { ... }-style array creation invokes EmitStaticInitializers
14343         which is not good for reference-type arrays.  String, decimal
14344         and now null constants (NullCast) are not counted toward
14345         static initializers.
14346
14347 2004-03-05  Martin Baulig  <martin@ximian.com>
14348
14349         * location.cs (SourceFile.HasLineDirective): New public field;
14350         specifies whether the file contains or is referenced by a "#line"
14351         directive.
14352         (Location.DefineSymbolDocuments): Ignore source files which
14353         either contain or are referenced by a "#line" directive.        
14354
14355 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
14356
14357         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
14358         direct access to our parent, so check the method inline there.
14359
14360 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14361
14362         * expression.cs (Invocation.EmitCall): Miguel's last commit
14363         caused a regression. If you had:
14364
14365             T t = null;
14366             t.Foo ();
14367
14368         In Foo the implict this would be null.
14369
14370 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
14371
14372         * expression.cs (Invocation.EmitCall): If the method is not
14373         virtual, do not emit a CallVirt to it, use Call.
14374
14375         * typemanager.cs (GetFullNameSignature): Improve the method to
14376         cope with ".ctor" and replace it with the type name.
14377
14378         * class.cs (ConstructorInitializer.Resolve): Now the method takes
14379         as an argument the ConstructorBuilder where it is being defined,
14380         to catch the recursive constructor invocations.
14381
14382 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
14383
14384         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
14385         routines to check if a type is an enumerable/enumerator allow
14386         classes that implement the IEnumerable or IEnumerator interfaces.
14387
14388         * class.cs (Property, Operator): Implement IIteratorContainer, and
14389         implement SetYields.
14390
14391         (Property.Define): Do the block swapping for get_methods in the
14392         context of iterators.   We need to check if Properties also
14393         include indexers or not.
14394
14395         (Operator): Assign the Block before invoking the
14396         OperatorMethod.Define, so we can trigger the Iterator code
14397         replacement. 
14398
14399         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
14400         Property and Operator classes are not created when we parse the
14401         declarator but until we have the block completed, so we use a
14402         singleton SimpleIteratorContainer.Simple to flag whether the
14403         SetYields has been invoked.
14404
14405         We propagate this setting then to the Property or the Operator to
14406         allow the `yield' to function.
14407
14408 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
14409
14410         * codegen.cs: Implemented attribute support for modules.
14411         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
14412         Assembly/Module functionality.
14413
14414         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
14415         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
14416         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
14417
14418 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
14419
14420         * interface.cs (FindMembers): The operation is performed on all base
14421         interfaces and not only on the first. It is required for future CLS Compliance patch.
14422
14423 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14424
14425         * statement.cs, codegen.cs:
14426         This patch deals with patterns such as:
14427
14428         public class List : IEnumerable {
14429
14430                 public MyEnumerator GetEnumerator () {
14431                         return new MyEnumerator(this);
14432                 }
14433
14434                 IEnumerator IEnumerable.GetEnumerator () {
14435                         ...
14436                 }
14437                 
14438                 public struct MyEnumerator : IEnumerator {
14439                         ...
14440                 }
14441         }
14442
14443         Before, there were a few things we did wrong:
14444         1) we would emit callvirt on a struct, which is illegal
14445         2) we emited ldarg when we needed to emit ldarga
14446         3) we would mistakenly call the interface methods on an enumerator
14447         type that derived from IEnumerator and was in another assembly. For example:
14448
14449         public class MyEnumerator : IEnumerator
14450
14451         Would have the interface methods called, even if there were public impls of the
14452         method. In a struct, this lead to invalid IL code.
14453
14454 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
14455
14456         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
14457           renamed to Emit.
14458
14459         * delegate.cs (Define): Fixed crash when delegate type is undefined.
14460
14461 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
14462
14463         * cs-parser.jay: Fix small regression: we were not testing V2
14464         compiler features correctly.
14465
14466         * interface.cs: If the emit context is null, then create one
14467
14468 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
14469
14470         * decl.cs (GetSignatureForError): New virtual method to get full name
14471           for error messages.
14472
14473         * attribute.cs (IAttributeSupport): New interface for attribute setting.
14474           Now it is possible to rewrite ApplyAttributes method to be less if/else.
14475
14476         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
14477           Duplicated members and code in these classes has been removed.
14478           Better encapsulation in these classes.
14479
14480 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
14481
14482         * assign.cs (Assign.DoResolve): When dealing with compound
14483         assignments, there is a new rule in ECMA C# 2.4 (might have been
14484         there before, but it is documented here) that states that in:
14485
14486         a op= b;
14487
14488         If b is of type int, and the `op' is a shift-operator, then the
14489         above is evaluated as:
14490
14491         a = (int) a op b 
14492
14493         * expression.cs (Binary.ResolveOperator): Instead of testing for
14494         int/uint/long/ulong, try to implicitly convert to any of those
14495         types and use that in pointer arithmetic.
14496
14497         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
14498         method to print information for from the type, not from the
14499         null-method we were given.
14500
14501 2004-02-01  Duncan Mak  <duncan@ximian.com>
14502
14503         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
14504         parsing for cmd, fixes bug #53694.
14505
14506 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
14507
14508         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
14509         in the member name duplication tests. Property and operator name duplication
14510         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
14511
14512 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
14513
14514         * interface.cs (PopulateMethod): Fixed crash when interface method
14515         returns not existing type (error test cs0246-3.cs).
14516
14517 2004-02-02  Ravi Pratap M <ravi@ximian.com>
14518
14519         * cs-parser.jay (interface_accessors): Re-write actions to also
14520         store attributes attached to get and set methods. Fix spelling
14521         while at it.
14522
14523         (inteface_property_declaration): Modify accordingly.
14524
14525         (InterfaceAccessorInfo): New helper class to store information to pass
14526         around between rules that use interface_accessors.
14527
14528         * interface.cs (Emit): Apply attributes on the get and set
14529         accessors of properties and indexers too.
14530
14531         * attribute.cs (ApplyAttributes): Modify accordingly to use the
14532         right MethodBuilder when applying attributes to the get and set accessors.
14533
14534 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
14535
14536         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
14537
14538 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
14539
14540         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
14541
14542 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
14543
14544         * cs-parser.jay: Remove YIELD token, instead use the new grammar
14545         changes that treat `yield' specially when present before `break'
14546         or `return' tokens.
14547
14548         * cs-tokenizer.cs: yield is no longer a keyword.
14549
14550 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
14551
14552         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
14553         setting for default constructors.
14554         For default constructors are almost every time set wrong Modifier. The
14555         generated IL code has been alright. But inside mcs this values was
14556         wrong and this was reason why several of my CLS Compliance tests
14557         failed.
14558
14559 2004-01-22  Martin Baulig  <martin@ximian.com>
14560
14561         * cs-parser.jay (namespace_or_type_name): Return an Expression,
14562         not a QualifiedIdentifier.  This is what `type_name_expression'
14563         was previously doing.
14564         (type_name_expression): Removed; the code is now in
14565         `namespace_or_type_name'.
14566         (qualified_identifier): Removed, use `namespace_or_type_name'
14567         instead.
14568         (QualifiedIdentifier): Removed this class.      
14569
14570 2004-01-22  Martin Baulig  <martin@ximian.com>
14571
14572         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
14573         not a string as alias name.
14574
14575 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
14576
14577         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
14578         #52730 bug, and instead compute correctly the need to use a
14579         temporary variable when requesting an address based on the
14580         static/instace modified of the field and the constructor.
14581  
14582 2004-01-21  Martin Baulig  <martin@ximian.com>
14583
14584         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
14585         class and namespace before looking up aliases.  Fixes #52517.
14586
14587 2004-01-21  Martin Baulig  <martin@ximian.com>
14588
14589         * flowanalysis.cs (UsageVector.Merge): Allow variables being
14590         assinged in a 'try'; fixes exception4.cs.
14591
14592 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14593         * class.cs : Implemented parameter-less constructor for TypeContainer
14594
14595         * decl.cs: Attributes are now stored here. New property OptAttributes
14596
14597         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
14598
14599         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
14600
14601 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14602
14603         * typemanager.cs (CSharpSignature): Now reports also inner class name.
14604           (CSharpSignature): New method for indexer and property signature.
14605
14606 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14607
14608         * pending.cs (IsVirtualFilter): Faster implementation.
14609
14610 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14611
14612         * typemanager.cs: Avoid inclusion of same assembly more than once.
14613
14614 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14615
14616         * cs-parser.jay: Fixed problem where the last assembly attribute
14617           has been applied also to following declaration (class, struct, etc.)
14618           
14619 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14620
14621         * class.cs: Added error CS0538, CS0539 reporting.
14622         Fixed crash on Microsoft runtime when field type is void.
14623
14624         * cs-parser.jay: Added error CS0537 reporting.
14625
14626         * pending.cs: Added error CS0535 reporting.
14627         Improved error report for errors CS0536, CS0534.
14628
14629 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
14630
14631         Merge a few bits from the Anonymous Method MCS tree.
14632
14633         * statement.cs (ToplevelBlock): New class for toplevel methods,
14634         will hold anonymous methods, lifted variables.
14635
14636         * cs-parser.jay: Create toplevel blocks for delegates and for
14637         regular blocks of code. 
14638
14639 2004-01-20  Martin Baulig  <martin@ximian.com>
14640
14641         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
14642         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
14643         and `NeedExplicitReturn'; added `IsLastStatement'.
14644         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
14645         have a `ReturnLabel' or we're not unreachable.
14646
14647         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
14648         child's reachability; don't just override ours with it.  Fixes
14649         #58058 (lluis's example).
14650         (FlowBranching): Added public InTryOrCatch(), InCatch(),
14651         InFinally(), InLoop(), InSwitch() and
14652         BreakCrossesTryCatchBoundary() methods.
14653
14654         * statement.cs (Return): Do all error checking in Resolve().
14655         Unless we are the last statement in a top-level block, always
14656         create a return label and jump to it.
14657         (Break, Continue): Do all error checking in Resolve(); also make
14658         sure we aren't leaving a `finally'.
14659         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
14660         statement in a top-level block.
14661         (Block.Flags): Added `IsDestructor'.
14662         (Block.IsDestructor): New public property.
14663
14664 2004-01-20  Martin Baulig  <martin@ximian.com>
14665
14666         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
14667
14668 2004-01-20  Martin Baulig  <martin@ximian.com>
14669
14670         * statement.cs (Statement.ResolveUnreachable): New public method.
14671         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
14672         (Block.Resolve): Resolve unreachable statements.
14673
14674 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14675
14676         * expression.cs: We need to fix the case where we do
14677         not have a temp variable here.
14678
14679         * assign.cs: Only expression compound assignments need
14680         temporary variables.
14681
14682 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14683
14684         * flowanalysis.cs: Reduce memory allocation in a few ways:
14685           - A block with no variables should not allocate a bit
14686             vector for itself.
14687           - A method with no out parameters does not need any tracking
14688             for assignment of the parameters, so we need not allocate
14689             any data for it.
14690           - The arrays:
14691                 public readonly Type[] VariableTypes;
14692                 public readonly string[] VariableNames;
14693             Are redundant. The data is already stored in the variable
14694             map, so we need not allocate another array for it.
14695           - We need to add alot of checks for if (params | locals) == null
14696             due to the first two changes.
14697
14698 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
14699
14700         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
14701         implement IMemoryLocation, we store a copy on a local variable and
14702         take the address of it.  Patch from Benjamin Jemlich
14703
14704         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
14705         to use a special "type_name_expression" rule which reduces the
14706         number of "QualifiedIdentifier" classes created, and instead
14707         directly creates MemberAccess expressions.
14708
14709 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
14710
14711         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
14712         that fixes #52853.  Null literal assignment to ValueType
14713
14714         * class.cs (MethodData.Emit): Instead of checking the name of the
14715         method to determine if its a destructor, create a new derived
14716         class from Method called Destructor, and test for that.  
14717
14718         * cs-parser.jay: Create a Destructor object instead of a Method.  
14719
14720         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
14721
14722         Fixes: 52933
14723
14724 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
14725
14726         * expression.cs (Binary.ResolveOperator): Perform an implicit
14727         conversion from MethodGroups to their delegate types on the
14728         Addition operation.
14729
14730         * delegate.cs: Introduce a new class DelegateCreation that is the
14731         base class for `NewDelegate' and `ImplicitDelegateCreation',
14732         factor some code in here.
14733
14734         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
14735         conversion from MethodGroups to compatible delegate types. 
14736
14737         * ecore.cs (Expression.Resolve): Do not flag error 654
14738         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
14739         we allow conversions from MethodGroups to delegate types now.
14740
14741         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
14742         assignments in v2 either.
14743
14744 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
14745
14746         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
14747         static read-only fields in ctors.
14748
14749         Applied patch from Benjamin Jemlich 
14750
14751         * expression.cs (UnaryMutator): Avoid leaking local variables. 
14752
14753 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
14754
14755         * cs-tokenizer.cs (IsCastToken): Allow the various native types
14756         here to return true, as they can be used like this:
14757
14758                 (XXX) int.MEMBER ()
14759
14760         Fixed 49836 and all the other dups
14761
14762 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
14763
14764         * driver.cs: Implement /win32res and /win32icon.
14765
14766 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
14767
14768         * cs-parser.jay: Add a rule to improve error handling for the
14769         common mistake of placing modifiers after the type.
14770
14771 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
14772
14773         * cs-parser.jay (interface_event_declaration): Catch
14774         initialization of events on interfaces, and report cs0068
14775
14776         * cs-parser.jay (interface_event_declaration): Catch
14777         initialization of events. 
14778
14779         * ecore.cs: Better report missing constructors.
14780
14781         * expression.cs (Binary.ResolveOperator): My previous bug fix had
14782         the error reporting done in the wrong place.  Fix.
14783
14784         * expression.cs (Binary.ResolveOperator): Catch the 
14785         operator + (E x, E y) error earlier, and later allow for implicit
14786         conversions in operator +/- (E e, U x) from U to the underlying
14787         type of E.
14788
14789         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
14790         52596, if the container class is abstract, the default constructor
14791         is protected otherwise its public (before, we were always public).
14792
14793         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
14794         fixed statement.
14795
14796         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
14797         Jemlich that fixes bug #52597, MCS was generating invalid code for
14798         idisposable structs.   Thanks to Ben for following up with this
14799         bug as well.
14800
14801 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
14802
14803         * driver.cs: Allow assemblies without code to be generated, fixes
14804         52230.
14805
14806 2004-01-07  Nick Drochak <ndrochak@gol.com>
14807
14808         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
14809
14810 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
14811
14812         * cs-parser.jay: Add rules to improve error reporting if fields or
14813         methods are declared at the namespace level (error 116)
14814
14815         * Add rules to catch event add/remove
14816
14817 2004-01-04  David Sheldon <dave-mono@earth.li>
14818
14819   * expression.cs: Added matching ")" to error message for 
14820   CS0077
14821
14822 2004-01-03 Todd Berman <tberman@gentoo.org>
14823
14824         * ecore.cs, attribute.cs:
14825         Applying fix from #52429.
14826
14827 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14828
14829         * ecore.cs, expression.cs, statement.cs:
14830         Total rewrite of how we handle branching. We
14831         now handle complex boolean expressions with fewer
14832         jumps. As well if (x == 0) no longer emits a ceq.
14833
14834         if (x is Foo) is much faster now, because we generate
14835         better code.
14836
14837         Overall, we get a pretty big improvement on our benchmark
14838         tests. The code we generate is smaller and more readable.
14839
14840         I did a full two-stage bootstrap. The patch was reviewed
14841         by Martin and Miguel.
14842
14843 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14844
14845         * cs-parser.jay: Make primary_expression not take a QI.
14846         we dont need this because the member_access rule covers
14847         us here. So we replace the rule with just IDENTIFIER.
14848
14849         This has two good effects. First, we remove a s/r conflict.
14850         Second, we allocate many fewer QualifiedIdentifier objects.
14851
14852 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14853
14854         * attribute.cs: Handle MarshalAs attributes as pseudo, and
14855         set the correct information via SRE. This prevents
14856         hanging on the MS runtime. Fixes #29374.
14857
14858 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14859
14860         * convert.cs: correctly handle conversions to value types
14861         from Enum and ValueType as unboxing conversions.
14862
14863         Fixes bug #52569. Patch by Benjamin Jemlich.
14864
14865 2004-01-02  Ravi Pratap  <ravi@ximian.com>
14866
14867         * expression.cs (BetterConversion): Prefer int -> uint
14868         over int -> ulong (csc's behaviour). This fixed bug #52046.
14869
14870 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
14871
14872         * decl.cs (MemberCache.FindMembers): now returns a
14873         MemberInfo [].
14874
14875         * typemanager.cs: In general, go with with ^^.
14876         (CopyNewMethods): take an IList.
14877         (RealMemberLookup): Only allocate an arraylist
14878         if we copy from two sets of methods.
14879
14880         This change basically does two things:
14881         1) Fewer array lists allocated due to CopyNewMethods.
14882         2) the explicit cast in MemberList costed ALOT.
14883
14884 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
14885
14886         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
14887         a hashtable to avoid needless string allocations when an identifier is
14888         used more than once (the common case).
14889
14890 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14891
14892         * pending.cs: MS's TypeBuilder.GetInterfaces ()
14893         is broken, it will not return anything. So, we
14894         have to use the information we have in mcs to
14895         do the task.
14896
14897         * typemanager.cs: Add a cache for GetInterfaces,
14898         since this will now be used more often (due to ^^)
14899
14900         (GetExplicitInterfaces) New method that gets the
14901         declared, not effective, interfaces on a type
14902         builder (eg, if you have interface IFoo, interface
14903         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
14904         { IBar }.
14905
14906         This patch makes MCS able to bootstrap itself on
14907         Windows again.
14908
14909 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14910
14911         * expression.cs: Remove the Nop's that Miguel put
14912         in by mistake.
14913
14914 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14915
14916         * report.cs, codegen.cs: Give the real stack trace to
14917         the error when an exception is thrown.
14918
14919 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14920
14921         * decl.cs: only allocate hashtables for ifaces if 
14922         it is an iface!
14923
14924 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14925
14926         * expression.cs: fix the error from cs0121-2.cs
14927         (a parent interface has two child interfaces that
14928         have a function with the same name and 0 params
14929         and the function is called through the parent).
14930
14931 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14932
14933         * class.cs, rootcontext.cs, typmanager.cs: do not
14934         leak pointers.
14935
14936 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14937
14938         * codegen.cs: remove stack for the ec flow branching.
14939         It is already a linked list, so no need.
14940
14941 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14942
14943         * Makefile: Allow custom profiler here.
14944
14945 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
14946
14947         * typemanager.cs (LookupType):
14948           - Use a static char [], because split takes
14949             a param array for args, so it was allocating
14950             every time.
14951           - Do not store true in a hashtable, it boxes.
14952
14953 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
14954
14955         * flowanalysis.cs: bytify common enums.
14956
14957 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14958
14959         * modifiers.cs: Add a new set of flags for the
14960         flags allowed on explicit interface impls.
14961         * cs-parser.jay: catch the use of modifiers in
14962         interfaces correctly.
14963         * class.cs: catch private void IFoo.Blah ().
14964
14965         All related to bug #50572.
14966
14967 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14968
14969         * decl.cs: Rewrite the consistant accessability checking.
14970         Accessability is not linear, it must be implemented in
14971         a tableish way. Fixes #49704.
14972
14973 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14974
14975         * expression.cs: Handle negation in a checked context.
14976         We must use subtraction from zero. Fixes #38674.
14977
14978 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14979
14980         * class.cs: Ignore static void main in DLLs.
14981         * rootcontext.cs: Handle the target type here,
14982         since we are have to access it from class.cs
14983         * driver.cs: account for the above.
14984
14985 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14986
14987         * report.cs: Give line numbers and files if available.
14988
14989 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
14990
14991         * driver.cs: Implement /addmodule.
14992
14993         * typemanager.cs:  Change 'modules' field so it now contains Modules not
14994         ModuleBuilders.
14995
14996 2003-12-20  Martin Baulig  <martin@ximian.com>
14997
14998         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
14999         (FieldBase.IsAssigned): Removed this field.
15000         (FieldBase.SetAssigned): New public method.
15001         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
15002
15003 2003-12-20  Martin Baulig  <martin@ximian.com>
15004
15005         * expression.cs (LocalVariableReference.DoResolve): Don't set
15006         `vi.Used' if we're called from DoResolveLValue().
15007
15008         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
15009         returns the usage vector it just merged into the current one -
15010         pass this one to UsageWarning().
15011         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
15012         of the `EmitContext', don't call this recursively on our children.
15013
15014 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
15015
15016         * driver.cs: Implement /target:module.
15017
15018 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
15019
15020         * support.cs (CharArrayHashtable): New helper class.
15021
15022         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
15023         char arrays, not strings, so we can avoid creating a string in
15024         consume_identifier if the identifier is a keyword.
15025
15026 2003-12-16  Martin Baulig  <martin@ximian.com>
15027
15028         * statement.cs (LocalInfo.Assigned): Removed this property.
15029         (LocalInfo.Flags): Removed `Assigned'.
15030         (LocalInfo.IsAssigned): New public method; takes the EmitContext
15031         and uses flow analysis.
15032         (Block.UsageWarning): Made this method private.
15033         (Block.Resolve): Call UsageWarning() if appropriate.
15034
15035         * expression.cs (LocalVariableReference.DoResolve): Always set
15036         LocalInfo.Used here.
15037
15038 2003-12-13  Martin Baulig  <martin@ximian.com>
15039
15040         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
15041         any value here; we're now using flow analysis to figure out
15042         whether a statement/block returns a value.
15043
15044 2003-12-13  Martin Baulig  <martin@ximian.com>
15045
15046         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
15047         working again.
15048         (FlowBranching.MergeFinally): Don't call
15049         `branching.CheckOutParameters()' here, this is called in
15050         MergeTopBlock().
15051         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
15052         when adding the `finally' vector.       
15053
15054 2003-12-13  Martin Baulig  <martin@ximian.com>
15055
15056         * flowanalysis.cs
15057         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
15058         actually work and also fix #48962.
15059
15060 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
15061
15062         * decl.cs: Do not check System.Object for nested types,
15063         since we know it does not have any. Big bang for buck:
15064
15065         BEFORE:
15066            Run 1:   8.35 seconds
15067            Run 2:   8.32 seconds
15068            corlib:  17.99 seconds
15069         AFTER:
15070            Run 1:   8.17 seconds
15071            Run 2:   8.17 seconds
15072            corlib:  17.39 seconds
15073
15074 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
15075
15076         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
15077         time we are returning 0 members, so we save alot here.
15078
15079 2003-12-11  Martin Baulig  <martin@ximian.com>
15080
15081         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
15082         `MergeChild()', also just take the `FlowBranching' as argument;
15083         call Merge() on it and return the result.
15084         (FlowBranching.Merge): We don't need to do anything if we just
15085         have one sibling.
15086
15087 2003-12-11  Martin Baulig  <martin@ximian.com>
15088
15089         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
15090         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
15091         Maurer for this idea.
15092
15093 2003-12-11  Martin Baulig  <martin@ximian.com>
15094
15095         * flowanalysis.cs (MergeResult): This class is now gone; we now
15096         use the `UsageVector' for this.  The reason for this is that if a
15097         branching just has one sibling, we don't need to "merge" them at
15098         all - that's the next step to do.
15099         (FlowBranching.Merge): We now return a `UsageVector' instead of a
15100         `MergeResult'.
15101
15102 2003-12-11  Martin Baulig  <martin@ximian.com>
15103
15104         Reworked flow analyis and made it more precise and bug-free.  The
15105         most important change is that we're now using a special `Reachability'
15106         class instead of having "magic" meanings of `FlowReturns'.  I'll
15107         do some more cleanups and optimizations and also add some more
15108         documentation this week.
15109
15110         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
15111         largely reworked this class.
15112         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
15113         the new `Reachability' class instead of having "magic" values here.
15114         (FlowBranching): We're now using an instance of `Reachability'
15115         instead of having separate `Returns', `Breaks' etc. fields.
15116
15117         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
15118         based on flow analysis; ignore the return value of block.Emit ().
15119
15120 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
15121
15122         * driver.cs typemanager.cs: Find the mono extensions to corlib even
15123         if they are private.
15124
15125 2003-12-09  Martin Baulig  <martin@ximian.com>
15126
15127         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
15128         call them directly on the UsageVector.
15129
15130 2003-12-09  Martin Baulig  <martin@ximian.com>
15131
15132         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
15133         Changed return type from `FlowReturns' to `Reachability'.
15134
15135 2003-12-09  Martin Baulig  <martin@ximian.com>
15136
15137         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
15138         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
15139         `Reachable' fields with a single `Reachability' one.
15140
15141 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15142
15143         * class.cs (FindMembers): Remove foreach's.
15144
15145         Bootstrap times:
15146
15147         BEFORE
15148                 Run 1:   8.74 seconds
15149                 Run 2:   8.71 seconds
15150
15151         AFTER
15152                 Run 1:   8.64 seconds
15153                 Run 2:   8.58 seconds
15154
15155
15156 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15157
15158         * cs-parser.jay:
15159         * gen-treedump.cs:
15160         * statement.cs:
15161         This patch does a few things:
15162                 1. EmptyStatement is now a singleton, so it is never reallocated.
15163                 2. All blah is EmptyStatement constructs have been changed to
15164                    blah == EmptyStatement.Value, which is much faster and valid
15165                    now that EmptyStatement is a singleton.
15166                 3. When resolving a block, rather than allocating a new array for
15167                    the non-empty statements, empty statements are replaced with
15168                    EmptyStatement.Value
15169                 4. Some recursive functions have been made non-recursive.
15170         Mainly the performance impact is from (3), however (1) and (2) are needed for
15171         this to work. (4) does not make a big difference in normal situations, however
15172         it makes the profile look saner.
15173
15174         Bootstrap times:
15175
15176         BEFORE
15177         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15178         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15179         Total memory allocated: 56397 KB
15180
15181         AFTER
15182         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
15183         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
15184         Total memory allocated: 55666 KB
15185
15186 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15187
15188         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
15189         than the hashtable in a hashtable version
15190
15191         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
15192         we always end up concating a string. This results in a huge perf
15193         loss, because many strings have to be tracked by the GC. In this
15194         patch, we first use a hashtable that works with two keys, so that
15195         the strings do not need to be concat'ed.
15196
15197         Bootstrap times:
15198         BEFORE
15199                 Run 1:   8.74 seconds
15200                 Run 2:   8.71 seconds
15201
15202         AFTER
15203                 Run 1:   8.65 seconds
15204                 Run 2:   8.56 seconds
15205
15206 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15207
15208         * Makefile: Add a new target `do-time' that does a quick and simple
15209         profile, leaving easy to parse output.
15210
15211 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
15212
15213         * codegen.cs (Init): Create the dynamic assembly with 
15214         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
15215
15216 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15217
15218         * support.cs: Make the PtrHashtable use only one
15219         instance of its comparer.
15220
15221 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
15222
15223         * typemanager.cs: Fix lookup of GetNamespaces.
15224
15225 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
15226
15227         * expression.cs: Removed redundant line.
15228
15229         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
15230         ArrayLists, use for loops with bounds.  
15231
15232         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
15233         arraylist.
15234
15235         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
15236         arraylists, use for loop with bounds.
15237
15238         The above three changes give us a 0.071 second performance
15239         improvement out of 3.294 seconds down to 3.223.  On my machine
15240         the above changes reduced the memory usage by 1,387 KB during
15241         compiler bootstrap.
15242
15243         * cs-parser.jay (QualifiedIdentifier): New class used to represent
15244         QualifiedIdentifiers.  Before we created a new string through
15245         concatenation, and mostly later on, the result would be
15246         manipulated by DecomposeQI through string manipulation.
15247
15248         This reduced the compiler memory usage for bootstrapping from
15249         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
15250         compile times in 0.05 seconds.
15251
15252 2003-11-28  Dick Porter  <dick@ximian.com>
15253
15254         * support.cs: Do string compares with the Invariant culture.
15255
15256         * rootcontext.cs: 
15257         * gen-treedump.cs: 
15258         * expression.cs: 
15259         * driver.cs: 
15260         * decl.cs: 
15261         * codegen.cs: 
15262         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
15263         the comparison is done with the Invariant culture.
15264
15265 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
15266
15267         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
15268         GetEnumerator method.
15269
15270         (ProbeCollectionType): Iterate starting at the most specific type
15271         upwards looking for a GetEnumerator
15272
15273         * expression.cs: Shift count can be up to 31 for int/uint and 63
15274         for long/ulong.
15275
15276 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
15277
15278         * statement.cs (Block.LookupLabel): Also look for the label on the
15279         children blocks.  Use a hash table to keep track of visited
15280         nodes. 
15281
15282         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
15283         we actually did transform the other operand, otherwise fall back
15284         to the common codepath that casts to long.
15285
15286         * cs-tokenizer.cs: Use the same code pattern as the int case.
15287         Maybe I should do the parsing myself, and avoid depending on the
15288         Parse routines to get this done.
15289
15290 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
15291
15292         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15293         which fixes bug 51347.  This time test it.
15294
15295         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
15296         attributes for example can not tell the difference between these.
15297         The difference was only a syntax feature of the language. 
15298
15299         * attribute.cs: Apply attributes to delegates.
15300
15301         * delegate.cs: Call the apply attributes method.
15302
15303 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
15304
15305         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
15306         comparing 0 vs Byte.MinValue, not the value
15307
15308         (ImplicitConversionRequired): When reporting a conversion error,
15309         use error 31 to print out the constant error instead of the
15310         simpler 29.
15311
15312         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15313         which fixes bug 51347.
15314
15315 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
15316
15317         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
15318         which fixes the -warnaserror command line option.
15319
15320 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
15321
15322         * cfold.cs (DoNumericPromotions): During constant folding of
15323         additions on UIntConstant, special case intconstants with
15324         IntConstants like we do on the expression binary operator. 
15325
15326 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
15327
15328         * convert.cs (ImplicitReferenceConversion): We were missing a case
15329         (System.Enum are not value types or class types, so we need to
15330         classify them separatedly).
15331
15332         * driver.cs: We do not support error 2007.
15333
15334 2003-11-12 Jackson Harper <jackson@ximian.com>
15335
15336         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
15337         system directory. Also use the full file name so users can
15338         libraries names mscorlib-o-tron.dll in a non system dir.
15339
15340 2003-11-10  Martin Baulig  <martin@ximian.com>
15341
15342         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
15343         (TypeManager.InitCoreTypes): Initialize them here, but instead of
15344         calling `ResolveType()' on them, directly assign their `Type'.
15345
15346 2003-11-08  Martin Baulig  <martin@ximian.com>
15347
15348         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
15349         return value and the `out parent' parameter.
15350         (TypeContainer.DefineType): Moved the CS0644 check into
15351         GetClassBases().  Don't pass the interface types to the
15352         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
15353         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
15354
15355         * ecore.cs (TypeExpr.IsAttribute): New property.
15356         (TypeExpr.GetInterfaces): New method.
15357
15358         * interface.cs (Interface.GetInterfaceTypeByName): Return a
15359         TypeExpr instead of a Type.
15360         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
15361         (Interface.DefineType): Don't pass the interface types to the
15362         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
15363         them later and then call `TypeBulider.AddInterfaceImplementation()'.
15364
15365         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
15366         instead of a `Type[]'.
15367         (TypeManager.RegisterBuilder): Likewise.
15368         (TypeManager.AddUserInterface): Likewise.
15369         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
15370         `Type[]' and also return a `TypeExpr[]'.
15371         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
15372
15373 2003-11-08  Martin Baulig  <martin@ximian.com>
15374
15375         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
15376         Expression.     
15377
15378 2003-11-08  Martin Baulig  <martin@ximian.com>
15379
15380         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
15381         TypeManager.ResolveExpressionTypes().
15382
15383         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
15384         instead of an Expression.
15385         (TypeExpr): This is now an abstract base class for `TypeExpression'.
15386         (TypeExpression): New public class; formerly known as `TypeExpr'.
15387
15388         * expression.cs (ComposedCast): Derive from TypeExpr.
15389
15390         * typemanager.cs (TypeManager.system_*_expr): These are now
15391         TypExpr's instead of Expression's.
15392         (TypeManager.ResolveExpressionTypes): New public static function;
15393         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
15394         of them.        
15395
15396 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
15397
15398         * expression.cs (New.DoResolve): Do not dereference value that
15399         might be a null return.
15400
15401         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
15402         sure that the constant value has the right type.  Fixes an
15403         unreported bug, similar to 50425.
15404
15405         * const.cs (Const.LookupConstantValue): Call
15406         ImplicitStandardConversionExists before doing a conversion to
15407         avoid havng the TypeManager.ChangeType do conversions.
15408
15409         Reduced the number of casts used
15410
15411         (Const.ChangeType): New routine to enable reuse of the constant
15412         type changing code from statement.
15413
15414         * typemanager.cs (ChangeType): Move common initialization to
15415         static global variables.
15416
15417         Fixes #50425.
15418
15419         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
15420         every value type to go through, even if it was void.  Fix that. 
15421
15422         * cs-tokenizer.cs: Use is_identifier_start_character on the start
15423         character of the define, and the is_identifier_part_character for
15424         the rest of the string.
15425
15426 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
15427
15428         * expression.cs (UnaryMutator.EmitCode): When I updated
15429         LocalVariableReference.DoResolve, I overdid it, and dropped an
15430         optimization done on local variable references.
15431
15432 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
15433
15434         * ecore.cs: Convert the return from Ldlen into an int.
15435
15436 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
15437
15438         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
15439         the accessibility, this is a special case for toplevel non-public
15440         classes (internal for instance).
15441
15442 2003-10-20  Nick Drochak <ndrochak@gol.com>
15443
15444         * ecore.cs: Fix typo and build.  Needed another right paren.
15445
15446 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
15447
15448         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
15449         `internal' case regular and protected, but not allowing protected
15450         to be evaluated later.  Bug 49840
15451
15452 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
15453
15454         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
15455         to kb.Nlast, and not the kb.nFirst to isolate the switch
15456         statement.
15457
15458         Extract the underlying type, so enumerations of long/ulong are
15459         treated like long/ulong.
15460
15461 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
15462
15463         * expression.cs (New): Overload the meaning of RequestedType to
15464         track the possible creation of the NewDelegate type, since
15465         DoResolve is invoked more than once for new constructors on field
15466         initialization.
15467
15468         See bugs: #48800 and #37014
15469
15470         * cs-parser.jay (declare_local_constants): Take an arraylist
15471         instead of a single constant.
15472
15473         (local_constant_declaration): It should take a
15474         constant_declarators, not a constant_declarator.  Fixes 49487
15475
15476         * convert.cs: Fix error report.
15477
15478 2003-10-13 Jackson Harper <jackson@ximian.com>
15479
15480         * typemanager.cs (TypeToCoreType): Add float and double this fixes
15481         bug #49611
15482
15483 2003-10-09  Martin Baulig  <martin@ximian.com>
15484
15485         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
15486         to the .ctor.
15487         (MethodCore.DoDefineParameters): Removed the TypeContainer
15488         argument; use the DeclSpace which was passed to the .ctor instead.
15489         (MethodCore.CheckParameter): Take a DeclSpace instead of a
15490         TypeContainer; we only need a DeclSpace here.
15491
15492 2003-10-09  Martin Baulig  <martin@ximian.com>
15493
15494         * class.cs (MethodData): Added additional `DeclSpace ds' argument
15495         to the .ctor.
15496         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
15497         EmitContext's .ctor.    
15498
15499 2003-10-09  Martin Baulig  <martin@ximian.com>
15500
15501         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
15502         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
15503         AsAccessible(), moved them as well.
15504
15505         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
15506
15507 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
15508
15509         * cs-parser.jay : Renamed yyName to yyNames related to jay.
15510
15511 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
15512
15513         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
15514         generation for >=, as spotted by Paolo, bug 48679.  
15515         Patch from David Waite.
15516
15517         * cs-tokenizer.cs: Add handling for #pragma.
15518
15519         * cs-parser.jay: Allow for both yield and yield return in the
15520         syntax.  The anti-cobolization of C# fight will go on!
15521
15522         * class.cs (TypeBuilder.DefineType): Catch error condition here
15523         (Parent.DefineType erroring out and returning null).
15524
15525         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15526         coping with enumerations variables, we were mistakenly processing
15527         them as a regular value type instead of built-in types.  Fixes the
15528         bug #48063
15529
15530         * typemanager.cs (IsBuiltinOrEnum): New method.
15531
15532 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
15533
15534         * cs-parser.jay: Upgrade: yield now needs the return clause.
15535
15536 2003-09-19  Martin Baulig  <martin@ximian.com>
15537
15538         * decl.cs (MemberCache.SetupCacheForInterface): Take a
15539         `MemberCache parent' argument.  Normally, an interface doesn't
15540         have a parent type except System.Object, but we use this in gmcs
15541         for generic type parameters.
15542
15543 2003-09-18  Martin Baulig  <martin@ximian.com>
15544
15545         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
15546         on `type.IsInterface'; don't check whether the type has a parent
15547         to determine whether it's an interface.
15548
15549 2003-09-15  Martin Baulig  <martin@ximian.com>
15550
15551         * class.cs (TypeContainer.DefineType): Added an error flag to
15552         avoid reporting duplicate CS0146's ("class definition is
15553         circular.").
15554
15555         * driver.cs (Driver.MainDriver): Abort if
15556         RootContext.ResolveTree() reported any errors.
15557
15558 2003-09-07  Martin Baulig  <martin@ximian.com>
15559
15560         * report.cs (Error, Warning): Added overloaded versions which take
15561         a `params object[] args' and call String.Format().
15562
15563 2003-09-07  Martin Baulig  <martin@ximian.com>
15564
15565         * decl.cs (DeclSpace..ctor): Don't call
15566         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
15567         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
15568         (DeclSpace.RecordDecl): New method.
15569
15570         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
15571
15572 2003-09-02  Ravi Pratap  <ravi@ximian.com>
15573
15574         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
15575         value attributes to be applied to ParameterBuilders.
15576
15577         * class.cs (MethodCore.LabelParameters): Make static and more
15578         generic so that it can be used from other places - like interface
15579         methods, for instance.
15580
15581         * interface.cs (Interface.Emit): Call LabelParameters before
15582         emitting attributes on the InterfaceMethod.
15583
15584 2003-08-26  Martin Baulig  <martin@ximian.com>
15585
15586         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
15587         resolving aliases; fixes #47927.
15588
15589 2003-08-26  Martin Baulig  <martin@ximian.com>
15590
15591         * statement.cs (Using.DoResolve): This is internally emitting a
15592         try/finally clause, so we need to set ec.NeedExplicitReturn if we
15593         do not always return.  Fixes #47681.
15594
15595 2003-08-26  Martin Baulig  <martin@ximian.com>
15596
15597         * decl.cs (MemberCore): Moved WarningNotHiding(),
15598         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
15599         into MemberBase.
15600         (AdditionResult): Make this nested in DeclSpace.
15601         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
15602         argument; call NamespaceEntry.Define() unless we're nested in a
15603         class or struct.
15604
15605         * namespace.cs (Namespace.DefineName): New public function.  This
15606         is called from DeclSpace's .ctor to add 
15607         (Namespace.Lookup): Include DeclSpaces in the lookup.
15608
15609         * class.cs (Operator): Derive from MemberBase, not MemberCore.
15610
15611         * const.cs (Const): Derive from MemberBase, not MemberCore.     
15612
15613 2003-08-25  Martin Baulig  <martin@ximian.com>
15614
15615         * convert.cs (Convert.ExplicitReferenceConversion): When
15616         converting from an interface type to a class, unbox if the target
15617         type is a struct type.  Fixes #47822.
15618
15619 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15620
15621         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
15622         #47854.
15623
15624 2003-08-22  Martin Baulig  <martin@ximian.com>
15625
15626         * class.cs (TypeManager.DefineType): When defining a nested type,
15627         call DefineType() on our parent; fixes #47801.
15628
15629 2003-08-22  Martin Baulig  <martin@ximian.com>
15630
15631         * class.cs (MethodData.Define): While checking if a method is an
15632         interface implementation, improve the test a bit more to fix #47654.
15633
15634 2003-08-22  Martin Baulig  <martin@ximian.com>
15635
15636         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
15637         correctly; fixes #47722.
15638
15639 2003-08-22  Martin Baulig  <martin@ximian.com>
15640
15641         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
15642         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
15643
15644         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
15645
15646 2003-08-22  Martin Baulig  <martin@ximian.com>
15647
15648         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
15649         can only be assigned in static constructors.  Fixes #47161.
15650
15651 2003-08-22  Martin Baulig  <martin@ximian.com>
15652
15653         Rewrote and improved the flow analysis code.
15654
15655         * flowbranching.cs (FlowBranching): Make this class abstract.
15656         (FlowBranching.CreateBranching): New static function to create a
15657         new flow branching.
15658         (FlowBranchingBlock, FlowBranchingException): New classes.
15659         (FlowBranching.UsageVector.Type): New public readonly field.
15660         (FlowBranching.UsageVector.Breaks): Removed the setter.
15661         (FlowBranching.UsageVector.Returns): Removed the setter.
15662         (FlowBranching.UsageVector): Added Break(), Return(),
15663         NeverReachable() and Throw() methods to modify the reachability.
15664         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
15665         done by FlowBranching.Merge().
15666         (FlowBranching.UsageVector.MergeChild): New method; merges the
15667         merge result into the current vector.
15668         (FlowBranching.Merge): New abstract method to merge a branching.
15669
15670 2003-08-12  Martin Baulig  <martin@ximian.com>
15671
15672         * expression.cs (Indirection.CacheTemporaries): Create the
15673         LocalTemporary with the pointer type, not its element type.
15674
15675 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
15676
15677         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
15678         token was a keyword or not.
15679
15680         Add `error' options where an IDENTIFIER was expected;  Provide
15681         CheckToken and CheckIdentifierToken convenience error reporting
15682         functions. 
15683
15684         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
15685
15686         * decl.cs: Rename `NamespaceEntry Namespace' public field into
15687         NameSpaceEntry NameSpaceEntry.
15688
15689         (LookupInterfaceOrClass): Avoid creating a full qualified name
15690         from namespace and name: avoid doing lookups when we know the
15691         namespace is non-existant.   Use new Tree.LookupByNamespace which
15692         looks up DeclSpaces based on their namespace, name pair.
15693
15694         * driver.cs: Provide a new `parser verbose' to display the
15695         exception thrown during parsing.  This is turned off by default
15696         now, so the output of a failure from mcs is more graceful.
15697
15698         * namespace.cs: Track all the namespaces defined in a hashtable
15699         for quick lookup.
15700
15701         (IsNamespace): New method
15702
15703 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
15704
15705         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
15706         we know that we need to concatenate (full typename can never be
15707         null). 
15708
15709         * class.cs: ditto.
15710
15711         * statement.cs: Use a bitfield;  Do not initialize to null things
15712         which are done by the constructor by default.
15713
15714         * cs-parser.jay: bug fix, parameter was 4, not 3.
15715
15716         * expression.cs: Just use the property;
15717
15718         * statement.cs: No need for GetVariableInfo method.
15719
15720 2003-08-08  Martin Baulig  <martin@ximian.com>
15721
15722         * flowanalysis.cs (FlowReturns): This is now nested in the
15723         `FlowBranching' class.
15724         (MyBitVector): Moved this here from statement.cs.
15725         (FlowBranching.SiblingType): New enum type.
15726         (FlowBranching.CreateSibling): Added `SiblingType' argument.
15727
15728 2003-08-07  Martin Baulig  <martin@ximian.com>
15729
15730         * flowanalysis.cs (FlowBranchingType): This is now nested in the
15731         `FlowBranching' class and called `BranchingType'.
15732
15733 2003-08-07  Martin Baulig  <martin@ximian.com>
15734
15735         * flowanalysis.cs: Moved all the control flow analysis code into
15736         its own file.
15737
15738 2003-08-07  Martin Baulig  <martin@ximian.com>
15739
15740         * assign.cs (Assign.DoResolve): `target' must either be an
15741         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
15742         #37319.
15743
15744 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
15745
15746         * expression.cs (BinaryMethod): This kind of expression is created by the
15747         Binary class if it determines that the operator has to be handled
15748         by a method.
15749
15750         (BinaryDelegate): This kind of expression is created if we are
15751         dealing with a + or - operator on delegates.
15752
15753         (Binary): remove method, argumetns, and DelegateOperator: when
15754         dealing with methods, 
15755
15756         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
15757
15758         * statement.cs (Block): use bitfields for the three extra booleans
15759         we had in use.   Remove unused topblock parameter.
15760
15761         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
15762
15763         * assign.cs: Drop extra unneeded tests.
15764
15765 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
15766
15767         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
15768
15769         * statement.cs (Foreach): Use VariableStorage instead of
15770         LocalBuilders.   
15771
15772         * codegen.cs (VariableStorage): New class used by clients that
15773         require a variable stored: locals or fields for variables that
15774         need to live across yield.
15775
15776         Maybe provide a convenience api for EmitThis+EmitLoad?
15777
15778         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
15779         these bad boys.
15780
15781 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
15782
15783         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
15784         RemapParameterLValue): New methods that are used to turn a
15785         precomputed FieldInfo into an expression like this:
15786
15787                 instance.FieldInfo
15788
15789         The idea is to use this instead of making LocalVariableReference
15790         have more than one meaning.
15791
15792         * cs-parser.jay: Add error production to BASE.
15793
15794         * ecore.cs: Deal with TypeManager.GetField returning null, which
15795         is now a valid return value.
15796
15797         (FieldExprNoAddress): New expression for Fields whose address can
15798         not be taken.
15799
15800         * expression.cs (LocalVariableReference): During the resolve
15801         phases, create new expressions if we are in a remapping context.
15802         Remove code that dealt with remapping here.
15803
15804         (ParameterReference): same.
15805
15806         (ProxyInstance): New expression, like the `This' expression, but
15807         it is born fully resolved.  We know what we are doing, so remove
15808         the errors that are targeted to user-provided uses of `this'.
15809
15810         * statement.cs (Foreach): our variable is now stored as an
15811         Expression;  During resolution, follow the protocol, dont just
15812         assume it will return this.
15813
15814 2003-08-06  Martin Baulig  <martin@ximian.com>
15815
15816         * support.cs (SeekableStreamReader.cs): New public class.
15817
15818         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
15819         SeekableStreamReader instead of the normal StreamReader.
15820
15821 2003-08-04  Martin Baulig  <martin@ximian.com>
15822
15823         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
15824         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
15825         deambiguate casts and delegate invocations.
15826         (parenthesized_expression): Use the new tokens to ensure this is
15827         not a cast of method invocation.
15828
15829         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
15830         when reading a `)' and Deambiguate_CloseParens () was previously
15831         called.
15832
15833         * expression.cs (ParenthesizedExpression): New class.  This is
15834         just used for the CS0075 test.
15835         (Binary.DoResolve): Check for CS0075.   
15836
15837 2003-07-29  Ravi Pratap  <ravi@ximian.com>
15838
15839         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
15840         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
15841         reference comparison.
15842
15843         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
15844         examine the ReturnType for equality - this is necessary in the
15845         cases of implicit and explicit operators whose signature also
15846         includes the return type.
15847
15848 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
15849
15850         * namespace.cs: Cache the result of the namespace computation,
15851         instead of computing it every time.
15852
15853 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
15854
15855         * decl.cs: Use a global arraylist that we reuse over invocations
15856         to avoid excesive memory consumption.  Reduces memory usage on an
15857         mcs compile by one meg (45 average).
15858
15859         * typemanager.cs (LookupTypeReflection): In .NET pointers are
15860         private, work around that.
15861
15862 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
15863
15864         * literal.cs (IntLiteral): Define Zero and One static literals. 
15865
15866         * cs-parser.jay (integer_literal): use static literals to reduce
15867         memory usage for the most used literals (0, 1 and -1).  211kb
15868         reduced in memory usage.
15869
15870         Replace all calls to `new ArrayList' with `new
15871         ArrayList(4)' which is a good average number for most allocations,
15872         and also requires only 16 bytes of memory for its buffer by
15873         default. 
15874
15875         This reduced MCS memory usage in seven megabytes for the RSS after
15876         bootstrapping.
15877
15878 2003-07-28  Ravi Pratap  <ravi@ximian.com>
15879
15880         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
15881         handle params methods the correct way by forming only one
15882         applicable set with params and normal methods in them. Earlier we
15883         were looking at params methods only if we found no normal methods
15884         which was not the correct thing to do.
15885
15886         (Invocation.BetterFunction): Take separate arguments indicating
15887         when candidate and the best method are params methods in their
15888         expanded form.
15889
15890         This fixes bugs #43367 and #46199.
15891
15892         * attribute.cs: Documentation updates.
15893
15894         (CheckAttribute): Rename to CheckAttributeTarget.
15895         (GetValidPlaces): Rename to GetValidTargets.
15896
15897         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
15898         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
15899
15900         Fixes bug #44468.
15901
15902 2003-07-28  Martin Baulig  <martin@ximian.com>
15903
15904         * class.cs (TypeContainer.DefineMembers): Use the base type's full
15905         name when looking up the base class of a nested class.  Fixes #46977.
15906
15907 2003-07-26  Martin Baulig  <martin@ximian.com>
15908
15909         * expression.cs (Indexers.Indexer): New nested struct; contains
15910         getter, setter and the indexer's type.
15911         (Indexers.Properties): This is now an ArrayList of
15912         Indexers.Indexer's.
15913         (IndexerAccess.DoResolveLValue): Correctly set the type if the
15914         indexer doesn't have any getters.
15915
15916         * assign.cs (Assign.DoResolve): Also do the implicit conversions
15917         for embedded property and indexer assignments.
15918
15919 2003-07-26  Martin Baulig  <martin@ximian.com>
15920
15921         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
15922         preprocessor directive is not the first non-whitespace character
15923         on a line.
15924
15925 2003-07-26  Martin Baulig  <martin@ximian.com>
15926
15927         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
15928         namespace parsing, follow the spec more closely.
15929
15930         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
15931         NamespaceEntry.Lookup().
15932
15933 2003-07-25  Martin Baulig  <martin@ximian.com>
15934
15935         * MethodCore.cs (OverridesSomething): New public field; it's set
15936         from TypeContainer.DefineMembers if this method overrides
15937         something (which doesn't need to be a method).  Fix #39462.
15938
15939 2003-07-25  Ravi Pratap  <ravi@ximian.com>
15940
15941         * typemanager.cs (GetMembers): Ensure that the list of members is
15942         reversed. This keeps things in sync.
15943
15944         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
15945         find an AttributeUsage attribute.
15946
15947         * expression.cs (Invocation.OverloadResolve): Perform the check
15948         which disallows Invoke to be directly called on a Delegate.
15949
15950         (Error_InvokeOnDelegate): Report error cs1533.
15951
15952 2003-07-25  Martin Baulig  <martin@ximian.com>
15953
15954         * expression.cs (Indexers.GetIndexersForType): Only look in the
15955         interface hierarchy if the requested type is already an
15956         interface.  Fixes #46788 while keeping #46502 fixed.
15957
15958 2003-07-25  Martin Baulig  <martin@ximian.com>
15959
15960         * class.cs (TypeContainer.DefineMembers): Check whether all
15961         readonly fields have been assigned and report warning CS0649 if
15962         not.
15963
15964         * statement.cs (LocalInfo.IsFixed): Always return true if this is
15965         a valuetype.
15966
15967 2003-07-24  Ravi Pratap  <ravi@ximian.com>
15968
15969         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
15970         returned from GetMethods to make things consistent with the
15971         assumptions MCS makes about ordering of methods.
15972
15973         This should comprehensively fix bug #45127 and it does :-)
15974
15975         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
15976         ordering is actually reverse.
15977
15978         * Clean up some debug messages I left lying around.
15979
15980         * interface.cs (Populate*): Get rid of code which emits attributes
15981         since the stage in which we emit attributes is the 'Emit' stage,
15982         not the define stage.
15983
15984         (Emit): Move attribute emission for interface members here.
15985
15986 2003-07-22  Ravi Pratap  <ravi@ximian.com>
15987
15988         * expression.cs (Invocation.OverloadResolve): Follow the spec more
15989         closely: we eliminate methods in base types when we have an
15990         applicable method in a top-level type.
15991
15992         Please see section 14.5.5.1 for an exact description of what goes
15993         on. 
15994
15995         This fixes bug #45127 and a host of other related to corlib compilation.
15996
15997         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
15998         array is the method corresponding to the top-level type (this is
15999         because of the changes made to icall.c) so we change this
16000         accordingly.
16001
16002         (MethodGroupExpr.Name): This too.
16003
16004         * typemanager.cs (GetElementType): New method which does the right
16005         thing when compiling corlib. 
16006
16007         * everywhere: Make use of the above in the relevant places.
16008
16009 2003-07-22  Martin Baulig  <martin@ximian.com>
16010
16011         * cs-parser.jay (invocation_expression): Moved
16012         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
16013         `cast_expression', but create a InvocationOrCast which later
16014         resolves to either an Invocation or a Cast.
16015
16016         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
16017         method; call this before EmitStatement() to make sure that this
16018         expression can be used as a statement.
16019
16020         * expression.cs (InvocationOrCast): New class; resolves to either
16021         an Invocation or a Cast.
16022
16023         * statement.cs (StatementExpression): Call ResolveStatement() on
16024         the ExpressionStatement before emitting it.
16025
16026 2003-07-21  Martin Baulig  <martin@ximian.com>
16027
16028         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
16029         `ref' and `out' attributes match; fixes #46220.
16030         (MemberAccess.ResolveMemberAccess): You can't reference a type
16031         through an expression; fixes #33180.
16032         (Indexers.GetIndexersForType): Don't return the indexers from
16033         interfaces the class implements; fixes #46502.
16034
16035 2003-07-21  Martin Baulig  <martin@ximian.com>
16036
16037         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
16038         CS0661 checks; fixes bug #30442.
16039
16040 2003-07-21  Martin Baulig  <martin@ximian.com>
16041
16042         * decl.cs (AdditionResult): Added `Error'.
16043
16044         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
16045
16046         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
16047         makes cs0031.cs actually work.
16048
16049 2003-07-20  Martin Baulig  <martin@ximian.com>
16050
16051         * namespace.cs: Fixed that bug which caused a crash when compiling
16052         the debugger's GUI.
16053
16054 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
16055
16056         * typemanager.cs (LookupTypeReflection): Never expose types which
16057         are NotPublic, NestedPrivate, NestedAssembly, or
16058         NestedFamANDAssem.  We used to return these, and later do a check
16059         that would report a meaningful error, but the problem is that we
16060         would not get the real match, if there was a name override.
16061
16062 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
16063
16064         * namespace.cs (Namespace, Name): Do not compute the namespace
16065         name dynamically, compute it in the constructor.  This reduced
16066         memory usage by 1697 KB.
16067
16068         * driver.cs: Use --pause to pause at the end.
16069
16070 2003-07-17  Peter Williams  <peter@newton.cx>
16071
16072         * Makefile: Change the name of the test target so that it doesn't
16073         conflict with the recursive test target.
16074
16075 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
16076
16077         * expression.cs (LocalVariableReference.Emit, EmitAssign,
16078         AddressOf): Do not use EmitThis, that was wrong, use the actual
16079         this pointer.
16080
16081 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
16082
16083         * class.cs (MethodData.Define): While checking if a method is an
16084         interface implementation, improve the test: If we are not public
16085         (use new test here: use the computed MethodAttributes directly,
16086         instead of the parsed modifier flags) check if the `implementing'
16087         method comes from an interface or not.
16088
16089         * pending.cs (VerifyPendingMethods): Slightly better error
16090         message.
16091
16092         * makefile: add test target that does the mcs bootstrap.
16093
16094 2003-07-16  Ravi Pratap  <ravi@ximian.com>
16095
16096         * interface.cs (Define): Do nothing here since there are no
16097         members to populate etc. Move the attribute emission out of here
16098         since this was just totally the wrong place to put it. Attribute
16099         application happens during the 'Emit' phase, not in the 'Define'
16100         phase.
16101
16102         (Emit): Add this method and move the attribute emission here
16103
16104         * rootcontext.cs (EmitCode): Call the Emit method on interface
16105         types too.
16106
16107 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16108
16109         * expression.cs (OverloadResolve): Report error only if Location
16110         is not 'Null' which means that there was a probe going on.
16111
16112 2003-07-14  Martin Baulig  <martin@ximian.com>
16113
16114         * expression.cs (ConditionalLogicalOperator): New public class to
16115         implement user defined conditional logical operators.
16116         This is section 14.11.2 in the spec and bug #40505.
16117
16118 2003-07-14  Martin Baulig  <martin@ximian.com>
16119
16120         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
16121
16122 2003-07-14  Martin Baulig  <martin@ximian.com>
16123
16124         * codegen.cs (EmitContext.InFixedInitializer): New public field.
16125
16126         * ecore.cs (IVariable.VerifyFixed): New interface method.
16127
16128         * expression.cs (Unary.ResolveOperator): When resolving the `&'
16129         operator, check whether the variable is actually fixed.  Fixes bug
16130         #36055.  Set a variable definitely assigned when taking its
16131         address as required by the spec.
16132
16133         * statement.cs (LocalInfo.IsFixed): New field.
16134         (LocalInfo.MakePinned): Set `IsFixed' to true.
16135
16136 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16137
16138         * attribute.cs (Attribute.Resolve): While doing a Member lookup
16139         for .ctors, ensure that we only ask for members declared in the
16140         attribute type (BindingFlags.DeclaredOnly).
16141
16142         Fixes bug #43632.
16143
16144         * expression.cs (Error_WrongNumArguments): Report error 1501
16145         correctly the way CSC does.
16146
16147 2003-07-13  Martin Baulig  <martin@ximian.com>
16148
16149         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
16150         lookup on the fully qualified name, to make things like "X.X" work
16151         where "X.X" is a fully qualified type name, but we also have a
16152         namespace "X" in the using list.  Fixes #41975.
16153
16154 2003-07-13  Martin Baulig  <martin@ximian.com>
16155
16156         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
16157         function. If we're a CompoundAssign, we need to create an embedded
16158         CompoundAssign, not an embedded Assign.
16159         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
16160         Fixes #45854.
16161
16162 2003-07-13  Martin Baulig  <martin@ximian.com>
16163
16164         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
16165         work to fix bug #46088.
16166
16167 2003-07-13  Ravi Pratap <ravi@ximian.com>
16168
16169         * class.cs (Operator.Emit): Do not emit attributes here - it is
16170         taken care of by the Method class that we delegate too. This takes
16171         care of bug #45876.
16172
16173 2003-07-10  Martin Baulig  <martin@ximian.com>
16174
16175         * expression.cs (TypeOfVoid): New class.
16176         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
16177
16178 2003-07-10  Martin Baulig  <martin@ximian.com>
16179
16180         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
16181         bug #35957.
16182
16183 2003-07-10  Martin Baulig  <martin@ximian.com>
16184
16185         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
16186         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
16187
16188         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
16189
16190         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
16191
16192 2003-07-10  Martin Baulig  <martin@ximian.com>
16193
16194         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
16195         of decimal.  Fixes #42850.
16196
16197         NOTE: I also fixed the created byte blob, but this doesn't work on
16198         the MS runtime and csc never produces any byte blobs for decimal
16199         arrays.
16200
16201 2003-07-10  Martin Baulig  <martin@ximian.com>
16202
16203         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
16204         structs; fixes #32068.
16205         (Block.AddChildVariableNames): Fixed #44302.
16206
16207 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16208
16209         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
16210
16211 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16212
16213         * attribute.cs: And this test is onger needed.
16214
16215 2003-07-08  Martin Baulig  <martin@ximian.com>
16216
16217         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
16218         inaccessible types.  Fixes #36313.
16219
16220         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
16221
16222         * namespace.cs (NamespaceEntry): Create implicit entries for all
16223         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
16224         implicit entries for N1.N2 and N1.
16225
16226 2003-07-08  Martin Baulig  <martin@ximian.com>
16227
16228         Rewrote the handling of namespaces to fix a lot of the issues
16229         wrt. `using' aliases etc.
16230
16231         * namespace.cs (Namespace): Splitted this class into a
16232         per-assembly `Namespace' and a per-file `NamespaceEntry'.
16233
16234         * typemanager.cs (TypeManager.IsNamespace): Removed.
16235         (TypeManager.ComputeNamespaces): Only compute namespaces from
16236         loaded assemblies here, not the namespaces from the assembly we're
16237         currently compiling.
16238
16239 2003-07-08  Martin Baulig  <martin@ximian.com>
16240
16241         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
16242
16243 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16244
16245         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
16246         already fixed it.  
16247
16248         I thought about the memory savings here, but LookupTypeReflection
16249         is used under already very constrained scenarios.  Compiling
16250         corlib or mcs only exposes one hit, so it would not really reduce
16251         any memory consumption.
16252
16253 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16254
16255         * typemanager.cs: fixes bug #45889 by only adding public types from
16256         other assemblies to the list of known types.
16257
16258 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16259
16260         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
16261         on the type we resolved.
16262
16263 2003-07-05  Martin Baulig  <martin@ximian.com>
16264
16265         * pending.cs (PendingImplementation.ParentImplements): Don't
16266         create the proxy if the parent is abstract.
16267
16268         * class.cs (TypeContainer.DefineIndexers): Process explicit
16269         interface implementations first.  Fixes #37714.
16270
16271 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
16272
16273         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
16274         defined recursively;  but since we modify the input parameters
16275         (left is set to `this' temporarily), we reset this value if the
16276         left_is_explicit is false, which gives the original semantics to
16277         the code.  
16278
16279         * literal.cs (NullPointer): new class used to represent a null
16280         literal in a pointer context.
16281
16282         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
16283         type is a pointer, use a NullPointer object instead of a
16284         NullLiteral.   Closes 43687
16285
16286         (ExplicitConversion): Convert pointer values using
16287         the conv opcode to the proper type.
16288
16289         * ecore.cs (New): change ValueTypeVariable property into a method,
16290         that returns whether the valuetype is suitable for being used.
16291
16292         * expression.cs (Binary.DoNumericPromotions): Only return if we
16293         the int constant was a valid uint, and we can return both left and
16294         right as uints.  If not, we continue processing, to trigger the
16295         type conversion.  This fixes 39018.
16296
16297         * statement.cs (Block.EmitMeta): During constant resolution, set
16298         the CurrentBlock property on the emitcontext, so that we resolve
16299         constants propertly.
16300
16301 2003-07-02  Martin Baulig  <martin@ximian.com>
16302
16303         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
16304         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
16305
16306         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
16307         than emitting it here.
16308
16309         * statement.cs: Fixed some more flow analysis bugs.
16310
16311 2003-07-02  Martin Baulig  <martin@ximian.com>
16312
16313         * class.cs (MethodData.Define): When implementing interface
16314         methods, set Final unless we're Virtual.
16315
16316         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
16317         check work for interface methods.
16318
16319 2003-07-01  Martin Baulig  <martin@ximian.com>
16320
16321         * ecore.cs (EmitContext.This): Replaced this property with a
16322         GetThis() method which takes a Location argument.  This ensures
16323         that we get the correct error location for a CS0188.
16324
16325 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
16326
16327         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
16328         ImplicitStandardConversion.
16329
16330         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
16331
16332 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
16333
16334         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
16335         optimization.
16336
16337 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
16338
16339         * class.cs (Constructor.Define): Turn off initlocals for unsafe
16340         constructors.
16341
16342         (MethodData.Define): Turn off initlocals for unsafe methods.
16343
16344 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
16345
16346         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
16347         complete;  Fixes #37521.
16348
16349         * delegate.cs: Use Modifiers.TypeAttr to compute the
16350         TypeAttributes, instead of rolling our own.  This makes the flags
16351         correct for the delegates.
16352
16353 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
16354
16355         * class.cs (Constructor.Define): Set the private flag for static
16356         constructors as well.
16357
16358         * cs-parser.jay (statement_expression): Set the return value to
16359         null, to avoid a crash when we catch an error.
16360
16361 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
16362
16363         * cs-parser.jay: Applied patch from Jackson that adds support for
16364         extern and unsafe modifiers to destructor declarations.
16365
16366         * expression.cs: Report error 21 if the user is trying to index a
16367         System.Array.
16368
16369         * driver.cs: Add an error message, suggested by the bug report.
16370
16371         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
16372         if we do not have a ": this ()" constructor initializer.  Fixes 45149
16373
16374 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
16375
16376         * namespace.cs: Add some information to reduce FAQs.
16377
16378 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
16379
16380         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
16381         underlying enumeration types.  Fixes #43915.
16382
16383         * expression.cs: Treat ushort/short as legal values to be used in
16384         bitwise operations.
16385
16386 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
16387
16388         * delegate.cs: transfer custom attributes for paramenters from
16389         the delegate declaration to Invoke and BeginInvoke.
16390
16391 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
16392
16393         * attribute.cs: handle custom marshalers and emit marshal info
16394         for fields, too.
16395
16396 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
16397
16398         * makefile.gnu: Added anonymous.cs to the compiler sources.
16399
16400 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
16401
16402         * iterators.cs: Change the name of the proxy class to include two
16403         underscores.
16404
16405         * cs-parser.jay: Update grammar to include anonymous methods.
16406
16407         * anonymous.cs: new file.
16408
16409 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
16410
16411         * class.cs (Field.Define): Add missing test for pointers and
16412         safety. 
16413
16414 2003-05-27  Ravi Pratap  <ravi@ximian.com>
16415
16416         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
16417         we use the stobj opcode.
16418
16419         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
16420         since it wasn't the correct fix. 
16421
16422         It still is puzzling that we are required to use stobj for IntPtr
16423         which seems to be a ValueType.
16424
16425 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
16426
16427         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
16428         during regular simple name resolution.   Now, the trick is that
16429         instead of returning for processing the simplename, we do a
16430         TypeManager.LookupType (ie, a rooted lookup as opposed to a
16431         contextual lookup type).   If a match is found, return that, if
16432         not, return for further composition.
16433
16434         This fixes long-standing 30485.
16435
16436         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16437         using the address to initialize an object, do an Stobj instead of
16438         using the regular Stelem.
16439
16440         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
16441         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
16442         Because if we are a BaseIndexerAccess that value will be true.
16443         Fixes 43643.
16444
16445         * statement.cs (GotoCase.Resolve): Return after reporting an
16446         error, do not attempt to continue. 
16447
16448         * expression.cs (PointerArithmetic.Emit): If our operand is a
16449         long, convert our constants to match the operand before
16450         multiplying.  Convert to I type before adding.   Fixes 43670.
16451
16452 2003-05-14  Ravi Pratap  <ravi@ximian.com>
16453
16454         * enum.cs (ImplicitConversionExists) : Rename to
16455         ImplicitEnumConversionExists to remove ambiguity. 
16456
16457         * ecore.cs (NullCast): New type of cast expression class which
16458         basically is very similar to EmptyCast with the difference being
16459         it still is a constant since it is used only to cast a null to
16460         something else
16461         (eg. (string) null)
16462
16463         * convert.cs (ImplicitReferenceConversion): When casting a null
16464         literal, we return a NullCast.
16465
16466         * literal.cs (NullLiteralTyped): Remove - I don't see why this
16467         should be around anymore.
16468
16469         The renaming (reported was slightly wrong). Corrections:
16470
16471         ConvertImplicitStandard -> ImplicitConversionStandard
16472         ConvertExplicitStandard -> ExplicitConversionStandard
16473
16474         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
16475         before passing them in !
16476
16477         * convert.cs (ImplicitConversionStandard): When comparing for
16478         equal expr and target types, ensure that expr is not a
16479         NullLiteral.
16480
16481         In general, we must not be checking (expr_type ==
16482         target_type) in the top level conversion methods
16483         (ImplicitConversion, ExplicitConversion etc). This checking is
16484         done in the methods that they delegate to.
16485
16486 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
16487
16488         * convert.cs: Move Error_CannotConvertType,
16489         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
16490         ImplicitNumericConversion, ImplicitConversionExists,
16491         ImplicitUserConversionExists, StandardConversionExists,
16492         FindMostEncompassedType, FindMostSpecificSource,
16493         FindMostSpecificTarget, ImplicitUserConversion,
16494         ExplicitUserConversion, GetConversionOperators,
16495         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
16496         TryImplicitIntConversion, Error_CannotConvertImplicit,
16497         ConvertImplicitRequired, ConvertNumericExplicit,
16498         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
16499         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
16500         its own file.
16501
16502         Perform the following renames:
16503
16504         StandardConversionExists -> ImplicitStandardConversionExists
16505         ConvertImplicit -> ImplicitConversion
16506         ConvertImplicitStandard -> ImplicitStandardConversion
16507         TryImplicitIntConversion -> ImplicitIntConversion
16508         ConvertImplicitRequired -> ImplicitConversionRequired
16509         ConvertNumericExplicit -> ExplicitNumericConversion
16510         ConvertReferenceExplicit -> ExplicitReferenceConversion
16511         ConvertExplicit -> ExplicitConversion
16512         ConvertExplicitStandard -> ExplicitStandardConversion
16513
16514 2003-05-19  Martin Baulig  <martin@ximian.com>
16515
16516         * statement.cs (TypeInfo.StructInfo): Made this type protected.
16517         (TypeInfo): Added support for structs having structs as fields.
16518
16519         * ecore.cs (FieldExpr): Implement IVariable.
16520         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
16521         VariableInfo for the field.
16522
16523 2003-05-18  Martin Baulig  <martin@ximian.com>
16524
16525         * expression.cs (This.DoResolve): Report a CS0027 if we're
16526         emitting a field initializer.
16527
16528 2003-05-18  Martin Baulig  <martin@ximian.com>
16529
16530         * expression.cs (This.ResolveBase): New public function.
16531         (This.DoResolve): Check for CS0188.
16532
16533         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
16534         This.Resolve().
16535
16536         * ecore.cs (MethodGroupExpr.DoResolve): Set the
16537         `instance_expression' to null if we don't have any non-static
16538         methods.
16539
16540 2003-05-18  Martin Baulig  <martin@ximian.com>
16541
16542         Reworked the way how local variables and parameters are handled by
16543         the flow analysis code.
16544
16545         * statement.cs (TypeInfo, VariableMap): New public classes.
16546         (VariableInfo): New public class.  This is now responsible for
16547         checking whether a variable has been assigned.  It is used for
16548         parameters and local variables.
16549         (Block.EmitMeta): Take the InternalParameters as argument; compute
16550         the layout of the flow vectors here.
16551         (Block.LocalMap, Block.ParameterMap): New public properties.
16552         (FlowBranching): The .ctor doesn't get the InternalParameters
16553         anymore since Block.EmitMeta() now computes the layout of the flow
16554         vector.
16555         (MyStructInfo): This class is now known as `StructInfo' and nested
16556         in `TypeInfo'; we don't access this directly anymore.
16557
16558         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
16559         property and removed IsAssigned(), IsFieldAssigned(),
16560         SetAssigned() and SetFieldAssigned(); we now call them on the
16561         VariableInfo so we don't need to duplicate this code everywhere.
16562
16563         * expression.cs (ParameterReference): Added `Block block' argument
16564         to the .ctor.
16565         (LocalVariableReference, ParameterReference, This): The new
16566         VariableInfo class is now responsible for all the definite
16567         assignment stuff.
16568
16569         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
16570         IsParameterAssigned, SetParameterAssigned): Removed.
16571
16572 2003-05-18  Martin Baulig  <martin@ximian.com>
16573
16574         * typemanager.cs (InitCoreTypes): Try calling
16575         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
16576         the 3-args-version.  Corlib now also needs our `void_type'.
16577         (GetMethod): Added overloaded version which takes an optional
16578         `bool report_errors' to allow lookups of optional methods.
16579
16580 2003-05-12  Martin Baulig  <martin@ximian.com>
16581
16582         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
16583         only used for locals and not for parameters.
16584
16585 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
16586
16587         * support.cs (InternalParameters.ParameterType): Return the
16588         ExternalType of the parameter.
16589
16590         * parameter.cs (Parameter.ExternalType): drop the two arguments,
16591         they were unused.
16592
16593 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
16594
16595         * class.cs (MethodData.Define): Do not set the `newslot' on
16596         interface members, if they are also flagged as "override".
16597
16598         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
16599         better code for ++i and i++.  This only works for static fields
16600         and local variables.
16601
16602         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
16603         want to pull the DeclSpace out of the builder_to_declspace instead
16604         of the TypeBuilder (like in TypeContainer.FindMembers).
16605
16606         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
16607         instead of LookupTypeContainer.  Fixes the crash on .NET for
16608         looking up interface members.
16609
16610         * const.cs: Create our own emit context during the Definition
16611         stage, so that constants are evaluated in the proper context, when
16612         a recursive definition happens.
16613
16614 2003-05-11  Martin Baulig  <martin@ximian.com>
16615
16616         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
16617         new block for a switch section.
16618         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
16619         the adding/lookup in the switch block.  Fixes #39828.
16620
16621 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
16622
16623         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
16624         functionality: I needed to convert the data after I had performed
16625         the add/sub operation into the operands type size.
16626
16627         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
16628         pass the type for the box operation, otherwise the resulting
16629         object would have been of type object.
16630
16631         (BoxedCast): Add constructor to specify the type to box as.
16632
16633 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
16634
16635         * iterators.cs: I was reusing the `count' variable inadvertently,
16636         take steps to not allow this to happen.
16637
16638 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
16639
16640         * attribute.cs (Attribute.Resolve): Params attributes are encoded
16641         by creating an array at the point where the params starts and
16642         putting all those arguments there, then adjusting the size of the
16643         array.
16644
16645 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
16646
16647         * expression.cs (New.AddressOf): Implement interface
16648         IMemoryLocation.  This is used when the `new' operator is used in
16649         the context of an invocation to a method on a value type.
16650
16651         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
16652         example. 
16653
16654         * namespace.cs: Also check the using aliases here.
16655
16656         * driver.cs: Move the test for using validity after the types have
16657         been entered, so we do a single pass that also includes the using
16658         aliases. 
16659
16660         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
16661         in the regular case.   CreateSiblingForFinally is doing extra
16662         error checking.
16663
16664         * attribute.cs (GetAttributeArgumentExpression): Store the result
16665         on an out value, and use the return value to indicate failure
16666         instead of using null (which is a valid return for Constant.GetValue).
16667
16668         * statement.cs: Perform the analysis flow for the increment
16669         portion after the statement, because this will be the real flow of
16670         execution.  Fixes #42385
16671
16672         * codegen.cs (EmitContext.EmitArgument,
16673         EmitContext.EmitStoreArgument): New helper functions when the
16674         RemapToProxy flag is set.
16675
16676         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
16677         function.
16678
16679         Add support for remapping parameters. 
16680
16681         * iterators.cs: Propagate parameter values;  Store parameter
16682         values in the proxy classes.
16683
16684 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
16685
16686         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
16687         need a proxy reference;  I do not know what I was thinking
16688
16689         * cs-parser.jay (constructor_initializer): catch another error,
16690         and display nice message.
16691
16692         (field_declaration): catch void field declaration
16693         to flag a better error. 
16694
16695         * class.cs (MemberBase.CheckBase): Report an error instead of a
16696         warning if a new protected member is declared in a struct. 
16697         (Field.Define): catch the error of readonly/volatile.
16698
16699         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
16700
16701         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
16702         volatile variable is taken
16703
16704 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
16705
16706         * statement.cs (Fixed.Resolve): Report an error if we are not in
16707         an unsafe context.
16708
16709 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
16710
16711         * typemanager.cs: reuse the code that handles type clashes for
16712         delegates and enumerations.
16713
16714         * class.cs (Report28): Always report.
16715
16716         * expression.cs (EncodeAsAttribute): Allow nulls here.
16717
16718 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
16719
16720         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
16721         the functionality for testing whether an expression is valid for
16722         an attribute here.  Also handle the case of arrays of elements
16723         being stored. 
16724
16725         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
16726         encoding a linear array into an array of objects that are suitable
16727         to be passed to an CustomAttributeBuilder.
16728
16729         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
16730
16731         * ecore.cs: (FieldExpr): Handle field remapping here.
16732
16733         * iteratators.cs: Pass the instance variable (if the method is an
16734         instance method) to the constructors, so we can access the field
16735         variables on the class.
16736
16737         TODO: Test this with structs.  I think the THIS variable on
16738         structs might have to be a pointer, and not a refenrece
16739
16740 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
16741
16742         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
16743         local variables to fields in a proxy class.
16744
16745         * iterators.cs (PopulateProxy): Rename our internal fields to
16746         <XXX>.  
16747         Create a <THIS> field if we are an instance method, so we can
16748         reference our parent container variables.
16749         (MapVariable): Called back from the EmitContext code to enter a
16750         new variable to field mapping into the proxy class (we just create
16751         a FieldBuilder).
16752
16753         * expression.cs
16754         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
16755         for using the remapped locals to fields.
16756
16757         I placed the code here, because that gives the same semantics to
16758         local variables, and only changes the Emit code.
16759
16760         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
16761         statements inside iterators.
16762         (VariableInfo): Add a FieldBuilder for the cases when we are
16763         remapping local variables to fields in a proxy class
16764
16765         * ecore.cs (SimpleNameResolve): Avoid testing two times for
16766         current_block != null.
16767
16768         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
16769         not cope with strings, as it has been moved to the
16770         TableSwitchEmit.  Fixed bug in switch generation.
16771
16772         * expression.cs (New.DoResolve): Provide more context for the user
16773         when reporting an error.
16774
16775         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
16776         pointers. 
16777
16778         * expression.cs (MemberAccess.DoResolve): When we get a type back,
16779         check the permissions for it.  Note than in a type-resolution
16780         context the check was already present in DeclSpace.ResolveType,
16781         but was missing from the MemberAccess.
16782
16783         (ArrayCreation.CheckIndices): warn if the user has
16784         more nested levels of expressions, but there are no more
16785         dimensions specified.  Avoids crash on bug 41906.
16786
16787 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
16788
16789         * statement.cs (Block): replace Implicit bool, for a generic
16790         flags.   
16791         New flag: `Unchecked'.  This is used during the EmitMeta phase
16792         (which is out-of-line with the regular Resolve/Emit process for a
16793         statement, as this is done ahead of time, but still gets a chance
16794         to call constant resolve).
16795
16796         (Block.Flags): new enum for adding a new flag.
16797
16798         (Block.EmitMeta): track the state of unchecked.
16799
16800         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
16801         to enable constant resolution to work there as well.
16802
16803 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
16804
16805         * typemanager.cs (ienumerable_type): Also look up
16806         System.Collections.IEnumerable. 
16807
16808 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
16809
16810         TODO: Test more than one conditional per method.
16811
16812         * class.cs (Indexer.Define): Report the location where the user is
16813         referencing the unsupported feature.
16814
16815         (MethodData): Overload the use of `conditionals' to
16816         minimize the creation of needless ArrayLists.   This saves roughly
16817         212kb on my machine.
16818
16819         (Method): Implement the new IIteratorContainer interface.
16820         (Method.SetYields): Implement the method by setting the ModFlags
16821         to contain METHOD_YIELDS.
16822
16823         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
16824         which just got set to null.
16825
16826         * iterators.cs: New file.
16827
16828         (Yield, YieldBreak): New statements.
16829
16830         * statement.cs (Return.Resolve): Flag an error if we are used in
16831         an iterator method.
16832
16833         * codegen.cs (InIterator): New flag set if the code is being
16834         compiled in an iterator method.
16835
16836         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
16837         internal modifier, and we just use it to avoid adding extra
16838         fields, as this is seldom used.  
16839
16840         * cs-parser.jay: Add yield_statement (yield and yield break).
16841
16842         * driver.cs: New flag -v2 to turn on version 2 features. 
16843
16844         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
16845         hashtable when v2 is enabled.
16846
16847 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
16848
16849         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
16850         there is already a namespace defined with this name.
16851
16852         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
16853         people upgraded their corlibs.
16854
16855         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
16856         always use fully qualified types, no need to use the compiler
16857         front end.
16858
16859         (TypeManager.IsNamespace): Use binarysearch.
16860
16861         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
16862         AddDelegate): I did not quite use the new IsValid API properly: I
16863         have to pass the short-name and the fullname.  I was passing only
16864         the basename instead of the fullname sometimes. 
16865
16866         (TypeContainer.DefineType): call NamespaceClash.
16867
16868         * interface.cs (Interface.DefineType): use NamespaceClash before
16869         defining the type.
16870
16871         * delegate.cs (Delegate.DefineType): use NamespaceClash before
16872         defining the type.
16873
16874         * enum.cs: (Enum.DefineType): use NamespaceClash before
16875         defining the type.
16876
16877         * typemanager.cs (: 3-line patch that gives us some tasty 11%
16878         speed increase.  First, use the negative_hits cache when we get a
16879         negative.  Second, add the type with its full original name
16880         instead of the new . and + encoded name (reflection uses + to
16881         separate type from a nested type).  Use LookupTypeReflection
16882         directly which bypasses the type->name hashtable (that we already
16883         know does not contain the type.
16884
16885         * decl.cs (DeclSpace.ResolveTypeExpr): track the
16886         location/container type. 
16887
16888         * driver.cs: When passing utf8, use directly the UTF8Encoding.
16889
16890 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
16891
16892         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
16893
16894         * delegate.cs (NewDelegate.Resolve): Test whether an instance
16895         method is being referenced in the method group from a static
16896         context, and report error 120 if so.
16897
16898         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
16899         Error118. 
16900
16901         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
16902         is created, we create the A namespace).
16903
16904         * cs-parser.jay: A namespace also introduces a DeclarationFound.
16905         Fixes #41591
16906
16907 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
16908
16909         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
16910         invocation to ModuleBuilder.GetType with the same values will
16911         return a new type instance, so we need to cache its return
16912         values. 
16913
16914         * expression.cs (Binary.ResolveOperator): Only allow the compare
16915         operators on enums if they are of the same type.
16916
16917         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
16918         types of ValueType on their own case.  Before we were giving them
16919         the same treatment as objects.
16920
16921         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
16922         fullname.  Short name is used to compare against container name.
16923         Fullname is used to check against defined namespace names.
16924
16925         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
16926         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
16927
16928         (Method.CheckBase): Call parent.
16929         (MemberBase.CheckBase): Check for protected members on sealed
16930         classes.
16931         (PropertyBase.CheckBase): Call parent.
16932         (Field.Define): Call parent.
16933
16934         * report.cs: Negative error codes are now mapped to 8000 - code,
16935         so that the display is render more nicely.
16936
16937         * typemanager.cs: Do not use try/catch, instead report a regular
16938         error. 
16939
16940         (GetPointerType, GetReferenceType): These methods provide
16941         mechanisms to obtain the T* and T& from a T.  We had the code
16942         previously scattered around the code base, and it also used
16943         TypeManager.LookupType that would go through plenty of caches.
16944         This one goes directly to the type source.
16945
16946         In some places we did the Type.GetType followed by
16947         ModuleBuilder.GetType, but not in others, so this unifies the
16948         processing as well.
16949
16950         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
16951         statements now that we have namespace information.
16952
16953         * typemanager.cs (IsNamespace): New method, returns whether the
16954         string presented is a namespace or not.
16955
16956         (ComputeNamespaces): New public entry point, computes the list of
16957         available namespaces, using the GetNamespaces API call in Mono, or
16958         the slower version in MS.NET.   
16959
16960         Now before we start the semantic analysis phase, we have a
16961         complete list of namespaces including everything that the user has
16962         provided.
16963
16964         Deleted old code to cache namespaces in .nsc files.
16965
16966 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
16967
16968         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
16969         class/struct location definition Location for the implicit
16970         constructor location.
16971
16972         (Operator.Define): Use the location of the operator for the
16973         implicit Method definition.
16974
16975         (Constructor.Emit): use the constructor location for the implicit
16976         base initializer constructor.
16977
16978         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
16979         and the Expression class now contains two new methods:
16980
16981         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
16982         isolate type lookup from the rest of the resolution process.
16983
16984         Since we use Expressions to hold type definitions due to the way
16985         we parse the input we have historically overloaded Resolve to
16986         perform the Type lookups if a special flag is passed.  Now this is
16987         eliminated and two methods take their place. 
16988
16989         The differences in the two methods between xStep and xTerminal is
16990         that xStep is involved in our current lookup system that uses
16991         SimpleNames to compose a name, while xTerminal is used just to
16992         catch the case where the simplename lookup failed.
16993
16994 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
16995
16996         * expression.cs (ResolveMemberAccess): Remove redundant code.
16997         TypeExpr expressions are always born fully resolved.
16998
16999         * interface.cs (PopulateMethod): Do not lookup the types twice.
17000         We were doing it once during SemanticAnalysis and once during
17001         PopulateMethod.
17002
17003         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
17004         in local variable type definitions, were being returned as a
17005         SimpleName (we decomposed everything into a string), that is
17006         because primary_expression was being used instead of a type in the
17007         grammar (reduce/reduce conflicts).
17008
17009         The part that was wrong is that we converted the expression into a
17010         string (an oversimplification in one hand, compounded with primary
17011         expressions doing string concatenation).
17012
17013         So things like:
17014
17015         A.B.C [] x;
17016
17017         Would return "A.B.C[]" as a SimpleName.  This stopped things like
17018         using clauses from working on this particular context.  And a type
17019         was being matched directly against "A.B.C[]".
17020
17021         We now use the correct approach, and allow for ComposedCast to be
17022         part of the unary expression.  So the "A.B.C []" become a composed
17023         cast of "A.B.C" (as a nested group of MemberAccess with a
17024         SimpleName at the end) plus the rank composition "[]". 
17025
17026         Also fixes 35567
17027
17028 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
17029
17030         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
17031         for the access level checking.
17032
17033         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
17034         `TypeContainer container', because I kept getting confused when I
17035         was debugging this code.
17036
17037         * expression.cs (Indexers): Instead of tracking getters/setters,
17038         we now track them in parallel.  We create one arraylist less, but
17039         most importantly it is possible now for the LValue code to find a
17040         matching get for a set.
17041
17042         (IndexerAccess.DoResolveLValue): Update the code.
17043         GetIndexersForType has been modified already to extract all the
17044         indexers from a type.  The code assumed it did not.
17045
17046         Also make the code set the correct return type for the indexer.
17047         This was fixed a long time ago for properties, but was missing for
17048         indexers.  It used to be void_type.
17049
17050         (Binary.Emit): Test first for doubles instead of
17051         floats, as they are more common.
17052
17053         (Binary.EmitBranchable): Use the .un version of the branch opcodes
17054         when dealing with floats and the <=, >= operators.  This fixes bug
17055         #39314 
17056
17057         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
17058         to load the array value by emitting a load on the foreach variable
17059         type.  This was incorrect.  
17060
17061         We now emit the code to load an element using the the array
17062         variable type, and then we emit the conversion operator.
17063
17064         Fixed #40176
17065
17066 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
17067
17068         * attribute.cs: Avoid allocation of ArrayLists in the common case.
17069
17070 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
17071
17072         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
17073         test for protection before we test for signatures. 
17074
17075         (MethodSignature.ToString): implement.
17076
17077         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
17078         to the case where we reduced into a LongConstant.
17079
17080         * decl.cs (CheckAccessLevel): If the type is an array, we can not
17081         depend on whether the information is acurrate, because the
17082         Microsoft runtime will always claim that the array type is public,
17083         regardless of the real state.
17084
17085         If the type is a pointer, another problem happens: the type is
17086         reported as non-public in Microsoft.  
17087
17088         In both cases we have to call CheckAccessLevel recursively with
17089         the underlying type as the argument to be tested.
17090
17091 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
17092
17093         * assign.cs (Assign.Emit): If we are dealing with a compound
17094         assignment expression, we should use the code path that stores the
17095         intermediate result in a temporary value.  This fixes #40903.
17096
17097         *expression.cs (Indirection.ToString): Provide ToString method for
17098         debugging. 
17099
17100 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
17101
17102         * class.cs: Null out fields holding references to Block objects so
17103         they can be garbage collected.
17104
17105         * expression.cs (OverloadResolve): Remove unused local.
17106
17107 2003-04-07  Martin Baulig  <martin@ximian.com>
17108
17109         * codegen.cs (EmitContext.CurrentFile): New public field.
17110         (EmitContext.Mark): Use the CurrentFile to check whether the
17111         location is in the correct file.
17112         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
17113
17114 2003-04-07  Martin Baulig  <martin@ximian.com>
17115
17116         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
17117
17118         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
17119         location.  [FIXME: The location argument which gets passed to this
17120         method is sometimes wrong!]
17121
17122 2003-04-07  Nick Drochak <ndrochak@gol.com>
17123
17124         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
17125
17126 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
17127
17128         * expression.cs (Indirection.EmitAssign): We were using the
17129         temporary, but returning immediately instead of continuing the
17130         EmitAssing flow.
17131
17132 2003-04-06  Martin Baulig  <martin@ximian.com>
17133
17134         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
17135         if it's a nested child, but also deriving from the outer class.
17136         See test 190.cs.
17137
17138         * typemanager.cs (IsNestedChildOf): Make this work if it's a
17139         nested child, but also deriving from the outer class.  See
17140         test-190.cs.
17141         (FilterWithClosure): We may access private members of the outer
17142         class if we're a nested child and deriving from the outer class.
17143         (RealMemberLookup): Only set `closure_private_ok' if the
17144         `original_bf' contained BindingFlags.NonPublic.
17145
17146 2003-04-05  Martin Baulig  <martin@ximian.com>
17147
17148         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
17149
17150 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
17151
17152         * class.cs (Event.Define): Do not allow abstract events to have
17153         initializers. 
17154
17155 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
17156
17157         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
17158         block in event declarations.
17159
17160         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
17161         value type, get its address.
17162
17163         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
17164         leaving a class on the stack instead of a boolean value (int
17165         0/1).  Change the code so we compare against null, and then the
17166         result against zero.
17167
17168         * class.cs (TypeContainer.GetClassBases): We were checking for the
17169         parent class being sealed too late.
17170
17171         * expression.cs (Binary.Emit): For <= and >= when dealing with
17172         floating point values, use cgt.un and clt.un instead of cgt and
17173         clt alone.
17174
17175 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
17176
17177         * statement.cs: Apply the same optimization as MS: skip the 
17178         GetEnumerator returning an IEnumerator, and use the one returning a 
17179         CharEnumerator instead. This allows us to avoid the try-finally block 
17180         and the boxing.
17181
17182 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
17183
17184         * cs-parser.jay: Attributes cannot be applied to
17185                          namespaces. Fixes #40473
17186
17187 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17188
17189         * class.cs:
17190         (Add*): check if the name is valid using the full name for constants,
17191         fields, properties and events.
17192
17193 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
17194
17195         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
17196         char constants to be part of the enumeration.
17197
17198         * expression.cs (Conditional.DoResolve): Add support for operator
17199         true. Implements the missing functionality from 14.12
17200
17201         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
17202         operator true/false as required by the spec.
17203
17204         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
17205         implicit conversion to boolean.
17206
17207         * statement.cs (Statement.ResolveBoolean): A boolean expression is
17208         also one where the type implements `operator true'. 
17209
17210         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
17211         get an expression that will invoke operator true based on an
17212         expression.  
17213
17214         (GetConversionOperators): Removed the hack that called op_True
17215         here.  
17216
17217         (Expression.ResolveBoolean): Move this from Statement.
17218
17219 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
17220
17221         * ecore.cs (FieldExpr): do not allow initialization of initonly
17222         fields on derived classes
17223
17224 2003-03-13  Martin Baulig  <martin@ximian.com>
17225
17226         * statement.cs (Block.Emit): Call ig.BeginScope() and
17227         ig.EndScope() when compiling with debugging info; call
17228         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
17229
17230 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
17231
17232         * expression.cs (Indexers): Do not construct immediately, allow
17233         for new members to be appended as we go.  Fixes 38143
17234
17235 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17236
17237         * expression.cs: save/restore context when resolving an unchecked
17238         expression.
17239
17240 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
17241
17242         * cfold.cs: Catch division by zero in modulus operator during
17243         constant folding.
17244
17245 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
17246
17247         * interface.cs (Interface.DefineMembers): Avoid defining members
17248         twice. 
17249
17250 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
17251
17252         * driver.cs: handle the +/- options for -noconfig
17253
17254         * statement.cs (Unckeched.Resolve): Also track the state of
17255         unchecked in the Resolve phase.
17256
17257 2003-02-27  Martin Baulig  <martin@ximian.com>
17258
17259         * ecore.cs (Expression.MemberLookup): Don't create a
17260         MethodGroupExpr for something which is not a method.  Fixes #38291.
17261
17262 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
17263
17264         * class.cs (MemberBase.CheckParameters): Also check that the type
17265         is unmanaged if it is a pointer.
17266
17267         * expression.cs (SizeOf.Resolve): Add location information.
17268
17269         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
17270         a managed type is declared.
17271
17272         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
17273         parameter modifiers as well.  Fixes bug 38606
17274
17275         * class.cs: Very sad.  Am backing out the speed up changes
17276         introduced by the ArrayList -> Array in the TypeContainer, as they
17277         were not actually that much faster, and introduced a bug (no error
17278         reports on duplicated methods).
17279
17280         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
17281         source first, this will guarantee that we have a valid expression
17282         before calling in lower levels functions that will require a
17283         resolved object.  Then use this original_source in the
17284         target.ResolveLValue instead of the original source that was
17285         passed to us.
17286
17287         Another change.  Use target.Resolve instead of LValueResolve.
17288         Although we are resolving for LValues, we will let the Assign code
17289         take care of that (it will be called again from Resolve).  This
17290         basically allows code like this:
17291
17292         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
17293         class Y { void A (X x) { x [0] += o; }
17294
17295         The problem was that the indexer was trying to resolve for
17296         set_Item (idx, object o) and never finding one.  The real set_Item
17297         was set_Item (idx, X).  By delaying the process we get the right
17298         semantics. 
17299
17300         Fixes bug 36505
17301
17302 2003-02-23  Martin Baulig  <martin@ximian.com>
17303
17304         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
17305         while calling DoEmit ().
17306
17307         * codegen.cs (EmitContext.Mark): Don't mark locations in other
17308         source files; if you use the #line directive inside a method, the
17309         compiler stops emitting line numbers for the debugger until it
17310         reaches the end of the method or another #line directive which
17311         restores the original file.
17312
17313 2003-02-23  Martin Baulig  <martin@ximian.com>
17314
17315         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
17316
17317 2003-02-23  Martin Baulig  <martin@ximian.com>
17318
17319         * statement.cs (Block.AddChildVariableNames): We need to call this
17320         recursively, not just for our immediate children.
17321
17322 2003-02-23  Martin Baulig  <martin@ximian.com>
17323
17324         * class.cs (Event.Define): Always make the field private, like csc does.
17325
17326         * typemanager.cs (TypeManager.RealMemberLookup): Make events
17327         actually work, fixes bug #37521.
17328
17329 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
17330
17331         * delegate.cs: When creating the various temporary "Parameters"
17332         classes, make sure that we call the ComputeAndDefineParameterTypes
17333         on those new parameters (just like we do with the formal ones), to
17334         allow them to be resolved in the context of the DeclSpace.
17335
17336         This fixes the bug that Dick observed in Bugzilla #38530.
17337
17338 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
17339
17340         * expression.cs (ResolveMemberAccess): When resolving a constant,
17341         do not attempt to pull a constant if the value was not able to
17342         generate a valid constant.
17343
17344         * const.cs (LookupConstantValue): Do not report more errors than required.
17345
17346 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17347
17348         * expression.cs: fixes bug #38328.
17349
17350 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17351
17352         * class.cs: Changed all the various members that can be part of a
17353         class from being an ArrayList to be an Array of the right type.
17354         During the DefineType type_list, interface_list, delegate_list and
17355         enum_list are turned into types, interfaces, delegates and enums
17356         arrays.  
17357
17358         And during the member population, indexer_list, event_list,
17359         constant_list, field_list, instance_constructor_list, method_list,
17360         operator_list and property_list are turned into their real arrays.
17361
17362         Although we could probably perform this operation earlier, for
17363         good error reporting we need to keep the lists and remove the
17364         lists for longer than required.
17365
17366         This optimization was triggered by Paolo profiling the compiler
17367         speed on the output of `gen-sample-program.pl' perl script. 
17368
17369         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
17370         not crash in methods like MemberLookupFailed that use this field.  
17371
17372         This problem arises when the compiler fails to resolve a type
17373         during interface type definition for example.
17374
17375 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17376
17377         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
17378         inherit from System.Object, so we have to stop at null, not only
17379         when reaching System.Object.
17380
17381 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
17382
17383         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
17384         DeclaredOnly because the parent indexer might have had a different
17385         name, but did not loop until the top of the hierarchy was reached.
17386
17387         The problem this one fixes is 35492: when a class implemented an
17388         indexer from an interface, we were getting the interface method
17389         (which was abstract) and we were flagging an error (can not invoke
17390         abstract method).
17391
17392         This also keeps bug 33089 functioning, and test-148 functioning.
17393
17394         * typemanager.cs (IsSpecialMethod): The correct way of figuring
17395         out if a method is special is to see if it is declared in a
17396         property or event, or whether it is one of the predefined operator
17397         names.   This should fix correctly #36804.
17398
17399 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
17400
17401         The goal here is to remove the dependency on EmptyCast.Peel ().
17402         Killing it completely.
17403
17404         The problem is that currently in a number of places where
17405         constants are expected, we have to "probe" for an EmptyCast, and
17406         Peel, which is not the correct thing to do, as this will be
17407         repetitive and will likely lead to errors. 
17408
17409         The idea is to remove any EmptyCasts that are used in casts that
17410         can be reduced to constants, so we only have to cope with
17411         constants. 
17412
17413         This bug hunt was triggered by Bug 37363 and the desire to remove
17414         the duplicate pattern where we were "peeling" emptycasts to check
17415         whether they were constants.  Now constants will always be
17416         constants.
17417
17418         * ecore.cs: Use an enumconstant here instead of wrapping with
17419         EmptyCast.  
17420
17421         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
17422         throwing me off.  By handling this we can get rid of a few hacks.
17423
17424         * statement.cs (Switch): Removed Peel() code.
17425
17426 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
17427
17428         * class.cs: Location information for error 508
17429
17430         * expression.cs (New.DoResolve): Add a guard against double
17431         resolution of an expression.  
17432
17433         The New DoResolve might be called twice when initializing field
17434         expressions (see EmitFieldInitializers, the call to
17435         GetInitializerExpression will perform a resolve on the expression,
17436         and later the assign will trigger another resolution
17437
17438         This leads to bugs (#37014)
17439
17440         * delegate.cs: The signature for EndInvoke should contain any ref
17441         or out parameters as well.  We were not doing this in the past. 
17442
17443         * class.cs (Field.Define): Do not overwrite the type definition
17444         inside the `volatile' group.  Turns out that volatile enumerations
17445         were changing the type here to perform a validity test, which
17446         broke conversions. 
17447
17448 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
17449
17450         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
17451         and structs, we do not want to load the instance variable
17452
17453         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
17454         enum_type has to be handled like an object reference (implicit
17455         conversions exists from this to object), but the regular IsClass
17456         and IsValueType tests will never return true for this one.
17457
17458         Also we use TypeManager.IsValueType instead of type.IsValueType,
17459         just for consistency with the rest of the code (this is only
17460         needed if we ever use the construct exposed by test-180.cs inside
17461         corlib, which we dont today).
17462
17463 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
17464
17465         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
17466         just InternalCall.
17467
17468 2003-02-09  Martin Baulig  <martin@ximian.com>
17469
17470         * namespace.cs (Namespace..ctor): Added SourceFile argument.
17471         (Namespace.DefineNamespaces): New static public method; this is
17472         called when we're compiling with debugging to add all namespaces
17473         to the symbol file.
17474
17475         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
17476         pass it to the Namespace's .ctor.
17477
17478         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
17479         and MethodBase arguments; pass the namespace ID to the symwriter;
17480         pass the MethodBase instead of the token to the symwriter.
17481         (SymbolWriter.DefineNamespace): New method to add a namespace to
17482         the symbol file.
17483
17484 2003-02-09  Martin Baulig  <martin@ximian.com>
17485
17486         * symbolwriter.cs: New file.  This is a wrapper around
17487         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
17488         methods here in near future.
17489
17490 2003-02-09  Martin Baulig  <martin@ximian.com>
17491
17492         * codegen.cs (EmitContext.Mark): Just pass the arguments to
17493         ILGenerator.MarkSequencePoint() which are actually used by the
17494         symbol writer.
17495
17496 2003-02-09  Martin Baulig  <martin@ximian.com>
17497
17498         * location.cs (SourceFile): New public sealed class.  This
17499         contains the name and an index which is used in the location's token.
17500         (Location): Reserve an appropriate number of bits in the token for
17501         the source file instead of walking over that list, this gives us a
17502         really huge performance improvement when compiling with debugging.
17503
17504         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
17505         `SourceFile' argument instead of a string.
17506         (Driver.ProcessFile): Add all the files via Location.AddFile(),
17507         but don't parse/tokenize here, we need to generate the list of all
17508         source files before we do that.
17509         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
17510         the files.
17511
17512         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
17513         instead of a string.
17514
17515         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
17516         of a string.
17517
17518 2003-02-09  Martin Baulig  <martin@ximian.com>
17519
17520         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
17521         filename on `#line default'.
17522
17523 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
17524
17525         * statement.cs: don't clear the pinned var when the fixed statement
17526         returns from the method (fixes bug#37752).
17527
17528 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
17529
17530         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
17531         to IsValueType.
17532
17533 2003-02-07  Martin Baulig  <martin@ximian.com>
17534
17535         * driver.cs: Removed the `--debug-args' command line argument.
17536
17537         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
17538         automatically by the AsssemblyBuilder.
17539         (CodeGen.InitializeSymbolWriter): We don't need to call any
17540         initialization function on the symbol writer anymore.  This method
17541         doesn't take any arguments.
17542
17543 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
17544
17545         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
17546         from referenced assemblies as well.
17547
17548 2003-02-02  Martin Baulig  <martin@ximian.com>
17549
17550         * class.cs (MethodData.Emit): Generate debugging info for external methods.
17551
17552 2003-02-02  Martin Baulig  <martin@ximian.com>
17553
17554         * class.cs (Constructor.Emit): Open the symbol writer before
17555         emitting the constructor initializer.
17556         (ConstructorInitializer.Emit): Call ec.Mark() to allow
17557         single-stepping through constructor initializers.
17558
17559 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
17560
17561         * class.cs: Handle error 549: do not allow virtual methods in
17562         sealed classes. 
17563
17564 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
17565
17566         * decl.cs: Check access levels when resolving types
17567
17568 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
17569
17570         * statement.cs: Add parameters and locals set in catch blocks that might 
17571         return to set vector
17572
17573 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
17574
17575         * class.cs (Operator): Set the SpecialName flags for operators.
17576
17577         * expression.cs (Invocation.DoResolve): Only block calls to
17578         accessors and operators on SpecialName methods.
17579
17580         (Cast.TryReduce): Handle conversions from char constants.
17581
17582
17583 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
17584
17585         * statement.cs: small memory and time optimization in FlowBranching.
17586
17587 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
17588
17589         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
17590         problem that the last fix but in the other sid (Set).
17591
17592         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
17593         access when there is no indexer in the hierarchy.
17594
17595 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
17596
17597         * class.cs: Combine some if statements.
17598
17599 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17600
17601         * driver.cs: fixed bug #37187.
17602
17603 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
17604
17605         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
17606         any indexer, it's needed to build a list with all the indexers in the
17607         hierarchy (AllGetters), else we have problems. Fixes #35653.
17608
17609 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
17610
17611         * class.cs (MethodData.Define): It is wrong for an interface
17612         implementation to be static in both cases: explicit and implicit.
17613         We were only handling this in one case.
17614
17615         Improve the if situation there to not have negations.
17616
17617         * class.cs (Field.Define): Turns out that we do not need to check
17618         the unsafe bit on field definition, only on usage.  Remove the test.
17619
17620 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17621
17622         * driver.cs: use assembly.Location instead of Codebase (the latest
17623         patch made mcs fail when using MS assemblies).
17624
17625 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
17626
17627         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
17628         get the path to *corlib.dll.
17629
17630 2003-01-21  Nick Drochak <ndrochak@gol.com>
17631
17632         * cs-tokenizer.cs:
17633         * pending.cs:
17634         * typemanager.cs: Remove compiler warnings
17635
17636 2003-01-20  Duncan Mak  <duncan@ximian.com>
17637
17638         * AssemblyInfo.cs: Bump the version number to 0.19.
17639
17640 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17641
17642         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
17643
17644 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
17645
17646         * class.cs (Constructor::Emit): Emit debugging info for constructors.
17647
17648 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
17649
17650         * cs-parser.jay: Small fix: we were not comparing the constructor
17651         name correctly.   Thanks to Zoltan for the initial pointer.
17652
17653 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
17654
17655         * cs-tokenizer.cs: Set file name when specified with #line
17656
17657 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
17658
17659         * cs-parser.jay: Only perform the constructor checks here if we
17660         are named like the class;  This will help provider a better
17661         error.  The constructor path is taken when a type definition is
17662         not found, but most likely the user forgot to add the type, so
17663         report that rather than the constructor error.
17664
17665 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
17666
17667         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
17668         allocations.
17669
17670 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17671
17672         * cs-parser.jay: Add cleanup call.
17673
17674 2003-01-13  Duncan Mak  <duncan@ximian.com>
17675
17676         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
17677         consistent with other methods.
17678
17679 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17680
17681         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
17682
17683 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
17684
17685         * attribute.cs: only set GuidAttr to true when we have a
17686         GuidAttribute.
17687
17688 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17689
17690         * ecore.cs:
17691         * expression.cs:
17692         * typemanager.cs: fixes to allow mcs compile corlib with the new
17693         Type.IsSubclassOf fix.
17694
17695 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
17696
17697         * expression.cs (LocalVariableReference.DoResolve): Classify a
17698         constant as a value, not as a variable.   Also, set the type for
17699         the variable.
17700
17701         * cs-parser.jay (fixed_statement): take a type instead of a
17702         pointer_type, so we can produce a better error message later.
17703
17704         * statement.cs (Fixed.Resolve): Flag types that are not pointers
17705         as an error.  
17706
17707         (For.DoEmit): Make inifinite loops have a
17708         non-conditional branch back.
17709
17710         (Fixed.DoEmit): First populate the pinned variables, then emit the
17711         statement, then clear the variables.  Before I was emitting the
17712         code once for each fixed piece.
17713
17714
17715 2003-01-08  Martin Baulig  <martin@ximian.com>
17716
17717         * statement.cs (FlowBranching.MergeChild): A break in a
17718         SWITCH_SECTION does not leave a loop.  Fixes #36155.
17719
17720 2003-01-08  Martin Baulig  <martin@ximian.com>
17721
17722         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
17723         lives in the same number space than `param_map'.  Fixes #36154.
17724
17725 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
17726
17727         * cs-parser.jay (constructor_declaration): Set the
17728         Constructor.ModFlags before probing for it.  This makes the
17729         compiler report 514, 515 and 132 (the code was there, but got
17730         broken). 
17731
17732         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
17733         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
17734         (GotoCase.Resolve): Set `Returns' to ALWAYS.
17735
17736 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
17737
17738         * enum.cs: create the enum static fields using the enum type.
17739
17740 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
17741
17742         * class.cs: don't try to create the ParamBuilder for the return
17743         type if it's not needed (and handle it breaking for the ms runtime
17744         anyway).
17745
17746 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
17747
17748         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
17749
17750 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
17751
17752         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
17753         the command.   This showed up while compiling the JANET source
17754         code, which used \r as its only newline separator.
17755
17756 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
17757
17758         * class.cs (Method.Define): If we are an operator (because it
17759         reuses our code), then set the SpecialName and HideBySig.  #36128
17760
17761 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
17762
17763         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
17764         exception, report error 120 `object reference required'.
17765
17766         * driver.cs: Add --pause option, used during to measure the size
17767         of the process as it goes with --timestamp.
17768
17769         * expression.cs (Invocation.DoResolve): Do not allow methods with
17770         SpecialName to be invoked.
17771
17772 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
17773
17774         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
17775         number before adding it.
17776
17777 2002-12-21  Ravi Pratap  <ravi@ximian.com>
17778
17779         * ecore.cs (StandardImplicitConversion): When in an unsafe
17780         context, we allow conversion between void * to any other pointer
17781         type. This fixes bug #35973.
17782
17783 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
17784
17785         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
17786         is not thrown when extensionless outputs are used 
17787
17788 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17789
17790         * rootcontext.cs: fixed compilation of corlib.
17791
17792 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
17793
17794         * attribute.cs (Attributes.Contains): Add new method.
17795
17796         * class.cs (MethodCore.LabelParameters): if the parameter is an
17797         `out' parameter, check that no attribute `[In]' has been passed.
17798
17799         * enum.cs: Handle the `value__' name in an enumeration.
17800
17801 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
17802
17803         * decl.cs: Added special case to allow overrides on "protected
17804         internal" methods
17805
17806 2002-12-18  Ravi Pratap  <ravi@ximian.com>
17807
17808         * attribute.cs (Attributes.AddAttributeSection): Rename to this
17809         since it makes much more sense.
17810
17811         (Attributes.ctor): Don't require a Location parameter.
17812
17813         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
17814
17815         * attribute.cs (ApplyAttributes): Remove extra Location parameters
17816         since we already have that information per attribute.
17817
17818         * everywhere : make appropriate changes.
17819
17820         * class.cs (LabelParameters): Write the code which actually
17821         applies attributes to the return type. We can't do this on the MS
17822         .NET runtime so we flag a warning in the case an exception is
17823         thrown.
17824
17825 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
17826
17827         * const.cs: Handle implicit null conversions here too.
17828
17829 2002-12-17  Ravi Pratap  <ravi@ximian.com>
17830
17831         * class.cs (MethodCore.LabelParameters): Remove the extra
17832         Type [] parameter since it is completely unnecessary. Instead
17833         pass in the method's attributes so that we can extract
17834         the "return" attribute.
17835
17836 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
17837
17838         * cs-parser.jay (parse): Use Report.Error to flag errors instead
17839         of ignoring it and letting the compile continue.
17840
17841         * typemanager.cs (ChangeType): use an extra argument to return an
17842         error condition instead of throwing an exception.
17843
17844 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
17845
17846         * expression.cs (Unary.TryReduce): mimic the code for the regular
17847         code path.  Perform an implicit cast in the cases where we can
17848         implicitly convert to one of the integral types, and then reduce
17849         based on that constant.   This fixes bug #35483.
17850
17851 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17852
17853         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
17854
17855 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17856
17857         * namespace.cs: fixed bug #35489.
17858
17859 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
17860
17861         * class.cs: Remove some dead code.
17862
17863         * cs-parser.jay: Estimate the number of methods needed
17864         (RootContext.MethodCount);
17865
17866         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
17867         numbers instead of StringBuilders.
17868
17869         * support.cs (PtrHashtable): Add constructor with initial size;
17870         We can now reduce reallocations of the method table.
17871
17872 2002-12-10  Ravi Pratap  <ravi@ximian.com>
17873
17874         * attribute.cs (ApplyAttributes): Keep track of the emitted
17875         attributes on a per-target basis. This fixes bug #35413.
17876
17877 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
17878
17879         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
17880         default to the Windows 1252 encoding.
17881
17882         (UnixParseOption): Support version, thanks to Alp for the missing
17883         pointer. 
17884
17885         * AssemblyInfo.cs: Add nice assembly information.
17886
17887         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
17888         (bug 35169).
17889
17890         * cs-parser.jay: Allow a trailing comma before the close bracked
17891         in the attribute_section production.
17892
17893         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
17894         address of the instance was being taken, I will take this out,
17895         because we take the address of the object immediately here.
17896
17897 2002-12-09  Ravi Pratap  <ravi@ximian.com>
17898
17899         * typemanager.cs (AreMultipleAllowed): Take care of the most
17900         obvious case where attribute type is not in the current assembly -
17901         stupid me ;-)
17902
17903 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
17904
17905         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
17906         definitions, instead of doing that afterwards.  
17907
17908         Also we use a nice little hack, depending on the constructor, we
17909         know if we are a "composed" name or a simple name.  Hence, we
17910         avoid the IndexOf test, and we avoid 
17911
17912         * codegen.cs: Add code to assist in a bug reporter to track down
17913         the source of a compiler crash. 
17914
17915 2002-12-07  Ravi Pratap  <ravi@ximian.com>
17916
17917         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
17918         types have been emitted for a given element and flag an error
17919         if something which does not have AllowMultiple set is used more
17920         than once.
17921
17922         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
17923         attribute types and their corresponding AllowMultiple properties
17924
17925         (AreMultipleAllowed): Check the property for a given type.
17926
17927         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
17928         property in the case we have a TypeContainer.
17929
17930         (Attributes.AddAttribute): Detect duplicates and just skip on
17931         adding them. This trivial fix catches a pretty gross error in our
17932         attribute emission - global attributes were being emitted twice!
17933
17934         Bugzilla bug #33187 is now fixed.
17935
17936 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
17937
17938         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
17939         instead of pp_and).
17940
17941         * expression.cs (Binary.ResolveOperator): I can only use the
17942         Concat (string, string, string) and Concat (string, string,
17943         string, string) if the child is actually a concatenation of
17944         strings. 
17945
17946 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
17947
17948         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
17949         context where we need a 2-character lookahead.
17950
17951         * pending.cs (PendingImplementation): Rework so we can keep track
17952         of interface types all the time, and flag those which were
17953         implemented by parents as optional.
17954
17955 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
17956
17957         * expression.cs (Binary.ResolveOperator): Use
17958         String.Concat(string,string,string) or
17959         String.Concat(string,string,string,string) when possible. 
17960
17961         * typemanager: More helper methods.
17962
17963
17964 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
17965
17966         * pending.cs: remove the bogus return from GetMissingInterfaces()
17967         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
17968
17969 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17970
17971         * namespace.cs: avoid duplicated 'using xxx' being added to
17972         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
17973         when we get more than one 'using' statement for the same namespace.
17974         Report a CS0105 warning for it.
17975
17976 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
17977
17978         * cs-tokenizer.cs (consume_identifier): use read directly, instead
17979         of calling getChar/putback, uses internal knowledge of it.    
17980
17981         (xtoken): Reorder tokenizer so most common patterns are checked
17982         first.  This reduces the compilation time in another 5% (from 8.11s
17983         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
17984
17985         The parsing time is 22% of the compilation in mcs, and from that
17986         64% is spent on the tokenization process.  
17987
17988         I tried using a binary search for keywords, but this is slower
17989         than the hashtable.  Another option would be to do a couple of
17990         things:
17991
17992                 * Not use a StringBuilder, instead use an array of chars,
17993                   with a set value.  Notice that this way we could catch
17994                   the 645 error without having to do it *afterwards*.
17995
17996                 * We could write a hand-parser to avoid the hashtable
17997                   compares altogether.
17998
17999         The identifier consumption process takes 37% of the tokenization
18000         time.  Another 15% is spent on is_number.  56% of the time spent
18001         on is_number is spent on Int64.Parse:
18002
18003                 * We could probably choose based on the string length to
18004                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
18005                   computations. 
18006
18007         Another 3% is spend on wrapping `xtoken' in the `token' function.
18008
18009         Handle 0xa0 as whitespace (#34752)
18010
18011 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
18012
18013         * typemanager.cs (IsCLRType): New routine to tell whether a type
18014         is one of the builtin types.  
18015
18016         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
18017         typecode in more places instead of doing pointer comparissions.
18018         We could leverage some knowledge about the way the typecodes are
18019         laid out.
18020
18021         New code to cache namespaces in assemblies, it is currently not
18022         invoked, to be used soon.
18023
18024         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
18025
18026         * expression.cs (Binary.ResolveOperator): specially handle
18027         strings, and do not perform user-defined operator overloading for
18028         built-in types.
18029
18030 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
18031
18032         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
18033         internalcall as it is a pretty simple operation;  Avoid whenever
18034         possible to call Char.IsLetter.
18035
18036         (consume_identifier): Cut by half the number of
18037         hashtable calls by merging the is_keyword and GetKeyword behavior.
18038
18039         Do not short-circuit, because if we do, we
18040         report errors (ie, #if false && true would produce an invalid
18041         directive error);
18042
18043
18044 2002-11-24  Martin Baulig  <martin@ximian.com>
18045
18046         * expression.cs (Cast.TryReduce): If we're in checked syntax,
18047         check constant ranges and report a CS0221.  Fixes #33186.
18048
18049 2002-11-24  Martin Baulig  <martin@ximian.com>
18050
18051         * cs-parser.jay: Make this work for uninitialized variable
18052         declarations in the `for' initializer.  Fixes #32416.
18053
18054 2002-11-24  Martin Baulig  <martin@ximian.com>
18055
18056         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
18057         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
18058
18059 2002-11-24  Martin Baulig  <martin@ximian.com>
18060
18061         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
18062         argument; if true, we also check for user-defined conversions.
18063         This is only needed if both arguments are of a user-defined type.
18064         Fixes #30443, added test-175.cs.
18065         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
18066
18067         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
18068
18069 2002-11-24  Martin Baulig  <martin@ximian.com>
18070
18071         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
18072         function to get the store opcode.
18073         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
18074         only emit the Ldelema if the store opcode is Stobj.  You must run
18075         both test-34 and test-167 to test this.  Fixes #34529.
18076
18077 2002-11-23  Martin Baulig  <martin@ximian.com>
18078
18079         * ecore.cs (Expression.MemberLookup): Added additional
18080         `qualifier_type' argument which is used when we're being called
18081         from MemberAccess.DoResolve() and null if we're called from a
18082         SimpleName lookup.
18083         (Expression.MemberLookupFailed): New method to report errors; this
18084         does the CS1540 check and reports the correct error message.
18085
18086         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
18087         argument for the CS1540 check and redone the way how we're dealing
18088         with private members.  See the comment in the source code for details.
18089         (FilterWithClosure): Reverted this back to revision 1.197; renamed
18090         `closure_start_type' to `closure_qualifier_type' and check whether
18091         it's not null.  It was not this filter being broken, it was just
18092         being called with the wrong arguments.
18093
18094         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
18095         and pass it the correct `qualifier_type'; this also does the error
18096         handling for us.
18097
18098 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
18099
18100         * expression.cs (Invocation.EmitParams): If the we are dealing
18101         with a non-built-in value type, load its address as well.
18102
18103         (ArrayCreation): Use a a pretty constant instead
18104         of the hardcoded value 2.   Use 6 instead of 2 for the number of
18105         static initializers.  
18106
18107         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
18108         because they are not really value types, just glorified integers. 
18109
18110         * driver.cs: Do not append .exe, the CSC compiler does not do it.
18111
18112         * ecore.cs: Remove redundant code for enumerations, make them use
18113         the same code path as everything else, fixes the casting issue
18114         with enumerations in Windows.Forms.
18115
18116         * attribute.cs: Do only cast to string if it is a string, the
18117         validation happens later.
18118
18119         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
18120         people upgrade their corlibs.
18121
18122         * ecore.cs: Oops, enumerations were not following the entire code path
18123
18124 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
18125
18126         * typemanager.cs (FilterWithClosure): Commented out the test for
18127         1540 in typemanager.cs, as it has problems when accessing
18128         protected methods from a parent class (see test-174.cs). 
18129
18130         * attribute.cs (Attribute.ValidateGuid): new method.
18131         (Attribute.Resolve): Use above.
18132
18133 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
18134
18135         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
18136
18137         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
18138         handling for enumerations, as we only needed the TypeContainer
18139         functionality to begin with (this is required for the fix below to
18140         work for enums that reference constants in a container class for
18141         example). 
18142
18143         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
18144
18145         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
18146         a valid TypeBuilder to perform lookups on.o
18147
18148         * class.cs (InheritableMemberSignatureCompare): Use true in the
18149         call to GetGetMethod and GetSetMethod, because we are comparing
18150         the signature, and we need to get the methods *even* if they are
18151         private. 
18152
18153         (PropertyBase.CheckBase): ditto.
18154
18155         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
18156         GotoCase.Resolve): Use Peel on EmpytCasts.
18157
18158         * ecore.cs (EmptyCast): drop child, add Peel method.
18159
18160 2002-11-17  Martin Baulig  <martin@ximian.com>
18161
18162         * ecore.cs (EmptyCast.Child): New public property.
18163
18164         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
18165         label resolved to an EmptyCast.  Fixes #34162.
18166         (GotoCase.Resolve): Likewise.
18167         (Block.EmitMeta): Likewise.
18168
18169 2002-11-17  Martin Baulig  <martin@ximian.com>
18170
18171         * expression.cs (Invocation.BetterConversion): Prefer int over
18172         uint; short over ushort; long over ulong for integer literals.
18173         Use ImplicitConversionExists instead of StandardConversionExists
18174         since we also need to check for user-defined implicit conversions.
18175         Fixes #34165.  Added test-173.cs.
18176
18177 2002-11-16  Martin Baulig  <martin@ximian.com>
18178
18179         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
18180         with the `true' and `false' literals.  Fixes #33151.
18181
18182 2002-11-16  Martin Baulig  <martin@ximian.com>
18183
18184         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
18185         October 22nd; don't do the cs1540 check for static members.
18186
18187         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
18188         now using our own filter here and doing the cs1540 check again.
18189
18190 2002-11-16  Martin Baulig  <martin@ximian.com>
18191
18192         * support.cs (InternalParameters): Don't crash if we don't have
18193         any fixed parameters.  Fixes #33532.
18194
18195 2002-11-16  Martin Baulig  <martin@ximian.com>
18196
18197         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
18198         when looking up static methods to make this work on Windows.
18199         Fixes #33773.
18200
18201 2002-11-16  Martin Baulig  <martin@ximian.com>
18202
18203         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
18204         a setter rather than using PropertyInfo.CanWrite.
18205
18206 2002-11-15  Nick Drochak  <ndrochak@gol.com>
18207
18208         * class.cs: Allow acces to block member by subclasses. Fixes build
18209         breaker.
18210
18211 2002-11-14  Martin Baulig  <martin@ximian.com>
18212
18213         * class.cs (Constructor.Emit): Added the extern/block check.
18214         Fixes bug #33678.
18215
18216 2002-11-14  Martin Baulig  <martin@ximian.com>
18217
18218         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
18219         iteration while looking for indexers, this is needed because the
18220         indexer may have a different name in our base classes.  Fixed the
18221         error reporting (no indexers at all, not get accessor, no
18222         overloaded match).  Fixes bug #33089.
18223         (IndexerAccess.DoResolveLValue): Likewise.
18224
18225 2002-11-14  Martin Baulig  <martin@ximian.com>
18226
18227         * class.cs (PropertyBase.CheckBase): Make this work for multiple
18228         indexers.  Fixes the first part of bug #33089.
18229         (MethodSignature.InheritableMemberSignatureCompare): Added support
18230         for properties.
18231
18232 2002-11-13  Ravi Pratap  <ravi@ximian.com>
18233
18234         * attribute.cs (Attribute.Resolve): Catch the
18235         NullReferenceException and report it since it isn't supposed to
18236         happen. 
18237
18238 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
18239
18240         * expression.cs (Binary.EmitBranchable): Also handle the cases for
18241         LogicalOr and LogicalAnd that can benefit from recursively
18242         handling EmitBranchable.  The code now should be nice for Paolo.
18243
18244 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
18245
18246         * typemanager.cs (LookupType): Added a negative-hit hashtable for
18247         the Type lookups, as we perform quite a number of lookups on
18248         non-Types.  This can be removed once we can deterministically tell
18249         whether we have a type or a namespace in advance.
18250
18251         But this might require special hacks from our corlib.
18252
18253         * TODO: updated.
18254
18255         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
18256         and double which avoids a conversion from an integer to a double.
18257
18258         * expression.cs: tiny optimization, avoid calling IsConstant,
18259         because it effectively performs the lookup twice.
18260
18261 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
18262
18263         But a bogus return here to keep the semantics of the old code
18264         until the Mono runtime is fixed.
18265
18266         * pending.cs (GetMissingInterfaces): New method used to remove all
18267         the interfaces that are already implemented by our parent
18268         classes from the list of pending methods. 
18269
18270         * interface.cs: Add checks for calls after ResolveTypeExpr.
18271
18272 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
18273
18274         * class.cs (Class.Emit): Report warning 67: event not used if the
18275         warning level is beyond 3.
18276
18277         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
18278         being a NullLiteral.
18279
18280         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
18281         specifiers. 
18282
18283         * class.cs (TypeContainer.GetClassBases): Cover a missing code
18284         path that might fail if a type can not be resolved.
18285
18286         * expression.cs (Binary.Emit): Emit unsigned versions of the
18287         operators. 
18288
18289         * driver.cs: use error 5.
18290
18291 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
18292
18293         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
18294
18295 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
18296
18297         * cs-parser.jay (switch_section): A beautiful patch from Martin
18298         Baulig that fixed 33094.
18299
18300 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
18301
18302         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
18303         Check whether the base is abstract and report an error if so.
18304
18305         * expression.cs (IndexerAccess.DoResolveLValue,
18306         IndexerAccess.DoResolve): ditto. 
18307
18308         (Invocation.DoResolve): ditto.
18309
18310         (Invocation.FullMethodDesc): Improve the report string.
18311
18312         * statement.cs (Block): Eliminate IsVariableDefined as it is
18313         basically just a wrapper for GetVariableInfo.
18314
18315         * ecore.cs (SimpleName): Use new 
18316
18317         * support.cs (ReflectionParamter.ParameterType): We unwrap the
18318         type, as we return the actual parameter ref/unref state on a
18319         different call.
18320
18321 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
18322
18323         * support.cs: Return proper flags REF/OUT fixing the previous
18324         commit.  
18325
18326         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
18327         not used to mean `ref' but `ref or out' in ParameterReference
18328
18329         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
18330         full type signature instead of calling TypeManger.CSharpName
18331         ourselves. 
18332
18333         * support.cs (InternalParameters.ParameterDesc): Do not compare
18334         directly to the modflags, because REF/OUT will actually be bitsets
18335         if set. 
18336
18337         * delegate.cs (VerifyMethod): Check also the modifiers.
18338
18339         * cs-tokenizer.cs: Fix bug where floating point values with an
18340         exponent where a sign was missing was ignored.
18341
18342         * driver.cs: Allow multiple assemblies to be specified in a single
18343         /r: argument
18344
18345 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
18346
18347         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
18348         because identifiers after a parenthesis would end up in this kind
18349         of production, and we needed to desamiguate it for having casts
18350         like:
18351
18352                 (UserDefinedType *) xxx
18353
18354 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
18355
18356         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
18357         we should set on the Bindingflags.NonPublic, but not turn on
18358         private_ok.  private_ok controls whether a Private member is
18359         returned (this is chekced on the filter routine), while the
18360         BindingFlags.NonPublic just controls whether private/protected
18361         will be allowed.   This fixes the problem part of the problem of
18362         private properties being allowed to be used in derived classes.
18363
18364         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
18365         so we can call the children DoResolveLValue method (this will
18366         properly signal errors on lvalue assignments to base properties)
18367
18368         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
18369         getter are null, and we have a property info, we know that this
18370         happened because the lookup failed, so we report an error 122 for
18371         protection level violation.
18372
18373         We also silently return if setter and getter are null in the
18374         resolve functions, this condition only happens if we have flagged
18375         the error before.  This is the other half of the problem. 
18376
18377         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
18378         not have accessibility information, that is why we were returning
18379         true in the filter function in typemanager.cs.
18380
18381         To properly report 122 (property is inaccessible because of its
18382         protection level) correctly, we report this error in ResolveAccess
18383         by failing if both the setter and the getter are lacking (ie, the
18384         lookup failed). 
18385
18386         DoResolve and DoLResolve have been modified to check for both
18387         setter/getter being null and returning silently, the reason being
18388         that I did not want to put the knowledge about this error in upper
18389         layers, like:
18390
18391         int old = Report.Errors;
18392         x = new PropertyExpr (...);
18393         if (old != Report.Errors)
18394                 return null;
18395         else
18396                 return x;
18397
18398         So the property expr is returned, but it is invalid, so the error
18399         will be flagged during the resolve process. 
18400
18401         * class.cs: Remove InheritablePropertySignatureCompare from the
18402         class, as we no longer depend on the property signature to compute
18403         whether it is possible to implement a method or not.
18404
18405         The reason is that calling PropertyInfo.GetGetMethod will return
18406         null (in .NET, in Mono it works, and we should change this), in
18407         cases where the Get Method does not exist in that particular
18408         class.
18409
18410         So this code:
18411
18412         class X { public virtual int A { get { return 1; } } }
18413         class Y : X { }
18414         class Z : Y { public override int A { get { return 2; } } }
18415
18416         Would fail in Z because the parent (Y) would not have the property
18417         defined.  So we avoid this completely now (because the alternative
18418         fix was ugly and slow), and we now depend exclusively on the
18419         method names.
18420
18421         (PropertyBase.CheckBase): Use a method-base mechanism to find our
18422         reference method, instead of using the property.
18423
18424         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
18425         routines are gone now.
18426
18427         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
18428         names, they were incorrectly named.
18429
18430         * cs-tokenizer.cs: Return are more gentle token on failure. 
18431
18432         * pending.cs (PendingImplementation.InterfaceMethod): This routine
18433         had an out-of-sync index variable, which caused it to remove from
18434         the list of pending methods the wrong method sometimes.
18435
18436 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
18437
18438         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
18439         CanWrite, because those refer to this particular instance of the
18440         property, and do not take into account the fact that we can
18441         override single members of a property.
18442
18443         Constructor requires an EmitContext.  The resolution process does
18444         not happen here, but we need to compute the accessors before,
18445         because the resolution does not always happen for properties.
18446
18447         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
18448         subclass, before we did not update this flag, but we did update
18449         bindingflags. 
18450
18451         (GetAccessors): Drop this routine, as it did not work in the
18452         presence of partially overwritten set/get methods. 
18453
18454         Notice that this broke the cs1540 detection, but that will require
18455         more thinking. 
18456
18457 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18458
18459         * class.cs:
18460         * codegen.cs:
18461         * driver.cs: issue a warning instead of an error if we don't support
18462         debugging for the platform. Also ignore a couple of errors that may
18463         arise when trying to write the symbols. Undo my previous patch.
18464
18465 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18466
18467         * driver.cs: ignore /debug switch except for Unix platforms.
18468
18469 2002-10-23  Nick Drochak  <ndrochak@gol.com>
18470
18471         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
18472
18473 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
18474
18475         * driver.cs: Do not make mcs-debug conditional, so we do not break
18476         builds that use it.
18477
18478         * statement.cs (UsageVector.MergeChildren): I would like Martin to
18479         review this patch.  But basically after all the children variables
18480         have been merged, the value of "Breaks" was not being set to
18481         new_breaks for Switch blocks.  I think that it should be set after
18482         it has executed.  Currently I set this to the value of new_breaks,
18483         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
18484         conservative, but I do not understand this code very well.
18485
18486         I did not break anything in the build, so that is good ;-)
18487
18488         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
18489
18490 2002-10-20  Mark Crichton  <crichton@gimp.org>
18491
18492         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
18493
18494 2002-10-20  Nick Drochak  <ndrochak@gol.com>
18495
18496         * cfold.cs: Fixed compile blocker.
18497
18498 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
18499
18500         * driver.cs: I was chekcing the key, not the file.
18501
18502 2002-10-19  Ravi Pratap  <ravi@ximian.com>
18503
18504         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
18505         message that we were generating - we just need to silently return
18506         a null.
18507
18508 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
18509
18510         * class.cs (Event.Define): Change my previous commit, as this
18511         breaks the debugger.  This is a temporary hack, as it seems like
18512         the compiler is generating events incorrectly to begin with.
18513
18514         * expression.cs (Binary.ResolveOperator): Added support for 
18515         "U operator - (E x, E y)"
18516
18517         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
18518         y)".
18519
18520         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
18521         init-only variables, but this path did not take into account that
18522         there might be also instance readonly variables.  Correct this
18523         problem. 
18524
18525         This fixes bug 32253
18526
18527         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
18528         delegates as well.
18529
18530         * driver.cs: Change the extension for modules to `netmodule'
18531
18532         * cs-parser.jay: Improved slightly the location tracking for
18533         the debugger symbols.
18534
18535         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
18536         modifiers that were specified instead of the hardcoded value
18537         (FamAndAssem).  This was basically ignoring the static modifier,
18538         and others.  Fixes 32429.
18539
18540         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
18541         fixed a bug in the process (32476)
18542
18543         * expression.cs (ArrayAccess.EmitAssign): Patch from
18544         hwang_rob@yahoo.ca that fixes bug 31834.3
18545
18546 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
18547
18548         * driver.cs: Make the module extension .netmodule.
18549
18550 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
18551
18552         * driver.cs: Report an error if the resource file is not found
18553         instead of crashing.
18554
18555         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
18556         false, like Emit does.
18557
18558 2002-10-16  Nick Drochak  <ndrochak@gol.com>
18559
18560         * typemanager.cs: Remove unused private member.  Also reported mcs
18561         bug to report this as a warning like csc.
18562
18563 2002-10-15  Martin Baulig  <martin@gnome.org>
18564
18565         * statement.cs (Statement.Emit): Made this a virtual method; emits
18566         the line number info and calls DoEmit().
18567         (Statement.DoEmit): New protected abstract method, formerly knows
18568         as Statement.Emit().
18569
18570         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
18571
18572 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
18573
18574         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
18575         have fixed a remaining problem: not every AddXXXX was adding a
18576         fully qualified name.  
18577
18578         Now everyone registers a fully qualified name in the DeclSpace as
18579         being defined instead of the partial name.  
18580
18581         Downsides: we are slower than we need to be due to the excess
18582         copies and the names being registered this way.  
18583
18584         The reason for this is that we currently depend (on the corlib
18585         bootstrap for instance) that types are fully qualified, because
18586         we dump all the types in the namespace, and we should really have
18587         types inserted into the proper namespace, so we can only store the
18588         basenames in the defined_names array.
18589
18590 2002-10-10  Martin Baulig  <martin@gnome.org>
18591
18592         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
18593         from bug #31834, see the bug report for a testcase which is
18594         miscompiled.
18595
18596 2002-10-10  Martin Baulig  <martin@gnome.org>
18597
18598         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
18599         flow analysis code for this.
18600
18601         * statement.cs (Do, While, For): Tell the flow analysis code about
18602         infinite loops.
18603         (FlowBranching.UsageVector): Added support for infinite loops.
18604         (Block.Resolve): Moved the dead code elimination here and use flow
18605         analysis to do it.
18606
18607 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
18608
18609         * class.cs (Field.Define): Catch cycles on struct type
18610         definitions. 
18611
18612         * typemanager.cs (IsUnmanagedtype): Do not recursively check
18613         fields if the fields are static.  We only need to check instance
18614         fields. 
18615
18616         * expression.cs (As.DoResolve): Test for reference type.
18617
18618         * statement.cs (Using.ResolveExpression): Use
18619         ConvertImplicitRequired, not ConvertImplicit which reports an
18620         error on failture
18621         (Using.ResolveLocalVariableDecls): ditto.
18622
18623         * expression.cs (Binary.ResolveOperator): Report errors in a few
18624         places where we had to.
18625
18626         * typemanager.cs (IsUnmanagedtype): Finish implementation.
18627
18628 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
18629
18630         * expression.cs: Use StoreFromPtr instead of extracting the type
18631         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
18632
18633         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
18634         an enumeration value to a System.Enum, but System.Enum is not a
18635         value type, but an class type, so we need to box.
18636
18637         (Expression.ConvertExplicit): One codepath could return
18638         errors but not flag them.  Fix this.  Fixes #31853
18639
18640         * parameter.cs (Resolve): Do not allow void as a parameter type.
18641
18642 2002-10-06  Martin Baulig  <martin@gnome.org>
18643
18644         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
18645         if it's a class type and not a struct.  Fixes #31815.
18646
18647 2002-10-06  Martin Baulig  <martin@gnome.org>
18648
18649         * statement.cs: Reworked the flow analysis code a bit to make it
18650         usable for dead code elimination.
18651
18652 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18653
18654         * cs-parser.jay: allow empty source files. Fixes bug #31781.
18655
18656 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18657
18658         * expression.cs (ComposedCast.DoResolveType): A quick workaround
18659         to fix the test 165, will investigate deeper.
18660
18661 2002-10-04  Martin Baulig  <martin@gnome.org>
18662
18663         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
18664         finally blocks actually work.
18665         (Try.Resolve): We don't need to create a sibling for `finally' if
18666         there is no finally block.
18667
18668 2002-10-04  Martin Baulig  <martin@gnome.org>
18669
18670         * class.cs (Constructor.Define): The default accessibility for a
18671         non-default constructor is private, not public.
18672
18673 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18674
18675         * class.cs (Constructor): Make AllowedModifiers public, add
18676         EXTERN.
18677
18678         * cs-parser.jay: Perform the modifiers test here, as the
18679         constructor for the Constructor class usually receives a zero
18680         because of the way we create it (first we create, later we
18681         customize, and we were never checking the modifiers).
18682
18683         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
18684         is a version of LookupTypeReflection that includes the type-name
18685         cache.  This can be used as a fast path for functions that know
18686         the fully qualified name and are only calling into *.GetType() to
18687         obtain a composed type.
18688
18689         This is also used by TypeManager.LookupType during its type
18690         composition.
18691
18692         (LookupType): We now also track the real type name, as sometimes
18693         we can get a quey for the real type name from things like
18694         ComposedCast.  This fixes bug 31422.
18695
18696         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
18697         complete type fullname, it does not have to go through the type
18698         resolution system to obtain the composed version of the type (for
18699         obtaining arrays or pointers).
18700
18701         (Conditional.Emit): Use the EmitBoolExpression to
18702         generate nicer code, as requested by Paolo.
18703
18704         (ArrayCreation.CheckIndices): Use the patch from
18705         hwang_rob@yahoo.ca to validate the array initializers. 
18706
18707 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
18708
18709         * class.cs (ConstructorInitializer.Emit): simplify code by using
18710         Invocation.EmitCall, and at the same time, fix the bugs in calling
18711         parent constructors that took variable arguments. 
18712
18713         * ecore.cs (Expression.ConvertNumericExplicit,
18714         Expression.ImplicitNumericConversion): Remove the code that
18715         manually wrapped decimal (InternalTypeConstructor call is now gone
18716         as well).
18717
18718         * expression.cs (Cast.TryReduce): Also handle decimal types when
18719         trying to perform a constant fold on the type.
18720
18721         * typemanager.cs (IsUnmanagedtype): Partially implemented.
18722
18723         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
18724         that only turned off an error report, and did nothing else. 
18725
18726 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
18727
18728         * driver.cs: Handle and ignore /fullpaths
18729
18730 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
18731
18732         * expression.cs (Binary.ResolveOperator): Catch the case where
18733         DoNumericPromotions returns true, 
18734
18735         (Binary.DoNumericPromotions): Simplify the code, and the tests.
18736
18737 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
18738
18739         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
18740         report error 70.
18741
18742 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
18743
18744         * ecore.cs (ConvertNumericExplicit): It is not enough that the
18745         conversion exists, but it is also required that the conversion be
18746         performed.  This manifested in "(Type64Enum) 2".  
18747
18748         * class.cs (TypeManager.AddMethod): The fix is not to change
18749         AddEnum, because that one was using a fully qualified name (every
18750         DeclSpace derivative does), but to change the AddMethod routine
18751         that was using an un-namespaced name.  This now correctly reports
18752         the duplicated name.
18753
18754         Revert patch until I can properly fix it.  The issue
18755         is that we have a shared Type space across all namespaces
18756         currently, which is wrong.
18757
18758         Options include making the Namespace a DeclSpace, and merge
18759         current_namespace/current_container in the parser.
18760
18761 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
18762
18763         * cs-parser.jay: Improve error reporting when we get a different
18764         kind of expression in local_variable_type and
18765         local_variable_pointer_type. 
18766
18767         Propagate this to avoid missleading errors being reported.
18768
18769         * ecore.cs (ImplicitReferenceConversion): treat
18770         TypeManager.value_type as a target just like object_type.   As
18771         code like this:
18772
18773         ValueType v = 1;
18774
18775         Is valid, and needs to result in the int 1 being boxed before it
18776         is assigned to the value type v.
18777
18778         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
18779         to validate the enumeration name.
18780
18781         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
18782         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
18783         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
18784
18785         * ecore.cs (TryImplicitIntConversion): When doing an
18786         implicit-enumeration-conversion, check if the type is 64-bits and
18787         perform a conversion before passing to EnumConstant.
18788
18789 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
18790
18791         * decl.cs (Error_AmbiguousTypeReference); New routine used to
18792         report ambiguous type references.  Unlike the MS version, we
18793         report what the ambiguity is.   Innovation at work ;-)
18794
18795         (DeclSpace.FindType): Require a location argument to
18796         display when we display an ambiguous error.
18797
18798         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
18799
18800         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
18801
18802         * expression.cs (EmitDynamicInitializers): Apply patch from
18803         hwang_rob@yahoo.ca that fixes the order in which we emit our
18804         initializers. 
18805
18806 2002-09-21  Martin Baulig  <martin@gnome.org>
18807
18808         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
18809         delegate takes no arguments.
18810
18811 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
18812
18813         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
18814         from integers.
18815
18816         * expression.cs: Extract the underlying type.
18817
18818         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
18819
18820         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
18821
18822 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
18823
18824         * class.cs (TypeContainer.DefineType): We can not use the nice
18825         PackingSize with the size set to 1 DefineType method, because it
18826         will not allow us to define the interfaces that the struct
18827         implements.
18828
18829         This completes the fixing of bug 27287
18830
18831         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
18832         means also structs.  This fixes part of the problem. 
18833         (Expresion.ImplicitReferenceConversionExists): ditto.
18834
18835         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
18836         error if there were no errors reported during the type lookup
18837         process, to avoid duplicates or redundant errors.  Without this
18838         you would get an ambiguous errors plus a type not found.  We have
18839         beaten the user enough with the first error.  
18840
18841         (DeclSparce.FindType): Emit a warning if we have an ambiguous
18842         reference. 
18843
18844         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
18845         during the resolution process, stop the lookup, this avoids
18846         repeated error reports (same error twice).
18847
18848         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
18849
18850         * typemanager.cs (LookupType): Redo the type lookup code to match
18851         the needs of System.Reflection.  
18852
18853         The issue is that System.Reflection requires references to nested
18854         types to begin with a "+" sign instead of a dot.  So toplevel
18855         types look like: "NameSpace.TopLevelClass", and nested ones look
18856         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
18857         levels. 
18858
18859 2002-09-19  Martin Baulig  <martin@gnome.org>
18860
18861         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
18862         says that a method always returns or always throws an exception,
18863         don't report the CS0161.
18864
18865         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
18866         set `Returns = new_returns'.
18867
18868 2002-09-19  Martin Baulig  <martin@gnome.org>
18869
18870         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
18871         to an enum constant, check for a CS0176.
18872
18873 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
18874
18875         * class.cs (TypeContainer.CheckPairedOperators): Now we check
18876         for operators that must be in pairs and report errors.
18877
18878         * ecore.cs (SimpleName.DoResolveType): During the initial type
18879         resolution process, when we define types recursively, we must
18880         check first for types in our current scope before we perform
18881         lookups in the enclosing scopes.
18882
18883         * expression.cs (MakeByteBlob): Handle Decimal blobs.
18884
18885         (Invocation.VerifyArgumentsCompat): Call
18886         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
18887         I thought we were supposed to always call this, but there are a
18888         few places in the code where we dont do it.
18889
18890 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
18891
18892         * driver.cs: Add support in -linkres and -resource to specify the
18893         name of the identifier.
18894
18895 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18896
18897         * ecore.cs (StandardConversionExists): Sync with the conversion
18898         code: allow anything-* to void* conversions.
18899
18900         (FindMostSpecificSource): Use an Expression argument
18901         instead of a Type, because we might be handed over a Literal which
18902         gets a few more implicit conversions that plain types do not.  So
18903         this information was being lost.
18904
18905         Also, we drop the temporary type-holder expression when not
18906         required.
18907
18908 2002-09-17  Martin Baulig  <martin@gnome.org>
18909
18910         * class.cs (PropertyBase.CheckBase): Don't check the base class if
18911         this is an explicit interface implementation.
18912
18913 2002-09-17  Martin Baulig  <martin@gnome.org>
18914
18915         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
18916         different `IndexerName' attributes.
18917
18918         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
18919         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
18920         virtual CommonResolve().
18921
18922 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18923
18924         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
18925         and convert that to the UnderlyingType.
18926
18927         * statement.cs (Foreach.Resolve): Indexers are just like variables
18928         or PropertyAccesses.
18929
18930         * cs-tokenizer.cs (consume_string): Track line numbers and columns
18931         inside quoted strings, we were not doing this before.
18932
18933 2002-09-16  Martin Baulig  <martin@gnome.org>
18934
18935         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
18936         resolve it.  This is needed for the definite assignment check of the
18937         instance expression, fixes bug #29846.
18938         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
18939
18940 2002-09-16  Nick Drochak  <ndrochak@gol.com>
18941
18942         * parameter.cs: Fix compile error.  Cannot reference static member
18943         from an instance object.  Is this an mcs bug?
18944
18945 2002-09-14  Martin Baulig  <martin@gnome.org>
18946
18947         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
18948         multiple times.  Fixes bug #30295, added test-166.cs.
18949
18950 2002-09-14  Martin Baulig  <martin@gnome.org>
18951
18952         * statement.cs (Block.Emit): Don't emit unreachable code.
18953         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
18954         `break' statements.
18955         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
18956
18957 2002-09-14  Martin Baulig  <martin@gnome.org>
18958
18959         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
18960         is set.
18961
18962 2002-09-14  Martin Baulig  <martin@gnome.org>
18963
18964         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
18965         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
18966         be false on the ms runtime.
18967
18968 2002-09-13  Martin Baulig  <martin@gnome.org>
18969
18970         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
18971         the CS0038 error message.
18972
18973 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
18974
18975         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
18976         constant inside, return it.
18977
18978 2002-09-12  Martin Baulig  <martin@gnome.org>
18979
18980         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
18981         implicit conversion can be done between enum types.
18982
18983         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
18984         check whether an implicit conversion to the current enum's UnderlyingType
18985         exists and report an error if not.
18986
18987         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
18988         without debugging support.
18989
18990         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
18991         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
18992
18993 2002-09-12  Martin Baulig  <martin@gnome.org>
18994
18995         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
18996
18997         * ecore.cs (IMemberExpr.DeclaringType): New property.
18998         (SimpleName.SimpleNameResolve): Check whether we're accessing a
18999         nonstatic member of an outer type (CS0038).
19000
19001 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
19002
19003         * driver.cs: Activate the using-error detector at warning level
19004         4 (at least for MS-compatible APIs).
19005
19006         * namespace.cs (VerifyUsing): Small buglett fix.
19007
19008         * pending.cs (PendingImplementation): pass the container pointer. 
19009
19010         * interface.cs (GetMethods): Allow for recursive definition.  Long
19011         term, I would like to move every type to support recursive
19012         definitions, not the current ordering mechanism that we have right
19013         now.
19014
19015         The situation is this: Attributes are handled before interfaces,
19016         so we can apply attributes to interfaces.  But some attributes
19017         implement interfaces, we will now handle the simple cases
19018         (recursive definitions will just get an error).  
19019
19020         * parameter.cs: Only invalidate types at the end if we fail to
19021         lookup all types.  
19022
19023 2002-09-09  Martin Baulig  <martin@gnome.org>
19024
19025         * ecore.cs (PropertyExpr.Emit): Also check for
19026         TypeManager.system_int_array_get_length so this'll also work when
19027         compiling corlib.  Fixes #30003.
19028
19029 2002-09-09  Martin Baulig  <martin@gnome.org>
19030
19031         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
19032         and throw an exception if we can't get the type's size.  Fixed #30040,
19033         added test-165.cs.
19034
19035 2002-09-09  Martin Baulig  <martin@gnome.org>
19036
19037         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
19038
19039         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
19040         context.  Fixes bug #30027.
19041
19042         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
19043         virtual functions.  Fixes bug #30043, added test-164.cs.
19044
19045 2002-09-08  Ravi Pratap  <ravi@ximian.com>
19046
19047         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
19048
19049 2002-09-08  Nick Drochak  <ndrochak@gol.com>
19050
19051         * driver.cs: Use an object to get the windows codepage since it's not a
19052         static property.
19053
19054 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
19055
19056         * statement.cs (For.Emit): for infinite loops (test == null)
19057         return whether there is a break inside, not always "true".
19058
19059         * namespace.cs (UsingEntry): New struct to hold the name of the
19060         using definition, the location where it is defined, and whether it
19061         has been used in a successful type lookup.
19062
19063         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
19064         strings.
19065
19066         * decl.cs: ditto.
19067
19068 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19069
19070         * attribute.cs : Fix incorrect code which relied on catching
19071         a NullReferenceException to detect a null being passed in
19072         where an object was expected.
19073
19074 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
19075
19076         * statement.cs (Try): flag the catch variable as assigned
19077
19078         * expression.cs (Cast): Simplified by using ResolveType instead of
19079         manually resolving.
19080
19081         * statement.cs (Catch): Fix bug by using ResolveType.
19082
19083 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19084
19085         * expression.cs (BetterConversion): Special case for when we have
19086         a NullLiteral as the argument and we have to choose between string
19087         and object types - we choose string the way csc does.
19088
19089         * attribute.cs (Attribute.Resolve): Catch the
19090         NullReferenceException and report error #182 since the Mono
19091         runtime no more has the bug and having this exception raised means
19092         we tried to select a constructor which takes an object and is
19093         passed a null.
19094
19095 2002-09-05  Ravi Pratap  <ravi@ximian.com>
19096
19097         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
19098         message (1502, 1503) when we can't locate a method after overload
19099         resolution. This is much more informative and closes the bug
19100         Miguel reported.
19101
19102         * interface.cs (PopulateMethod): Return if there are no argument
19103         types. Fixes a NullReferenceException bug.
19104
19105         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
19106         expressions too. Previously we were checking only in one place for
19107         positional arguments leaving out named arguments.
19108
19109         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
19110         type to the enum type is not allowed. Remove code corresponding to
19111         that.
19112
19113         (ConvertNumericExplicit): Allow explicit conversions from
19114         the underlying type to enum type. This precisely follows the spec
19115         and closes a bug filed by Gonzalo.
19116
19117 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19118
19119         * compiler.csproj:
19120         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
19121
19122 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
19123
19124         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
19125         it was important that we stored the right value after the
19126         reduction in `converted'.
19127
19128 2002-09-04  Martin Baulig  <martin@gnome.org>
19129
19130         * location.cs (Location.SymbolDocument): Use full pathnames for the
19131         source files.
19132
19133 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
19134
19135         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
19136         of the expression resolve mechanism, because that will catch the
19137         SimpleName error failures.
19138
19139         (Conditional): If we can not resolve the
19140         expression, return, do not crash.
19141
19142 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19143
19144         * cs-tokenizer.cs:
19145         (location): display token name instead of its number.
19146
19147 2002-08-28  Martin Baulig  <martin@gnome.org>
19148
19149         * expression.cs (Binary.ResolveOperator): Don't silently return
19150         but return an error if an operator cannot be applied between two
19151         enum types.
19152
19153 2002-08-28  Martin Baulig  <martin@gnome.org>
19154
19155         * class.cs (Constructor.Define): Set the permission attributes
19156         correctly instead of making all constructors public.
19157
19158 2002-08-28  Martin Baulig  <martin@gnome.org>
19159
19160         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
19161         for private members before reporting a CS0103; if we find anything,
19162         it's a CS0122.
19163
19164 2002-08-28  Martin Baulig  <martin@gnome.org>
19165
19166         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
19167         to check whether `closure_start_type == closure_invocation_type',
19168         we also need to check whether `m.DeclaringType == closure_invocation_type'
19169         before bypassing the permission checks.  We might be accessing
19170         protected/private members from the base class.
19171         (TypeManager.RealMemberLookup): Only set private_ok if private
19172         members were requested via BindingFlags.NonPublic.
19173
19174         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
19175
19176         * expression.cs (MemberAccess.ResolveMemberAccess): Set
19177         MethodGroupExpr.IsExplicitImpl if appropriate.
19178         (Invocation.DoResolve): Don't report the CS0120 for explicit
19179         interface implementations.
19180
19181 2002-08-27  Martin Baulig  <martin@gnome.org>
19182
19183         * expression.cs (Invocation.DoResolve): If this is a static
19184         method and we don't have an InstanceExpression, we must report
19185         a CS0120.
19186
19187 2002-08-25  Martin Baulig  <martin@gnome.org>
19188
19189         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
19190         `==' between a valuetype and an object.
19191
19192 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
19193
19194         * ecore.cs (TypeExpr): Provide a ToString method.
19195
19196 2002-08-24  Martin Baulig  <martin@gnome.org>
19197
19198         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
19199         now called proggie.dbg and it's a binary file.
19200
19201 2002-08-23  Martin Baulig  <martin@gnome.org>
19202
19203         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
19204
19205 2002-08-23  Martin Baulig  <martin@gnome.org>
19206
19207         * struct.cs (MyStructInfo.ctor): Make this work with empty
19208         structs; it's not allowed to use foreach() on null.
19209
19210 2002-08-23  Martin Baulig  <martin@gnome.org>
19211
19212         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
19213         writer the full pathname of the generated assembly.
19214
19215 2002-08-23  Martin Baulig  <martin@gnome.org>
19216
19217         * statements.cs (FlowBranching.UsageVector.MergeChildren):
19218         A `finally' block never returns or breaks; improved handling of
19219         unreachable code.
19220
19221 2002-08-23  Martin Baulig  <martin@gnome.org>
19222
19223         * statement.cs (Throw.Resolve): Allow `throw null'.
19224
19225 2002-08-23  Martin Baulig  <martin@gnome.org>
19226
19227         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
19228         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
19229         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
19230         MemberLookup would return a wrong event if this is an explicit
19231         interface implementation and the class has an event with the same
19232         name.
19233
19234 2002-08-23  Martin Baulig  <martin@gnome.org>
19235
19236         * statement.cs (Block.AddChildVariableNames): New public method.
19237         (Block.AddChildVariableName): Likewise.
19238         (Block.IsVariableNameUsedInChildBlock): Likewise.
19239         (Block.AddVariable): Check whether a variable name has already
19240         been used in a child block.
19241
19242         * cs-parser.jay (declare_local_variables): Mark all variable names
19243         from the current block as being used in a child block in the
19244         implicit block.
19245
19246 2002-08-23  Martin Baulig  <martin@gnome.org>
19247
19248         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
19249         find the symbol writer.
19250
19251         * driver.cs: csc also allows the arguments to /define being
19252         separated by commas, not only by semicolons.
19253
19254 2002-08-23  Martin Baulig  <martin@gnome.org>
19255
19256         * interface.cs (Interface.GetMembers): Added static check for events.
19257
19258 2002-08-15  Martin Baulig  <martin@gnome.org>
19259
19260         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
19261         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
19262
19263         * ecore.cs (Expression.MemberLookup): Added documentation and explained
19264         why the MethodData.EmitDestructor() change was necessary.
19265
19266 2002-08-20  Martin Baulig  <martin@gnome.org>
19267
19268         * class.cs (TypeContainer.FindMembers): Added static check for events.
19269
19270         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
19271
19272         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
19273         use Type.GetEvents(), not Type.FindMembers().
19274
19275 2002-08-20  Martin Baulig  <martin@gnome.org>
19276
19277         * decl.cs (MemberCache): Added a special method cache which will
19278         be used for method-only searched.  This ensures that a method
19279         search will return a MethodInfo with the correct ReflectedType for
19280         inherited methods.      
19281
19282 2002-08-20  Martin Baulig  <martin@gnome.org>
19283
19284         * decl.cs (DeclSpace.FindMembers): Made this public.
19285
19286 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19287
19288         * delegate.cs: fixed build on windows.
19289         [FIXME:  Filed as bug #29150: MCS must report these errors.]
19290
19291 2002-08-19  Ravi Pratap  <ravi@ximian.com>
19292
19293         * ecore.cs (StandardConversionExists): Return a false
19294         if we are trying to convert the void type to anything else
19295         since that is not allowed.
19296
19297         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
19298         we flag error 70 in the event an event is trying to be accessed
19299         directly from outside the declaring type.
19300
19301 2002-08-20  Martin Baulig  <martin@gnome.org>
19302
19303         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
19304         MemberCache from typemanager.cs to decl.cs.
19305
19306 2002-08-19  Martin Baulig  <martin@gnome.org>
19307
19308         * class.cs (TypeContainer): Implement IMemberContainer.
19309         (TypeContainer.DefineMembers): Create the MemberCache.
19310         (TypeContainer.FindMembers): Do better BindingFlags checking; only
19311         return public members if BindingFlags.Public was given, check
19312         whether members are static.
19313
19314 2002-08-16  Martin Baulig  <martin@gnome.org>
19315
19316         * decl.cs (DeclSpace.Define): Splitted this in Define and
19317         DefineMembers.  DefineMembers is called first and initializes the
19318         MemberCache.
19319
19320         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
19321         DefineMembers() on all our DeclSpaces.
19322
19323         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
19324         but call DefineMembers() on all nested interfaces.  We call their
19325         Define() in our new Define() function.
19326
19327         * interface.cs (Interface): Implement IMemberContainer.
19328         (Interface.Define): Moved all code except the attribute stuf to
19329         DefineMembers().
19330         (Interface.DefineMembers): Initialize the member cache.
19331
19332         * typemanager.cs (IMemberFinder): Removed this interface, we don't
19333         need this anymore since we can use MemberCache.FindMembers directly.
19334
19335 2002-08-19  Martin Baulig  <martin@gnome.org>
19336
19337         * typemanager.cs (MemberCache): When creating the cache for an
19338         interface type, add all inherited members.
19339         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
19340         to `out bool used_cache' and documented it.
19341         (TypeManager.MemberLookup): If we already used the cache in the first
19342         iteration, we don't need to do the interfaces check.
19343
19344 2002-08-19  Martin Baulig  <martin@gnome.org>
19345
19346         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
19347         here from IMemberFinder and don't implement this interface anymore.
19348         (DeclSpace.MemberCache): Moved here from IMemberFinder.
19349
19350         * typemanager.cs (IMemberFinder): This interface is now only used by
19351         classes which actually support the member cache.
19352         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
19353         since we only put DeclSpaces into this Hashtable.
19354         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
19355         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
19356
19357 2002-08-16  Martin Baulig  <martin@gnome.org>
19358
19359         * typemanager.cs (ICachingMemberFinder): Removed.
19360         (IMemberFinder.MemberCache): New property.
19361         (TypeManager.FindMembers): Merged this with RealFindMembers().
19362         This function will never be called from TypeManager.MemberLookup()
19363         so we can't use the cache here, just the IMemberFinder.
19364         (TypeManager.MemberLookup_FindMembers): Check whether the
19365         IMemberFinder has a MemberCache and call the cache's FindMembers
19366         function.
19367         (MemberCache): Rewrote larger parts of this yet another time and
19368         cleaned it up a bit.
19369
19370 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
19371
19372         * driver.cs (LoadArgs): Support quoting.
19373
19374         (Usage): Show the CSC-like command line arguments.
19375
19376         Improved a few error messages.
19377
19378 2002-08-15  Martin Baulig  <martin@gnome.org>
19379
19380         * typemanager.cs (IMemberContainer.Type): New property.
19381         (IMemberContainer.IsInterface): New property.
19382
19383         The following changes are conditional to BROKEN_RUNTIME, which is
19384         defined at the top of the file.
19385
19386         * typemanager.cs (MemberCache.MemberCache): Don't add the base
19387         class'es members, but add all members from TypeHandle.ObjectType
19388         if we're an interface.
19389         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
19390         is the current type.
19391         (MemberCache.CacheEntry.Container): Removed this field.
19392         (TypeHandle.GetMembers): Include inherited members.
19393
19394 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19395
19396         * typemanager.cs: fixed compilation and added a comment on a field that
19397         is never used.
19398
19399 2002-08-15  Martin Baulig  <martin@gnome.org>
19400
19401         * class.cs (ConstructorInitializer.Resolve): In the
19402         Expression.MemberLookup call, use the queried_type as
19403         invocation_type.
19404
19405         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
19406         declared' attribute, it's always true.
19407         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
19408         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
19409         temporary wrapper for FindMembers which tells MemberLookup whether
19410         members from the base classes are included in the return value.
19411         This will go away soon.
19412         (TypeManager.MemberLookup): Use this temporary hack here; once the
19413         new MemberCache is completed, we don't need to do the DeclaredOnly
19414         looping here anymore since the MemberCache will take care of this.
19415         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
19416         (MemberCache): When creating the MemberCache for a class, get
19417         members from the current class and all its base classes.
19418         (MemberCache.CacheEntry.Container): New field.  This is a
19419         temporary hack until the Mono runtime is fixed to distinguish
19420         between ReflectedType and DeclaringType.  It allows us to use MCS
19421         with both the MS runtime and the unfixed Mono runtime without
19422         problems and without accecting performance.
19423         (MemberCache.SearchMembers): The DeclaredOnly looping from
19424         TypeManager.MemberLookup is now done here.      
19425
19426 2002-08-14  Martin Baulig  <martin@gnome.org>
19427
19428         * statement.cs (MyStructInfo.MyStructInfo): Don't call
19429         Type.GetFields on dynamic types but get the fields from the
19430         corresponding TypeContainer.
19431         (MyStructInfo.GetStructInfo): Added check for enum types.
19432
19433         * typemanager.cs (MemberList.IsSynchronized): Implemented.
19434         (MemberList.SyncRoot): Implemented.
19435         (TypeManager.FilterWithClosure): No need to check permissions if
19436         closure_start_type == closure_invocation_type, don't crash if
19437         closure_invocation_type is null.
19438
19439 2002-08-13  Martin Baulig  <martin@gnome.org>
19440
19441         Rewrote TypeContainer.FindMembers to use a member cache.  This
19442         gives us a speed increase of about 35% for the self-hosting MCS
19443         build and of about 15-20% for the class libs (both on GNU/Linux).
19444
19445         * report.cs (Timer): New class to get enhanced profiling.  This
19446         whole class is "TIMER" conditional since it remarkably slows down
19447         compilation speed.
19448
19449         * class.cs (MemberList): New class.  This is an IList wrapper
19450         which we're now using instead of passing MemberInfo[]'s around to
19451         avoid copying this array unnecessarily.
19452         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
19453         (ICachingMemberFinder, IMemberContainer): New interface.
19454         (TypeManager.FilterWithClosure): If `criteria' is null, the name
19455         has already been checked, otherwise use it for the name comparision.
19456         (TypeManager.FindMembers): Renamed to RealMemberFinder and
19457         provided wrapper which tries to use ICachingMemberFinder.FindMembers
19458         if possible.  Returns a MemberList, not a MemberInfo [].
19459         (TypeHandle): New class, implements IMemberContainer.  We create
19460         one instance of this class per type, it contains a MemberCache
19461         which is used to do the member lookups.
19462         (MemberCache): New class.  Each instance of this class contains
19463         all members of a type and a name-based hash table.
19464         (MemberCache.FindMembers): This is our new member lookup
19465         function.  First, it looks up all members of the requested name in
19466         the hash table.  Then, it walks this list and sorts out all
19467         applicable members and returns them.
19468
19469 2002-08-13  Martin Baulig  <martin@gnome.org>
19470
19471         In addition to a nice code cleanup, this gives us a performance
19472         increase of about 1.4% on GNU/Linux - not much, but it's already
19473         half a second for the self-hosting MCS compilation.
19474
19475         * typemanager.cs (IMemberFinder): New interface.  It is used by
19476         TypeManager.FindMembers to call FindMembers on a TypeContainer,
19477         Enum, Delegate or Interface.
19478         (TypeManager.finder_to_member_finder): New PtrHashtable.
19479         (TypeManager.finder_to_container): Removed.
19480         (TypeManager.finder_to_delegate): Removed.
19481         (TypeManager.finder_to_interface): Removed.
19482         (TypeManager.finder_to_enum): Removed.
19483
19484         * interface.cs (Interface): Implement IMemberFinder.
19485
19486         * delegate.cs (Delegate): Implement IMemberFinder.
19487
19488         * enum.cs (Enum): Implement IMemberFinder.
19489
19490         * class.cs (TypeContainer): Implement IMemberFinder.
19491
19492 2002-08-12  Martin Baulig  <martin@gnome.org>
19493
19494         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
19495
19496 2002-08-12  Martin Baulig  <martin@gnome.org>
19497
19498         * ecore.cs (ITypeExpression): New interface for expressions which
19499         resolve to a type.
19500         (TypeExpression): Renamed to TypeLookupExpression.
19501         (Expression.DoResolve): If we're doing a types-only lookup, the
19502         expression must implement the ITypeExpression interface and we
19503         call DoResolveType() on it.
19504         (SimpleName): Implement the new ITypeExpression interface.
19505         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
19506         hack, the situation that we're only looking up types can't happen
19507         anymore when this method is called.  Moved the type lookup code to
19508         DoResolveType() and call it.
19509         (SimpleName.DoResolveType): This ITypeExpression interface method
19510         is now doing the types-only lookup.
19511         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
19512         (ResolveFlags): Added MaskExprClass.
19513
19514         * expression.cs (MemberAccess): Implement the ITypeExpression
19515         interface.
19516         (MemberAccess.DoResolve): Added support for a types-only lookup
19517         when we're called via ITypeExpression.DoResolveType().
19518         (ComposedCast): Implement the ITypeExpression interface.
19519
19520         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
19521         Expression.Resolve() with ResolveFlags.Type instead.
19522
19523 2002-08-12  Martin Baulig  <martin@gnome.org>
19524
19525         * interface.cs (Interface.Define): Apply attributes.
19526
19527         * attribute.cs (Attribute.ApplyAttributes): Added support for
19528         interface attributes.
19529
19530 2002-08-11  Martin Baulig  <martin@gnome.org>
19531
19532         * statement.cs (Block.Emit): Only check the "this" variable if we
19533         do not always throw an exception.
19534
19535         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
19536         whether the property has a set accessor.
19537
19538 2002-08-11  Martin Baulig  <martin@gnome.org>
19539
19540         Added control flow analysis support for structs.
19541
19542         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
19543         with control flow analysis turned off.
19544         (IVariable): New interface.
19545         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
19546         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
19547         (FieldExpr.DoResolve): Resolve the instance expression with flow
19548         analysis turned off and do the definite assignment check after the
19549         resolving when we know what the expression will resolve to.
19550
19551         * expression.cs (LocalVariableReference, ParameterReference):
19552         Implement the new IVariable interface, only call the flow analysis
19553         code if ec.DoFlowAnalysis is true.
19554         (This): Added constructor which takes a Block argument.  Implement
19555         the new IVariable interface.
19556         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
19557         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
19558         This does the definite assignment checks for struct members.
19559
19560         * class.cs (Constructor.Emit): If this is a non-static `struct'
19561         constructor which doesn't have any initializer, call
19562         Block.AddThisVariable() to tell the flow analysis code that all
19563         struct elements must be initialized before control returns from
19564         the constructor.
19565
19566         * statement.cs (MyStructInfo): New public class.
19567         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
19568         argument to this indexer.  If non-zero, check an individual struct
19569         member, not the whole struct.
19570         (FlowBranching.CheckOutParameters): Check struct members.
19571         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
19572         overloaded versions of these methods which take an additional
19573         `int field_idx' argument to check struct members.
19574         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
19575         overloaded versions of these methods which take an additional
19576         `string field_name' argument to check struct member.s
19577         (VariableInfo): Implement the IVariable interface.
19578         (VariableInfo.StructInfo): New public property.  Returns the
19579         MyStructInfo instance of the variable if it's a struct or null.
19580         (Block.AddThisVariable): New public method.  This is called from
19581         Constructor.Emit() for non-static `struct' constructor which do
19582         not have any initializer.  It creates a special variable for the
19583         "this" instance variable which will be checked by the flow
19584         analysis code to ensure that all of the struct's fields are
19585         initialized before control returns from the constructor.
19586         (UsageVector): Added support for struct members.  If a
19587         variable/parameter is a struct with N members, we reserve a slot
19588         in the usage vector for each member.  A struct is considered fully
19589         initialized if either the struct itself (slot 0) or all its
19590         members are initialized.
19591
19592 2002-08-08  Martin Baulig  <martin@gnome.org>
19593
19594         * driver.cs (Driver.MainDriver): Only report an error CS5001
19595         if there were no compilation errors.
19596
19597         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
19598         `UnsafeContext' property to determine whether the parent is in
19599         unsafe context rather than checking the parent's ModFlags:
19600         classes nested in an unsafe class are unsafe as well.
19601
19602 2002-08-08  Martin Baulig  <martin@gnome.org>
19603
19604         * statement.cs (UsageVector.MergeChildren): Distinguish between
19605         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
19606         we return.  Added test17() and test18() to test-154.cs.
19607
19608 2002-08-08  Martin Baulig  <martin@gnome.org>
19609
19610         * typemanager.cs (TypeManager.FilterWithClosure): If we have
19611         Family access, make sure the invoking type isn't a subclass of the
19612         queried type (that'd be a CS1540).
19613
19614         * ecore.cs (Expression.MemberLookup): Added overloaded version of
19615         this method which takes an additional `Type invocation_type'.
19616
19617         * expression.cs (BaseAccess.DoResolve): Use the base type as
19618         invocation and query type.
19619         (MemberAccess.DoResolve): If the lookup failed and we're about to
19620         report a CS0122, try a lookup with the ec.ContainerType - if this
19621         succeeds, we must report a CS1540.
19622
19623 2002-08-08  Martin Baulig  <martin@gnome.org>
19624
19625         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
19626         (MethodGroupExpr): Implement the IMemberExpr interface.
19627
19628         * expression (MemberAccess.ResolveMemberAccess): No need to have
19629         any special code for MethodGroupExprs anymore, they're now
19630         IMemberExprs.   
19631
19632 2002-08-08  Martin Baulig  <martin@gnome.org>
19633
19634         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
19635         Family, FamANDAssem and FamORAssem permissions.
19636         (TypeManager.IsSubclassOrNestedChildOf): New public method.
19637
19638 2002-08-08  Martin Baulig  <martin@gnome.org>
19639
19640         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
19641         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
19642         or loop block.
19643
19644 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
19645
19646         * driver.cs: implemented /resource option to embed managed resources.
19647
19648 2002-08-07  Martin Baulig  <martin@gnome.org>
19649
19650         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
19651         (FieldBase.HasFieldInitializer): New public property.
19652         (FieldBase.GetInitializerExpression): New public method.  Resolves and
19653         returns the field initializer and makes sure it is only resolved once.
19654         (TypeContainer.EmitFieldInitializers): Call
19655         FieldBase.GetInitializerExpression to get the initializer, this ensures
19656         that it isn't resolved multiple times.
19657
19658         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
19659         the resolving process (SimpleName/MemberLookup) that we're currently
19660         emitting a field initializer (which must not access any instance members,
19661         this is an error CS0236).
19662
19663         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
19664         argument, if the `IsFieldInitializer' flag is set, we must report and
19665         error CS0236 and not an error CS0120.   
19666
19667 2002-08-07  Martin Baulig  <martin@gnome.org>
19668
19669         * ecore.cs (IMemberExpr): New public interface.
19670         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
19671         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
19672         if the expression is an IMemberExpr.
19673
19674         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
19675         to be null, implicitly default to `this' if we're non-static in
19676         this case.  Simplified the code a lot by using the new IMemberExpr
19677         interface.  Also fixed bug #28176 here.
19678
19679 2002-08-06  Martin Baulig  <martin@gnome.org>
19680
19681         * cs-parser.jay (SimpleLookup): Removed.  We need to create
19682         ParameterReferences during semantic analysis so that we can do a
19683         type-only search when resolving Cast, TypeOf and SizeOf.
19684         (block): Pass the `current_local_parameters' to the Block's
19685         constructor.
19686
19687         * class.cs (ConstructorInitializer): Added `Parameters parameters'
19688         argument to the constructor.
19689         (ConstructorInitializer.Resolve): Create a temporary implicit
19690         block with the parameters.
19691
19692         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
19693         references here if we aren't doing a type-only search.
19694
19695         * statement.cs (Block): Added constructor which takes a
19696         `Parameters parameters' argument.
19697         (Block.Parameters): New public property.
19698
19699         * support.cs (InternalParameters.Parameters): Renamed `parameters'
19700         to `Parameters' and made it public readonly.
19701
19702 2002-08-06  Martin Baulig  <martin@gnome.org>
19703
19704         * ecore.cs (Expression.Warning): Made this public as well.
19705
19706         * report.cs (Report.Debug): Print the contents of collections.
19707
19708 2002-08-06  Martin Baulig  <martin@gnome.org>
19709
19710         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
19711         used to tell Resolve() which kinds of expressions it may return.
19712         (Expression.Resolve): Added overloaded version of this method which
19713         takes a `ResolveFlags flags' argument.  This can be used to tell
19714         Resolve() which kinds of expressions it may return.  Reports a
19715         CS0118 on error.
19716         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
19717         ResolveFlags.SimpleName.
19718         (Expression.Error118): Added overloaded version of this method which
19719         takes a `ResolveFlags flags' argument.  It uses the flags to determine
19720         which kinds of expressions are allowed.
19721
19722         * expression.cs (Argument.ResolveMethodGroup): New public method.
19723         Resolves an argument, but allows a MethodGroup to be returned.
19724         This is used when invoking a delegate.
19725
19726         * TODO: Updated a bit.
19727
19728 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19729
19730         Fixed compilation with csc.
19731
19732         * ecore.cs: Expression.Error made public. Is this correct? Should
19733         Warning be made public too?
19734
19735         * expression.cs: use ea.Location instead of ea.loc.
19736         [FIXME:  Filed as bug #28607: MCS must report these errors.]
19737
19738 2002-08-06  Martin Baulig  <martin@gnome.org>
19739
19740         * ecore.cs (Expression.loc): Moved the location here instead of
19741         duplicating it in all derived classes.
19742         (Expression.Location): New public property.
19743         (Expression.Error, Expression.Warning): Made them non-static and
19744         removed the location argument.
19745         (Expression.Warning): Added overloaded version which takes an
19746         `int level' argument.
19747         (Expression.Error118): Make this non-static and removed the
19748         expression and location arguments.
19749         (TypeExpr): Added location argument to the constructor.
19750
19751         * expression.cs (StaticCallExpr): Added location argument to
19752         the constructor.
19753         (Indirection, PointerArithmetic): Likewise.
19754         (CheckedExpr, UnCheckedExpr): Likewise.
19755         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
19756         (StringPtr): Likewise.
19757
19758
19759 2002-08-05  Martin Baulig  <martin@gnome.org>
19760
19761         * expression.cs (BaseAccess.DoResolve): Actually report errors.
19762
19763         * assign.cs (Assign.DoResolve): Check whether the source
19764         expression is a value or variable.
19765
19766         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
19767         while resolving the corresponding blocks.
19768
19769         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
19770         an error, don't silently return null.
19771
19772         * statement.cs (Block.AddVariable): Do the error reporting here
19773         and distinguish between CS0128 and CS0136.
19774         (Block.DoResolve): Report all unused labels (warning CS0164).
19775         (LabeledStatement): Pass the location to the constructor.
19776         (LabeledStatement.HasBeenReferenced): New property.
19777         (LabeledStatement.Resolve): Set it to true here.
19778
19779         * statement.cs (Return.Emit): Return success even after reporting
19780         a type mismatch error (CS0126 or CS0127), this is what csc does and
19781         it avoids confusing the users with any consecutive errors.
19782
19783 2002-08-05  Martin Baulig  <martin@gnome.org>
19784
19785         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
19786
19787         * const.cs (Const.LookupConstantValue): Catch circular definitions.
19788
19789         * expression.cs (MemberAccess.DoResolve): Silently return if an
19790         error has already been reported.
19791
19792         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
19793         error has already been reported.
19794
19795 2002-08-05  Martin Baulig  <martin@gnome.org>
19796
19797         * statement.cs (UsageVector): Only initialize the `parameters'
19798         vector if we actually have any "out" parameters.
19799
19800 2002-08-05  Martin Baulig  <martin@gnome.org>
19801
19802         * expression.cs (Binary.ResolveOperator): When combining delegates,
19803         they must have the same type.
19804
19805 2002-08-05  Martin Baulig  <martin@gnome.org>
19806
19807         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
19808         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
19809         work with the ms runtime and we also don't need it: if we're a
19810         PropertyBuilder and not in the `indexer_arguments' hash, then we
19811         are a property and not an indexer.
19812
19813         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
19814         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
19815         since the latter one doesn't work with the ms runtime.
19816
19817 2002-08-03  Martin Baulig  <martin@gnome.org>
19818
19819         Fixed bugs #27998 and #22735.
19820
19821         * class.cs (Method.IsOperator): New public field.
19822         (Method.CheckBase): Report CS0111 if there's already a method
19823         with the same parameters in the current class.  Report CS0508 when
19824         attempting to change the return type of an inherited method.
19825         (MethodData.Emit): Report CS0179 if a method doesn't have a body
19826         and it's not marked abstract or extern.
19827         (PropertyBase): New abstract base class for Property and Indexer.
19828         (PropertyBase.CheckBase): Moved here from Property and made it work
19829         for indexers.
19830         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
19831         the same so we can reuse it there.
19832         (Property, Indexer): Derive from PropertyBase.
19833         (MethodSignature.inheritable_property_signature_filter): New delegate
19834         to find properties and indexers.
19835
19836         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
19837         argument and improved error reporting.
19838
19839         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
19840         EmptyReadOnlyParameters and made it a property.
19841
19842         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
19843         version of this method which takes a `PropertyInfo indexer'.
19844         (TypeManager.RegisterIndexer): New method.
19845
19846         * class.cs: Added myself as author of this file :-)
19847
19848 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19849
19850         * class.cs: fixed compilation on windoze.
19851
19852 2002-08-03  Martin Baulig  <martin@gnome.org>
19853
19854         * interface.cs (Interface.GetInterfaceBases): Check whether all
19855         base interfaces are at least as accessible than the current one.
19856
19857         * class.cs (TypeContainer.GetClassBases): Check whether base types
19858         are at least as accessible than the current type.
19859         (TypeContainer.AsAccessible): Implemented and made non-static.
19860         (MemberBase.CheckParameters): Report errors if the accessibility
19861         checks fail.
19862
19863         * delegate.cs (Delegate.Delegate): The default visibility is
19864         internal for top-level types and private for nested types.
19865         (Delegate.Define): Report errors if the accessibility checks fail.
19866
19867         * enum.cs (Enum.Enum): The default visibility is internal for
19868         top-level types and private for nested types.
19869         (Enum.DefineType): Compute the correct visibility.
19870
19871         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
19872         function which takes a `bool is_toplevel' instead of a TypeContainer.
19873
19874         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
19875         builtin type.
19876
19877 2002-08-02  Martin Baulig  <martin@gnome.org>
19878
19879         * expression.cs (LocalVariableReferenc): Added constructor which
19880         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
19881         (LocalVariableReference.IsReadOnly): New property.
19882         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
19883         variable is readonly, use our own readonly flag to do this; you can
19884         use the new constructor to get a writable reference to a read-only
19885         variable.
19886
19887         * cs-parser.jay (foreach_statement, using_statement): Get a writable
19888         reference to the local variable.
19889
19890 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
19891
19892         * rootcontext.cs (ResolveCore): Also include System.Exception
19893
19894         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
19895         we reach an EmptyStatement.
19896
19897         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
19898         is also fine.
19899
19900         * expression.cs (Binary.ResolveOperator): Check error result in
19901         two places.
19902
19903         use brtrue/brfalse directly and avoid compares to null.
19904
19905 2002-08-02  Martin Baulig  <martin@gnome.org>
19906
19907         * class.cs (TypeContainer.Define): Define all nested interfaces here.
19908         Fixes bug #28407, added test-155.cs.
19909
19910 2002-08-01  Martin Baulig  <martin@gnome.org>
19911
19912         * class.cs (Event.EmitDefaultMethod): Make this work with static
19913         events.  Fixes #28311, added verify-3.cs.
19914
19915 2002-08-01  Martin Baulig  <martin@gnome.org>
19916
19917         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
19918         `is_disposable' fields.
19919         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
19920         `hm.is_disposable' if we're using the collection pattern.
19921         (Foreach.EmitCollectionForeach): Use the correct type for the
19922         enumerator's local variable, only emit the try/finally block if
19923         necessary (fixes #27713).
19924
19925 2002-08-01  Martin Baulig  <martin@gnome.org>
19926
19927         * ecore.cs (Expression.report118): Renamed to Error118 and made
19928         it public static.
19929
19930         * statement.cs (Throw.Resolve): Check whether the expression is of
19931         the correct type (CS0118) and whether the type derives from
19932         System.Exception (CS0155).
19933         (Catch.Resolve): New method.  Do the type lookup here and check
19934         whether it derives from System.Exception (CS0155).
19935         (Catch.CatchType, Catch.IsGeneral): New public properties.
19936
19937         * typemanager.cs (TypeManager.exception_type): Added.
19938
19939 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
19940
19941         * driver.cs: Updated About function.
19942
19943 2002-07-31  Martin Baulig  <martin@gnome.org>
19944
19945         Implemented Control Flow Analysis.
19946
19947         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
19948         (EmitContext.CurrentBranching): Added.
19949         (EmitContext.StartFlowBranching): Added.
19950         (EmitContext.EndFlowBranching): Added.
19951         (EmitContext.KillFlowBranching): Added.
19952         (EmitContext.IsVariableAssigned): Added.
19953         (EmitContext.SetVariableAssigned): Added.
19954         (EmitContext.IsParameterAssigned): Added.
19955         (EmitContext.SetParameterAssigned): Added.
19956         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
19957         Added control flow analysis stuff here.
19958
19959         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
19960         resolve the expression as lvalue.
19961         (LocalVariableReference.DoResolve): Check whether the variable has
19962         already been assigned.
19963         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
19964         the parameter as assigned here.
19965         (ParameterReference.DoResolve): Check whether the parameter has already
19966         been assigned.
19967         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
19968         expression as lvalue.
19969
19970         * statement.cs (FlowBranching): New class for the flow analysis code.
19971         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
19972         (LabeledStatement.IsDefined): New public property.
19973         (LabeledStatement.AddUsageVector): New public method to tell flow
19974         analyis that the label may be reached via a forward jump.
19975         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
19976         flow analysis.
19977         (VariableInfo.Number): New public field.  This is used by flow analysis
19978         to number all locals of a block.
19979         (Block.CountVariables): New public property.  This is the number of
19980         local variables in this block (including the locals from all parent
19981         blocks).
19982         (Block.EmitMeta): Number all the variables.
19983
19984         * statement.cs: Added flow analysis support to all classes.
19985
19986 2002-07-31  Martin Baulig  <martin@gnome.org>
19987
19988         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
19989         To get debugging messages, compile mcs with /define:MCS_DEBUG and
19990         then use this argument.
19991
19992         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
19993
19994         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
19995         use this to specify /define options.
19996
19997 2002-07-29  Martin Baulig  <martin@gnome.org>
19998
19999         * statement.cs (Fixed): Moved all code that does variable lookups
20000         and resolvings from Emit to Resolve.
20001
20002         * statement.cs (For): Moved all code that does variable lookups
20003         and resolvings from Emit to Resolve.
20004
20005         * statement.cs (Using): Moved all code that does variable lookups
20006         and resolvings from Emit to Resolve.
20007
20008 2002-07-29  Martin Baulig  <martin@gnome.org>
20009
20010         * attribute.cs (Attribute.Resolve): Explicitly catch a
20011         System.NullReferenceException when creating the
20012         CustromAttributeBuilder and report a different warning message.
20013
20014 2002-07-29  Martin Baulig  <martin@gnome.org>
20015
20016         * support.cs (ParameterData.ParameterName): Added method to
20017         get the name of a parameter.
20018
20019         * typemanager.cs (TypeManager.IsValueType): New public method.
20020
20021 2002-07-29  Martin Baulig  <martin@gnome.org>
20022
20023         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
20024         is a flag which specifies that it's either ref or out.
20025         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
20026         the out parameter to `out Parameter.Modifier mod', also set the
20027         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
20028
20029         * support.cs (InternalParameters.ParameterModifier): Distinguish
20030         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20031         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20032
20033         * expression.cs (Argument.GetParameterModifier): Distinguish
20034         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20035         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20036
20037 2002-07-29  Martin Baulig  <martin@gnome.org>
20038
20039         * expression.cs (ParameterReference.ParameterReference): Added
20040         `Location loc' argument to the constructor.
20041
20042         * cs-parser.jay: Pass location to ParameterReference.
20043
20044 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
20045
20046         * statement.cs (Try): Initialize the location.
20047
20048         * cs-parser.jay: pass location to Try.
20049
20050         * expression.cs (Unary.Reduce): Change the prototype to return
20051         whether a constant fold could be performed or not.  The result is
20052         returned in an out parameters.  In the case of Indirection and
20053         AddressOf, we want to perform the full tests.
20054
20055 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
20056
20057         * statement.cs (Statement.Emit): Flag dead code.
20058
20059 2002-07-27  Andrew Birkett  <andy@nobugs.org>
20060
20061         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
20062
20063 2002-07-27  Martin Baulig  <martin@gnome.org>
20064
20065         * class.cs (MethodData.Define): Put back call to
20066         TypeManager.AddMethod(), accidentally commented this out.
20067
20068         * report.cs (Debug): New public method to print debugging information,
20069         this is `[Conditional ("DEBUG")]'.
20070
20071 2002-07-26  Martin Baulig  <martin@gnome.org>
20072
20073         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
20074         (switch_statement): Push the current_block to the switch_stack and
20075         pop it again when we're done with the switch.
20076         (switch_section): The new block is a child of the current_block.
20077         Fixes bug #24007, added test-152.cs.
20078
20079 2002-07-27  Martin Baulig  <martin@gnome.org>
20080
20081         * expression.cs (Invocation.EmitArguments): When calling a varargs
20082         function with only its fixed arguments, we need to pass an empty
20083         array.
20084
20085 2002-07-27  Martin Baulig  <martin@gnome.org>
20086
20087         Mono 0.13 has been released.
20088
20089 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
20090
20091         * driver.cs: Rename --resource to --linkres, because that is what
20092         we do currently, we dont support --resource yet.
20093
20094         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
20095
20096 2002-07-25  Martin Baulig  <martin@gnome.org>
20097
20098         * class.cs (MethodData): New public class.  This is a `method builder'
20099         class for a method or one accessor of a Property/Indexer/Event.
20100         (MethodData.GetMethodFlags): Moved here from MemberBase.
20101         (MethodData.ApplyAttributes): Likewise.
20102         (MethodData.ApplyObsoleteAttribute): Likewise.
20103         (MethodData.ApplyConditionalAttribute): Likewise.
20104         (MethodData.ApplyDllImportAttribute): Likewise.
20105         (MethodData.CheckAbstractAndExternal): Likewise.
20106         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
20107         (MethodData.Emit): Formerly known as Method.Emit().
20108         (MemberBase): Moved everything which was specific to a single
20109         accessor/method to MethodData.
20110         (Method): Create a new MethodData and call Define() and Emit() on it.
20111         (Property, Indexer, Event): Create a new MethodData objects for each
20112         accessor and call Define() and Emit() on them.
20113
20114 2002-07-25  Martin Baulig  <martin@gnome.org>
20115
20116         Made MethodCore derive from MemberBase to reuse the code from there.
20117         MemberBase now also checks for attributes.
20118
20119         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
20120         (MemberBase.GetMethodFlags): Moved here from class Method and marked
20121         as virtual.
20122         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
20123         `CallingConventions cc' and `Attributes opt_attrs' arguments.
20124         (MemberBase.ApplyAttributes): New virtual method; applies the
20125         attributes to a method or accessor.
20126         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
20127         (MemberBase.ApplyConditionalAttribute): Likewise.
20128         (MemberBase.ApplyDllImportAttribute): Likewise.
20129         (MemberBase.CheckAbstractAndExternal): Likewise.
20130         (MethodCore.ParameterTypes): This is now a property instead of a
20131         method, it's initialized from DoDefineParameters().
20132         (MethodCore.ParameterInfo): Removed the set accessor.
20133         (MethodCore.DoDefineParameters): New protected virtual method to
20134         initialize ParameterTypes and ParameterInfo.
20135         (Method.GetReturnType): We can now simply return the MemberType.
20136         (Method.GetMethodFlags): Override the MemberBase version and add
20137         the conditional flags.
20138         (Method.CheckBase): Moved some code from Define() here, call
20139         DoDefineParameters() here.
20140         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
20141         here to avoid some larger code duplication.
20142         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
20143         ensure that abstract and external accessors don't declare a body.
20144
20145         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
20146         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
20147         lookup in the attribute's parent classes, so we need to abort as soon
20148         as we found the first match.
20149         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
20150         the attribute has no arguments.
20151
20152         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
20153         of a Method.
20154
20155 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20156
20157         * cs-parser.jay: reverted previous patch.
20158
20159 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20160
20161         * cs-parser.jay: fixed bug #22119.
20162
20163 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20164
20165         * attribute.cs: fixed compilation. The error was:
20166         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
20167         be assigned to before control leaves the current method."
20168         [FIXME:  Filed as bug #28186: MCS must report this error.]
20169
20170 2002-07-25  Martin Baulig  <martin@gnome.org>
20171
20172         * attribute.cs (Attribute.Conditional_GetConditionName): New static
20173         method to pull the condition name ouf of a Conditional attribute.
20174         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
20175         the obsolete message and error flag out of an Obsolete attribute.
20176
20177         * class.cs (Method.GetMethodFlags): New public method to get the
20178         TypeManager.MethodFlags for this method.
20179         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
20180         private methods.
20181         (Method.Define): Get and apply the Obsolete and Conditional attributes;
20182         if we're overriding a virtual function, set the new private variable
20183         `parent_method'; call the new TypeManager.AddMethod().
20184
20185         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
20186         the MethodBuilder and the Method in a PtrHashtable.
20187         (TypeManager.builder_to_method): Added for this purpose.
20188         (TypeManager.MethodFlags): Added IsObsoleteError.
20189         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
20190         Obsolete and Conditional arguments in MethodBuilders.  If we discover
20191         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
20192         the message from the attribute.
20193
20194 2002-07-24  Martin Baulig  <martin@gnome.org>
20195
20196         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
20197         preprocessor directives, ensure that the argument to #define/#undef is
20198         exactly one identifier and that it's actually an identifier.
20199
20200         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
20201         did not work ....
20202
20203 2002-07-24  Martin Baulig  <martin@gnome.org>
20204
20205         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
20206         initialize it to TypeManager.object_type in the constructor.
20207         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
20208         of the `hm.get_current' method if we're using the collection pattern.
20209         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
20210         for the explicit conversion to make it work when we're using the collection
20211         pattern and the `Current' property has a different return type than `object'.
20212         Fixes #27713.
20213
20214 2002-07-24  Martin Baulig  <martin@gnome.org>
20215
20216         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
20217         does not match, but don't report any errors.  This method is called in
20218         order for all methods in a MethodGroupExpr until a matching method is
20219         found, so we don't want to bail out if the first method doesn't match.
20220         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
20221         matches, report the 123.  Fixes #28070.
20222
20223 2002-07-24  Martin Baulig  <martin@gnome.org>
20224
20225         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
20226         TypeManager.TypeToCoreType() to the top of the method so the
20227         following equality checks will work.  Fixes #28107.
20228
20229 2002-07-24  Martin Baulig  <martin@gnome.org>
20230
20231         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
20232         operand is of type uint, and the other operand is of type sbyte,
20233         short or int, the operands are converted to type long." -
20234         Actually do what this comment already told us.  Fixes bug #28106,
20235         added test-150.cs.
20236
20237 2002-07-24  Martin Baulig  <martin@gnome.org>
20238
20239         * class.cs (MethodBase): New abstract class.  This is now a base
20240         class for Property, Indexer and Event to avoid some code duplication
20241         in their Define() and DefineMethods() methods.
20242         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
20243         generic methods for Define() and DefineMethods().
20244         (FieldBase): Derive from MemberBase, not MemberCore.
20245         (Property): Derive from MemberBase, not MemberCore.
20246         (Property.DefineMethod): Moved all the code from this method to the
20247         new MethodBase.DefineAccessor(), just call it with appropriate
20248         argumetnts.
20249         (Property.Define): Call the new Property.DoDefine(), this does some
20250         sanity checks and we don't need to duplicate the code everywhere.
20251         (Event): Derive from MemberBase, not MemberCore.
20252         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
20253         accessors, this will also make them work with interface events.
20254         (Indexer): Derive from MemberBase, not MemberCore.
20255         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
20256         (Indexer.Define): Use the new MethodBase functions.
20257
20258         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
20259         argument to the constructor.
20260         (Interface.FindMembers): Added support for interface events.
20261         (Interface.PopluateEvent): Implemented.
20262
20263         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
20264
20265 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
20266
20267         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
20268         but this is required to check for a method name being the same as
20269         the containing class.  
20270
20271         Handle this now.
20272
20273 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20274
20275         * interface.cs: initialize variable.
20276
20277 2002-07-23  Martin Baulig  <martin@gnome.org>
20278
20279         Implemented the IndexerName attribute in interfaces.
20280
20281         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
20282         name if this is an explicit interface implementation.
20283         (Indexer.InterfaceIndexerName): New public variable.  If we're
20284         implementing an interface indexer, this is the IndexerName in that
20285         interface.  Otherwise, it's the IndexerName.
20286         (Indexer.DefineMethod): If we're implementing interface indexer,
20287         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
20288         and Pending.ImplementIndexer methods.
20289         (Indexer.Define): Also define the PropertyBuilder if we're
20290         implementing an interface indexer and this is neither an explicit
20291         interface implementation nor do the IndexerName match the one in
20292         the interface.
20293
20294         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
20295         If a method is defined here, then we always need to create a proxy
20296         for it.  This is used when implementing interface indexers.
20297         (Pending.IsInterfaceIndexer): New public method.
20298         (Pending.ImplementIndexer): New public method.
20299         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
20300         This is used when implementing interface indexers to define a proxy
20301         if necessary.
20302         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
20303         define a proxy if necessary.
20304
20305         * interface.cs (Interface.IndexerName): New public variable.
20306         (Interface.PopulateIndexer): Set the IndexerName.
20307         (Interface.DefineIndexers): New private method.  Populate all the
20308         indexers and make sure their IndexerNames match.
20309
20310         * typemanager.cs (IndexerPropertyName): Added support for interface
20311         indexers.
20312
20313 2002-07-22  Martin Baulig  <martin@gnome.org>
20314
20315         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
20316         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
20317         ret if HasReturnLabel.
20318         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
20319         variables.
20320
20321         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
20322         and set the ec.LoopBeginTryCatchLevel.
20323         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
20324         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
20325         the current ec.TryCatchLevel, the branch goes out of an exception
20326         block.  In this case, we need to use Leave and not Br.
20327
20328 2002-07-22  Martin Baulig  <martin@gnome.org>
20329
20330         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
20331         block unless the block does not always return or it is contained in
20332         another try { ... } catch { ... } block.  Fixes bug #26506.
20333         Added verify-1.cs to the test suite.
20334
20335 2002-07-22  Martin Baulig  <martin@gnome.org>
20336
20337         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
20338         then we do not always return.  Fixes bug #24985.
20339
20340 2002-07-22  Martin Baulig  <martin@gnome.org>
20341
20342         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
20343         lookup on a per-class level; ie. walk up the class hierarchy until we
20344         found at least one applicable method, then choose the best among them.
20345         Fixes bug #24463 and test-29.cs.
20346
20347 2002-07-22  Martin Baulig  <martin@gnome.org>
20348
20349         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
20350         return types of the methods.  The return type is not part of the
20351         signature and we must not check it to make the `new' modifier work.
20352         Fixes bug #27999, also added test-147.cs.
20353         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
20354
20355         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
20356         on the method's return type.
20357
20358 2002-07-21  Martin Baulig  <martin@gnome.org>
20359
20360         * assign.cs: Make this work if the rightmost source is a constant and
20361         we need to do an implicit type conversion.  Also adding a few more tests
20362         to test-38.cs which should have caught this.
20363
20364         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
20365         target in the makefile for this.  The makefile.gnu is primarily intended
20366         for end-users who don't want to debug the compiler.
20367
20368 2002-07-21  Martin Baulig  <martin@gnome.org>
20369
20370         * assign.cs: Improved the Assign class so it can now handle embedded
20371         assignments (X = Y = Z = something).  As a side-effect this'll now also
20372         consume less local variables.  test-38.cs now passes with MCS, added
20373         a few new test cases to that test.
20374
20375 2002-07-20  Martin Baulig  <martin@gnome.org>
20376
20377         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
20378         instructions.  Fixes bug #27977, also added test-146.cs.
20379
20380 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20381
20382         * cs-tokenizer.cs: fixed getHex ().
20383
20384 2002-07-19  Martin Baulig  <martin@gnome.org>
20385
20386         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
20387         not Type.GetType() to lookup the array type.  This is needed when
20388         we're constructing an array of a user-defined type.
20389         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
20390         single-dimensional arrays, but also for single-dimensial arrays of
20391         type decimal.
20392
20393 2002-07-19  Martin Baulig  <martin@gnome.org>
20394
20395         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
20396         this function is called, it's not allowed to share LocalBuilders
20397         among ILGenerators.
20398
20399 2002-07-19  Martin Baulig  <martin@gnome.org>
20400
20401         * expression.cs (Argument.Resolve): Report an error 118 when trying
20402         to pass a type as argument.
20403
20404 2002-07-18  Martin Baulig  <martin@gnome.org>
20405
20406         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
20407         Conv_R_Un for the signed `long' type.
20408
20409 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
20410
20411         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
20412         `expr' for the temporary result, as that will fail if we do
20413         multiple resolves on the same expression.
20414
20415 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
20416
20417         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
20418         ec.TypeContainer for looking up aliases. 
20419
20420         * class.cs (TypeContainer): Remove LookupAlias from here.
20421
20422         * decl.cs (DeclSpace); Move here.
20423
20424 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
20425
20426         * class.cs (FindMembers): Only call filter if the constructor
20427         bulider is not null.
20428
20429         Also handle delegates in `NestedTypes' now.  Now we will perform
20430         type lookups using the standard resolution process.  This also
20431         fixes a bug.
20432
20433         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
20434         This uses Expressions (the limited kind that can be parsed by the
20435         tree) instead of strings.
20436
20437         * expression.cs (ComposedCast.ToString): Implement, used to flag
20438         errors since now we have to render expressions.
20439
20440         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
20441         FormArrayType. 
20442
20443         * ecore.cs (SimpleName.ToString): ditto.
20444
20445         * cs-parser.jay: Instead of using strings to assemble types, use
20446         Expressions to assemble the type (using SimpleName, ComposedCast,
20447         MemberAccess).  This should fix the type lookups in declarations,
20448         because we were using a different code path for this.
20449
20450         * statement.cs (Block.Resolve): Continue processing statements
20451         even when there is an error.
20452
20453 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
20454
20455         * class.cs (Event.Define): Also remove the `remove' method from
20456         the list of pending items.
20457
20458         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
20459         generate more compact code. 
20460
20461 2002-07-17  Martin Baulig  <martin@gnome.org>
20462
20463         * const.cs (Const.LookupConstantValue): Add support for constant
20464         `unchecked' and `checked' expressions.
20465         Also adding test case test-140.cs for this.
20466
20467 2002-07-17  Martin Baulig  <martin@gnome.org>
20468
20469         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
20470         check whether mi.ReturnType implements the IEnumerator interface; the
20471         `==' and the IsAssignableFrom() will fail in this situation.
20472
20473 2002-07-16  Ravi Pratap  <ravi@ximian.com>
20474
20475         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
20476         here too.
20477
20478 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20479
20480         * expression.cs: fixed bug #27811.
20481
20482 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
20483
20484         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
20485         Molaro: when we are a ref, the value already contains a pointer
20486         value, do not take the address of it.
20487
20488 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
20489         * removed mb-parser.jay and mb-tokenizer.cs
20490
20491 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20492
20493         * expression.cs: check against the building corlib void type.
20494
20495 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
20496
20497         * ecore.cs: fix for valuetype static readonly fields: when 
20498         initializing them, we need their address, not the address of a copy.
20499
20500 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
20501
20502         * typemanager.cs: register also enum_type in corlib.
20503
20504 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20505
20506         * class.cs: allow calling this (but not base) initializers in structs.
20507
20508 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
20509
20510         * ecore.cs: make sure we compare against the building base types
20511         in GetTypeSize ().
20512
20513 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
20514
20515         * typemanager.cs: fix TypeToCoreType() to handle void and object
20516         (corlib gets no more typerefs after this change).
20517
20518 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
20519
20520         * expression.cs (ArrayCreation.EmitArrayArguments): use
20521         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
20522
20523         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
20524         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
20525         array indexes, the runtime actually forbids them.
20526
20527         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
20528         for array arguments here.
20529
20530         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
20531         instead of the default for ValueTypes.
20532
20533         (New.DoEmit): Use IsValueType instead of
20534         IsSubclassOf (value_type)
20535         (New.DoResolve): ditto.
20536         (Invocation.EmitCall): ditto.
20537
20538         * assign.cs (Assign): ditto.
20539
20540         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
20541         Statements *are* currently doing part of their resolution during
20542         Emit.  
20543
20544         Expressions do always resolve during resolve, but statements are
20545         only required to propagate resolution to their children.
20546
20547 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
20548
20549         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
20550
20551         (LoadAssembly): Do not add the dll if it is already specified
20552
20553         (MainDriver): Add the System directory to the link path at the end,
20554         after all the other -L arguments. 
20555
20556         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
20557         wrong opcode for loading bytes and bools (ldelem.i1 instead of
20558         ldelem.u1) and using the opposite for sbytes.
20559
20560         This fixes Digger, and we can finally run it.
20561
20562         * driver.cs (UnixParseOption): Move the option parsing here.  
20563         (CSCParseOption): Implement CSC-like parsing of options.
20564
20565         We now support both modes of operation, the old Unix way, and the
20566         new CSC-like way.  This should help those who wanted to make cross
20567         platform makefiles.
20568
20569         The only thing broken is that /r:, /reference: and /lib: are not
20570         implemented, because I want to make those have the same semantics
20571         as the CSC compiler has, and kill once and for all the confussion
20572         around this.   Will be doing this tomorrow.
20573
20574         * statement.cs (Unsafe.Resolve): The state is checked during
20575         resolve, not emit, so we have to set the flags for IsUnsfe here.
20576
20577 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20578
20579         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
20580         not catch the Error_ObjectRefRequired in SimpleName (as it is
20581         possible to have a class/instance variable name that later gets
20582         deambiguated), we have to check this here.      
20583
20584 2002-07-10  Ravi Pratap  <ravi@ximian.com>
20585
20586         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
20587         make static and put into Expression.
20588
20589         (Event.Define): Register the private field of the event with the 
20590         TypeManager so that GetFieldFromEvent can get at it.
20591
20592         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
20593         keep track of the private field associated with an event which
20594         has no accessors.
20595
20596         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
20597         private field.
20598
20599         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
20600
20601 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20602
20603         * expression.cs (Binary.EmitBranchable): this routine emits the
20604         Binary expression in a branchable context.  This basically means:
20605         we need to branch somewhere, not just get the value on the stack.
20606
20607         This works together with Statement.EmitBoolExpression.
20608
20609         * statement.cs (Statement.EmitBoolExpression): Use
20610         EmitBranchable. 
20611
20612 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
20613
20614         * statement.cs (For): Reduce the number of jumps in loops.
20615
20616         (For): Implement loop inversion for the For statement.
20617
20618         (Break): We can be breaking out of a Try/Catch controlled section
20619         (foreach might have an implicit try/catch clause), so we need to
20620         use Leave instead of Br.
20621
20622         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
20623         now).  If the instace expression supports IMemoryLocation, we use
20624         the AddressOf method from the IMemoryLocation to extract the
20625         address instead of emitting the instance.
20626
20627         This showed up with `This', as we were emitting the instance
20628         always (Emit) instead of the Address of This.  Particularly
20629         interesting when This is a value type, as we dont want the Emit
20630         effect (which was to load the object).
20631
20632 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
20633
20634         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
20635
20636         * statement.cs (Checked): Set the CheckedState during the resolve
20637         process too, as the ConvCast operations track the checked state on
20638         the resolve process, and not emit.
20639
20640         * cs-parser.jay (namespace_member_declaration): Flag that we have
20641         found a declaration when we do.  This is used to flag error 1529
20642
20643         * driver.cs: Report ok when we display the help only.
20644
20645 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
20646
20647         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
20648
20649 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
20650
20651         * cs-tokenizer.cs (define): We also have to track locally the
20652         defines.  AllDefines is just used for the Conditional Attribute,
20653         but we also need the local defines for the current source code. 
20654
20655 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
20656
20657         * statement.cs (While, For, Do): These loops can exit through a
20658         Break statement, use this information to tell whether the
20659         statement is the last piece of code.
20660
20661         (Break): Flag that we break.
20662
20663         * codegen.cs (EmitContexts): New `Breaks' state variable.
20664
20665 2002-07-03  Martin Baulig  <martin@gnome.org>
20666
20667         * class.cs (TypeContainer.MethodModifiersValid): Allow override
20668         modifiers in method declarations in structs.  Otherwise, you won't
20669         be able to override things like Object.Equals().
20670
20671 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20672
20673         * class.cs (Method, Property, Indexer): Do not allow the public
20674         modifier to be used in explicit interface implementations.
20675
20676         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
20677         override modifiers in method declarations in structs
20678
20679 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
20680
20681         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
20682         integer or real overflow, report an error
20683
20684 2002-07-02  Martin Baulig  <martin@gnome.org>
20685
20686         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
20687         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
20688         to tell the runtime about our newly created System.Object and
20689         System.ValueType types.
20690
20691 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20692
20693         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
20694         struct instead of Ldarg/Starg.
20695
20696 2002-07-02  Martin Baulig  <martin@gnome.org>
20697
20698         * expression.cs (Indirection.Indirection): Call
20699         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
20700
20701 2002-07-02  Martin Baulig  <martin@gnome.org>
20702
20703         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
20704         ValueType, call TypeManager.TypeToCoreType() on it.
20705         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
20706         the OpCodes.Newarr argument.
20707
20708 2002-07-02  Martin Baulig  <martin@gnome.org>
20709
20710         * expression.cs (Invocation.EmitCall): When compiling corlib,
20711         replace all calls to the system's System.Array type to calls to
20712         the newly created one.
20713
20714         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
20715         System.Array methods.
20716         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
20717         from the system's System.Array type which must be replaced.
20718
20719 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
20720
20721         * typemanager.cs: load unverifiable_code_ctor so we can build
20722         corlib using the correct type. Avoid using GetTypeCode() with
20723         TypeBuilders.
20724         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
20725         TypeManager.object_type to allow building corlib.
20726
20727 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
20728
20729         * ecore.cs: handle System.Enum separately in LoadFromPtr().
20730
20731 2002-07-01  Martin Baulig  <martin@gnome.org>
20732
20733         * class.cs: Make the last change actually work, we need to check
20734         whether `ifaces != null' to avoid a crash.
20735
20736 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20737
20738         * class.cs: when we build structs without fields that implement
20739         interfaces, we need to add the interfaces separately, since there is
20740         no API to both set the size and add the interfaces at type creation
20741         time.
20742
20743 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20744
20745         * expression.cs: the dimension arguments to the array constructors
20746         need to be converted if they are a long.
20747
20748 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
20749
20750         * class.cs: don't emit ldarg.0 if there is no parent constructor
20751         (fixes showstopper for corlib).
20752
20753 2002-06-29  Martin Baulig  <martin@gnome.org>
20754
20755         MCS now compiles corlib on GNU/Linux :-)
20756
20757         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
20758         ie. check for MethodImplOptions.InternalCall.
20759
20760         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
20761         and TypeManager.attribute_type are null, so we must explicitly check
20762         whether parent is not null to find out whether it's an attribute type.
20763         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
20764         and SetBuilder, not only if the property is neither abstract nor external.
20765         This is necessary to set the MethodImplOptions on the accessor methods.
20766         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
20767         SetBuilder, see Property.Emit().
20768
20769         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
20770         populate "System.Object", "System.ValueType" and "System.Attribute" since
20771         they've already been populated from BootCorlib_PopulateCoreTypes().
20772
20773 2002-06-29  Martin Baulig  <martin@gnome.org>
20774
20775         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
20776         is the NullLiteral, we also need to make sure that target_type is not
20777         an enum type.   
20778
20779 2002-06-29  Martin Baulig  <martin@gnome.org>
20780
20781         * rootcontext.cs (RootContext.ResolveCore): We must initialize
20782         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
20783         before calling BootstrapCorlib_ResolveDelegate ().
20784
20785 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20786
20787         * statement.cs: fixed build-breaker. All tests passed ok.
20788
20789 2002-06-27  Martin Baulig  <martin@gnome.org>
20790
20791         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
20792         for System.Decimal when compiling corlib.
20793
20794 2002-06-27  Martin Baulig  <martin@gnome.org>
20795
20796         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
20797         switch blocks which contain nothing but a default clause.
20798
20799 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
20800
20801        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
20802
20803 2002-06-27  Martin Baulig  <martin@gnome.org>
20804
20805         * ecore.cs (PropertyExpr.PropertyExpr): Call
20806         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
20807
20808         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
20809         is already a TypeBuilder.
20810
20811 2002-06-27  Martin Baulig  <martin@gnome.org>
20812
20813         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
20814         `target_type == TypeManager.array_type', not IsAssignableFrom() in
20815         the "from an array-type to System.Array" case.  This makes it work
20816         when compiling corlib.
20817
20818 2002-06-27  Martin Baulig  <martin@gnome.org>
20819
20820         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
20821         non-static PropertyExpr, set its InstanceExpression.  This makes
20822         the `ICollection.Count' property work in System/Array.cs.
20823
20824 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
20825
20826         * driver.cs: Made error handling more consistent.  Errors now
20827         tracked by Report class, so many methods which used to return int
20828         now return void.  Main() now prints success/failure and 
20829         errors/warnings message.
20830
20831         Renamed '--probe' compiler argument to '--expect-error'.  Removed
20832         the magic number return values (123 and 124).  Now, if the
20833         expected error occurs, the compiler exits with success (exit value
20834         0).  If the compilation completes without seeing that particular
20835         error, the compiler exits with failure (exit value 1).  The
20836         makefile in mcs/errors has been changed to handle the new behaviour.
20837
20838         * report.cs: Made 'expected error' number a property and renamed
20839         it from 'Probe' to 'ExpectedError'.
20840
20841         * genericparser.cs: Removed error handling support, since it is
20842         now all done by Report class.
20843
20844         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
20845         class, so parse() no longer returns an int.
20846
20847         * namespace.cs: Use Report.Error instead of GenericParser.error
20848
20849 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
20850
20851         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
20852         TypeContainer.AddOperator): At the front of the list put the
20853         explicit implementations, so they get resolved/defined first. 
20854
20855 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
20856
20857         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
20858         interface type is implemented by this TypeContainer.  Used during
20859         explicit interface implementation.
20860
20861         (Property.Define, Indexer.Define, Method.Define): Validate that
20862         the given interface in the explicit implementation is one of the
20863         base classes for the containing type.
20864
20865         Also if we are explicitly implementing an interface, but there is
20866         no match in the pending implementation table, report an error.
20867
20868         (Property.Define): Only define the property if we are
20869         not explicitly implementing a property from an interface.  Use the
20870         correct name also for those properties (the same CSC uses,
20871         although that is really not needed).
20872
20873         (Property.Emit): Do not emit attributes for explicitly implemented
20874         properties, as there is no TypeBuilder.
20875
20876         (Indexer.Emit): ditto.
20877
20878         Hiding then means that we do not really *implement* a pending
20879         implementation, which makes code fail.
20880
20881 2002-06-22  Martin Baulig  <martin@gnome.org>
20882
20883         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
20884         the return value of Object.GetType().  [FIXME: we need to do this whenever
20885         we get a type back from the reflection library].
20886
20887 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
20888
20889         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
20890
20891 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
20892
20893         * attribute.cs: Return null if we can not look up the type.
20894
20895         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
20896         the interface types found.
20897
20898         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
20899         interface types found.
20900
20901         * typemanager.cs (GetInterfaces): Make this routine returns alll
20902         the interfaces and work around the lame differences between
20903         System.Type and System.Reflection.Emit.TypeBuilder in the results
20904         result for GetInterfaces.
20905
20906         (ExpandInterfaces): Given an array of interface types, expand and
20907         eliminate repeated ocurrences of an interface.  This expands in
20908         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
20909         be IA, IB, IC.
20910
20911 2002-06-21  Martin Baulig  <martin@gnome.org>
20912
20913         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
20914         on System.Enum.
20915
20916 2002-06-21  Martin Baulig  <martin@gnome.org>
20917
20918         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
20919         and called with one of the core types, return the corresponding typebuilder for
20920         that type.
20921
20922         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
20923         element type.
20924
20925 2002-06-21  Martin Baulig  <martin@gnome.org>
20926
20927         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
20928         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
20929         (Expression.ConvertReferenceExplicit): Likewise.
20930
20931         * expression.cs (ElementAccess.DoResolve): Likewise.
20932         (ElementAccess.DoResolveLValue): Likewise.
20933
20934 2002-06-10  Martin Baulig  <martin@gnome.org>
20935
20936         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
20937         add the "value" parameter to the parameter list.
20938
20939         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
20940         to our caller.
20941
20942 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
20943
20944         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
20945         the argument to an int, uint, long or ulong, per the spec.  Also
20946         catch negative constants in array creation.
20947
20948 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
20949
20950         * class.cs: do not allow the same interface to appear twice in
20951         the definition list.
20952
20953 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
20954
20955         * ecore.cs: don't use ldlen with System.Array.
20956
20957 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
20958
20959         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
20960
20961 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
20962
20963         * modifiers.cs: produce correct field attributes for protected
20964         internal. Easy fix so miguel can work on ther harder stuff:-)
20965
20966 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
20967
20968         * pending.cs: New file.  Move the code from class.cs here.
20969         Support clearning the pending flag for all methods (when not doing
20970         explicit interface implementation).
20971
20972 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
20973
20974         * rootcontext.cs: added a couple more types needed to bootstrap.
20975
20976 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
20977
20978         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
20979         constructor in the type, instead of any constructor in the type
20980         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
20981         a bug in the Mono runtime when applying the params attribute). 
20982
20983 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
20984         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
20985
20986 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
20987
20988         * expression.cs (Unary.ResolveOperator): Use TypeManager
20989         to resolve the type.
20990
20991 2002-06-13  Ravi Pratap  <ravi@ximian.com>
20992
20993         * cs-parser.jay (enum_member_declaration): Pass in the attributes
20994         attached.
20995
20996         * enum.cs (AddEnumMember): Add support to store the attributes associated 
20997         with each member too.
20998
20999         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
21000         field builders too - this takes care of the enum member case.
21001
21002 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
21003
21004         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
21005         address-of operator on both value types and pointers.
21006
21007 2002-06-10  Martin Baulig  <martin@gnome.org>
21008
21009         * interface.cs (Interface.PopulateIndexer): Add the indexer's
21010         PropertyBuilder to the `property_builders' list.
21011
21012         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
21013         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
21014         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
21015         find any indexers which are inherited from an interface.
21016
21017 2002-06-09  Martin Baulig  <martin@gnome.org>
21018
21019         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
21020         the same type as the constant if necessary.  There's also a test-130.cs
21021         for this.
21022
21023         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
21024
21025         * typemanager.cs (TypeManager.ChangeType): Previously known as
21026         Enum.ChangeEnumType().
21027
21028 2002-06-09  Martin Baulig  <martin@gnome.org>
21029
21030         * expression.cs (Cast.TryReduce): Added support for consts.
21031
21032 2002-06-08  Ravi Pratap  <ravi@ximian.com>
21033
21034         * class.cs (Accessor): Hold attributes information so we can pass
21035         it along.
21036
21037         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
21038         Modify to pass in attributes attached to the methods.
21039
21040         (add_accessor_declaration, remove_accessor_declaration): Ditto.
21041
21042         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
21043         to handle the Accessor kind :-)
21044
21045         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
21046
21047 2002-06-08  Martin Baulig  <martin@gnome.org>
21048
21049         * expression.cs (Unary.TryReduceNegative): Added support for
21050         ULongConstants.
21051
21052 2002-06-08  Martin Baulig  <martin@gnome.org>
21053
21054         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
21055         name can't be found in the `defined_names' - the caller will do a
21056         MemberLookup in this case and thus find methods in System.Enum
21057         such as Enum.IsDefined().
21058
21059 2002-06-08  Martin Baulig  <martin@gnome.org>
21060
21061         * enum.cs (Enum.ChangeEnumType): This is a custom version of
21062         Convert.ChangeType() which works with TypeBuilder created types.
21063         (Enum.LookupEnumValue, Enum.Define): Use it here.
21064
21065         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
21066         `TypeBuilder.BaseType != null' check.
21067         (TypeContainer.FindMembers): Only lookup parent members if we
21068         actually have a parent.
21069         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
21070         (ConstructorInitializer.Resolve): Likewise.
21071
21072         * interface.cs (Interface.FindMembers): Added
21073         `TypeBuilder.BaseType != null' check.
21074
21075         * rootcontext.cs (RootContext.ResolveCore): Added
21076         "System.Runtime.CompilerServices.IndexerNameAttribute" to
21077         classes_second_stage.
21078
21079         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
21080         debug_type and trace_type when compiling with --nostdlib.       
21081
21082 2002-06-07  Martin Baulig  <martin@gnome.org>
21083
21084         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
21085         (AddField): Set it to true when adding a non-static field.
21086         (DefineType): Use `have_nonstatic_fields' to find out whether we
21087         have non-static fields, not `Fields != null'.
21088
21089 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
21090
21091         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
21092         dereferencing a null on the static-field code path)
21093
21094 2002-05-30  Martin Baulig  <martin@gnome.org>
21095
21096         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
21097         to take command line arguments.  Use reflection to call the new
21098         custom `Initialize' function on the symbol writer and pass it the
21099         command line arguments.
21100
21101         * driver.cs (--debug-args): New command line argument to pass command
21102         line arguments to the symbol writer.
21103
21104 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
21105
21106         * assign.cs (DoResolve): Forgot to do the implicit conversion to
21107         the target type for indexers and properties.  Thanks to Joe for
21108         catching this.
21109
21110 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
21111
21112         * typemanager.cs (MethodFlags): returns the method flags
21113         (Obsolete/ShouldIgnore) that control warning emission and whether
21114         the invocation should be made, or ignored. 
21115
21116         * expression.cs (Invocation.Emit): Remove previous hack, we should
21117         not do this on matching a base type, we should do this based on an attribute
21118
21119         Only emit calls to System.Diagnostics.Debug and
21120         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
21121         on the command line.
21122
21123         * rootcontext.cs: Global settings for tracing and debugging.
21124
21125         * cs-tokenizer.cs (define): New utility function to track
21126         defines.   Set the global settings for TRACE and DEBUG if found.
21127
21128 2002-05-25  Ravi Pratap  <ravi@ximian.com>
21129
21130         * interface.cs (Populate*): Pass in the TypeContainer as well as
21131         the DeclSpace as parameters so that we can create EmitContexts and
21132         then use that to apply attributes etc.
21133
21134         (PopulateMethod, PopulateEvent, PopulateProperty)
21135         (PopulateIndexer): Apply attributes everywhere.
21136
21137         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
21138         etc.
21139
21140         (ApplyAttributes): Update accordingly.
21141
21142         We now apply interface attributes for all members too.
21143
21144 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
21145
21146         * class.cs (Indexer.Define); Correctly check if we are explicit
21147         implementation (instead of checking the Name for a ".", we
21148         directly look up if the InterfaceType was specified).
21149
21150         Delay the creation of the PropertyBuilder.
21151
21152         Only create the PropertyBuilder if we are not an explicit
21153         interface implementation.   This means that explicit interface
21154         implementation members do not participate in regular function
21155         lookups, and hence fixes another major ambiguity problem in
21156         overload resolution (that was the visible effect).
21157
21158         (DefineMethod): Return whether we are doing an interface
21159         implementation. 
21160
21161         * typemanager.cs: Temporary hack until we get attributes in
21162         interfaces (Ravi is working on that) and we get IndexerName
21163         support in interfaces.
21164
21165         * interface.cs: Register the indexers as properties.
21166
21167         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
21168         warning, I have verified that this is a bug in the .NET runtime
21169         (JavaScript suffers of the same problem).
21170
21171         * typemanager.cs (MemberLookup): When looking up members for
21172         interfaces, the parent of an interface is the implicit
21173         System.Object (so we succeed in searches of Object methods in an
21174         interface method invocation.  Example:  IEnumerable x;  x.ToString
21175         ()) 
21176
21177 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
21178
21179         * class.cs (Event): Events should also register if they do
21180         implement the methods that an interface requires.
21181
21182         * typemanager.cs (MemberLookup); use the new GetInterfaces
21183         method. 
21184
21185         (GetInterfaces): The code used to lookup interfaces for a type is
21186         used in more than one place, factor it here. 
21187
21188         * driver.cs: Track the errors at the bottom of the file, we kept
21189         on going.
21190
21191         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
21192         instance if the method we are calling is static!
21193
21194 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
21195
21196         * attribute.cs (ApplyAttributes): Make this function filter out
21197         the IndexerName attribute (as that attribute in reality is never
21198         applied) and return the string constant for the IndexerName
21199         attribute. 
21200
21201         * class.cs (TypeContainer.Emit): Validate that all the indexers
21202         have the same IndexerName attribute, and if so, set the
21203         DefaultName attribute on the class. 
21204
21205         * typemanager.cs: The return value might contain other stuff (not
21206         only methods).  For instance, consider a method with an "Item"
21207         property and an Item method.
21208
21209         * class.cs: If there is a problem with the parameter types,
21210         return. 
21211
21212 2002-05-24  Ravi Pratap  <ravi@ximian.com>
21213
21214         * ecore.cs (ImplicitConversionExists): Wrapper function which also
21215         looks at user defined conversion after making a call to 
21216         StandardConversionExists - we need this for overload resolution.
21217
21218         * expression.cs : Update accordingly the various method calls.
21219
21220         This fixes 2 bugs filed against implicit user defined conversions 
21221
21222 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
21223
21224         * statement.cs: Track the result of the assignment.
21225
21226 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
21227
21228         * expression.cs (MemberAccess): Improved error reporting for
21229         inaccessible members.
21230
21231 2002-05-22  Martin Baulig  <martin@gnome.org>
21232
21233         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
21234         itself with debugging support.
21235
21236 2002-05-22  Martin Baulig  <martin@gnome.org>
21237
21238         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
21239         Removed, this isn't needed anymore.
21240
21241 2002-05-20  Martin Baulig  <martin@gnome.org>
21242
21243         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
21244         be underlying type for an enum.
21245
21246 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
21247
21248         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
21249         that splits out the loading of just the core types.
21250
21251         * rootcontext.cs (ResolveCore): Split the struct resolution in
21252         two, so we can load the enumeration underlying types before any
21253         enums are used.
21254
21255         * expression.cs (Is): Bandaid until we fix properly Switch (see
21256         bug #24985 for details).
21257
21258         * typemanager.cs (ImplementsInterface): The hashtable will contain
21259         a null if there are no interfaces implemented.
21260
21261 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
21262
21263         * cs-parser.jay (indexer_declarator): It is fine to have array
21264         parameters
21265
21266 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21267
21268         * typemanager.cs: (RegisterBuilder): New function used to register
21269         TypeBuilders that implement interfaces.  Since
21270         TypeBuilder.GetInterfaces (as usual) does not work with lame
21271         Reflection.Emit. 
21272         (AddUserType): register interfaces.
21273
21274         (ImplementsInterface): Use the builder_to_ifaces hash if we are
21275         dealing with TypeBuilder.  Also, arrays are showing up as
21276         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
21277         methods can not be invoked on them!
21278
21279         * ecore.cs (ExplicitReferenceConversionExists): Made public.
21280         (ImplicitReferenceConversionExists): Split out from
21281         StandardConversionExists. 
21282
21283         * expression.cs (As): We were only implementing one of the three
21284         cases for the as operator.  We now implement them all.
21285         (Is): Implement the various other cases for Is as well.
21286
21287         * typemanager.cs (CACHE): New define used to control if we want or
21288         not the FindMembers cache.  Seems to have a negative impact on
21289         performance currently
21290
21291         (MemberLookup): Nested types have full acess to
21292         enclosing type members
21293
21294         Remove code that coped with instance/static returns for events, we
21295         now catch this in RealFindMembers.
21296
21297         (RealFindMembers): only perform static lookup if the instance
21298         lookup did not return a type or an event.  
21299
21300 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21301
21302         * assign.cs (CompoundAssign): We pass more semantic information
21303         now to Compound Assignments than we did before: now we have all
21304         the information at hand, and now we resolve the target *before* we
21305         do the expression expansion, which allows the "CacheValue" method
21306         to have the effect we intended (before, a [x] += 1 would generate
21307         two differen ArrayAccess expressions from the ElementAccess,
21308         during the resolution process).
21309
21310         (CompoundAssign.DoResolve): Resolve target and original_source here.
21311
21312 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
21313
21314         * expression.cs (ArrayAccess): dropped debugging information. 
21315
21316         * typemanager.cs: Small bug fix: I was always returning i_members,
21317         instead of one of i_members or s_members (depending on which had
21318         the content).
21319
21320         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
21321         method is invoked before any code generation takes place, and it
21322         is a mechanism to inform that the expression will be invoked more
21323         than once, and that the method should use temporary values to
21324         avoid having side effects
21325
21326         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
21327
21328         * ecore.cs (Expression.CacheTemporaries): Provide empty default
21329         implementation.
21330
21331         * expression.cs (Indirection, ArrayAccess): Add support for
21332         CacheTemporaries in these two bad boys. 
21333
21334         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
21335         ldobj or ldind_ref.  
21336         (StoreFromPtr): Handle stobj as well.
21337
21338         * expression.cs (UnaryMutator): Share more code.
21339
21340         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
21341         down: I was not tracking the Filter function as well, which
21342         was affecting the results of the cache.
21343
21344 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
21345
21346         * attribute.cs: Remove the hack to handle the CharSet property on
21347         StructLayouts. 
21348
21349 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
21350
21351         * attribute.cs (DoResolve): More uglyness, we now only try to
21352         resolve the attribute partially, to extract the CharSet
21353         information (only if we are a StructLayout attribute).  Otherwise 
21354
21355         (GetExtraTypeInfo): Add some code to conditionally kill in the
21356         future this.   I am more and more convinced that the .NET
21357         framework has special code to handle the attribute setting on
21358         certain elements.
21359
21360         * expression.cs (IsParamsMethodApplicable): Revert my previous
21361         foreach change here, it was wrong.
21362
21363 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
21364
21365         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
21366         (pp_expr): do not abort on unknown input, just return.
21367         (eval): abort if there are pending chars.
21368
21369         * attribute.cs (Attribute.Resolve): Positional parameters are
21370         optional.  Deal with that case.
21371
21372         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
21373         the Ansi/Unicode/Auto information for the type.
21374
21375         (TypeContainer.DefineType): instantiate the EmitContext here, as
21376         we will be using it during the type definition (to resolve
21377         attributes) and during the emit phase.
21378
21379         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
21380         to pull type information out of the attributes
21381
21382         (Attribute.Resolve): track the constructor builder, and allow for
21383         multiple invocations (structs and classes will use this).
21384
21385         * ecore.cs (MemberLookupFinal): new version with all the
21386         parameters customizable.
21387
21388         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
21389         constructors.  Return if the result value is null (as the error
21390         would have been flagged already by MemberLookupFinal)
21391
21392         Do not allow instances of abstract classes or interfaces to be
21393         created.
21394
21395         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
21396         We have to compare the assembly property here when dealing with
21397         FamANDAssem and Assembly access modifiers, because we might be
21398         creating an assembly from *modules* (that means that we are not
21399         getting TypeBuilders for types defined in other modules that are
21400         part of this assembly).
21401
21402         (Method.Emit): If the method is marked abstract and has a body,
21403         emit an error. 
21404
21405         (TypeContainer.DefineMembers): If both the defined member and the
21406         parent name match are methods, then do not emit any warnings: let
21407         the Method.Define routine take care of flagging warnings.  But if
21408         there is a mismatch (method overrides something else, or method is
21409         overriwritten by something, then emit warning).
21410
21411         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
21412         set to null, this means `do not check for the return type on the
21413         signature'. 
21414
21415         (Method.Define): set the return type for the method signature to
21416         null, so that we get methods with the same name and parameters and
21417         different return types.  This is used to flag warning 114 (you are
21418         hiding a method, and you probably want to use the new/override
21419         keywords instead).
21420
21421         * typemanager.cs (MemberLookup): Implemented proper access
21422         control, closing a long standing set of bug reports.  The problem
21423         was that the Framework only has two bits: Public and NonPublic,
21424         and NonPublic includes private and protected methods, but we need
21425         to enforce the FamANDAssem, FamOrAssem and Family. 
21426
21427 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
21428
21429         * statement.cs (GotoCase): Return true: Ammounts to giving up
21430         knowledge on whether we return or not, and letting the other case
21431         be responsible for it.
21432
21433 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
21434
21435         * driver.cs: Do not load directories for each file processed, only
21436         do it if there is a pattern.
21437
21438         * ecore.cs: Report readonly assigns here as well, as we might have
21439         been resolved only by MemberAccess.
21440
21441         (SimpleName.SimpleNameResolve): Also be useful for LValue
21442         resolution.   We need this to propagate assign to local readonly variables
21443
21444         * typemanager.cs: Use a ptrhashtable for the criteria, because we
21445         do not want to reuse potential criteria memory.
21446
21447         * class.cs (MyEventBuilder): Set reflected_type;
21448
21449         * ecore.cs (Constantify): Added support for constifying bools.
21450
21451         (RootContext.LookupType): Added a cache for values looked up in
21452         the declaration space.
21453
21454         * typemanager.cs (FindMembers): Now is a front-end to
21455         RealFindMembers, and provides a two-level hashtable-based cache to
21456         the request.  
21457
21458         15% performance improvement: from 22.5 to 19.2 seconds.
21459
21460         * expression.cs (IsParamsMethodApplicable): use foreach.
21461         (Invocation.DoResolve): ditto.
21462         (New.DoResolve): ditto.
21463         (ArrayCreation.DoResolve): ditto.
21464
21465         * ecore.cs (FindMostEncompassingType): use foreach.
21466
21467         * delegate.cs (NewDelegate.DoResolve): Use foreach
21468
21469         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
21470         (RemoveMethods): use foreach.
21471
21472         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
21473         nested foreach statements instead of for, and also break out of
21474         the inner loop once a match is found.
21475
21476         (Invocation.OverloadResolve): Use foreach, simplify the code. 
21477
21478 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
21479
21480         * cfold.cs (BinaryFold): During an enumeration evaluation context,
21481         we actually unwrap the expression to allow for extra information
21482         to be extracted. 
21483
21484         * expression.cs: Use Shr_Un on unsigned operations. 
21485
21486 2002-05-08  Ravi Pratap  <ravi@ximian.com>
21487
21488         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
21489         applicable operators was not being considered correctly. This closes
21490         the bug Miguel reported.
21491
21492 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
21493
21494         * attribute.cs: check that the type derives from System.Attribute
21495         and report the correct error in that case (moved the duplicate code to
21496         its own method, too).
21497
21498 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
21499
21500         * attribute.cs: lookup attribute type name as the spec says: first the
21501         bare attribute name and then name + "Attribute" (nant compiles with
21502         mcs after this fix).
21503
21504 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
21505
21506         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
21507         Because of the way we parse things, we should try to see if a
21508         UIntConstant can fit in an integer.
21509
21510 2002-05-07  Ravi Pratap  <ravi@ximian.com>
21511
21512         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
21513         when we are in an explicit context.
21514
21515         (ConvertReferenceExplicit): When converting from Iface type S to Class
21516         T make sure the rules are implemented as an OR.
21517
21518         * parameter.cs (ParameterType): Make it a property for now although the
21519         purpose really isn't anything immediate.
21520
21521         * expression.cs (Is*Applicable): Do better checking on the parameter type
21522         of a ref/out parameter. The ones from the system assemblies are already 
21523         marked with the correct type so we don't need to do any correction.
21524
21525         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
21526         the object type is standard too so include that.
21527
21528 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21529
21530         * ecore.cs (StandardConversionExists): Augment with missing code:
21531         deal with IntConstant, LongConstants and Enumerations.
21532
21533         * assign.cs: Report the error, instead of failing silently
21534
21535         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
21536         typecontainer that they are declared, because the
21537         typecontainer/namespace will have the list of using clauses that
21538         need to be applied.
21539
21540         Assembly Attributes were escaping the normal registration
21541         mechanism. 
21542
21543         (EmitCode): Apply attributes within an EmitContext that represents
21544         the container they were declared on.
21545
21546         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
21547
21548 2002-05-06  Ravi Pratap  <ravi@ximian.com>
21549
21550         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
21551         Revamp completely - make much cleaner as we now operate only
21552         on a set of Types.
21553
21554         (FindMostSpecificSource, FindMostSpecificTarget): New methods
21555         to implement the logic detailed in the spec more correctly.
21556
21557         (UserDefinedConversion): Update accordingly.
21558
21559 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21560
21561         * statement.cs: Return flow analysis information up.
21562
21563         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
21564         and the default.
21565
21566         (token): Do not consume an extra character before calling
21567         decimal_digits.
21568
21569 2002-05-06  Piers Haken <piersh@friskit.com>
21570
21571         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
21572
21573 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21574
21575         * class.cs (Constructor.Emit): Set the IsStatic flag in the
21576         EmitContext during the instance constructor initializer
21577         resolution, to stop access to instance variables.
21578
21579         This is mandated by the spec, last paragraph of the `constructor
21580         initializers' section. 
21581
21582 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
21583
21584         * cs-parser.jay, class.cs (Accessor): new class used to represent
21585         an accessor (get or set).  In the past we used `null' to represent
21586         a missing accessor.  But this is ambiguous because there was no
21587         way to tell in abstract indexers/properties if one of them was
21588         specified.
21589
21590         Now there is a way of addressing that.
21591
21592         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
21593         instead of FindMembers.
21594
21595         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
21596         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
21597
21598         * attribute.cs: Treat indexers and properties as the same in terms
21599         of applying attributes
21600
21601         * ecore.cs (FindMostEncompassedType): Use statically initialized
21602         EmptyExpressions()s like we do elsewhere to avoid creating useless
21603         objects (and we take this out of the tight loop).
21604
21605         (GetConversionOperators): Move the code to extract the actual
21606         operators to a separate routine to clean things up.
21607
21608 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
21609
21610         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
21611         events are always registered FieldBuilders.
21612
21613         * class.cs (FieldBase): New class shared by Fields 
21614
21615         * delegate.cs: If we are a toplevel delegate, use our full name.
21616         If we are a nested delegate, then only use our tail name.
21617
21618 2002-05-02  Ravi Pratap  <ravi@ximian.com>
21619
21620         * expression.cs (IsApplicable): Ensure that we add the "&" to
21621         ref/out types before comparing it with the type of the argument.
21622
21623         (IsParamsMethodApplicable): Ditto.
21624
21625         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
21626         silly me ;-)
21627
21628         * delegate.cs : Handle the case when we have more than one applicable
21629         method. Flag an error only when we finish checking all.
21630
21631 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
21632
21633         * expression.cs: Add support for boolean static initializers.
21634
21635 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
21636
21637         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
21638
21639         * parameter.cs (ComputeParameterTypes,
21640         ComputeAndDefineParameterTypes): Better error handling: now we
21641         clear the `types' cache if we fail during any of the type lookups.
21642         We also return the status code correctly to our caller
21643
21644         * delegate.cs: If we fail to define a delegate, abort the extra
21645         steps. 
21646
21647         * expression.cs (Binary.ResolveOperator): for
21648         operator==(object,object) and operator !=(object, object) we also
21649         have to verify that there is an implicit conversion from one to
21650         the other.
21651
21652         (ArrayAccess.DoResolve): Array Access can operate on
21653         non-variables. 
21654
21655 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
21656
21657         * assign.cs (CompoundAssign): A new class used as a "flag" that
21658         the assignment actually is happening as part of a compound
21659         assignment operator.
21660
21661         During compound assignment, a few new rules exist to enable things
21662         like:
21663
21664         byte b |= 1 + 2
21665
21666         From the spec:
21667
21668         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
21669         to the type of x) if y is implicitly convertible to the type of x,
21670         and the operator is a builtin operator and the return type of the
21671         operator is explicitly convertible to the type of x. 
21672
21673         * rootcontext.cs: Reset warning level to 2.  4 catches various
21674         "interesting" features in mcs, we must clean this up at some
21675         point, but currently am trying to kill other bugs ;-)
21676
21677         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
21678         in container classes as well.  
21679
21680         * expression.cs (Binary.ResolveOperator): Handle string case
21681         before anything else (as operator overloading does emit an error
21682         before doing anything else).
21683
21684         This code could go away when we move to a table driven model, but
21685         i could not come up with a good plan last night.
21686
21687 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
21688
21689         * typemanager.cs (CSharpName): reimplementation using regex.
21690         * class.cs: added null check for fields in Emit
21691         * rootcontext.cs: set warninglevel to 4
21692
21693 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
21694
21695         * typemanager.cs (CSharpName): reimplemented with Lupus
21696         suggestion.
21697
21698 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
21699
21700         * statement.cs (If): correclty implement Resolve, because we were
21701         not catching sem errors in there.  The same process is needed
21702         everywhere else. 
21703         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
21704
21705
21706         (Statement.Warning_DeadCodeFound): Factorize code.
21707         (While): Report dead code here too.
21708
21709         (Statement): Added Resolve virtual method to allow
21710         for resolution split from the emit code.
21711
21712 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21713
21714         * statement.cs (EmitBoolExpression): No longer try to resolve the
21715         expression here.    
21716         (MakeBoolean): New utility function that resolve, implicitly
21717         converts to boolean and tags the expression. 
21718
21719
21720         (If, Do): Implement dead code elimination.
21721         (While): Implement loop inversion
21722
21723         (Do, While, For, If): Resolve the expression prior to calling our
21724         code generation.
21725
21726 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
21727
21728         * class.cs:
21729           - added method Report28 (warning: program has more than one entry point)
21730           - added method IsEntryPoint, implements paragraph 10.1 of the spec
21731           - modified method Method.Define, the part at the end of the method
21732
21733         * rootcontext.cs: added static public Location EntryPointLocation;
21734           
21735         * ../errors/cs0028.cs : Add test case for the above warning.              
21736
21737         * typemanager.cs:
21738           - modified method CSharpName to allow arrays of primitive type to
21739             be printed nicely (e.g. instead of System.Int32[][] it now prints
21740             int[][])
21741           - added method CSharpSignature: returns the signature of a method
21742             in string format to be used in reporting errors, warnings, etc.
21743
21744         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
21745         with String.Empty.
21746
21747 2002-04-26  Ravi Pratap  <ravi@ximian.com>
21748
21749         * delegate.cs (Define): Fix extremely silly bug where I was
21750         setting the type of the 'object' parameter of the BeginInvoke
21751         method to System.IAsyncResult instead of System.Object ;-)
21752
21753 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21754
21755         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
21756         here. 
21757
21758         (Constructor.Emit): return if we fail to initialize the
21759         constructor.  Another door closed!  
21760
21761         * expression.cs (New.DoResolve): Improve error message (from -6 to
21762         1501).  Use DeclaredOnly lookup to find the exact constructor.
21763
21764         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
21765         loop.  This is useful.
21766
21767         * cs-parser.jay: Adjust the default parameters so that destructors
21768         have the proper signature.
21769
21770 2002-04-26  Martin Baulig  <martin@gnome.org>
21771
21772         * driver.cs (LoadAssembly): If `assembly' contains any characters
21773         which are only valid in path names and not in assembly names
21774         (currently slash, backslash and point), use Assembly.LoadFrom ()
21775         instead of Assembly.Load () on the `assembly' (before iteration
21776         over the link_paths).
21777
21778 2002-04-26  Martin Baulig  <martin@gnome.org>
21779
21780         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
21781
21782 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
21783
21784         * class.cs (Property): use the new typemanager.MemberLookup
21785
21786         (TypeContainer.MemberLookup): Implement using the
21787         TypeManager.MemberLookup now. 
21788
21789         * typemanager.cs: Make MemberLookup a function of the TypeManager,
21790         and return MemberInfos, so that these can be used without an
21791         EmitContext (what we had before).
21792
21793 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
21794
21795         * expression.cs: Fix the case where the argument to params if the
21796         type of the params.  I omitted handling this before.   Fixed
21797
21798 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21799
21800         * driver.cs: Call BootCorlib_PopulateCoreType
21801
21802         * class.cs (Property.CheckBase): Check for properties only, not
21803         for all members. 
21804
21805         * interface.cs: Temporary hack: try/catch around the
21806         CustomAttributeBuilder, because I am getting an exception that I
21807         do not understand.
21808
21809         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
21810         types whose definitions are required to be there (attributes are
21811         defined before standard types).
21812
21813         Compute definitions as we boot the various types, as they are used
21814         immediately (value_type class will need object_type, but if we do
21815         not initialize object_type, we will pass a null, which will let
21816         the runtime pick the System.Object from the existing corlib, which
21817         is not what we want).
21818
21819 2002-04-22  Patrik Torstensson <totte@labs2.com>
21820
21821         * cs-tokenizer.cs: fixed a number of trim() issues.
21822
21823 2002-04-22  Ravi Pratap  <ravi@ximian.com>
21824
21825         * expression.cs (Argument.Type): Ensure that we return the correct
21826         type when we have out or ref parameters [in which case we 
21827         append a "&"].
21828
21829 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21830
21831         * class.cs (Property, Indexer): Allow extern modifier in there. 
21832
21833         * typemanager.cs (InitBaseTypes): Initializes object_type and
21834         value_type, since those will be used early on during the bootstrap
21835         process to compile corlib.
21836
21837         (InitCoreTypes): Move code from here to InitBaseTypes.
21838
21839 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
21840
21841         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
21842         single-dimension arrays as using the ldlen opcode.  
21843
21844         Daniel Lewis discovered this optimization.  
21845
21846         * typemanager.cs: Add signature for System.Array::get_Length
21847
21848 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21849
21850         * statement.cs: report the error when the foreach does not apply to an
21851         array nor a collection.
21852
21853 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
21854
21855         * expression.cs: Add implicit conversions to the operator ~.
21856
21857         * constant.cs (DecimalConstant.Emit): Emit decimal value.
21858
21859         * typemanager.cs: Locate the decimal constructor.
21860
21861 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21862
21863         * attribute.cs: use the new property of TypeOf.
21864         * expression.cs: added 'get' property around typearg.
21865
21866         These changes fix a build breaker reported by NickD. Is this the
21867         correct way to fix?  If not, please, revert my changes and make it
21868         work :-).
21869
21870 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
21871
21872         * attribute.cs: Add support for typeof in attribute invocations.
21873         I am not sure that this is right though.
21874
21875 2002-04-14  Duncan Mak  <duncan@ximian.com>
21876
21877         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
21878         Binary.Operator.Division case.
21879
21880 2002-04-13  Ravi Pratap  <ravi@ximian.com>
21881
21882         * class.cs (DefineType): Ensure that we do a proper check on
21883         attribute types and also register it with the TypeManager.
21884
21885         (TypeContainer.Targets): The default for attribute types is
21886         AttributeTargets.All.
21887
21888         * attribute.cs (ApplyAttributes): Registering the attribute type
21889         is done elsewhere, not when we discover we have a Usage attribute.
21890
21891 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21892
21893         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
21894         and get rid of is_delegate parameter.
21895
21896         * everywhere : update.
21897
21898 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21899
21900         * cs-parser.jay (compilation_unit): Revamp completely to use
21901         some new ideas that I got from Rhys' grammar to solve the problems
21902         with assembly level attributes.
21903
21904         (outer_declaration): New grammar production.
21905
21906         (attribute_sections): Add.
21907
21908         (opt_attributes): Base on attribute_sections
21909
21910         (namespace_declaration): Allow opt_attributes to tackle the case
21911         when we have assembly level attributes - we are clever in this
21912         regard now ;-)
21913
21914         * attribute.cs (ApplyAttributes): Do not worry about assembly 
21915         attributes in the non-global context.
21916
21917         * rootcontext.cs (AddGlobalAttributes): Go back to using this
21918         instead of SetGlobalAttributes.
21919
21920         * class.cs, rootcontext.cs : Ensure we define and generate 
21921         attribute types before anything else.
21922
21923         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
21924         and flag the new error -20 for the case when the attribute type
21925         does not have valid targets specified. csc does not catch this.
21926
21927         * ../errors/errors.txt : update for error # -20
21928
21929 2002-04-11  Ravi Pratap  <ravi@ximian.com>
21930
21931         * support.cs (InternalParameters.ParameterModifier): Do some null
21932         checking and return sane values.
21933
21934         * class.cs (Method.Define): If we are a PInvoke method, ensure
21935         that we are static and extern. Report error # 601
21936
21937         * ../errors/cs0601.cs : Add test case for the above error.
21938
21939 2002-04-07  Ravi Pratap  <ravi@ximian.com>
21940
21941         * rootcontext.cs (attribute_types): We need to keep type of
21942         all attribute types separately and emit code for them first.
21943
21944         (RegisterAttribute) : Implement.
21945
21946         * class.cs (DefineType): Check if the current Type is a custom
21947         attribute type and register it accordingly.
21948
21949         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
21950         adding the first attribute twice and rename to
21951
21952         (SetGlobalAttributes): this.
21953
21954         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
21955         lookups.
21956
21957         * attribute.cs (ApplyAttributes): Take an additional argument telling us
21958         if we are processing global arguments. Hmm, I am unsure of this.
21959
21960 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21961
21962         * expression.cs: added static array of strings to avoid calling
21963         Enum.ToString () for Operator in Binary. Significant recover of
21964         performance.
21965
21966 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
21967
21968         * class.cs (FindMembers): Allow the Builders of the various
21969         members to be null.  If they are skip them.  This only happens
21970         during the PInvoke declaration.
21971
21972 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
21973
21974         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
21975         failure, so we do not keep going afterwards.
21976
21977         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
21978         wanted to pass `false' as the `is_delegate' argument.  If this is
21979         the case, why not use delegate_type == null to mean `is_delegate =
21980         false' and anything else as is_delegate = true.
21981
21982 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
21983
21984         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
21985         code for the section, not the beginning of the tests.
21986
21987 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
21988
21989         * cfold.cs: Handle operator + (Enum x, Underlying x) 
21990
21991         * expression.cs (Binary): same.  Warn about errors where we have
21992         Enum/Enum in operator + as well.
21993
21994 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
21995
21996         * statement.cs:
21997                 - added support for switch(bool)
21998                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
21999                 - add TableSwitchEmit() to handle table-based switch statements
22000
22001 2002-04-05  Ravi Pratap  <ravi@ximian.com>
22002
22003         * expression.cs (Invocation.OverloadResolve): Factor out code which
22004         does parameter compatibility checking with arguments so that we can 
22005         re-use the code even from Delegate.VerifyApplicability
22006
22007         (VerifyArgumentsCompat): Move above code here.
22008
22009         * delegate.cs (VerifyApplicability): Get rid of duplicate code
22010         and instead make a call to the above method.
22011
22012 2002-03-31  Ravi Pratap  <ravi@ximian.com>
22013
22014         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
22015         We use it to keep track of classes which are attribute types.
22016
22017 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
22018
22019         * delegate.cs (Delegate.Define): Correctly define the types in the
22020         presence of fixed and array parameters.
22021
22022         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
22023         doing FindMembers.
22024
22025         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
22026         include NonPublic after the first iteration.
22027
22028         * class.cs (Indexer.CheckBase): Only check if both parents are
22029         non-null. 
22030
22031         * cs-parser.jay (accessor_body): If empty, set to null.
22032
22033         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
22034         same code path here to resolve constants names that we did have in
22035         MemberAccess.DoResolve.  There is too much code duplicated here.
22036
22037 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
22038
22039         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
22040
22041         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
22042         to MakeUnionSet.
22043
22044         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
22045         tokens, numbers and strings.
22046
22047         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
22048         parenthesis.
22049
22050         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
22051         asyncronous parameters and the regular parameters.  
22052
22053         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
22054         specify the target directory.
22055
22056         * expression.cs: (This.DoResolve): Simplify
22057         (As.Emit): Optimize, do not generate IsInst if the expression is
22058         always of the given type.
22059
22060         (Is.DoResolve): Bug fix, we were reporting both always/never for
22061         the is expression.
22062
22063         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
22064         creating too many unnecessary arrays.
22065
22066 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
22067
22068         * class.cs (EmitFieldInitializer): Use Assign expression to assign
22069         fields instead of rolling our own initializer.   Takes care of all
22070         implicit conversions, and drops unnecessary static checks/argument.
22071
22072 2002-03-31  Dick Porter  <dick@ximian.com>
22073
22074         * driver.cs: use the GetDirectories() return values properly, and
22075         use "/" as path separator.
22076
22077 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
22078
22079         * expression.cs (Unary): Optimize - - expr into expr.
22080         (Binary): Optimize a + (-b) into a -b.
22081
22082         * codegen.cs (CodeGen): Made all methods static.
22083
22084 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
22085
22086         * rootcontext.cs: 
22087
22088         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
22089         TypeBuilder property.
22090
22091         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
22092         instead. 
22093
22094         * tree.cs: Removed the various RecordXXXX, and replaced with a
22095         single RecordDecl.  Removed all the accessor methods, and just
22096         left a single access point Type 
22097
22098         * enum.cs: Rename DefineEnum to DefineType.
22099
22100         * decl.cs: New abstract method `DefineType' used to unify the
22101         Defines for Enumerations, Interfaces, TypeContainers and
22102         Delegates.
22103
22104         (FindType): Moved LookupInterfaceOrClass here.  Moved the
22105         LookupBaseClasses method that used to live in class.cs and
22106         interface.cs here, and renamed to FindType.
22107
22108         * delegate.cs: Implement DefineType.  Take advantage of the
22109         refactored pattern for locating the parent builder without taking
22110         the parent_builder argument (which we know does not work if we are
22111         nested, and triggering a toplevel definition).
22112
22113 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22114
22115         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
22116         accessibility of a member has changed during override and report
22117         an error if so.
22118
22119         * class.cs (Method.Define, Property.Define): Only complain on
22120         overrides if the method is private, any other accessibility is
22121         fine (and since we just checked the permission is the same, we are
22122         good to go).
22123
22124         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
22125         and elif are processed always.  The other pre-processing
22126         directives are only processed if we are "taking" the path
22127
22128 2002-03-29  Martin Baulig  <martin@gnome.org>
22129
22130         * class.cs (Method.Emit): Only emit symbolic debugging info if the
22131         current location is not Null.
22132
22133         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
22134         a separate method so we can profile it.
22135
22136         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
22137         `span.Seconds' are just seconds, but no minutes or hours.
22138         (MainDriver): Profile the CodeGen.SaveSymbols calls.
22139
22140 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22141
22142         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
22143         Remove the gratuitous set of Final:
22144
22145                                 // If an interface implementation, then we can set Final.
22146                                 if (((flags & MethodAttributes.Abstract) == 0) &&
22147                                     implementing.DeclaringType.IsInterface)
22148                                         flags |= MethodAttributes.Final;
22149
22150         I do not know what I was smoking when I used that.
22151
22152
22153         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
22154         step into fixing the name resolution issues for delegates and
22155         unifying the toplevel name resolution.
22156
22157 2002-03-28  Martin Baulig  <martin@gnome.org>
22158
22159         * class.cs (Method.Emit): If we have a symbol writer, call its
22160         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
22161         tell it about the current method.
22162
22163         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
22164         writer that we're going to emit the first byte of IL code for a new
22165         statement (a new source line).
22166         (EmitContext.EmitTopBlock): If we have a symbol writer, call
22167         EmitContext.Mark() before emitting any code.
22168
22169         * location.cs (SymbolDocument): Return null when we're Null.
22170
22171         * statement.cs (Statement): Moved the `Location loc' variable here.
22172         (Statement.EmitBoolExpression): If we have a symbol writer, call
22173         ec.Mark() before emitting any code to tell it that we're at the
22174         beginning of a new statement.
22175         (StatementExpression): Added `Location' argument to the constructor.
22176         (Block): Added public readonly variable `StartLocation' and public
22177         variable `EndLocation'.  The latter is to be set using SetEndLocation().
22178         (Block): Added constructor which takes a start and end location.
22179         (Block.SetEndLocation): New method. This sets the end location.
22180         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
22181         local variables we create.
22182         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
22183         each statement and do also mark the begin and end of the block.
22184
22185         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
22186         tell it the current lexer.Location, use Location.Null for the end of the
22187         block.
22188         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
22189         current block, set its end location using SetEndLocation().
22190         (statement_expression): StatementExpression constructor now takes the
22191         lexer.Location as additional argument.
22192         (for_statement, declare_local_variables): Likewise.
22193         (declare_local_variables): When creating a new implicit block, use the
22194         new Block constructor and pass it the lexer.Location.
22195
22196 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22197
22198         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
22199         members also on the parent interfaces recursively.
22200
22201 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
22202
22203         * report.cs: Use new formats, since Gonzalo finished the missing
22204         bits. 
22205
22206         * expression.cs (Binary.ResolveOperator): added missing operator|
22207         operator& and operator^ for bool/bool.
22208
22209         * cs-parser.jay: CheckDef now takes a Location argument that is
22210         used to report errors more precisly (instead of reporting the end
22211         of a definition, we try to track something which is a lot closer
22212         to the source of the problem).
22213
22214         * cs-tokenizer.cs: Track global token use, so we can properly flag
22215         the use of #define/#undef after the first token has been seen.
22216
22217         Also, rename the reportXXXX to Error_DescriptiveName
22218
22219         * decl.cs (DeclSpace.IsTopLevel): Move property here from
22220         TypeContainer, so that Enum and Interface can use this too.
22221
22222         * class.cs (TypeContainer.LookupInterfaceOrClass,
22223         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
22224         `builder' argument.  Typically this was used to pass the parent
22225         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
22226         the definition).  
22227
22228         The problem is that a nested class could trigger the definition of
22229         a toplevel class, and the builder would be obviously wrong in that
22230         case. 
22231
22232         So we drop this argument, and we compute dynamically the
22233         TypeBuilder/ModuleBuilder (the correct information was available
22234         to us anyways from DeclSpace.Parent)
22235
22236         * interface.cs (Interface.DefineInterface): Drop builder
22237         parameter cleanup like class.cs
22238
22239         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
22240         like class.cs
22241
22242         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
22243         values. 
22244
22245         (Try.Emit): Propagate the returns value from the statement.
22246
22247         (Return.Emit): Even if we are leavning 
22248
22249         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
22250
22251         * modifiers.cs: Fix the computation of MethodAttributes flags.
22252
22253 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
22254
22255         * driver.cs: allow compilation of files that start with '/'.
22256         Add a default case when checking the argument of --target.
22257
22258 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
22259
22260         * interface.cs: Implement the same search algorithm for types in
22261         the interface code.
22262
22263         * delegate.cs: Do not allow multiple definition.
22264
22265         * Recovered ChangeLog that got accidentally amputated
22266
22267         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
22268
22269         * rootcontext.cs: Load manually enum to allow core classes to
22270         contain enumerations.
22271
22272         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
22273         Update to new static methods in TypeManager.
22274
22275         * typemanager.cs (GetMethod, GetConstructor): Use our
22276         implementation of FindMembers to find the members, since during
22277         corlib compilation, the types are TypeBuilders and GetMethod and
22278         GetConstructor do not work.
22279
22280         Make all methods in TypeManager static.
22281
22282         (InitCodeHelpers): Split the functionality from
22283         the InitCodeTypes function.
22284
22285         * driver.cs: Call InitCodeHelpers after we have populated the
22286         types. 
22287
22288         * cs-parser.jay (delegate_declaration): we did not used to compute
22289         the delegate name correctly for void delegates.
22290
22291 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
22292
22293         * rootcontext.cs (RootContext): Init the interface_resolve_order
22294         and type_container_resolve_order always.
22295
22296         (ResolveCore, BootstrapCorlib_ResolveClass,
22297         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
22298         compiler when compiling with --nostdlib
22299
22300         * class.cs (TypeContainer.DefineType): Check that our parent is
22301         not null.  This test is most important when we are bootstraping
22302         the core types.
22303
22304         * codegen.cs: Split out the symbol writing code.
22305
22306 2002-03-25  Martin Baulig  <martin@gnome.org>
22307
22308         * driver.cs (-g): Made -g an alias for --debug.
22309
22310 2002-03-24  Martin Baulig  <martin@gnome.org>
22311
22312         * codegen.cs (SymbolWriter): New public variable. Returns the
22313         current symbol writer.
22314         (CodeGen): Added `bool want_debugging_support' argument to the
22315          constructor. If true, tell the ModuleBuild that we want debugging
22316         support and ask it for the ISymbolWriter.
22317         (Save): If we have a symbol writer, call it's Close() method after
22318         saving the assembly.
22319
22320         * driver.c (--debug): New command line argument to create a
22321         debugger information file.
22322
22323         * location.cs (SymbolDocument): New public property. Returns an
22324         ISymbolDocumentWriter object for the current source file or null
22325         if we don't have a symbol writer.
22326
22327 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
22328
22329         * driver.cs (LoadAssembly): Correctly return when all the paths
22330         have been tried and not before.
22331
22332         * statement.cs (Switch.Emit): return the actual coverage for this
22333         statement (returns/not-returns)
22334
22335         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
22336         switch of the statement if we are the last switch section.  That
22337         kills two problems: try/catch problems (we used to emit an empty
22338         nop at the end) and switch statements where all branches would
22339         return. 
22340
22341 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
22342
22343         * driver.cs: Add default assemblies (the equivalent to the
22344         Microsoft CSC.RSP file)
22345
22346         * cs-tokenizer.cs: When updating `cols and setting it to zero,
22347         also update tokens_seen and set it to false.
22348
22349         * driver.cs: Implement --recurse for Mike.
22350
22351         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
22352         correctly splitting out the paths.
22353
22354 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
22355
22356         * interface.cs (Interface.PopulateProperty): Instead of using
22357         `parent' as the declaration space for the set parameters, use
22358         `this' 
22359
22360         * support.cs (InternalParameters): InternalParameters constructor
22361         takes a DeclSpace instead of a TypeContainer.
22362
22363         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
22364         types are being initialized, load the address of it before calling
22365         the function.  
22366
22367         (New): Provide a mechanism to disable the generation of local
22368         value type temporaries when the caller will be providing us with
22369         an address to store it.
22370
22371         (ArrayCreation.EmitDynamicInitializers): Use it.
22372
22373 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
22374
22375         * expression.cs (Invocation.EmitArguments): Only probe for array
22376         property if there is more than one argument.  Sorry about that.
22377
22378         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
22379         empty param arrays.
22380
22381         * class.cs (Method.LabelParameters): Fix incorrect code path that
22382         prevented the `ParamArrayAttribute' from being applied to the
22383         params attribute.
22384
22385 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
22386
22387         * support.cs (ReflectionParameters): Correctly compute whether the
22388         last argument is a params array.  Fixes the problem with
22389         string.Split ('a')
22390
22391         * typemanager.cs: Make the assemblies array always be non-null
22392         (empty, but non-null)
22393
22394         * tree.cs (RecordDecl): New function that abstracts the recording
22395         of names.  This reports error 101, and provides a pointer to the
22396         previous declaration.  Fixes a crash in the compiler.
22397
22398         * cs-parser.jay (constructor_declaration): Update to new grammar,
22399         and provide a constructor_body that can be empty.
22400
22401 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
22402
22403         * driver.cs: Add support for --resources.
22404
22405         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
22406         Make all types for the various array helper methods be integer.
22407
22408         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
22409         CheckState to ConvCast.
22410
22411         (ConvCast): Now it takes a `checked' state argument, to avoid
22412         depending on the emit context for the conversion, and just using
22413         the resolve time setting.
22414
22415         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
22416         instead of Invocation.EmitArguments.  We do not emit the original
22417         arguments, instead we emit those which have been converted to
22418         unsigned int expressions.
22419
22420         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
22421
22422         * codegen.cs: ditto.
22423
22424         * expression.cs (LocalVariableReference): Drop the use of the
22425         Store function that depended on the variable index.
22426
22427         * statement.cs (VariableInfo): Drop the `Idx' property from this
22428         class, as this is not taking into account the indexes for
22429         temporaries tat we generate during the execution, getting the
22430         indexes wrong.
22431
22432         * class.cs: First emit class initializers, then call the parent
22433         constructor. 
22434
22435         * expression.cs (Binary): Fix opcode emision.
22436         (UnaryMutator.EmitCode): Support checked code generation
22437
22438         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
22439         matches for events for both the Static and Instance scans,
22440         pointing to the same element.   Fix that.
22441
22442 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
22443
22444         * rootcontext.cs (ResolveTree): Always set the
22445         interface_resolve_order, because nested interfaces will be calling
22446         into us.
22447
22448         * class.cs (GetInterfaceOrClass): Track the same resolution
22449         process used by TypeManager.LookupType.  This fixes the nested
22450         type lookups in class declarations (separate path from
22451         LookupType). 
22452
22453         (TypeContainer.DefineType): Also define nested interfaces.
22454         (TypeContainer.RegisterOrder): New public function used to
22455         register the order in which child interfaces need to be closed.
22456
22457         Nested interfaces need to be closed after their parents have been
22458         created. 
22459
22460         * interface.cs (InterfaceAttr): Put all the logic for computing
22461         the interface attribute here. 
22462
22463         (DefineInterface): Register our interface order with the
22464         RootContext or with the TypeContainer depending on the case.
22465
22466 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22467
22468         * cs-parser.jay: rework foreach statement to work with the new
22469         changes to the policy on SimpleNames.
22470
22471         * report.cs: support Stacktrace on warnings as well.
22472
22473         * makefile: drop --unsafe and /unsafe from the compile.
22474
22475 2002-03-13  Ravi Pratap  <ravi@ximian.com>
22476
22477         * ecore.cs (StandardConversionExists): Modify to take an Expression
22478         as the first parameter. Ensure we do null -> reference type conversion
22479         checking.
22480
22481         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
22482         temporary Expression objects.
22483
22484 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
22485
22486         * interface.cs: workaround bug in method overloading resolution
22487         (there is already a bugzilla bug for it).
22488
22489 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22490
22491         We could also solve this problem by having a separate path for
22492         performing type lookups, instead of DoResolve, we could have a
22493         ResolveType entry point, and only participating pieces of the
22494         production (simplename, deref, array) would implement this. 
22495
22496         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
22497         signal SimpleName to only resolve type names and not attempt to
22498         resolve anything else.
22499
22500         * expression.cs (Cast): Set the flag.
22501
22502         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
22503
22504         * class.cs: Only report 108 if there is no `new' modifier.
22505
22506         * cs-parser.jay: rework foreach statement to work with the new
22507         changes to the policy on SimpleNames.
22508
22509         * report.cs: support Stacktrace on warnings as well.
22510
22511         * makefile: drop --unsafe and /unsafe from the compile.
22512
22513 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
22514
22515         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22516         lookups here, instead of doing that at parse time.  This means
22517         that our grammar will not introduce `LocalVariableReferences' as
22518         expressions at this point.  That solves the problem of code like
22519         this:
22520
22521         class X {
22522            static void Main ()
22523            { int X = 1;
22524             { X x = null }}}
22525
22526         This is only half the fix.  The full fix requires parameters to
22527         also be handled in this way.
22528
22529         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
22530         makes the use more obvious of the DeclSpace.  The
22531         ec.TypeContainer.TypeBuilder is now only used to pull the
22532         TypeBuilder for it.
22533
22534         My theory is that I can get rid of the TypeBuilder completely from
22535         the EmitContext, and have typecasts where it is used (from
22536         DeclSpace to where it matters).  
22537
22538         The only pending problem is that the code that implements Aliases
22539         is on TypeContainer, and probably should go in DeclSpace.
22540
22541         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22542         lookups here, instead of doing that at parse time.  This means
22543         that our grammar will not introduce `LocalVariableReferences' as
22544         expressions at this point.  That solves the problem of code like
22545         this:
22546
22547         class X {
22548            static void Main ()
22549            { int X = 1;
22550             { X x = null }}}
22551
22552         This is only half the fix.  The full fix requires parameters to
22553         also be handled in this way.
22554
22555         * class.cs (Property.DefineMethod): When implementing an interface
22556         method, set newslot, when implementing an abstract method, do not
22557         set the flag (before we tried never setting it, or always setting
22558         it, which is the difference).
22559         (Indexer.DefineMethod): same.
22560         (Method.DefineMethod): same.
22561
22562         * ecore.cs: Only set the status used flag if we get back a Field.
22563
22564         * attribute.cs: Temporary hack, so Paolo can keep working.
22565
22566 2002-03-08  Ravi Pratap  <ravi@ximian.com>
22567
22568         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
22569         the unmanaged type in the case we have a MarshalAs attribute.
22570
22571         (Resolve): Handle the case when we are parsing the special MarshalAs
22572         attribute [we need to store the unmanaged type to use later]
22573
22574         * typemanager.cs (marshal_as_attr_type): Built in type for the 
22575         MarshalAs Attribute.
22576
22577         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
22578         on parameters and accordingly set the marshalling info.
22579
22580 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
22581
22582         * class.cs: Optimizing slightly by removing redundant code after
22583         we switched to the `NoTypes' return value.
22584         (Property.DefineMethod): use NoTypes here too.
22585
22586         This fixes the bug I introduced in my last batch of changes.
22587
22588 2002-03-05  Ravi Pratap  <ravi@ximian.com>
22589
22590         * tree.cs (RecordEnum): Add. We now keep track of enums too.
22591
22592         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
22593         Enums since those are types too. 
22594
22595         * cs-parser.jay (enum_declaration): Record enums as we parse them.
22596
22597         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
22598         thanks to a call during the lookup process.
22599
22600 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
22601
22602         * statement.cs (Foreach): Lots of work to accomodate a particular
22603         kind of foreach statement that I had not kept in mind.  It is
22604         possible to have foreachs on classes that provide a GetEnumerator
22605         method that return objects that implement the "pattern" for using
22606         a foreach, there is no need to support GetEnumerator
22607         specifically. 
22608
22609         This is needed to compile nant.
22610
22611         * decl.cs: Only report 114 if the member is not `Finalize' and if
22612         the warning level is at least 2.
22613
22614         * class.cs: Moved the compare function from Method to
22615         MethodSignature. 
22616
22617         (MethodSignature.InheritableMemberSignatureCompare): Add new
22618         filter function that is used to extract inheritable methods from a
22619         class. 
22620
22621         (Method.Define): Use the new `inheritable_method_signature_filter'
22622         delegate
22623
22624         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
22625         command. 
22626
22627 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
22628
22629         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
22630
22631         * cs-parser.jay: Add opt_semicolon to the interface declaration.
22632
22633         * expression.cs: Pass location information to
22634         ConvertImplicitStandard. 
22635
22636         * class.cs: Added debugging code to track return values from
22637         interfaces. 
22638
22639 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
22640
22641         * expression.cs (Is.DoResolve): If either side of the `is' is an
22642         interface, do not flag the warning.
22643
22644         * ecore.cs (ImplicitReferenceConversion): We need a separate test
22645         for interfaces
22646
22647         * report.cs: Allow for --fatal to be used with --probe.
22648
22649         * typemanager.cs (NoTypes): Move the definition for the empty Type
22650         array here. 
22651
22652         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
22653         properties. 
22654         (TypeContainer.DefineProxy): New function used to proxy to parent
22655         implementations when implementing interfaces.
22656         (TypeContainer.ParentImplements): used to lookup if our parent
22657         implements a public function that is required by an interface.
22658         (TypeContainer.VerifyPendingMethods): Hook this up.
22659
22660         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
22661         `modules' and `assemblies' arraylists into arrays.  We only grow
22662         these are the very early start up of the program, so this improves
22663         the speedof LookupType (nicely measured).
22664
22665         * expression.cs (MakeByteBlob): Replaced unsafe code with
22666         BitConverter, as suggested by Paolo.
22667
22668         * cfold.cs (ConstantFold.Binary): Special case: perform constant
22669         folding of string concatenation, but if either side is a string,
22670         and the other is not, then return null, and let the runtime use
22671         the concatenation on the string plus the object (using
22672         `Object.ToString'). 
22673
22674 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
22675
22676         Constant Folding has been implemented now.
22677
22678         * expression.cs (Unary.Reduce): Do not throw an exception, catch
22679         the error instead on types that are not supported in one's
22680         complement. 
22681
22682         * constant.cs (Constant and all children): New set of functions to
22683         perform implict and explicit conversions.
22684
22685         * ecore.cs (EnumConstant): Implement the new functions to perform
22686         conversion by proxying to the child expression.
22687
22688         * codegen.cs: (ConstantCheckState): Constant evaluation has its
22689         own separate setting that can not be turned off from the command
22690         line using --unchecked or --checked and is only controlled using
22691         the checked/unchecked statements and expressions.  This setting is
22692         used by the constant folder to flag errors.
22693
22694         * expression.cs (CheckedExpr, UncheckedExpr): Set the
22695         ConstantCheckState as well.   
22696
22697         During Resolve, they also have to flag the state, because the
22698         constant folder runs completely in the Resolve phase.
22699
22700         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
22701         well.
22702
22703 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22704
22705         * cfold.cs: New file, this file contains the constant folder.
22706
22707         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
22708         argument to track whether we are using the resulting address to
22709         load or store a value and provide better error messages. 
22710
22711         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
22712         new AddressOf arguments.
22713
22714         * statement.cs (Foreach.EmitCollectionForeach): Update
22715
22716         * expression.cs (Argument.Emit): Call AddressOf with proper
22717         arguments to track usage.
22718
22719         (New.DoEmit): Call AddressOf with new arguments.
22720
22721         (Unary.Emit): Adjust AddressOf call.
22722
22723 2002-03-01  Ravi Pratap  <ravi@ximian.com>
22724
22725         * cs-parser.jay (member_access): Change the case for pre-defined types
22726         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
22727         this suggestion.
22728
22729         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
22730         a method body.
22731
22732         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
22733         essentially like methods and apply attributes like MethodImplOptions to them too.
22734
22735         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
22736         not being null.
22737
22738         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
22739         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
22740         is the DeclSpace.
22741
22742         * Update code everywhere accordingly.
22743
22744         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
22745
22746         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
22747
22748 2002-02-28  Ravi Pratap  <ravi@ximian.com>
22749
22750         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
22751         try performing lookups against those instead of jumping straight into using
22752         the 'using' clauses.
22753
22754         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
22755
22756         (LookupType): Perform lookups in implicit parents too.
22757
22758         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
22759         sequence as RootContext.LookupType. 
22760
22761         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
22762         the various cases of namespace lookups into this method.
22763
22764 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22765
22766         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
22767         in positional arguments)
22768
22769         * class.cs (Operator): Update the AllowedModifiers to contain
22770         extern. 
22771
22772         * cs-parser.jay: Update operator declaration to allow for the
22773         operator body to be empty.
22774
22775         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
22776         values. 
22777
22778 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
22779
22780         * class.cs (Method.Emit): Label parameters.
22781
22782         * driver.cs: Return 1 or 0 as the program exit code.
22783
22784 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
22785
22786         * expression.cs: Special case the `null' object when trying to
22787         auto-compute the type, as anything can be explicitly converted to
22788         that. 
22789
22790         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
22791         spotting this Paolo.
22792
22793         (Expression.ImplicitNumericConversion): Perform comparissions of
22794         the type using the underlying type in the case of an enumeration
22795         rather than using the enumeration type for the compare.
22796
22797         Cope with the underlying == type case, which is not possible to
22798         catch before. 
22799
22800         (Expression.ConvertNumericExplicit): Perform comparissions of
22801         the type using the underlying type in the case of an enumeration
22802         rather than using the enumeration type for the compare.
22803
22804         * driver.cs: If the user does not supply an extension, assume .exe
22805
22806         * cs-parser.jay (if_statement): Rewrote so that we can track the
22807         location for the if statement.
22808
22809         * expression.cs (Binary.ConstantFold): Only concat strings when
22810         the operation is "+", not everything ;-)
22811
22812         * statement.cs (Statement.EmitBoolExpression): Take a location
22813         argument. 
22814         (If, While, Do): Track location.
22815
22816         * expression.cs (Binary.ResolveOperator): In the object + string
22817         case, I was missing a call to ConvertImplicit
22818
22819 2002-02-25  Ravi Pratap  <ravi@ximian.com>
22820
22821         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
22822         Location arguments. Ensure we use RootContext.LookupType to do our work
22823         and not try to do a direct Type.GetType and ModuleBuilder.GetType
22824
22825         * interface.cs (PopulateMethod): Handle the type of the parameter being
22826         null gracefully.
22827
22828         * expression.cs (Invocation.BetterFunction): Handle the case when we 
22829         have a params method with no fixed arguments and a call is made with no
22830         arguments.
22831
22832 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
22833
22834         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
22835         the verbatim-string-literal
22836
22837         * support.cs (InternalParameters.ParameterModifier): handle null
22838         fixed parameters.
22839         (InternalParameters.ParameterType): ditto.
22840
22841         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
22842         duplicating the name of the variable parameter.
22843         (GetParameterByName): Fix bug where we were not looking up array
22844         paramters if they were the only present (thanks Paolo!).
22845         (GetParameterInfo): We only have an empty set of types if both
22846         fixed and array are set to null.
22847         (GetParameterInfo-idx): Handle FixedParameter == null
22848
22849         * cs-parser.jay: Handle the case where there is no catch
22850         statements (missing null test).
22851
22852 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
22853
22854         * driver.cs (MainDriver): Be conservative on our command line
22855         handling.
22856
22857         Catch DirectoryNotFoundException when calling GetFiles.
22858
22859         (SplitPathAndPattern): Used to split the input specification into
22860         a path and a pattern that we can feed to Directory.GetFiles.
22861
22862 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
22863
22864         * statement.cs (Fixed): Implement the last case of the Fixed
22865         statement (string handling).
22866
22867         * expression.cs (StringPtr): New class used to return a char * to
22868         a string;  Used by the Fixed statement.
22869
22870         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
22871
22872         * expression.cs (Binary.ResolveOperator): Remove redundant
22873         MemberLookup pn parent type.
22874         Optimize union call, we do not need a union if the types are the same.
22875         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
22876         type.
22877
22878         Specialize the use of MemberLookup everywhere, instead of using
22879         the default settings. 
22880
22881         (StackAlloc): Implement stackalloc keyword.
22882
22883         * cs-parser.jay: Add rule to parse stackalloc.
22884
22885         * driver.cs: Handle /h, /help, /?
22886
22887         * expression.cs (MakeByteBlob): Removed the hacks we had in place
22888         before we supported unsafe code.
22889
22890         * makefile: add --unsafe to the self compilation of mcs.
22891
22892 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
22893
22894         * expression.cs (PointerArithmetic): New class that is used to
22895         perform pointer arithmetic.
22896         (Binary.Resolve): Handle pointer arithmetic
22897         Handle pointer comparission.
22898         (ArrayPtr): Utility expression class that is used to take the
22899         address of an array.
22900
22901         (ElementAccess): Implement array access for pointers
22902
22903         * statement.cs (Fixed): Implement fixed statement for arrays, we
22904         are missing one more case before we are done.
22905
22906         * expression.cs (Indirection): Implement EmitAssign and set the
22907         ExprClass to Variable.  This allows pointer dereferences to be
22908         treated as variables, and to have values assigned to them.
22909
22910         * ecore.cs (Expression.StoreFromPtr): New utility function to
22911         store values dereferencing.
22912
22913 2002-02-20  Ravi Pratap  <ravi@ximian.com>
22914
22915         * expression.cs (Binary.ResolveOperator): Ensure that we are
22916         not trying to operate on a void type - this fixes the reported
22917         bug.
22918
22919         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
22920         the parent implementation is sealed.
22921
22922         * ../errors/cs0239.cs : Add.
22923
22924         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
22925
22926         * typemanager.cs (unverifiable_code_type): Corresponds to 
22927         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
22928         which have unsafe code in them.
22929
22930         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
22931         unsafe context.
22932
22933 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
22934
22935         * cs-tokenizer.cs: Add support for @"litreal strings"
22936
22937         Make tokenizer accept pre-processor directives
22938         on any column (remove the old C-like limitation). 
22939
22940         * rootcontext.cs (EmitCode): Emit any global attributes.
22941         (AddGlobalAttributes): Used to keep track of assembly attributes. 
22942
22943         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
22944
22945         * cs-parser.jay: Add support for global attributes.  
22946
22947 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
22948
22949         * expression.cs (Indirection): New helper class.  Unary will
22950         create Indirection classes to be able to implement the
22951         IMemoryLocation interface on it.
22952
22953 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
22954
22955         * cs-parser.jay (fixed_statement): reference the right statement.
22956
22957         * statement.cs (Fixed.Emit): Finish implementing the fixed
22958         statement for the &x case.
22959
22960 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
22961
22962         * class.cs (Property.Define, Method.Define): Remove newslot when
22963         `implementing'.  
22964
22965         * modifiers.cs: My use of NewSlot when `Abstract' was set was
22966         wrong.  NewSlot should only be used if the `new' keyword is present.
22967
22968         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
22969         locating our system dir.  Sorry about this.
22970
22971 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22972
22973         * driver.cs (GetSystemDir): Compute correctly the location of our
22974         system assemblies.  I was using the compiler directory instead of
22975         the library directory.
22976
22977 2002-02-13  Ravi Pratap  <ravi@ximian.com>
22978
22979         * expression.cs (BetterFunction): Put back in what Miguel commented out
22980         since it is the correct fix. The problem is elsewhere ;-)
22981
22982         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
22983         parameters of the parms method are themselves compatible or not !
22984
22985         (StandardConversionExists): Fix very dangerous bug where we were forgetting
22986         to check that a class implements an interface before saying that an implicit
22987         conversion was allowed. Use ImplementsInterface to do the checking.
22988
22989 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22990
22991         * class.cs (Method.Define): Track whether we are an explicit
22992         implementation or not.  And only call DefineMethodOverride if we
22993         are an explicit implementation.
22994
22995         (Property.DefineMethod): Ditto.
22996
22997 2002-02-11  Ravi Pratap  <ravi@ximian.com>
22998
22999         * expression.cs (BetterFunction): Catch hideous bug which was
23000          preventing us from detecting ambiguous calls due to implicit casts i.e
23001         cs0121.
23002
23003 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
23004
23005         * support.cs (Pair): Remove un-needed method.  I figured why I was
23006         getting the error in cs-parser.jay, the variable in a foreach loop
23007         is readonly, and the compiler does not really treat this as a variable.
23008
23009         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
23010         instead of EQUALS in grammar.  
23011
23012         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
23013
23014         * expression.cs (Unary.DoResolve): Check whether the argument is
23015         managed or not.
23016
23017 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
23018
23019         * support.cs: Api for Pair to set a value.  Despite the fact that
23020         the variables are public the MS C# compiler refuses to compile
23021         code that accesses the field if the variable is part of a foreach
23022         statement. 
23023
23024         * statement.cs (Fixed): Begin implementation of the fixed
23025         statement.
23026
23027         (Block.AddVariable): Return the VariableInfo on success and null
23028         on failure instead of true/false. 
23029
23030         * cs-parser.jay (foreach): Catch errors on variables already
23031         defined (we were ignoring this value before) and properly unwind
23032         the block hierarchy
23033
23034         (fixed_statement): grammar for the fixed statement.
23035
23036 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
23037
23038         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
23039         pointer types to be incretemented.
23040
23041         (SizeOf): Implement.
23042
23043         * cs-parser.jay (pointer_member_access): Implement
23044         expr->IDENTIFIER production.
23045
23046         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
23047         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
23048         on safe contexts.
23049
23050         (Unary): Implement indirection.
23051
23052         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
23053         use in non-unsafe context).
23054
23055         (SimpleName.DoResolve): Check for pointers in field access on safe
23056         contexts. 
23057
23058         (Expression.LoadFromPtr): Factor the load-indirect code in this
23059         function.  This was duplicated in UnboxCast and ParameterReference
23060
23061 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
23062
23063         * expression.cs (ComposedCast): report an error if a pointer cast
23064         is used in a safe region.
23065
23066         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
23067         pointer type casts in unsafe context.
23068
23069         * codegen.cs (EmitContext): Set up IsUnsafe.
23070
23071         * cs-parser.jay (non_expression_type): Add productions for pointer
23072         casts. 
23073
23074         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
23075         code.  We should not use force into static mode if the method is
23076         not virtual.  Fixes bug in MIS
23077
23078         * statement.cs (Do.Emit, While.Emit, For.Emit,
23079         Statement.EmitBoolExpression): Add support to Do and While to
23080         propagate infinite loop as `I do return' semantics.
23081
23082         Improve the For case to also test for boolean constants.
23083
23084         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
23085         to the list of attributes we can add.
23086
23087         Remove `EmitContext' argument.
23088
23089         * class.cs (Method.Define): Apply parameter attributes.
23090         (Constructor.Define): Apply parameter attributes.
23091         (MethodCore.LabelParameters): Move here the core of labeling
23092         parameters. 
23093
23094         * support.cs (ReflectionParameters.ParameterModifier,
23095         InternalParameters.ParameterModifier): Use IsByRef on the type and
23096         only return the OUT bit for these parameters instead of in/out/ref
23097         flags.
23098
23099         This is because I miss-understood things.  The ParameterInfo.IsIn
23100         and IsOut represent whether the parameter has the [In] and [Out]
23101         attributes set.  
23102
23103 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
23104
23105         * ecore.cs (FieldExpr.Emit): Release temporaries.
23106
23107         * assign.cs (LocalTemporary.Release): new function.
23108
23109         * codegen.cs (EmitContext.GetTemporaryStorage,
23110         EmitContext.FreeTemporaryStorage): Rework the way we deal with
23111         temporary storage.  Now we can "put back" localbuilders when we
23112         are done with them
23113
23114 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
23115
23116         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
23117         need to make a copy of the variable to generate verifiable code.
23118
23119 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
23120
23121         * driver.cs: Compute dynamically the system directory.
23122
23123         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
23124         Slower, but more generally useful.  Used by the abstract
23125         registering implementation. 
23126
23127         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
23128         the rules for the special rule on Type/instances.  First check if
23129         we have the same name, and if so, try that special static path
23130         rather than the instance path.
23131
23132 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
23133
23134         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
23135         for, while and if.
23136
23137         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
23138         Enum, ValueType, Delegate or Array for non-corlib compiles.
23139
23140         * cs-tokenizer.cs: Catch long identifiers (645)
23141
23142         * typemanager.cs (IndexerPropetyName): Ravi never tested this
23143         piece of code.
23144
23145         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
23146         fix, we were returning too early, so we were not registering
23147         pending methods from abstract classes.
23148
23149         Do not register pending methods if the class is abstract.
23150
23151         * expression.cs (Conditional.DoResolve): Report circular implicit
23152         conversions when we neecd to compute it for conditional
23153         expressions. 
23154
23155         (Is.DoResolve): If the expression is always of the provided type,
23156         flag warning 183.  If the expression can not ever be of the
23157         provided type flag warning 184.
23158
23159         * class.cs: Catch 169 as well.
23160
23161         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
23162         read. 
23163
23164 2002-01-18  Nick Drochak  <ndrochak@gol.com>
23165
23166         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
23167
23168 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
23169
23170         * interface.cs: (PopulateMethod): Check for pointers being defined
23171         only if the unsafe context is active.
23172         (PopulateProperty): ditto.
23173         (PopulateIndexer): ditto.
23174
23175         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
23176         specified.  If pointers are present, make sure that they are
23177         present in an unsafe context.
23178         (Constructor, Constructor.Define): ditto.
23179         (Field, Field.Define): ditto.
23180         (Property, Property.Define): ditto.
23181         (Event, Event.Define): ditto.
23182
23183         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
23184         hashtable if there are classes or structs defined.
23185
23186         * expression.cs (LocalVariableReference.DoResolve): Simplify this
23187         code, as the constant resolution moved.
23188
23189         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
23190         the metadata, so we can flag error 133. 
23191
23192         * decl.cs (MemberCore.UnsafeOK): New function to test that a
23193         pointer is being declared in an unsafe context.
23194
23195 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
23196
23197         * modifiers.cs (Modifiers.Check): Require a Location argument.
23198         Report error 227 for Unsafe use.
23199
23200         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
23201
23202         * statement.cs (For.Emit): If the test is null, then report that
23203         we do `return', as we wont reach anything afterwards.
23204
23205         (Switch.SwitchGoverningType): Track the expression that matched
23206         the conversion.
23207
23208         * driver.cs: Allow negative numbers as an error code to flag.
23209
23210         * cs-parser.jay: Handle 1551.
23211
23212         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
23213
23214 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23215
23216         * cs-parser.jay: Report 1518 (type declaration can only contain
23217         class, struct, interface, enum or delegate)
23218
23219         (switch_label): Report 1523 (keywords `case' or `default' must
23220         preced code)
23221
23222         (opt_switch_sections): Report 1522 (empty switch)
23223
23224         * driver.cs: Report 1515 (response file specified multiple times)
23225         Report 1516 (Source file specified multiple times).
23226
23227         * expression.cs (Argument.Resolve): Signal 1510
23228
23229         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
23230         access not allowed in static code)
23231
23232 2002-01-11  Ravi Pratap  <ravi@ximian.com>
23233
23234         * typemanager.cs (IsPointerType): Utility method which we are going
23235         to need a lot.
23236
23237         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
23238         the object type, so we take care of that.
23239
23240         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
23241
23242         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
23243         added to non-params parameters :-)
23244
23245         * typemanager.cs (CSharpName): Include 'void' type too. 
23246
23247         (void_ptr_type): Include in the set of core types.
23248
23249         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
23250         duplicating code.
23251
23252         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
23253         an unsafe context.
23254
23255         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
23256         completely forgotten about it.
23257
23258 2002-01-10  Ravi Pratap  <ravi@ximian.com>
23259
23260         * cs-parser.jay (pointer_type): Add. This begins our implementation
23261         of parsing rules for unsafe code.
23262
23263         (unsafe_statement): Implement.
23264
23265         (embedded_statement): Modify to include the above.
23266
23267         * statement.cs (Unsafe): Implement new class for unsafe blocks.
23268
23269         * codegen.cs (EmitContext.InUnsafe): Add. This determines
23270         if the current context is an unsafe one.
23271
23272         * cs-parser.jay (local_variable_pointer_type): Since local variable types
23273         are handled differently, we need separate rules for them.
23274
23275         (local_variable_declaration): Update to use local_variable_pointer_type
23276         to allow variable declarations of unmanaged pointer types.
23277
23278         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
23279         in unsafe contexts.
23280
23281         * ../errors/cs0214.cs : Add.
23282
23283 2002-01-16  Nick Drochak  <ndrochak@gol.com>
23284
23285         * makefile: remove 'response' file when cleaning.
23286
23287 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23288
23289         * cs-parser.jay: Report 1524.
23290
23291 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
23292
23293         * typemanager.cs (RegisterMethod): drop checking if we have
23294         registered this from here
23295
23296 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
23297
23298         * class.cs (Method.EmitDestructor): Implement calling our base
23299         destructor. 
23300
23301         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
23302         value of InFinally.
23303
23304         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
23305         this routine and will wrap the call in a try/catch block.  Deal
23306         with the case.
23307
23308 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
23309
23310         * ecore.cs (Expression.MemberLookup): instead of taking a
23311         parameter `same_type' that was used to tell whether we could
23312         access private members we compute our containing type from the
23313         EmitContext.
23314
23315         (FieldExpr): Added partial support for volatile fields.  This does
23316         not work for volatile fields exposed from assemblies, as I can not
23317         figure out how to extract the modreq from it.
23318
23319         Updated all the source files to use this.
23320
23321         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
23322         because it is referenced by MemberLookup very often. 
23323
23324 2002-01-09  Ravi Pratap  <ravi@ximian.com>
23325
23326         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
23327         TypeBuilder.GetCustomAttributes to retrieve what we need.
23328
23329         Get rid of redundant default_member_attr_type as this is the same as
23330         default_member_type which already exists.
23331
23332         * interface.cs, attribute.cs : Update accordingly.
23333
23334 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
23335
23336         * typemanager.cs: Enable IndexerPropertyName again.  It does not
23337         work for TYpeBuilders though.  Ravi, can you please fix this?
23338
23339         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
23340
23341         * expression.cs (Argument.Emit): Handle the case of ref objects
23342         being passed to ref functions;  
23343
23344         (ParameterReference.EmitLoad): Loads the content of the pointer
23345         without dereferencing.
23346
23347 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23348
23349         * cs-tokenizer.cs: Implemented the pre-processing expressions.
23350
23351 2002-01-08  Ravi Pratap  <ravi@ximian.com>
23352
23353         * class.cs (Indexer.DefineMethod): Incorporate the interface
23354         type in the name of the method if we are doing explicit interface
23355         implementation.
23356
23357         * expression.cs (ConversionExists): Remove as it is completely obsolete.
23358
23359         (BetterConversion): Fix extremely trivial bug where we were referring to
23360         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
23361         again !
23362
23363         * ../errors/bug16.cs : Add although we have fixed it.
23364
23365 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23366
23367         * expression.cs (BaseIndexer): Begin implementation.
23368
23369         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
23370
23371         * cs-parser.jay (indexer_declarator): Use qualified_identifier
23372         production directly to remove a shift/reduce, and implement
23373         explicit interface implementation.
23374
23375         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
23376         after a floating point suffix.
23377
23378         * expression.cs (DoNumericPromotions): Improved the conversion for
23379         uint/uint.  If we have a constant, we avoid doing a typecast to a
23380         larger type.
23381
23382         * class.cs (Indexer): Implement explicit interface implementation
23383         for indexers.
23384
23385 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
23386
23387         * class.cs: make the default instance constructor public and hidebysig.
23388
23389 2001-01-03  Ravi Pratap  <ravi@ximian.com>
23390
23391         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
23392         so we can call it from elsewhere.
23393
23394         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
23395         we emit it internally if the class has a defined indexer; otherwise the user
23396         emits it by decorating the class definition with the DefaultMemberAttribute.
23397
23398         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
23399         attribute is not used on a type which defines an indexer.
23400
23401         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
23402         character when we skip whitespace.
23403
23404         * ../errors/cs0646.cs : Add.
23405
23406 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
23407
23408         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
23409         again. 
23410
23411         * makefile: Add practical target `mcs3.exe' which builds the third
23412         generation compiler. 
23413
23414         * expression.cs (New): Fix structures constructor calling.
23415
23416         * class.cs (Property, Method, Indexer): Emit Final flag on the
23417         method if we are an interface implementation and we are not
23418         abstract. 
23419
23420         * ecore.cs (PropertyExpr): New public field `IsBase', tells
23421         whether this property is referencing a `base' method.
23422
23423         * expression.cs (Invocation.EmitCall): take an extra argument:
23424         is_base, this is used to determine whether the `call' or
23425         `callvirt' opcode should be used.
23426
23427
23428         * delegate.cs: update EmitCall.
23429
23430         * class.cs (Method.Define): Set NewSlot for the cases where we are
23431         not implementing an interface method.
23432
23433         (Property.Define): ditto.
23434
23435 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
23436
23437         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
23438         'r'.  Allows mcs to parse itself fully.
23439
23440 2002-01-02  Ravi Pratap  <ravi@ximian.com>
23441
23442         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
23443         of the number of initializers that require the InitializeArray method.
23444
23445         (CheckIndices): Store the Expression in all cases - not the plain value. Also
23446         update the above field where necessary.
23447
23448         (MakeByteBlob): Update accordingly.
23449
23450         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
23451         greater than 2.
23452
23453         (EmitDynamicInitializers): Update in accordance with the new optimization.
23454
23455         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
23456         same OpCode applies.
23457
23458         * cs-parser.jay : Fix some glaring errors I introduced.
23459
23460 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
23461
23462         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
23463         so that we can check for name clashes there too.
23464
23465         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
23466         for interface indexers.
23467
23468         * interfaces.cs (Define): Emit the default member attribute.
23469
23470         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
23471         variable was being referred to while setting the value ;-)
23472
23473 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
23474
23475         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
23476         byte-by-byte information when we know the data is zero.
23477
23478         Make the block always a multiple of 4, because
23479         DefineInitializedData has a bug.
23480
23481         * assign.cs: Fix, we should assign from the temporary, not from
23482         the source. 
23483
23484         * expression.cs (MakeByteBlob): Fix my incorrect code.
23485
23486 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
23487
23488         * typemanager.cs (EnumToUnderlying): This function is used to get
23489         the underlying type from an enumeration, because it does not
23490         always work. 
23491
23492         * constant.cs: Use the I4_S form for values between -128 and 127.
23493
23494         * statement.cs (Block.LookupLabel): Looks up a label.
23495         (Block): Drop support for labeled blocks.
23496
23497         (LabeledStatement): New kind of statement that represents a label
23498         only.
23499
23500         (Goto): Finally implement this bad boy.
23501
23502         * cs-parser.jay: Update to reflect new mechanism to implement
23503         labels.
23504
23505 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
23506
23507         * codegen.cs (EmitContext.This): a codegen property that keeps the
23508         a single instance of this instead of creating many different this
23509         instances. 
23510
23511         * delegate.cs (Delegate.DoResolve): Update to use the property;
23512
23513         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
23514
23515         * expression.cs (BaseAccess.DoResolve): Ditto.
23516
23517 2001-12-29  Ravi Pratap  <ravi@ximian.com>
23518
23519         * typemanager.cs (methodimpl_attr_type): Add to hold the type
23520         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
23521
23522         (InitCoreTypes): Update accordingly.
23523
23524         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
23525         so we can quickly store the state.
23526
23527         (ApplyAttributes): Set the correct implementation flags
23528         for InternalCall methods.
23529
23530 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
23531
23532         * expression.cs (EmitCall): if a method is not virtual, then do
23533         not use callvirt on it.
23534
23535         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
23536         user defined stuff) requires the use of stobj, which takes an
23537         address on the stack instead of an array and an index.  So emit
23538         the Ldelema operation for it.
23539
23540         (EmitStoreOpcode): Use stobj for valuetypes.
23541
23542         (UnaryMutator.EmitCode): Use the right 1 value depending on
23543         whether we are dealing with int64/uint64, float or doubles.
23544
23545         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
23546         constructors that I implemented last night.
23547
23548         (Constructor.IsDefault): Fix to work properly for static
23549         constructors.
23550
23551         * cs-parser.jay (CheckDef): report method signature errors.
23552         Update error number 103 to be 132.
23553
23554         * decl.cs: New AdditionResult enumeration value: MethodExists.
23555         Although we do this check for methods later on in the semantic
23556         analysis, catching repeated default constructors is so easy that
23557         we catch these here. 
23558
23559         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
23560         promotions code.
23561
23562         (ParameterReference.EmitAssign, Emit): handle
23563         bools as bytes.
23564
23565         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
23566         (ArrayAccess.EmitStoreOpcode): ditto.
23567
23568         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
23569
23570         * expression.cs (MakeByteBlob): Complete all the missing types
23571         (uint, short, ushort, byte, sbyte)
23572
23573         * class.cs: Only init instance field initializers on instance
23574         constructors. 
23575
23576         Rename `constructors' to instance_constructors. 
23577
23578         (TypeContainer.AddConstructor): Only add constructors to the list
23579         if it is not static.
23580
23581         Make sure that we handle default_static_constructor independently
23582         everywhere where we handle instance_constructors
23583
23584 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
23585
23586         * class.cs: Do not lookup or create a base initializer for a
23587         static constructor.
23588
23589         (ConstructorInitializer.Resolve): use the proper type to lookup
23590         for constructors.
23591
23592         * cs-parser.jay: Report error 1585 (modifiers between type and name).
23593
23594         * enum.cs, interface.cs: Remove CloseType, this is taken care by
23595         in DeclSpace. 
23596
23597         * decl.cs: CloseType is now an virtual method, the default
23598         implementation just closes this type.
23599
23600 2001-12-28  Ravi Pratap  <ravi@ximian.com>
23601
23602         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
23603         to PreserveSig by default. Also emit HideBySig on such methods.
23604
23605         Basically, set the defaults to standard values.
23606
23607         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
23608         argument, if candidate is better, it can't be worse than the best !
23609
23610         (Invocation): Re-write bits to differentiate between methods being
23611         applicable in their expanded form and their normal form - for params
23612         methods of course.
23613
23614         Get rid of use_standard everywhere as only standard conversions are allowed
23615         in overload resolution. 
23616
23617         More spec conformance.
23618
23619 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23620
23621         * driver.cs: Add --timestamp, to see where the compiler spends
23622         most of its time.
23623
23624         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
23625         `this' in static code.
23626
23627         (SimpleName.DoResolve): Implement in terms of a helper function
23628         that allows static-references to be passed upstream to
23629         MemberAccess.
23630
23631         (Expression.ResolveWithSimpleName): Resolve specially simple
23632         names when called by MemberAccess to implement the special
23633         semantics. 
23634
23635         (Expression.ImplicitReferenceConversion): Handle conversions from
23636         Null to reference types before others, as Null's type is
23637         System.Object. 
23638
23639         * expression.cs (Invocation.EmitCall): Handle the special case of
23640         calling methods declared on a reference type from a ValueType
23641         (Base classes System.Object and System.Enum)
23642
23643         (MemberAccess.Resolve): Only perform lookups on Enumerations if
23644         the left hand side is a TypeExpr, not on every enumeration. 
23645
23646         (Binary.Resolve): If types are reference types, then do a cast to
23647         object on operators != and == of both arguments.
23648
23649         * typemanager.cs (FindMembers): Extract instance and static
23650         members if requested.
23651
23652         * interface.cs (PopulateProperty): Use void_type instead of null
23653         as the return type for the setter method.
23654
23655         (PopulateIndexer): ditto.
23656
23657 2001-12-27  Ravi Pratap  <ravi@ximian.com>
23658
23659         * support.cs (ReflectionParameters): Fix minor bug where we
23660         were examining the wrong parameter for the ParamArray attribute.
23661
23662         Cope with requests for the type of the parameter at position
23663         greater than the params parameter's. We now return the element
23664         type of the params array as that makes more sense.
23665
23666         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
23667         accordingly as we no longer have to extract the element type
23668         ourselves.
23669
23670         (Invocation.OverloadResolve): Update.
23671
23672 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23673
23674         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
23675         against IEnumerator, test whether the return value is a descendant
23676         of the IEnumerator interface.
23677
23678         * class.cs (Indexer.Define): Use an auxiliary method to implement
23679         the other bits of the method definition.  Begin support for
23680         explicit interface implementation.
23681
23682         (Property.DefineMethod): Use TypeManager.void_type instead of null
23683         for an empty return value.
23684
23685 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
23686
23687         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
23688         dealing with a FieldExpr which is composed of a FieldBuilder, in
23689         the code path we did extract the constant, but we should have
23690         obtained the underlying value to be able to cast it (otherwise we
23691         end up in an infinite loop, this is what Ravi was running into).
23692
23693         (ArrayCreation.UpdateIndices): Arrays might be empty.
23694
23695         (MemberAccess.ResolveMemberAccess): Add support for section
23696         14.5.4.1 that deals with the special case of E.I when E is a type
23697         and something else, that I can be a reference to a static member.
23698
23699         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
23700         handle a particular array type to create byte blobs, it is just
23701         something we dont generate byteblobs for.
23702
23703         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
23704         arguments. 
23705
23706         * location.cs (Push): remove the key from the hashtable that we
23707         are about to add.   This happens for empty files.
23708
23709         * driver.cs: Dispose files after we have parsed them.
23710
23711         (tokenize): new function that only runs the tokenizer on its
23712         input, for speed testing.
23713
23714 2001-12-26  Ravi Pratap  <ravi@ximian.com>
23715
23716         * class.cs (Event.Define): Define the private field only if there
23717         are no accessors defined.
23718
23719         * expression.cs (ResolveMemberAccess): If there is no associated
23720         field with the event, that means we have an event defined with its
23721         own accessors and we should flag error cs0070 since transforming
23722         ourselves into a field is not valid in that case.
23723
23724         * ecore.cs (SimpleName.DoResolve): Same as above.
23725
23726         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
23727         and charset to sane values.
23728
23729 2001-12-25  Ravi Pratap  <ravi@ximian.com>
23730
23731         * assign.cs (DoResolve): Perform check on events only if they 
23732         are being accessed outside the declaring type.
23733
23734         * cs-parser.jay (event_declarations): Update rules to correctly
23735         set the type of the implicit parameter etc.
23736
23737         (add_accessor, remove_accessor): Set current local parameters.
23738
23739         * expression.cs (Binary): For delegate addition and subtraction,
23740         cast the return value from the method into the appropriate delegate
23741         type.
23742
23743 2001-12-24  Ravi Pratap  <ravi@ximian.com>
23744
23745         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
23746         of these as the workaround is unnecessary.
23747
23748         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
23749         delegate data - none of that is needed at all.
23750
23751         Re-write bits to extract the instance expression and the delegate method
23752         correctly.
23753
23754         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
23755         on delegates too.
23756
23757         * attribute.cs (ApplyAttributes): New method to take care of common tasks
23758         of attaching attributes instead of duplicating code everywhere.
23759
23760         * everywhere : Update code to do attribute emission using the above method.
23761
23762 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23763
23764         * expression.cs (IsParamsMethodApplicable): if there are not
23765         parameters, return immediately.
23766
23767         * ecore.cs: The 0 literal can be implicity converted to an enum
23768         type. 
23769
23770         (SimpleName.DoResolve): First lookup the type, then lookup the
23771         members. 
23772
23773         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
23774         want to get its address.  If the InstanceExpression is not
23775         addressable, store the result in a temporary variable, then get
23776         the address of it.
23777
23778         * codegen.cs: Only display 219 errors on warning level or above. 
23779
23780         * expression.cs (ArrayAccess): Make it implement the
23781         IMemoryLocation interface.
23782
23783         (Binary.DoResolve): handle the operator == (object a, object b)
23784         and operator != (object a, object b) without incurring into a
23785         BoxedCast (because 5 != o should never be performed).
23786
23787         Handle binary enumerator operators.
23788
23789         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
23790         value type, otherwise use Ldelem_ref.
23791
23792         Use precomputed names;
23793
23794         (AddressOf): Implement address of
23795
23796         * cs-parser.jay (labeled_statement): Fix recursive block
23797         addition by reworking the production.
23798
23799         * expression.cs (New.DoEmit): New has a special case:
23800                 
23801                  If we are dealing with a ValueType, we have a few
23802                  situations to deal with:
23803                 
23804                     * The target of New is a ValueType variable, that is
23805                       easy, we just pass this as the variable reference
23806                 
23807                     * The target of New is being passed as an argument,
23808                       to a boxing operation or a function that takes a
23809                       ValueType.
23810                 
23811                       In this case, we need to create a temporary variable
23812                       that is the argument of New.
23813
23814
23815 2001-12-23  Ravi Pratap  <ravi@ximian.com>
23816
23817         * rootcontext.cs (LookupType): Check that current_type is not null before
23818         going about looking at nested types.
23819
23820         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
23821         not implement the IAssignMethod interface any more.
23822
23823         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
23824         where we tranform them into FieldExprs if they are being resolved from within
23825         the declaring type.
23826
23827         * ecore.cs (SimpleName.DoResolve): Do the same here.
23828
23829         * assign.cs (DoResolve, Emit): Clean up code considerably. 
23830
23831         * ../errors/bug10.cs : Add.
23832
23833         * ../errors/cs0070.cs : Add.
23834
23835         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
23836
23837         * assign.cs : Get rid of EventIsLocal everywhere.
23838
23839 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23840
23841         * ecore.cs (ConvertIntLiteral): finished the implementation.
23842
23843         * statement.cs (SwitchLabel): Convert the value we are using as a
23844         key before looking up the table.
23845
23846 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23847
23848         * codegen.cs (EmitTopBlock): Require a Location argument now.
23849
23850         * cs-parser.jay (constructor_declarator): We need to setup
23851         current_local_parameters before we parse the
23852         opt_constructor_initializer, to allow the variables to be bound
23853         to the constructor arguments.
23854
23855         * rootcontext.cs (LookupType): First lookup nested classes in our
23856         class and our parents before we go looking outside our class.
23857
23858         * expression.cs (ConstantFold): Extract/debox the values at the
23859         beginnning. 
23860
23861         * rootcontext.cs (EmitCode): Resolve the constants first before we
23862         resolve the types.  This is not really needed, but it helps debugging.
23863
23864         * statement.cs: report location.
23865
23866         * cs-parser.jay: pass location to throw statement.
23867
23868         * driver.cs: Small bug fix.
23869
23870         * report.cs: Updated format to be 4-zero filled digits.
23871
23872 2001-12-22  Ravi Pratap  <ravi@ximian.com>
23873
23874         * expression.cs (CheckIndices): Fix minor bug where the wrong
23875         variable was being referred to ;-)
23876
23877         (DoEmit): Do not call EmitStaticInitializers when the 
23878         underlying type is System.Object.
23879
23880 2001-12-21  Ravi Pratap  <ravi@ximian.com>
23881
23882         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
23883         and do the usual workaround for SRE.
23884
23885         * class.cs (MyEventBuilder.EventType): New member to get at the type
23886         of the event, quickly.
23887
23888         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
23889
23890         * assign.cs (Assign.DoResolve): Handle the case when the target
23891         is an EventExpr and perform the necessary checks.
23892
23893         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
23894         interface.
23895
23896         (SimpleName.MemberStaticCheck): Include check for EventExpr.
23897
23898         (EventExpr): Set the type in the constructor itself since we 
23899         are meant to be born fully resolved.
23900
23901         (EventExpr.Define): Revert code I wrote earlier.
23902                 
23903         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
23904         instance expression is null. The instance expression is a This in that case
23905         or a null, depending on whether it is a static method or not.
23906
23907         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
23908         refers to more than one method.
23909
23910         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
23911         and accordingly flag errors.
23912
23913 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23914
23915         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
23916
23917 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23918
23919         * location.cs (ToString): Provide useful rutine.
23920
23921 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23922
23923         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
23924         objects, return the actual integral boxed.
23925
23926         * statement.cs (SwitchLabel): define an ILLabel for each
23927         SwitchLabel. 
23928
23929         (Switch.CheckSwitch): If the value is a Literal, extract
23930         the underlying literal.
23931
23932         Also in the unused hashtable we had, add the SwitchLabel so we can
23933         quickly look this value up.
23934
23935         * constant.cs: Implement a bunch of new constants.  Rewrite
23936         Literal based on this.  Made changes everywhere to adapt to this.
23937
23938         * expression.cs (Expression.MakeByteBlob): Optimize routine by
23939         dereferencing array only once, and also copes with enumrations.
23940
23941         bytes are two bytes wide, not one.
23942
23943         (Cast): Perform constant conversions.
23944
23945         * ecore.cs (TryImplicitIntConversion): Return literals instead of
23946         wrappers to the literals here.
23947
23948         * expression.cs (DoNumericPromotions): long literals can converted
23949         to ulong implicity (this is taken care of elsewhere, but I was
23950         missing this spot).
23951
23952         * ecore.cs (Expression.Literalize): Make the return type Literal,
23953         to improve type checking.
23954
23955         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
23956
23957 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23958
23959         * literal.cs: Revert code from ravi that checked the bounds.  The
23960         bounds are sane by the definition of the type itself. 
23961
23962         * typemanager.cs: Fix implementation of ImplementsInterface.  We
23963         need to actually look up in our parent hierarchy for interfaces
23964         implemented. 
23965
23966         * const.cs: Use the underlying type for enumerations
23967
23968         * delegate.cs: Compute the basename for the delegate creation,
23969         that should fix the delegate test case, and restore the correct
23970         Type Lookup semantics in rootcontext
23971
23972         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
23973         referencing a nested type with the Reflection API is using the "+"
23974         sign. 
23975
23976         * cs-parser.jay: Do not require EOF token at the end.
23977
23978 2001-12-20  Ravi Pratap  <ravi@ximian.com>
23979
23980         * rootcontext.cs (LookupType): Concatenate type names with
23981         a '.' instead of a '+' The test suite passes again.
23982
23983         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
23984         field of the enumeration.
23985
23986         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
23987         the case when the member is an EventExpr.
23988
23989         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
23990         static has an associated instance expression.
23991
23992         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
23993
23994         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
23995
23996         * class.cs (Event.Define): Register event and perform appropriate checks
23997         for error #111.
23998
23999         We define the Add and Remove methods even if the use provides none because
24000         in that case, we provide default implementations ourselves.
24001
24002         Define a private field of the type of the event. This is done by the CSC compiler
24003         and we should be doing it too ;-)
24004
24005         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
24006         More methods we use in code we generate.
24007
24008         (multicast_delegate_type, delegate_type): Two separate types since the distinction
24009         is important.
24010
24011         (InitCoreTypes): Update accordingly for the above.
24012
24013         * class.cs (Event.Emit): Generate code for default accessors that we provide
24014
24015         (EmitDefaultMethod): Do the job in the above.
24016
24017         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
24018         appropriate place.
24019
24020 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24021
24022         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
24023         builders even if we were missing one.
24024
24025         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
24026         pass the Basename as our class name instead of the Name.  The
24027         basename will be correctly composed for us.
24028
24029         * parameter.cs (Paramters): Now takes a Location argument.
24030
24031         * decl.cs (DeclSpace.LookupType): Removed convenience function and
24032         make all the code call directly LookupType in RootContext and take
24033         this chance to pass the Location information everywhere.
24034
24035         * Everywhere: pass Location information.
24036
24037 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
24038
24039         * class.cs (Constructor.Define): Updated way of detecting the
24040         length of the parameters.
24041
24042         (TypeContainer.DefineType): Use basename as the type name for
24043         nested types.
24044
24045         (TypeContainer.Define): Do not recursively define types here, as
24046         definition is taken care in order by the RootContext.
24047
24048         * tree.cs: Keep track of namespaces in a per-file basis.
24049
24050         * parameter.cs (Parameter.ComputeSignature): Update to use
24051         DeclSpace. 
24052
24053         (Parameters.GetSignature): ditto.
24054
24055         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
24056         instead of a TypeContainer.
24057
24058         (Interface.SemanticAnalysis): Use `this' instead of our parent to
24059         resolve names.  Because we need to be resolve in our context, not
24060         our parents.
24061
24062         * driver.cs: Implement response files.
24063
24064         * class.cs (TypeContainer.DefineType): If we are defined, do not
24065         redefine ourselves.
24066
24067         (Event.Emit): Emit the code for add/remove handlers.
24068         (Event.Define): Save the MethodBuilders for add/remove.
24069
24070         * typemanager.cs: Use pair here too.
24071
24072         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
24073         DictionaryEntry requires the first argument to be non-null.  
24074
24075         (enum_declaration): Compute full name for registering the
24076         enumeration.
24077
24078         (delegate_declaration): Instead of using
24079         formal_parameter_list, use opt_formal_parameter_list as the list
24080         can be empty.
24081
24082         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
24083         (EventParsing): New property that controls whether `add' and
24084         `remove' are returned as tokens or identifiers (for events);
24085
24086 2001-12-19  Ravi Pratap  <ravi@ximian.com>
24087
24088         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
24089         use MyEventBuilder only and let it wrap the real builder for us.
24090
24091         (MyEventBuilder): Revamp constructor etc.
24092
24093         Implement all operations that we perform on EventBuilder in precisely the same
24094         way here too.
24095
24096         (FindMembers): Update to use the EventBuilder member.
24097
24098         (Event.Emit): Update accordingly.
24099
24100 2001-12-18  Ravi Pratap  <ravi@ximian.com>
24101
24102         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
24103         by calling the appropriate methods.
24104
24105         (GetCustomAttributes): Make stubs as they cannot possibly do anything
24106         useful.
24107
24108         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
24109
24110 2001-12-17  Ravi Pratap  <ravi@ximian.com>
24111
24112         * delegate.cs (Delegate.Populate): Check that the return type
24113         and various parameters types are indeed accessible.
24114
24115         * class.cs (Constructor.Define): Same here.
24116
24117         (Field.Define): Ditto.
24118
24119         (Event.Define): Ditto.
24120
24121         (Operator.Define): Check that the underlying Method defined itself
24122         correctly - so it's MethodBuilder should not be null.
24123
24124         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
24125         expression happens to be null.
24126
24127         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
24128         members but as of now we don't seem to be able to do anything really useful with it.
24129
24130         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
24131         not the EventBuilder.
24132
24133 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
24134
24135         * cs-tokenizer.cs: Add support for defines.
24136         Add support for #if, #elif, #else, #endif
24137
24138         (eval_var): evaluates a variable.
24139         (eval): stubbed for evaluating functions.
24140
24141         * cs-parser.jay: Pass the defines information
24142
24143         * driver.cs: Add --define command line option.
24144
24145         * decl.cs: Move MemberCore here.
24146
24147         Make it the base class for DeclSpace.  This allows us to catch and
24148         report 108 and 109 for everything now.
24149
24150         * class.cs (TypeContainer.Define): Extract all the members
24151         before populating and emit the warning 108 (new keyword required
24152         to override) instead of having each member implement this.
24153
24154         (MemberCore.Define): New abstract method, we will be using this in
24155         the warning reporting engine in Populate.
24156
24157         (Operator.Define): Adjust to new MemberCore protocol. 
24158
24159         * const.cs (Const): This does not derive from Expression, it is a
24160         temporary object we use to create fields, it is a MemberCore. 
24161
24162         * class.cs (Method.Define): Allow the entry point to be in a
24163         specific class.
24164
24165         * driver.cs: Rewrite the argument handler to clean it up a bit.
24166
24167         * rootcontext.cs: Made it just an auxiliary namespace feature by
24168         making everything static.
24169
24170         * driver.cs: Adapt code to use RootContext type name instead of
24171         instance variable.
24172
24173         * delegate.cs: Remove RootContext argument.
24174
24175         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
24176         argument. 
24177
24178         * class.cs (Event.Define): The lookup can fail.
24179
24180         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
24181
24182         * expression.cs: Resolve the this instance before invoking the code.
24183
24184 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
24185
24186         * cs-parser.jay: Add a production in element_access that allows
24187         the thing to become a "type" reference.  This way we can parse
24188         things like "(string [])" as a type.
24189
24190         Note that this still does not handle the more complex rules of
24191         casts. 
24192
24193
24194         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
24195
24196         * ecore.cs: (CopyNewMethods): new utility function used to
24197         assemble the list of methods from running FindMembers.
24198
24199         (MemberLookup): Rework FindMembers so that 
24200
24201 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
24202
24203         * class.cs (TypeContainer): Remove Delegates who fail to be
24204         defined.
24205
24206         * delegate.cs (Populate): Verify that we dont get null return
24207         values.   TODO: Check for AsAccessible.
24208
24209         * cs-parser.jay: Use basename to emit error 574 (destructor should
24210         have the same name as container class), not the full name.
24211
24212         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
24213         possible representation.  
24214
24215         Also implements integer type suffixes U and L.
24216
24217 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
24218
24219         * expression.cs (ArrayCreation.DoResolve): We need to do the
24220         argument resolution *always*.
24221
24222         * decl.cs: Make this hold the namespace.  Hold the root context as
24223         well.
24224         (LookupType): Move here.
24225
24226         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
24227
24228         * location.cs (Row, Name): Fixed the code, it was always returning
24229         references to the first file.
24230
24231         * interface.cs: Register properties defined through interfaces.
24232
24233         * driver.cs: Add support for globbing on the command line
24234
24235         * class.cs (Field): Make it derive from MemberCore as well.
24236         (Event): ditto.
24237
24238 2001-12-15  Ravi Pratap  <ravi@ximian.com>
24239
24240         * class.cs (Event::Define): Check that the type of the event is a delegate
24241         type else flag error #66.
24242
24243         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
24244         same.
24245
24246         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
24247         values of EntryPoint, CharSet etc etc.
24248
24249         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
24250
24251         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
24252         be null and we should ignore this. I am not sure if this is really clean. Apparently,
24253         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
24254         which needs this to do its work.
24255
24256         * ../errors/cs0066.cs : Add.
24257
24258 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
24259
24260         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
24261         helper functions.
24262
24263         * class.cs: (MethodSignature.MethodSignature): Removed hack that
24264         clears out the parameters field.
24265         (MemberSignatureCompare): Cleanup
24266
24267         (MemberCore): New base class used to share code between MethodCore
24268         and Property.
24269
24270         (RegisterRequiredImplementations) BindingFlags.Public requires
24271         either BindingFlags.Instace or Static.  Use instance here.
24272
24273         (Property): Refactored code to cope better with the full spec.
24274
24275         * parameter.cs (GetParameterInfo): Return an empty array instead
24276         of null on error.
24277
24278         * class.cs (Property): Abstract or extern properties have no bodies.
24279
24280         * parameter.cs (GetParameterInfo): return a zero-sized array.
24281
24282         * class.cs (TypeContainer.MethodModifiersValid): Move all the
24283         method modifier validation to the typecontainer so we can reuse
24284         this on properties.
24285
24286         (MethodCore.ParameterTypes): return an empty sized array of types.
24287
24288         (Property.Define): Test property modifier validity.
24289
24290         Add tests for sealed/override too.
24291
24292         (Method.Emit): abstract or extern methods have no bodies.
24293
24294 2001-12-14  Ravi Pratap  <ravi@ximian.com>
24295
24296         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
24297         thing.
24298
24299         (Method::Define, ::Emit): Modify accordingly.
24300
24301         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
24302
24303         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
24304
24305         * makefile: Pass in /unsafe.
24306
24307 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
24308
24309         * class.cs (MakeKey): Kill routine.
24310
24311         * class.cs (TypeContainer.Define): Correctly define explicit
24312         method implementations (they require the full interface name plus
24313         the method name).
24314
24315         * typemanager.cs: Deply the PtrHashtable here and stop using the
24316         lame keys.  Things work so much better.
24317
24318         This of course broke everyone who depended on `RegisterMethod' to
24319         do the `test for existance' test.  This has to be done elsewhere.
24320
24321         * support.cs (PtrHashtable): A hashtable that avoid comparing with
24322         the object stupid Equals method (because, that like fails all over
24323         the place).  We still do not use it.
24324
24325         * class.cs (TypeContainer.SetRequiredInterface,
24326         TypeContainer.RequireMethods): Killed these two routines and moved
24327         all the functionality to RegisterRequiredImplementations.
24328
24329         (TypeContainer.RegisterRequiredImplementations): This routine now
24330         registers all the implementations required in an array for the
24331         interfaces and abstract methods.  We use an array of structures
24332         which can be computed ahead of time to reduce memory usage and we
24333         also assume that lookups are cheap as most classes will not
24334         implement too many interfaces.
24335
24336         We also avoid creating too many MethodSignatures.
24337
24338         (TypeContainer.IsInterfaceMethod): Update and optionally does not
24339         clear the "pending" bit if we find that there are problems with
24340         the declaration.
24341
24342         (TypeContainer.VerifyPendingMethods): Update to report errors of
24343         methods that look like implementations but are not.
24344
24345         (TypeContainer.Define): Add support for explicit interface method
24346         implementation. 
24347
24348 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
24349
24350         * typemanager.cs: Keep track of the parameters here instead of
24351         being a feature of the TypeContainer.
24352
24353         * class.cs: Drop the registration of parameters here, as
24354         InterfaceMethods are also interface declarations.
24355
24356         * delegate.cs: Register methods with the TypeManager not only with
24357         the TypeContainer.  This code was buggy.
24358
24359         * interface.cs: Full registation here.
24360
24361 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
24362
24363         * expression.cs: Remove reducer for binary expressions, it can not
24364         be done this way.
24365
24366         * const.cs: Put here the code that used to go into constant.cs
24367
24368         * constant.cs: Put here the code for constants, this is a new base
24369         class for Literals.
24370
24371         * literal.cs: Make Literal derive from Constant.
24372
24373 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
24374
24375         * statement.cs (Return.Emit): Report error 157 if the user
24376         attempts to return from a finally block.
24377
24378         (Return.Emit): Instead of emitting a return, jump to the end of
24379         the function.
24380
24381         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
24382         LocalBuilder to store the result of the function.  ReturnLabel is
24383         the target where we jump.
24384
24385
24386 2001-12-09  Radek Doulik  <rodo@ximian.com>
24387
24388         * cs-parser.jay: remember alias in current namespace
24389
24390         * ecore.cs (SimpleName::DoResolve): use aliases for types or
24391         namespaces
24392
24393         * class.cs (LookupAlias): lookup alias in my_namespace
24394
24395         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
24396         aliases hashtable
24397         (LookupAlias): lookup alias in this and if needed in parent
24398         namespaces
24399
24400 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
24401
24402         * support.cs: 
24403
24404         * rootcontext.cs: (ModuleBuilder) Made static, first step into
24405         making things static.  I need this to avoid passing the
24406         TypeContainer when calling ParameterType.
24407
24408         * support.cs (InternalParameters.ParameterType): Remove ugly hack
24409         that did string manipulation to compute the type and then call
24410         GetType.  Use Parameter.ParameterType instead.
24411
24412         * cs-tokenizer.cs: Consume the suffix for floating values.
24413
24414         * expression.cs (ParameterReference): figure out whether this is a
24415         reference parameter or not.  Kill an extra variable by computing
24416         the arg_idx during emission.
24417
24418         * parameter.cs (Parameters.GetParameterInfo): New overloaded
24419         function that returns whether a parameter is an out/ref value or not.
24420
24421         (Parameter.ParameterType): The type of the parameter (base,
24422         without ref/out applied).
24423
24424         (Parameter.Resolve): Perform resolution here.
24425         (Parameter.ExternalType): The full type (with ref/out applied).
24426
24427         * statement.cs (Using.Emit, Using.EmitExpression): Implement
24428         support for expressions on the using statement.
24429
24430 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
24431
24432         * statement.cs (Using.EmitLocalVariableDecls): Split the
24433         localvariable handling of the using statement.
24434
24435         (Block.EmitMeta): Keep track of variable count across blocks.  We
24436         were reusing slots on separate branches of blocks.
24437
24438         (Try.Emit): Emit the general code block, we were not emitting it. 
24439
24440         Check the type of the declaration to be an IDisposable or
24441         something that can be implicity converted to it. 
24442
24443         Emit conversions if required.
24444
24445         * ecore.cs (EmptyExpression): New utility class.
24446         (Expression.ImplicitConversionExists): New utility function.
24447
24448 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
24449
24450         * statement.cs (Using): Implement.
24451
24452         * expression.cs (LocalVariableReference): Support read only variables.
24453
24454         * statement.cs: Remove the explicit emit for the Leave opcode.
24455         (VariableInfo): Add a readonly field.
24456
24457 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
24458
24459         * ecore.cs (ConvCast): new class used to encapsulate the various
24460         explicit integer conversions that works in both checked and
24461         unchecked contexts.
24462
24463         (Expression.ConvertNumericExplicit): Use new ConvCast class to
24464         properly generate the overflow opcodes.
24465
24466 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24467
24468         * statement.cs: The correct type for the EmptyExpression is the
24469         element_type, not the variable type.  Ravi pointed this out.
24470
24471 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24472
24473         * class.cs (Method::Define): Handle PInvoke methods specially
24474         by using DefinePInvokeMethod instead of the usual one.
24475
24476         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
24477         above to do the task of extracting information and defining the method.
24478
24479 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24480
24481         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
24482         of the condition for string type.
24483
24484         (Emit): Move that here. 
24485
24486         (ArrayCreation::CheckIndices): Keep string literals in their expression
24487         form.
24488
24489         (EmitDynamicInitializers): Handle strings appropriately.
24490
24491 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24492
24493         * codegen.cs (EmitContext): Replace multiple variables with a
24494         single pointer to the current Switch statement.
24495
24496         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
24497         EmitContext.
24498
24499 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24500
24501         * statement.cs 
24502
24503         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
24504         default'.
24505
24506         (Foreach.Emit): Foreach on arrays was not setting
24507         up the loop variables (for break/continue).
24508
24509         (GotoCase): Semi-implented.
24510
24511 2001-12-03  Ravi Pratap  <ravi@ximian.com>
24512
24513         * attribute.cs (CheckAttribute): Handle system attributes by using
24514         Attribute.GetAttributes to examine information we need.
24515
24516         (GetValidPlaces): Same here.
24517
24518         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
24519
24520         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
24521
24522         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
24523
24524         (Method::Define): Set appropriate flags if we have a DllImport attribute.
24525
24526         (Method::Emit): Handle the case when we are a PInvoke method.
24527
24528 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24529
24530         * expression.cs: Use ResolveWithSimpleName on compound names.
24531
24532 2001-12-02  Ravi Pratap  <ravi@ximian.com>
24533
24534         * constant.cs (EmitConstant): Make sure we resolve the associated expression
24535         before trying to reduce it.
24536
24537         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
24538
24539         * constant.cs (LookupConstantValue): Implement.
24540
24541         (EmitConstant): Use the above in emitting the constant.
24542
24543         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
24544         that are user-defined by doing a LookupConstantValue on them.
24545
24546         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
24547         too, like above.
24548
24549 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
24550
24551         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
24552
24553         (BaseAccess.DoResolve): Implement.
24554
24555         (MemberAccess.DoResolve): Split this routine into a
24556         ResolveMemberAccess routine that can be used independently
24557
24558 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
24559
24560         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
24561         As that share bits of the implementation.  Is returns a boolean,
24562         while As returns the Type that is being probed.
24563
24564 2001-12-01  Ravi Pratap  <ravi@ximian.com>
24565
24566         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
24567         instead of a Literal - much easier.
24568
24569         (EnumInTransit): Remove - utterly useless :-)
24570
24571         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
24572
24573         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
24574
24575         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
24576         chain when we have no associated expression.
24577
24578 2001-11-30  Ravi Pratap  <ravi@ximian.com>
24579
24580         * constant.cs (Define): Use Location while reporting the errror.
24581
24582         Also emit a warning when 'new' is used and there is no inherited
24583         member to hide.
24584
24585         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
24586         populated.
24587
24588         (LookupEnumValue): Implement to lookup an enum member's value and define it
24589         if necessary.
24590
24591         (Populate): Re-write accordingly to use the above routine.
24592
24593 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
24594
24595         * expression.cs (This): Fix prototype for DoResolveLValue to
24596         override the base class DoResolveLValue.
24597
24598         * cs-parser.cs: Report errors cs574 and cs575 (destructor
24599         declarations) 
24600
24601         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
24602         (we need to load the address of the field here).  This fixes
24603         test-22. 
24604
24605         (FieldExpr.DoResolveLValue): Call the DoResolve
24606         function to initialize the Instance expression.
24607
24608         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
24609         correctly the GetEnumerator operation on a value type.
24610
24611         * cs-parser.jay: Add more simple parsing error catches.
24612
24613         * statement.cs (Switch): Add support for string switches.
24614         Handle null specially.
24615
24616         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
24617
24618 2001-11-28  Ravi Pratap  <ravi@ximian.com>
24619
24620         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
24621
24622         (declare_local_constant): New helper function.
24623
24624         * statement.cs (AddConstant): Keep a separate record of constants
24625
24626         (IsConstant): Implement to determine if a variable is a constant.
24627
24628         (GetConstantExpression): Implement.
24629
24630         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
24631
24632         * statement.cs (IsVariableDefined): Re-write.
24633
24634 2001-11-27  Ravi Pratap  <ravi@ximian.com>
24635
24636         * class.cs (TypeContainer::FindMembers): Look for constants
24637         in the case when we are looking for MemberTypes.Field
24638
24639         * expression.cs (MemberAccess::DoResolve): Check that in the
24640         case we are a FieldExpr and a Literal, we are not being accessed
24641         by an instance reference.
24642
24643         * cs-parser.jay (local_constant_declaration): Implement.
24644
24645         (declaration_statement): Implement for constant declarations.
24646
24647 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
24648
24649         * statement.cs (Switch): Catch double defaults.
24650
24651         (Switch): More work on the switch() statement
24652         implementation.  It works for integral values now, need to finish
24653         string support.
24654
24655
24656 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24657
24658         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
24659         integer literals into other integer literals.  To be used by
24660         switch. 
24661
24662 2001-11-24  Ravi Pratap  <ravi@ximian.com>
24663
24664         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
24665         some memory.
24666
24667         (EmitDynamicInitializers): Cope with the above since we extract data
24668         directly from ArrayData now.
24669
24670         (ExpectInitializers): Keep track of whether initializers are mandatory
24671         or not.
24672
24673         (Bounds): Make it a hashtable to prevent the same dimension being 
24674         recorded for every element in that dimension.
24675
24676         (EmitDynamicInitializers): Fix bug which prevented the Set array method
24677         from being found.
24678
24679         Also fix bug which was causing the indices to be emitted in the reverse
24680         order.
24681
24682 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24683
24684         * expression.cs (ArrayCreation): Implement the bits that Ravi left
24685         unfinished.  They do not work, because the underlying code is
24686         sloppy.
24687
24688 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24689
24690         * cs-parser.jay: Remove bogus fixme.
24691
24692         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
24693         on Switch statement.
24694
24695 2001-11-23  Ravi Pratap  <ravi@ximian.com>
24696
24697         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
24698         the same. 
24699
24700         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
24701         parameter. Apparently, any expression is allowed. 
24702
24703         (ValidateInitializers): Update accordingly.
24704
24705         (CheckIndices): Fix some tricky bugs thanks to recursion.
24706
24707         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
24708         I was being completely brain-dead.
24709
24710         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
24711         and re-write acordingly.
24712
24713         (DelegateInvocation): Re-write accordingly.
24714
24715         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
24716
24717         (MakeByteBlob): Handle types more correctly.
24718
24719         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
24720         initialization from expressions but it is incomplete because I am a complete
24721         Dodo :-|
24722
24723 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24724
24725         * statement.cs (If.Emit): Fix a bug that generated incorrect code
24726         on If.  Basically, we have to return `true' (ie, we do return to
24727         our caller) only if both branches of the if return.
24728
24729         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
24730         short-circuit operators, handle them as short circuit operators. 
24731
24732         (Cast.DoResolve): Resolve type.
24733         (Cast.Cast): Take an expression as the target type.
24734
24735         * cs-parser.jay (cast_expression): Remove old hack that only
24736         allowed a limited set of types to be handled.  Now we take a
24737         unary_expression and we resolve to a type during semantic
24738         analysis.
24739
24740         Use the grammar productions from Rhys to handle casts (this is
24741         not complete like Rhys syntax yet, we fail to handle that corner
24742         case that C# has regarding (-x), but we will get there.
24743
24744 2001-11-22  Ravi Pratap  <ravi@ximian.com>
24745
24746         * class.cs (EmitFieldInitializer): Take care of the case when we have a
24747         field which is an array type.
24748
24749         * cs-parser.jay (declare_local_variables): Support array initialization too.
24750
24751         * typemanager.cs (MakeKey): Implement.
24752
24753         (everywhere): Use the above appropriately.
24754
24755         * cs-parser.jay (for_statement): Update for array initialization while
24756         declaring variables.
24757
24758         * ecore.cs : The error message was correct, it's the variable's names that
24759         were misleading ;-) Make the code more readable.
24760
24761         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
24762         the correct type etc.
24763
24764         (ConvertExplicit): Handle Enum types by examining the underlying type.
24765
24766 2001-11-21  Ravi Pratap  <ravi@ximian.com>
24767
24768         * parameter.cs (GetCallingConvention): Always return
24769         CallingConventions.Standard for now.
24770
24771 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24772
24773         * expression.cs (Binary.ResolveOperator): Update the values of `l'
24774         and `r' after calling DoNumericPromotions.
24775
24776         * ecore.cs: Fix error message (the types were in the wrong order).
24777
24778         * statement.cs (Foreach.ProbeCollectionType): Need to pass
24779         BindingFlags.Instance as well 
24780
24781         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
24782         implicit int literal conversion in an empty cast so that we
24783         propagate the right type upstream.
24784
24785         (UnboxCast): new class used to unbox value types.
24786         (Expression.ConvertExplicit): Add explicit type conversions done
24787         by unboxing.
24788
24789         (Expression.ImplicitNumericConversion): Oops, forgot to test for
24790         the target type before applying the implicit LongLiterals to ULong
24791         literal cast.
24792
24793 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
24794
24795         * cs-parser.jay (for_statement): Reworked the way For works: now
24796         we declare manually any variables that are introduced in
24797         for_initializer to solve the problem of having out-of-band code
24798         emition (that is what got for broken).
24799
24800         (declaration_statement): Perform the actual variable declaration
24801         that used to be done in local_variable_declaration here.
24802
24803         (local_variable_declaration): Do not declare anything, just pass
24804         the information on a DictionaryEntry
24805
24806 2001-11-20  Ravi Pratap  <ravi@ximian.com>
24807
24808         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
24809         re-write of the logic to now make it recursive.
24810
24811         (UpdateIndices): Re-write accordingly.
24812
24813         Store element data in a separate ArrayData list in the above methods.
24814
24815         (MakeByteBlob): Implement to dump the array data into a byte array.
24816
24817 2001-11-19  Ravi Pratap  <ravi@ximian.com>
24818
24819         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
24820         into CheckIndices.
24821
24822         * constant.cs (Define): Implement.
24823
24824         (EmitConstant): Re-write fully.
24825
24826         Pass in location info.
24827
24828         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
24829         respectively.
24830
24831         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
24832         DictionaryEntry since we need location info too.
24833
24834         (constant_declaration): Update accordingly.
24835
24836         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
24837         code into another method : UpdateIndices.
24838
24839 2001-11-18  Ravi Pratap  <ravi@ximian.com>
24840
24841         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
24842         some type checking etc.
24843
24844 2001-11-17  Ravi Pratap  <ravi@ximian.com>
24845
24846         * expression.cs (ArrayCreation::ValidateInitializers): Implement
24847         bits to provide dimension info if the user skips doing that.
24848
24849         Update second constructor to store the rank correctly.
24850
24851 2001-11-16  Ravi Pratap  <ravi@ximian.com>
24852
24853         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
24854         and try to implement.
24855
24856         * ../errors/cs0150.cs : Add.
24857
24858         * ../errors/cs0178.cs : Add.
24859
24860 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
24861
24862         * statement.cs: Implement foreach on multi-dimensional arrays. 
24863
24864         * parameter.cs (Parameters.GetParameterByName): Also lookup the
24865         name of the params argument.
24866
24867         * expression.cs: Use EmitStoreOpcode to get the right opcode while
24868         initializing the array.
24869
24870         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
24871         we can use this elsewhere.
24872
24873         * statement.cs: Finish implementation of foreach for single
24874         dimension arrays.
24875
24876         * cs-parser.jay: Use an out-of-band stack to pass information
24877         around, I wonder why I need this.
24878
24879         foreach_block: Make the new foreach_block the current_block.
24880
24881         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
24882         function used to return a static Parameters structure.  Used for
24883         empty parameters, as those are created very frequently.
24884
24885         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
24886
24887 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24888
24889         * interface.cs : Default modifier is private, not public. The
24890         make verify test passes again.
24891
24892 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24893
24894         * support.cs (ReflectionParameters): Fix logic to determine
24895         whether the last parameter is a params one. Test 9 passes again.
24896
24897         * delegate.cs (Populate): Register the builders we define with
24898         RegisterParameterForBuilder. Test 19 passes again.
24899
24900         * cs-parser.jay (property_declaration): Reference $6 instead
24901         of $$ to get at the location.
24902
24903         (indexer_declaration): Similar stuff.
24904
24905         (attribute): Ditto.
24906
24907         * class.cs (Property): Register parameters for the Get and Set methods
24908         if they exist. Test 23 passes again.
24909
24910         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
24911         call to EmitArguments as we are sure there aren't any params arguments. 
24912         Test 32 passes again.
24913
24914         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
24915         IndexOutOfRangeException. 
24916
24917         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
24918         Test 33 now passes again.
24919
24920 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
24921
24922         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
24923         broke a bunch of things.  Will have to come up with a better way
24924         of tracking locations.
24925
24926         * statement.cs: Implemented foreach for single dimension arrays.
24927
24928 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24929
24930         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
24931         an error.  This removes the lookup from the critical path.
24932
24933         * cs-parser.jay: Removed use of temporary_loc, which is completely
24934         broken. 
24935
24936 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
24937
24938         * support.cs (ReflectionParameters.ParameterModifier): Report
24939         whether the argument is a PARAMS argument or not.
24940
24941         * class.cs: Set the attribute `ParamArrayAttribute' on the
24942         parameter argument.
24943
24944         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
24945         and cons_param_array_attribute (ConstructorInfo for
24946         ParamArrayAttribute)., 
24947
24948         * codegen.cs: Emit the return using the `Return' statement, that
24949         way we can report the error correctly for missing return values. 
24950
24951         * class.cs (Method.Emit): Clean up.
24952
24953         * expression.cs (Argument.Resolve): Take another argument: the
24954         location where this argument is used.  Notice that this is not
24955         part of the "Argument" class as to reduce the size of the
24956         structure (we know the approximate location anyways).
24957
24958         Test if the argument is a variable-reference, if not, then
24959         complain with a 206.
24960
24961         (Argument.Emit): Emit addresses of variables.
24962
24963         (Argument.FullDesc): Simplify.
24964
24965         (Invocation.DoResolve): Update for Argument.Resolve.
24966
24967         (ElementAccess.DoResolve): ditto.
24968
24969         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
24970         method should be virtual, as this method is always virtual.
24971
24972         (NewDelegate.DoResolve): Update for Argument.Resolve.
24973
24974         * class.cs (ConstructorInitializer.DoResolve): ditto.
24975
24976         * attribute.cs (Attribute.Resolve): ditto.
24977
24978 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
24979
24980         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
24981
24982         * expression.cs (ParameterReference): Drop IStackStorage and implement
24983         IAssignMethod instead. 
24984
24985         (LocalVariableReference): ditto.
24986
24987         * ecore.cs (FieldExpr): Drop IStackStorage and implement
24988         IAssignMethod instead. 
24989
24990 2001-11-13  Miguel de Icaza <miguel@ximian.com>
24991
24992         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
24993         enumerations that are used in heavily used structures derive from
24994         byte in a laughable and pathetic attempt to reduce memory usage.
24995         This is the kind of pre-optimzations that you should not do at
24996         home without adult supervision.
24997
24998         * expression.cs (UnaryMutator): New class, used to handle ++ and
24999         -- separatedly from the other unary operators.  Cleans up the
25000         code, and kills the ExpressionStatement dependency in Unary.
25001
25002         (Unary): Removed `method' and `Arguments' from this class, making
25003         it smaller, and moving it all to SimpleCall, so I can reuse this
25004         code in other locations and avoid creating a lot of transient data
25005         strucutres when not required.
25006
25007         * cs-parser.jay: Adjust for new changes.
25008
25009 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
25010
25011         * enum.cs (Enum.Populate): If there is a failure during
25012         definition, return
25013
25014         * cs-parser.jay (opt_enum_base): we used to catch type errors
25015         here, but this is really incorrect.  The type error should be
25016         catched during semantic analysis.
25017
25018 2001-12-11  Ravi Pratap  <ravi@ximian.com>
25019
25020         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
25021         current_local_parameters as expected since I, in my stupidity, had forgotten
25022         to do this :-)
25023
25024         * attribute.cs (GetValidPlaces): Fix stupid bug.
25025
25026         * class.cs (Method::Emit): Perform check on applicability of attributes.
25027
25028         (Constructor::Emit): Ditto.
25029
25030         (Field::Emit): Ditto.
25031
25032         (Field.Location): Store location information.
25033
25034         (Property, Event, Indexer, Operator): Ditto.
25035
25036         * cs-parser.jay (field_declaration): Pass in location for each field.
25037
25038         * ../errors/cs0592.cs : Add.
25039
25040 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25041
25042         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
25043
25044         (InitCoreTypes): Update accordingly.
25045
25046         (RegisterAttrType, LookupAttr): Implement.
25047
25048         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
25049         info about the same.
25050
25051         (Resolve): Update to populate the above as necessary.
25052
25053         (Error592): Helper.
25054
25055         (GetValidPlaces): Helper to the above.
25056
25057         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
25058
25059         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
25060
25061 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25062
25063         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
25064
25065         * ../errors/cs0617.cs : Add.
25066
25067 2001-11-11  Ravi Pratap  <ravi@ximian.com>
25068
25069         * enum.cs (Emit): Rename to Populate to be more consistent with what
25070         we expect it to do and when exactly it is called.
25071
25072         * class.cs, rootcontext.cs : Update accordingly.
25073
25074         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
25075         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
25076
25077         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
25078
25079         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
25080         of a fieldinfo using the above, when dealing with a FieldBuilder.
25081
25082 2001-11-10  Ravi Pratap  <ravi@ximian.com>
25083
25084         * ../errors/cs0031.cs : Add.
25085
25086         * ../errors/cs1008.cs : Add.
25087
25088         * ../errrors/cs0543.cs : Add.
25089
25090         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
25091         enum type.
25092
25093         (FindMembers): Implement.
25094
25095         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
25096         enums and delegates too.
25097
25098         (enum_types): Rename to builder_to_enum.
25099
25100         (delegate_types): Rename to builder_to_delegate.
25101
25102         * delegate.cs (FindMembers): Implement.
25103
25104 2001-11-09  Ravi Pratap  <ravi@ximian.com>
25105
25106         * typemanager.cs (IsEnumType): Implement.
25107
25108         * enum.cs (Emit): Re-write parts to account for the underlying type
25109         better and perform checking etc.
25110
25111         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
25112         of the underlying type.
25113
25114         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
25115         value
25116
25117         * enum.cs (error31): Helper to report error #31.
25118
25119         * cs-parser.jay (enum_declaration): Store location of each member too.
25120
25121         * enum.cs (member_to_location): New hashtable. 
25122
25123         (AddEnumMember): Update location hashtable.
25124
25125         (Emit): Use the location of each member while reporting errors.
25126
25127 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25128
25129         * cs-parser.jay: A for_initializer if is a
25130         local_variable_declaration really ammount to have an implicit
25131         block with the variable declaration and no initializer for for.
25132
25133         * statement.cs (For.Emit): Cope with null initializers.
25134
25135         This fixes the infinite loop on for initializers.
25136
25137 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
25138
25139         * enum.cs: More cleanup.
25140
25141         * ecore.cs: Remove dead code.
25142
25143         * class.cs (Property.Emit): More simplification.
25144         (Event.Emit): ditto.
25145
25146         Reworked to have less levels of indentation.
25147
25148 2001-11-08  Ravi Pratap  <ravi@ximian.com>
25149
25150         * class.cs (Property): Emit attributes.
25151
25152         (Field): Ditto.
25153
25154         (Event): Ditto.
25155
25156         (Indexer): Ditto.
25157
25158         (Operator): Ditto.
25159
25160         * enum.cs (Emit): Ditto.
25161
25162         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
25163         Enums too.
25164
25165         * class.cs (Field, Event, etc.): Move attribute generation into the
25166         Emit method everywhere.
25167
25168         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
25169         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
25170         as we had no way of defining nested enums !
25171
25172         * rootcontext.cs : Adjust code accordingly.
25173
25174         * typemanager.cs (AddEnumType): To keep track of enum types separately.
25175
25176 2001-11-07  Ravi Pratap  <ravi@ximian.com>
25177
25178         * expression.cs (EvalConstantExpression): Move into ecore.cs
25179
25180         * enum.cs (Enum): Rename some members and make them public and readonly
25181         according to our convention.
25182
25183         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
25184         nothing else.
25185
25186         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
25187
25188         (Enum::Emit): Write a simple version for now which doesn't try to compute
25189         expressions. I shall modify this to be more robust in just a while.
25190
25191         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
25192
25193         (TypeContainer::CloseType): Create the Enum types too.
25194
25195         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
25196
25197         * expression.cs (EvalConstantExpression): Get rid of completely.
25198
25199         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
25200         user-defined values and other cases.
25201
25202         (IsValidEnumLiteral): Helper function.
25203
25204         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
25205         out there in the case we had a literal FieldExpr.
25206
25207         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
25208
25209         (Literalize): Revamp a bit to take two arguments.
25210
25211         (EnumLiteral): New class which derives from Literal to wrap enum literals.
25212
25213 2001-11-06  Ravi Pratap  <ravi@ximian.com>
25214
25215         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
25216
25217         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
25218
25219         (Resolve): Use the above to ensure we have proper initializers.
25220
25221 2001-11-05  Ravi Pratap  <ravi@ximian.com>
25222
25223         * expression.cs (Expression::EvalConstantExpression): New method to 
25224         evaluate constant expressions.
25225
25226         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
25227
25228 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
25229
25230         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
25231         in an array.
25232
25233         (Binary.ResolveOperator): Handle operator != (object a, object b)
25234         and operator == (object a, object b);
25235
25236         (Binary.DoNumericPromotions): Indicate whether the numeric
25237         promotion was possible.
25238
25239         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
25240         Implement.  
25241
25242         Made the ArrayAccess implement interface IAssignMethod instead of
25243         IStackStore as the order in which arguments are passed reflects
25244         this.
25245
25246         * assign.cs: Instead of using expr.ExprClass to select the way of
25247         assinging, probe for the IStackStore/IAssignMethod interfaces.
25248
25249         * typemanager.cs: Load InitializeArray definition.
25250
25251         * rootcontext.cs (RootContext.MakeStaticData): Used to define
25252         static data that can be used to initialize arrays. 
25253
25254 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
25255
25256         * expression.cs: Handle operator== and operator!= for booleans.
25257
25258         (Conditioal.Reduce): Implement reducer for the ?: operator.
25259
25260         (Conditional.Resolve): Implement dead code elimination.
25261
25262         (Binary.Resolve): Catch string literals and return a new
25263         concatenated string.
25264
25265         (Unary.Reduce): Implement reduction of unary expressions.
25266
25267         * ecore.cs: Split out the expression core handling here.
25268
25269         (Expression.Reduce): New method used to perform constant folding
25270         and CSE.  This is needed to support constant-expressions. 
25271
25272         * statement.cs (Statement.EmitBoolExpression): Pass true and false
25273         targets, and optimize for !x.
25274
25275 2001-11-04  Ravi Pratap  <ravi@ximian.com>
25276
25277         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
25278         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
25279         set custom atttributes.
25280
25281         * literal.cs (Literal::GetValue): New abstract method to return the actual
25282         value of the literal, cast as an object.
25283
25284         (*Literal): Implement GetValue method.
25285
25286         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
25287         expressions to the arraylist but objects of type Argument.
25288
25289         * class.cs (TypeContainer::Emit): Emit our attributes too.
25290
25291         (Method::Emit, Constructor::Emit): Ditto.
25292
25293         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
25294         to be ignoring earlier.
25295
25296 2001-11-03  Ravi Pratap  <ravi@ximian.com>
25297
25298         * attribute.cs (AttributeSection::Define): Implement to do the business
25299         of constructing a CustomAttributeBuilder.
25300
25301         (Attribute): New trivial class. Increases readability of code.  
25302
25303         * cs-parser.jay : Update accordingly.
25304
25305         (positional_argument_list, named_argument_list, named_argument): New rules
25306
25307         (attribute_arguments): Use the above so that we are more correct.
25308
25309 2001-11-02  Ravi Pratap  <ravi@ximian.com>
25310
25311         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
25312         to perform all checks for a method with a params parameter.
25313
25314         (Invocation::OverloadResolve): Update to use the above method and therefore
25315         cope correctly with params method invocations.
25316
25317         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
25318         params too.
25319
25320         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
25321         constructors in our parent too because we can't afford to miss out on 
25322         protected ones ;-)
25323
25324         * attribute.cs (AttributeSection): New name for the class Attribute
25325
25326         Other trivial changes to improve readability.
25327
25328         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
25329         use the new class names.
25330
25331 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25332
25333         * class.cs (Method::Define): Complete definition for params types too
25334
25335         (Indexer::Define): Ditto.
25336
25337         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
25338         Cope everywhere with a request for info about the array parameter.
25339
25340 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25341
25342         * tree.cs (RecordNamespace): Fix up to check for the correct key.
25343
25344         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
25345         local_variable_type to extract the string corresponding to the type.
25346
25347         (local_variable_type): Fixup the action to use the new helper method.
25348
25349         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
25350         go.
25351
25352         * expression.cs : Clean out code which uses the above.
25353
25354 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25355
25356         * typemanager.cs (RegisterMethod): Check if we already have an existing key
25357         and bale out if necessary by returning a false.
25358
25359         (RegisterProperty): Ditto.
25360
25361         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
25362         and print out appropriate error messages.
25363
25364         * interface.cs (everywhere): Ditto.
25365
25366         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
25367         location to constructor.
25368
25369         * class.cs (Property, Event, Indexer): Update accordingly.
25370
25371         * ../errors/cs111.cs : Added.
25372
25373         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
25374         of a method, as laid down by the spec.
25375
25376         (Invocation::OverloadResolve): Use the above method.
25377
25378 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25379
25380         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
25381         now take a TypeContainer and a Parameters object.
25382
25383         (ParameterData): Modify return type of ParameterModifier method to be 
25384         Parameter.Modifier and not a string.
25385
25386         (ReflectionParameters, InternalParameters): Update accordingly.
25387
25388         * expression.cs (Argument::GetParameterModifier): Same here.
25389
25390         * support.cs (InternalParameters::ParameterType): Find a better way of determining
25391         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
25392         symbol in it at all so maybe this is only for now.
25393
25394 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25395
25396         * support.cs (InternalParameters): Constructor now takes an extra argument 
25397         which is the actual Parameters class.
25398
25399         (ParameterDesc): Update to provide info on ref/out modifiers.
25400
25401         * class.cs (everywhere): Update call to InternalParameters to pass in
25402         the second argument too.
25403
25404         * support.cs (ParameterData): Add ParameterModifier, which is a method 
25405         to return the modifier info [ref/out etc]
25406
25407         (InternalParameters, ReflectionParameters): Implement the above.
25408
25409         * expression.cs (Argument::ParameterModifier): Similar function to return
25410         info about the argument's modifiers.
25411
25412         (Invocation::OverloadResolve): Update to take into account matching modifiers 
25413         too.
25414
25415         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
25416         a new SetFormalParameters object which we pass to InternalParameters.
25417
25418 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25419
25420         * expression.cs (NewArray): Merge into the ArrayCreation class.
25421
25422 2001-10-29  Ravi Pratap  <ravi@ximian.com>
25423
25424         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
25425         NewUserdefinedArray into one as there wasn't much of a use in having
25426         two separate ones.
25427
25428         * expression.cs (Argument): Change field's name to ArgType from Type.
25429
25430         (Type): New readonly property which returns the proper type, taking into 
25431         account ref/out modifiers.
25432
25433         (everywhere): Adjust code accordingly for the above.
25434
25435         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
25436         whether we are emitting for a ref or out parameter.
25437
25438         * expression.cs (Argument::Emit): Use the above field to set the state.
25439
25440         (LocalVariableReference::Emit): Update to honour the flag and emit the
25441         right stuff.
25442
25443         * parameter.cs (Attributes): Set the correct flags for ref parameters.
25444
25445         * expression.cs (Argument::FullDesc): New function to provide a full desc.
25446
25447         * support.cs (ParameterData): Add method ParameterDesc to the interface.
25448
25449         (ReflectionParameters, InternalParameters): Implement the above method.
25450
25451         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
25452         reporting errors.
25453
25454         (Invocation::FullMethodDesc): Ditto. 
25455
25456 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
25457
25458         * cs-parser.jay: Add extra production for the second form of array
25459         creation. 
25460
25461         * expression.cs (ArrayCreation): Update to reflect the above
25462         change. 
25463
25464         * Small changes to prepare for Array initialization.
25465
25466 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
25467
25468         * typemanager.cs (ImplementsInterface): interface might be null;
25469         Deal with this problem;
25470
25471         Also, we do store negative hits on the cache (null values), so use
25472         this instead of calling t.GetInterfaces on the type everytime.
25473
25474 2001-10-28  Ravi Pratap  <ravi@ximian.com>
25475
25476         * typemanager.cs (IsBuiltinType): New method to help determine the same.
25477
25478         * expression.cs (New::DoResolve): Get rid of array creation code and instead
25479         split functionality out into different classes.
25480
25481         (New::FormArrayType): Move into NewBuiltinArray.
25482
25483         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
25484         quite useless.
25485
25486         (NewBuiltinArray): New class to handle creation of built-in arrays.
25487
25488         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
25489         account creation of one-dimensional arrays.
25490
25491         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
25492
25493         (NewUserdefinedArray::DoResolve): Implement.
25494
25495         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
25496
25497         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
25498         we maintain inside the TypeManager. This is necessary to perform lookups on the
25499         module builder.
25500
25501         (LookupType): Update to perform GetType on the module builders too.     
25502
25503         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
25504
25505         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
25506
25507 2001-10-23  Ravi Pratap  <ravi@ximian.com>
25508
25509         * expression.cs (New::DoResolve): Implement guts of array creation.
25510
25511         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
25512
25513 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
25514
25515         * expression.cs: Fix bug I introduced lsat night that broke
25516         Delegates. 
25517
25518         (Expression.Resolve): Report a 246 error (can not resolve name)
25519         if we find a SimpleName in the stream.
25520
25521         (Expression.ResolveLValue): Ditto.
25522
25523         (Expression.ResolveWithSimpleName): This function is a variant of
25524         ResolveName, this one allows SimpleNames to be returned without a
25525         warning.  The only consumer of SimpleNames is MemberAccess
25526
25527 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
25528
25529         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
25530         might arrive here.  I have my doubts that this is correct.
25531
25532         * statement.cs (Lock): Implement lock statement.
25533
25534         * cs-parser.jay: Small fixes to support `lock' and `using'
25535
25536         * cs-tokenizer.cs: Remove extra space
25537
25538         * driver.cs: New flag --checked, allows to turn on integer math
25539         checking. 
25540
25541         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
25542         Threading.Monitor.Exit 
25543
25544 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
25545
25546         * expression.cs (IndexerAccess::DoResolveLValue): Set the
25547         Expression Class to be IndexerAccess.
25548
25549         Notice that Indexer::DoResolve sets the eclass to Value.
25550
25551 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
25552
25553         * class.cs (TypeContainer::Emit): Emit code for indexers.
25554
25555         * assign.cs (IAssignMethod): New interface implemented by Indexers
25556         and Properties for handling assignment.
25557
25558         (Assign::Emit): Simplify and reuse code. 
25559
25560         * expression.cs (IndexerAccess, PropertyExpr): Implement
25561         IAssignMethod, clean up old code. 
25562
25563 2001-10-22  Ravi Pratap  <ravi@ximian.com>
25564
25565         * typemanager.cs (ImplementsInterface): New method to determine if a type
25566         implements a given interface. Provides a nice cache too.
25567
25568         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
25569         method.
25570
25571         (ConvertReferenceExplicit): Ditto.
25572
25573         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
25574         various methods, with correct names etc.
25575
25576         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
25577         Operator.UnaryNegation.
25578
25579         * cs-parser.jay (operator_declarator): Be a little clever in the case where
25580         we have a unary plus or minus operator.
25581
25582         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
25583         UnaryMinus.
25584
25585         * everywhere : update accordingly.
25586
25587         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
25588         respectively.
25589
25590         * class.cs (Method::Define): For the case where we are implementing a method
25591         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
25592         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
25593
25594 2001-10-21  Ravi Pratap  <ravi@ximian.com>
25595
25596         * interface.cs (FindMembers): Implement to work around S.R.E
25597         lameness.
25598
25599         * typemanager.cs (IsInterfaceType): Implement.
25600
25601         (FindMembers): Update to handle interface types too.
25602
25603         * expression.cs (ImplicitReferenceConversion): Re-write bits which
25604         use IsAssignableFrom as that is not correct - it doesn't work.
25605
25606         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
25607         and accordingly override EmitStatement.
25608
25609         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
25610         using the correct logic :-)
25611
25612 2001-10-19  Ravi Pratap  <ravi@ximian.com>
25613
25614         * ../errors/cs-11.cs : Add to demonstrate error -11 
25615
25616 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
25617
25618         * assign.cs (Assign::Resolve): Resolve right hand side first, and
25619         then pass this as a hint to ResolveLValue.
25620
25621         * expression.cs (FieldExpr): Add Location information
25622
25623         (FieldExpr::LValueResolve): Report assignment to readonly
25624         variable. 
25625
25626         (Expression::ExprClassFromMemberInfo): Pass location information.
25627
25628         (Expression::ResolveLValue): Add new method that resolves an
25629         LValue. 
25630
25631         (Expression::DoResolveLValue): Default invocation calls
25632         DoResolve. 
25633
25634         (Indexers): New class used to keep track of indexers in a given
25635         Type. 
25636
25637         (IStackStore): Renamed from LValue, as it did not really describe
25638         what this did.  Also ResolveLValue is gone from this interface and
25639         now is part of Expression.
25640
25641         (ElementAccess): Depending on the element access type
25642
25643         * typemanager.cs: Add `indexer_name_type' as a Core type
25644         (System.Runtime.CompilerServices.IndexerNameAttribute)
25645
25646         * statement.cs (Goto): Take a location.
25647
25648 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25649
25650         * delegate.cs (Delegate::VerifyDelegate): New method to verify
25651         if two delegates are compatible.
25652
25653         (NewDelegate::DoResolve): Update to take care of the case when
25654         we instantiate a delegate from another delegate.
25655
25656         * typemanager.cs (FindMembers): Don't even try to look up members
25657         of Delegate types for now.
25658
25659 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25660
25661         * delegate.cs (NewDelegate): New class to take care of delegate
25662         instantiation.
25663
25664         * expression.cs (New): Split the delegate related code out into 
25665         the NewDelegate class.
25666
25667         * delegate.cs (DelegateInvocation): New class to handle delegate 
25668         invocation.
25669
25670         * expression.cs (Invocation): Split out delegate related code into
25671         the DelegateInvocation class.
25672
25673 2001-10-17  Ravi Pratap  <ravi@ximian.com>
25674
25675         * expression.cs (New::DoResolve): Implement delegate creation fully
25676         and according to the spec.
25677
25678         (New::DoEmit): Update to handle delegates differently.
25679
25680         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
25681         because of which we were printing out arguments in reverse order !
25682
25683         * delegate.cs (VerifyMethod): Implement to check if the given method
25684         matches the delegate.
25685
25686         (FullDelegateDesc): Implement.
25687
25688         (VerifyApplicability): Implement.
25689
25690         * expression.cs (Invocation::DoResolve): Update to accordingly handle
25691         delegate invocations too.
25692
25693         (Invocation::Emit): Ditto.
25694
25695         * ../errors/cs1593.cs : Added.
25696
25697         * ../errors/cs1594.cs : Added.
25698
25699         * delegate.cs (InstanceExpression, TargetMethod): New properties.
25700
25701 2001-10-16  Ravi Pratap  <ravi@ximian.com>
25702
25703         * typemanager.cs (intptr_type): Core type for System.IntPtr
25704
25705         (InitCoreTypes): Update for the same.
25706
25707         (iasyncresult_type, asynccallback_type): Ditto.
25708
25709         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
25710         correct.
25711
25712         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
25713         too.
25714
25715         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
25716         the builders for the 4 members of a delegate type :-)
25717
25718         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
25719         type.
25720
25721         * expression.cs (New::DoResolve): Implement guts for delegate creation.
25722
25723         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
25724
25725 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
25726
25727         * statement.cs (Break::Emit): Implement.   
25728         (Continue::Emit): Implement.
25729
25730         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25731         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25732         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25733         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
25734         end loop
25735
25736         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
25737         properties that track the label for the current loop (begin of the
25738         loop and end of the loop).
25739
25740 2001-10-15  Ravi Pratap  <ravi@ximian.com>
25741
25742         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
25743         use of emitting anything at all.
25744
25745         * class.cs, rootcontext.cs : Get rid of calls to the same.
25746
25747         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
25748
25749         (Populate): Define the constructor correctly and set the implementation
25750         attributes.
25751
25752         * typemanager.cs (delegate_types): New hashtable to hold delegates that
25753         have been defined.
25754
25755         (AddDelegateType): Implement.
25756
25757         (IsDelegateType): Implement helper method.
25758
25759         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
25760
25761         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
25762         and accordingly handle it.
25763
25764         * delegate.cs (Populate): Take TypeContainer argument.
25765         Implement bits to define the Invoke method. However, I still haven't figured out
25766         how to take care of the native int bit :-(
25767
25768         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
25769         Qualify the name of the delegate, not its return type !
25770
25771         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
25772         conversion.
25773
25774         (StandardConversionExists): Checking for array types turns out to be recursive.
25775
25776         (ConvertReferenceExplicit): Implement array conversion.
25777
25778         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
25779
25780 2001-10-12  Ravi Pratap  <ravi@ximian.com>
25781
25782         * cs-parser.jay (delegate_declaration): Store the fully qualified
25783         name as it is a type declaration.
25784
25785         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
25786         readonly.
25787
25788         (DefineDelegate): Renamed from Define. Does the same thing essentially,
25789         as TypeContainer::DefineType.
25790
25791         (Populate): Method in which all the definition of the various methods (Invoke)
25792         etc is done.
25793
25794         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
25795         see.
25796
25797         (CloseDelegate): Finally creates the delegate.
25798
25799         * class.cs (TypeContainer::DefineType): Update to define delegates.
25800         (Populate, Emit and CloseType): Do the same thing here too.
25801
25802         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
25803         delegates in all these operations.
25804
25805 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
25806
25807         * expression.cs: LocalTemporary: a new expression used to
25808         reference a temporary that has been created.
25809
25810         * assign.cs: Handle PropertyAccess back here, so that we can
25811         provide the proper semantic access to properties.
25812
25813         * expression.cs (Expression::ConvertReferenceExplicit): Implement
25814         a few more explicit conversions. 
25815
25816         * modifiers.cs: `NEW' modifier maps to HideBySig.
25817
25818         * expression.cs (PropertyExpr): Make this into an
25819         ExpressionStatement, and support the EmitStatement code path. 
25820
25821         Perform get/set error checking, clean up the interface.
25822
25823         * assign.cs: recognize PropertyExprs as targets, and if so, turn
25824         them into toplevel access objects.
25825
25826 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
25827
25828         * expression.cs: PropertyExpr::PropertyExpr: use work around the
25829         SRE.
25830
25831         * typemanager.cs: Keep track here of our PropertyBuilders again to
25832         work around lameness in SRE.
25833
25834 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
25835
25836         * expression.cs (LValue::LValueResolve): New method in the
25837         interface, used to perform a second resolution pass for LValues. 
25838
25839         (This::DoResolve): Catch the use of this in static methods.
25840
25841         (This::LValueResolve): Implement.
25842
25843         (This::Store): Remove warning, assigning to `this' in structures
25844         is 
25845
25846         (Invocation::Emit): Deal with invocation of
25847         methods on value types.  We need to pass the address to structure
25848         methods rather than the object itself.  (The equivalent code to
25849         emit "this" for structures leaves the entire structure on the
25850         stack instead of a pointer to it). 
25851
25852         (ParameterReference::DoResolve): Compute the real index for the
25853         argument based on whether the method takes or not a `this' pointer
25854         (ie, the method is static).
25855
25856         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
25857         value types returned from functions when we need to invoke a
25858         method on the sturcture.
25859
25860
25861 2001-10-11  Ravi Pratap  <ravi@ximian.com>
25862
25863         * class.cs (TypeContainer::DefineType): Method to actually do the business of
25864         defining the type in the Modulebuilder or Typebuilder. This is to take
25865         care of nested types which need to be defined on the TypeBuilder using
25866         DefineNestedMethod.
25867
25868         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
25869         methods in RootContext, only ported to be part of TypeContainer.
25870
25871         (TypeContainer::GetInterfaceOrClass): Ditto.
25872
25873         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
25874
25875         * interface.cs (Interface::DefineInterface): New method. Does exactly
25876         what RootContext.CreateInterface did earlier, only it takes care of nested types 
25877         too.
25878
25879         (Interface::GetInterfaces): Move from RootContext here and port.
25880
25881         (Interface::GetInterfaceByName): Same here.
25882
25883         * rootcontext.cs (ResolveTree): Re-write.
25884
25885         (PopulateTypes): Re-write.
25886
25887         * class.cs (TypeContainer::Populate): Populate nested types too.
25888         (TypeContainer::Emit): Emit nested members too.
25889
25890         * typemanager.cs (AddUserType): Do not make use of the FullName property,
25891         instead just use the name argument passed in as it is already fully
25892         qualified.
25893
25894         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
25895         to TypeContainer mapping to see if a type is user-defined.
25896
25897         * class.cs (TypeContainer::CloseType): Implement. 
25898
25899         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
25900         the default constructor.
25901
25902         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
25903         twice.
25904
25905         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
25906
25907         * interface.cs (CloseType): Create the type here.
25908
25909         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
25910         the hierarchy.
25911
25912         Remove all the methods which are now in TypeContainer.
25913
25914 2001-10-10  Ravi Pratap  <ravi@ximian.com>
25915
25916         * delegate.cs (Define): Re-write bits to define the delegate
25917         correctly.
25918
25919 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
25920
25921         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
25922
25923         * expression.cs (ImplicitReferenceConversion): handle null as well
25924         as a source to convert to any reference type.
25925
25926         * statement.cs (Return): Perform any implicit conversions to
25927         expected return type.  
25928
25929         Validate use of return statement.  
25930
25931         * codegen.cs (EmitContext): Pass the expected return type here.
25932
25933         * class.cs (Method, Constructor, Property): Pass expected return
25934         type to EmitContext.
25935
25936 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
25937
25938         * expression.cs: Make DoResolve take an EmitContext instead of a
25939         TypeContainer.
25940
25941         Replaced `l' and `location' for `loc', for consistency.
25942
25943         (Error, Warning): Remove unneeded Tc argument.
25944
25945         * assign.cs, literal.cs, constant.cs: Update to new calling
25946         convention. 
25947
25948         * codegen.cs: EmitContext now contains a flag indicating whether
25949         code is being generated in a static method or not.
25950
25951         * cs-parser.jay: DecomposeQI, new function that replaces the old
25952         QualifiedIdentifier.  Now we always decompose the assembled
25953         strings from qualified_identifier productions into a group of
25954         memberaccesses.
25955
25956 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
25957
25958         * rootcontext.cs: Deal with field-less struct types correctly now
25959         by passing the size option to Define Type.
25960
25961         * class.cs: Removed hack that created one static field. 
25962
25963 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
25964
25965         * statement.cs: Moved most of the code generation here. 
25966
25967 2001-10-09  Ravi Pratap  <ravi@ximian.com>
25968
25969         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
25970         seem very right.
25971
25972         (ElementAccess): Remove useless bits for now - keep checks as the spec
25973         says.
25974
25975 2001-10-08  Ravi Pratap  <ravi@ximian.com>
25976
25977         * expression.cs (ElementAccess::DoResolve): Remove my crap code
25978         and start performing checks according to the spec.
25979
25980 2001-10-07  Ravi Pratap  <ravi@ximian.com>
25981
25982         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
25983         rank_specifiers instead.
25984
25985         (rank_specifiers): Change the order in which the rank specifiers are stored
25986
25987         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
25988
25989         * expression.cs (ElementAccess): Implement the LValue interface too.
25990
25991 2001-10-06  Ravi Pratap  <ravi@ximian.com>
25992
25993         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
25994         except that user defined conversions are not included.
25995
25996         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
25997         perform the conversion of the return type, if necessary.
25998
25999         (New::DoResolve): Check whether we are creating an array or an object
26000         and accordingly do the needful.
26001
26002         (New::Emit): Same here.
26003
26004         (New::DoResolve): Implement guts of array creation.
26005
26006         (New::FormLookupType): Helper function.
26007
26008 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26009
26010         * codegen.cs: Removed most of the code generation here, and move the
26011         corresponding code generation bits to the statement classes. 
26012
26013         Added support for try/catch/finalize and throw.
26014
26015         * cs-parser.jay: Added support for try/catch/finalize.
26016
26017         * class.cs: Catch static methods having the flags override,
26018         virtual or abstract.
26019
26020         * expression.cs (UserCast): This user cast was not really doing
26021         what it was supposed to do.  Which is to be born in fully resolved
26022         state.  Parts of the resolution were being performed at Emit time! 
26023
26024         Fixed this code.
26025
26026 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26027
26028         * expression.cs: Implicity convert the result from UserCast.
26029
26030 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26031
26032         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
26033         prevented it from working correctly. 
26034
26035         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
26036         merely ConvertImplicit.
26037
26038 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26039
26040         * typemanager.cs: Make the LookupTypeContainer function static,
26041         and not per-instance.  
26042
26043         * class.cs: Make static FindMembers (the one that takes a Type
26044         argument). 
26045
26046         * codegen.cs: Add EmitForeach here.
26047
26048         * cs-parser.jay: Make foreach a toplevel object instead of the
26049         inline expansion, as we need to perform semantic analysis on it. 
26050
26051 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26052
26053         * expression.cs (Expression::ImplicitUserConversion): Rename to
26054         UserDefinedConversion.
26055
26056         (Expression::UserDefinedConversion): Take an extra argument specifying 
26057         whether we look for explicit user conversions too.
26058
26059         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
26060
26061         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
26062
26063         (ExplicitUserConversion): Make it a call to UserDefinedConversion
26064         with the appropriate arguments.
26065
26066         * cs-parser.jay (cast_expression): Record location too.
26067
26068         * expression.cs (Cast): Record location info.
26069
26070         (Expression::ConvertExplicit): Take location argument.
26071
26072         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
26073         to determine if we are doing explicit conversions.
26074
26075         (UserCast::Emit): Update accordingly.
26076
26077         (Expression::ConvertExplicit): Report an error if everything fails.
26078
26079         * ../errors/cs0030.cs : Add.
26080
26081 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
26082
26083         * modifiers.cs: If the ABSTRACT keyword is present, also set the
26084         virtual and newslot bits. 
26085
26086         * class.cs (TypeContainer::RegisterRequiredImplementations):
26087         Record methods we need.
26088
26089         (TypeContainer::MakeKey): Helper function to make keys for
26090         MethodBases, since the Methodbase key is useless.
26091
26092         (TypeContainer::Populate): Call RegisterRequiredImplementations
26093         before defining the methods.   
26094
26095         Create a mapping for method_builders_to_methods ahead of time
26096         instead of inside a tight loop.
26097
26098         (::RequireMethods):  Accept an object as the data to set into the
26099         hashtable so we can report interface vs abstract method mismatch.
26100
26101 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26102
26103         * report.cs: Make all of it static.
26104
26105         * rootcontext.cs: Drop object_type and value_type computations, as
26106         we have those in the TypeManager anyways.
26107
26108         Drop report instance variable too, now it is a global.
26109
26110         * driver.cs: Use try/catch on command line handling.
26111
26112         Add --probe option to debug the error reporting system with a test
26113         suite. 
26114
26115         * report.cs: Add support for exiting program when a probe
26116         condition is reached.
26117
26118 2001-10-03  Ravi Pratap  <ravi@ximian.com>
26119
26120         * expression.cs (Binary::DoNumericPromotions): Fix the case when
26121         we do a forcible conversion regardless of type, to check if 
26122         ForceConversion returns a null.
26123
26124         (Binary::error19): Use location to report error.
26125
26126         (Unary::error23): Use location here too.
26127
26128         * ../errors/cs0019.cs : Check in.
26129
26130         * ../errors/cs0023.cs : Check in.
26131
26132         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
26133         case of a non-null MethodInfo object with a length of 0 !
26134
26135         (Binary::ResolveOperator): Flag error if overload resolution fails to find
26136         an applicable member - according to the spec :-)
26137         Also fix logic to find members in base types.
26138
26139         (Unary::ResolveOperator): Same here.
26140
26141         (Unary::report23): Change name to error23 and make first argument a TypeContainer
26142         as I was getting thoroughly confused between this and error19 :-)
26143
26144         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
26145         (::FindMostEncompassedType): Implement.
26146         (::FindMostEncompassingType): Implement.
26147         (::StandardConversionExists): Implement.
26148
26149         (UserImplicitCast): Re-vamp. We now need info about most specific
26150         source and target types so that we can do the necessary conversions.
26151
26152         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
26153         mathematical union with no duplicates.
26154
26155 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26156
26157         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
26158         in order from base classes to child classes, so that we can in
26159         child classes look up in our parent for method names and
26160         attributes (required for handling abstract, virtual, new, override
26161         constructs: we need to instrospect our base class, and if we dont
26162         populate the classes in order, the introspection might be
26163         incorrect.  For example, a method could query its parent before
26164         the parent has any methods and would determine that the parent has
26165         no abstract methods (while it could have had them)).
26166
26167         (RootContext::CreateType): Record the order in which we define the
26168         classes.
26169
26170 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
26171
26172         * class.cs (TypeContainer::Populate): Also method definitions can
26173         fail now, keep track of this.
26174
26175         (TypeContainer::FindMembers): Implement support for
26176         DeclaredOnly/noDeclaredOnly flag.
26177
26178         (Constructor::Emit) Return the ConstructorBuilder.
26179
26180         (Method::Emit) Return the MethodBuilder. 
26181         Check for abstract or virtual methods to be public.
26182
26183         * rootcontext.cs (RootContext::CreateType): Register all the
26184         abstract methods required for the class to be complete and the
26185         interface methods that must be implemented. 
26186
26187         * cs-parser.jay: Report error 501 (method requires body if it is
26188         not marked abstract or extern).
26189
26190         * expression.cs (TypeOf::Emit): Implement.
26191
26192         * typemanager.cs: runtime_handle_type, new global type.
26193
26194         * class.cs (Property::Emit): Generate code for properties.
26195
26196 2001-10-02  Ravi Pratap  <ravi@ximian.com>
26197
26198         * expression.cs (Unary::ResolveOperator): Find operators on base type
26199         too - we now conform exactly to the spec.
26200
26201         (Binary::ResolveOperator): Same here.
26202
26203         * class.cs (Operator::Define): Fix minor quirk in the tests.
26204
26205         * ../errors/cs0215.cs : Added.
26206
26207         * ../errors/cs0556.cs : Added.
26208
26209         * ../errors/cs0555.cs : Added.
26210
26211 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26212
26213         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
26214         single integer which is really efficient
26215
26216 2001-10-01  Ravi Pratap  <ravi@ximian.com>
26217
26218         *  expression.cs (Expression::ImplicitUserConversion): Use location
26219         even in the case when we are examining True operators.
26220  
26221         * class.cs (Operator::Define): Perform extensive checks to conform
26222         with the rules for operator overloading in the spec.
26223
26224         * expression.cs (Expression::ImplicitReferenceConversion): Implement
26225         some of the other conversions mentioned in the spec.
26226
26227         * typemanager.cs (array_type): New static member for the System.Array built-in
26228         type.
26229
26230         (cloneable_interface): For System.ICloneable interface.
26231
26232         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
26233         we start resolving the tree and populating types.
26234
26235         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
26236  
26237 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26238
26239         * expression.cs (Expression::ExprClassFromMemberInfo,
26240         Expression::Literalize): Create literal expressions from
26241         FieldInfos which are literals.
26242
26243         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
26244         type casts, because they were wrong.  The test suite in tests
26245         caught these ones.
26246
26247         (ImplicitNumericConversion): ushort to ulong requires a widening
26248         cast. 
26249
26250         Int32 constant to long requires widening cast as well.
26251
26252         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
26253         for integers because the type on the stack is not i4.
26254
26255 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
26256
26257         * expression.cs (report118): require location argument. 
26258
26259         * parameter.cs: Do not dereference potential null value.
26260
26261         * class.cs: Catch methods that lack the `new' keyword when
26262         overriding a name.  Report warnings when `new' is used without
26263         anything being there to override.
26264
26265         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
26266
26267         * class.cs: Only add constructor to hashtable if it is non-null
26268         (as now constructors can fail on define).
26269
26270         (TypeManager, Class, Struct): Take location arguments.
26271
26272         Catch field instance initialization in structs as errors.
26273
26274         accepting_filter: a new filter for FindMembers that is static so
26275         that we dont create an instance per invocation.
26276
26277         (Constructor::Define): Catch errors where a struct constructor is
26278         parameterless 
26279
26280         * cs-parser.jay: Pass location information for various new
26281         constructs. 
26282
26283         * delegate.cs (Delegate): take a location argument.
26284
26285         * driver.cs: Do not call EmitCode if there were problesm in the
26286         Definition of the types, as many Builders wont be there. 
26287
26288         * decl.cs (Decl::Decl): Require a location argument.
26289
26290         * cs-tokenizer.cs: Handle properly hex constants that can not fit
26291         into integers, and find the most appropiate integer for it.
26292
26293         * literal.cs: Implement ULongLiteral.
26294
26295         * rootcontext.cs: Provide better information about the location of
26296         failure when CreateType fails.
26297
26298 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
26299
26300         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
26301         as well.
26302
26303         * expression.cs (Binary::CheckShiftArguments): Add missing type
26304         computation.
26305         (Binary::ResolveOperator): Add type to the logical and and logical
26306         or, Bitwise And/Or and Exclusive Or code paths, it was missing
26307         before.
26308
26309         (Binary::DoNumericPromotions): In the case where either argument
26310         is ulong (and most signed types combined with ulong cause an
26311         error) perform implicit integer constant conversions as well.
26312
26313 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26314
26315         * expression.cs (UserImplicitCast): Method should always be
26316         non-null. 
26317         (Invocation::BetterConversion): Simplified test for IntLiteral.
26318
26319         (Expression::ImplicitNumericConversion): Split this routine out.
26320         Put the code that performs implicit constant integer conversions
26321         here. 
26322
26323         (Expression::Resolve): Become a wrapper around DoResolve so we can
26324         check eclass and type being set after resolve.
26325
26326         (Invocation::Badness): Remove this dead function
26327
26328         (Binary::ResolveOperator): Do not compute the expensive argumnets
26329         unless we have a union for it.
26330
26331         (Probe::Emit): Is needs to do an isinst and then
26332         compare against null.
26333
26334         (::CanConvert): Added Location argument.  If the Location argument
26335         is null (Location.Null), then we do not report errors.  This is
26336         used by the `probe' mechanism of the Explicit conversion.  We do
26337         not want to generate an error for something that the user
26338         explicitly requested to be casted.  But the pipeline for an
26339         explicit cast first tests for potential implicit casts.
26340
26341         So for now, if the Location is null, it means `Probe only' to
26342         avoid adding another argument.   Might have to revise this
26343         strategy later.
26344
26345         (ClassCast): New class used to type cast objects into arbitrary
26346         classes (used in Explicit Reference Conversions).
26347
26348         Implement `as' as well.
26349
26350         Reverted all the patches from Ravi below: they were broken:
26351
26352                 * The use of `level' as a mechanism to stop recursive
26353                   invocations is wrong.  That was there just to catch the
26354                   bug with a strack trace but not as a way of addressing
26355                   the problem.
26356
26357                   To fix the problem we have to *understand* what is going
26358                   on and the interactions and come up with a plan, not
26359                   just get things going.
26360
26361                 * The use of the type conversion cache that I proposed
26362                   last night had an open topic: How does this work across
26363                   protection domains.  A user defined conversion might not
26364                   be public in the location where we are applying the
26365                   conversion, a different conversion might be selected
26366                   (ie, private A->B (better) but public B->A (worse),
26367                   inside A, A->B applies, but outside it, B->A will
26368                   apply).
26369
26370                 * On top of that (ie, even if the above is solved),
26371                   conversions in a cache need to be abstract.  Ie, `To
26372                   convert from an Int to a Short use an OpcodeCast', not
26373                   `To convert from an Int to a Short use the OpcodeCast on
26374                   the variable 5' (which is what this patch was doing).
26375
26376 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26377
26378         * expression.cs (Invocation::ConversionExists): Re-write to use
26379         the conversion cache
26380
26381         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
26382         cache all conversions done, not just user-defined ones.
26383
26384         (Invocation::BetterConversion): The real culprit. Use ConversionExists
26385         to determine if a conversion exists instead of acutually trying to 
26386         perform the conversion. It's faster too.
26387
26388         (Expression::ConvertExplicit): Modify to use ConversionExists to check
26389         and only then attempt the implicit conversion.
26390
26391 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26392
26393         * expression.cs (ConvertImplicit): Use a cache for conversions
26394         already found. Check level of recursion and bail out if necessary.
26395
26396 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26397
26398         * typemanager.cs (string_concat_string_string, string_concat_object_object):
26399         Export standard methods that we expect for string operations.
26400
26401         * statement.cs (Block::UsageWarning): Track usage of variables and
26402         report the errors for not used variables.
26403
26404         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
26405         operator. 
26406
26407 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26408
26409         * codegen.cs: remove unnneded code 
26410
26411         * expression.cs: Removed BuiltinTypeAccess class
26412
26413         Fix the order in which implicit conversions are
26414         done.  
26415
26416         The previous fixed dropped support for boxed conversions (adding a
26417         test to the test suite now)
26418
26419         (UserImplicitCast::CanConvert): Remove test for source being null,
26420         that code is broken.  We should not feed a null to begin with, if
26421         we do, then we should track the bug where the problem originates
26422         and not try to cover it up here.
26423
26424         Return a resolved expression of type UserImplicitCast on success
26425         rather than true/false.  Ravi: this is what I was talking about,
26426         the pattern is to use a static method as a "constructor" for
26427         objects. 
26428
26429         Also, do not create arguments until the very last minute,
26430         otherwise we always create the arguments even for lookups that
26431         will never be performed. 
26432
26433         (UserImplicitCast::Resolve): Eliminate, objects of type
26434         UserImplicitCast are born in a fully resolved state. 
26435
26436         * typemanager.cs (InitCoreTypes): Init also value_type
26437         (System.ValueType). 
26438
26439         * expression.cs (Cast::Resolve): First resolve the child expression.
26440
26441         (LValue): Add new method AddressOf to be used by
26442         the `&' operator.  
26443
26444         Change the argument of Store to take an EmitContext instead of an
26445         ILGenerator, because things like FieldExpr need to be able to call
26446         their children expression to generate the instance code. 
26447
26448         (Expression::Error, Expression::Warning): Sugar functions for
26449         reporting errors.
26450
26451         (Expression::MemberLookup): Accept a TypeContainer instead of a
26452         Report as the first argument.
26453
26454         (Expression::ResolvePrimary): Killed.  I still want to improve
26455         this as currently the code is just not right.
26456
26457         (Expression::ResolveMemberAccess): Simplify, but it is still
26458         wrong. 
26459
26460         (Unary::Resolve): Catch errors in AddressOf operators.
26461
26462         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
26463         index to a byte for the short-version, or the compiler will choose
26464         the wrong Emit call, which generates the wrong data.
26465
26466         (ParameterReference::Emit, ::Store): same.
26467
26468         (FieldExpr::AddressOf): Implement.
26469
26470         * typemanager.cs: TypeManager: made public variable instead of
26471         property.
26472
26473         * driver.cs: document --fatal.
26474
26475         * report.cs (ErrorMessage, WarningMessage): new names for the old
26476         Error and Warning classes.
26477
26478         * cs-parser.jay (member_access): Turn built-in access to types
26479         into a normal simplename
26480
26481 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26482
26483         * expression.cs (Invocation::BetterConversion): Fix to cope
26484         with q being null, since this was introducing a bug.
26485
26486         * expression.cs (ConvertImplicit): Do built-in conversions first.
26487
26488 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26489
26490         * expression.cs (UserImplicitCast::Resolve): Fix bug.
26491
26492 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26493
26494         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
26495         I had introduced long ago (what's new ?).
26496
26497         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
26498         the work of all the checking. 
26499         (ConvertImplicit): Call CanConvert and only then create object if necessary.
26500         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
26501
26502         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
26503         that is the right way. 
26504
26505         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
26506         overloading resolution. Use everywhere instead of cutting and pasting code.
26507
26508         (Binary::ResolveOperator): Use MakeUnionSet.
26509
26510         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
26511         we have to convert to bool types. Not complete yet.
26512
26513 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26514
26515         * typemanager.cs (TypeManager::CSharpName): support ushort.
26516
26517         * expression.cs (Expression::TryImplicitIntConversion): Attempts
26518         to provide an expression that performsn an implicit constant int
26519         conversion (section 6.1.6).
26520         (Expression::ConvertImplicitRequired): Reworked to include
26521         implicit constant expression conversions.
26522
26523         (Expression::ConvertNumericExplicit): Finished.
26524
26525         (Invocation::Emit): If InstanceExpression is null, then it means
26526         that we perform a call on this.
26527
26528 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26529
26530         * expression.cs (Unary::Emit): Remove some dead code.
26531         (Probe): Implement Resolve and Emit for `is'.
26532         (Expression::ConvertImplicitRequired): Attempt to do constant
26533         expression conversions here.  Maybe should be moved to
26534         ConvertImplicit, but I am not sure.
26535         (Expression::ImplicitLongConstantConversionPossible,
26536         Expression::ImplicitIntConstantConversionPossible): New functions
26537         that tell whether is it possible to apply an implicit constant
26538         expression conversion.
26539
26540         (ConvertNumericExplicit): Started work on explicit numeric
26541         conversions.
26542
26543         * cs-parser.jay: Update operator constants.
26544
26545         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
26546         (Parameters::GetSignature): Hook up VerifyArgs here.
26547         (Parameters::VerifyArgs): Verifies that no two arguments have the
26548         same name. 
26549
26550         * class.cs (Operator): Update the operator names to reflect the
26551         ones that the spec expects (as we are just stringizing the
26552         operator names).
26553
26554         * expression.cs (Unary::ResolveOperator): Fix bug: Use
26555         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
26556         previous usage did only work for our methods.
26557         (Expression::ConvertImplicit): Handle decimal implicit numeric
26558         conversions as well.
26559         (Expression::InternalTypeConstructor): Used to invoke constructors
26560         on internal types for default promotions.
26561
26562         (Unary::Emit): Implement special handling for the pre/post
26563         increment/decrement for overloaded operators, as they need to have
26564         the same semantics as the other operators.
26565
26566         (Binary::ResolveOperator): ditto.
26567         (Invocation::ConversionExists): ditto.
26568         (UserImplicitCast::Resolve): ditto.
26569
26570 2001-09-26  Ravi Pratap  <ravi@ximian.com>
26571
26572         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
26573         operator, return after emitting body. Regression tests pass again !
26574
26575         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
26576         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
26577         (Invocation::OverloadResolve): Ditto.
26578         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
26579
26580         * everywhere : update calls to the above methods accordingly.
26581
26582 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26583
26584         * assign.cs (Assign): Make it inherit from ExpressionStatement.
26585
26586         * expression.cs (ExpressionStatement): New base class used for
26587         expressions that can appear in statements, so that we can provide
26588         an alternate path to generate expression that do not leave a value
26589         on the stack.
26590
26591         (Expression::Emit, and all the derivatives): We no longer return
26592         whether a value is left on the stack or not.  Every expression
26593         after being emitted leaves a single value on the stack.
26594
26595         * codegen.cs (EmitContext::EmitStatementExpression): Use the
26596         facilties of ExpressionStatement if possible.
26597
26598         * cs-parser.jay: Update statement_expression.
26599
26600 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
26601
26602         * driver.cs: Change the wording of message
26603
26604 2001-09-25  Ravi Pratap  <ravi@ximian.com>
26605
26606         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
26607         the type of the expression to the return type of the method if
26608         we have an overloaded operator match ! The regression tests pass again !
26609         (Unary::ResolveOperator): Ditto.
26610
26611         * expression.cs (Invocation::ConversionExists): Correct the member lookup
26612         to find "op_Implicit", not "implicit" ;-)
26613         (UserImplicitCast): New class to take care of user-defined implicit conversions.
26614         (ConvertImplicit, ForceConversion): Take TypeContainer argument
26615
26616         * everywhere : Correct calls to the above accordingly.
26617
26618         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
26619         (ConvertImplicit): Do user-defined conversion if it exists.
26620
26621 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
26622
26623         * assign.cs: track location.
26624         (Resolve): Use implicit conversions on assignment.
26625
26626         * literal.cs: Oops.  Not good, Emit of short access values should
26627         pass (Bytes) or the wrong argument will be selected.
26628
26629         * expression.cs (Unary::Emit): Emit code for -expr.
26630
26631         (Unary::ResolveOperator): Handle `Substract' for non-constants
26632         (substract from zero from the non-constants).
26633         Deal with Doubles as well. 
26634
26635         (Expression::ConvertImplicitRequired): New routine that reports an
26636         error if no implicit conversion exists. 
26637
26638         (Invocation::OverloadResolve): Store the converted implicit
26639         expressions if we make them
26640
26641 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26642
26643         * class.cs (ConstructorInitializer): Take a Location argument.
26644         (ConstructorBaseInitializer): Same here.
26645         (ConstructorThisInitializer): Same here.
26646
26647         * cs-parser.jay : Update all calls accordingly.
26648
26649         * expression.cs (Unary, Binary, New): Take location argument.
26650         Update accordingly everywhere.
26651
26652         * cs-parser.jay : Update all calls to the above to take a location
26653         argument.
26654
26655         * class.cs : Ditto.
26656
26657 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26658
26659         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
26660         (Invocation::BetterConversion): Same here
26661         (Invocation::ConversionExists): Ditto.
26662
26663         (Invocation::ConversionExists): Implement.
26664
26665 2001-09-22  Ravi Pratap  <ravi@ximian.com>
26666
26667         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
26668         Also take an additional TypeContainer argument.
26669
26670         * All over : Pass in TypeContainer as argument to OverloadResolve.
26671
26672         * typemanager.cs (CSharpName): Update to check for the string type and return
26673         that too.
26674
26675         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
26676         a given method.
26677
26678 2001-09-21  Ravi Pratap  <ravi@ximian.com>
26679
26680         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
26681         (Invocation::BetterFunction): Implement.
26682         (Invocation::BetterConversion): Implement.
26683         (Invocation::ConversionExists): Skeleton, no implementation yet.
26684
26685         Okay, things work fine !
26686
26687 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
26688
26689         * typemanager.cs: declare and load enum_type, delegate_type and
26690         void_type. 
26691
26692         * expression.cs (Expression::Emit): Now emit returns a value that
26693         tells whether a value is left on the stack or not.  This strategy
26694         might be reveted tomorrow with a mechanism that would address
26695         multiple assignments.
26696         (Expression::report118): Utility routine to report mismatches on
26697         the ExprClass.
26698
26699         (Unary::Report23): Report impossible type/operator combination
26700         utility function.
26701
26702         (Unary::IsIncrementableNumber): Whether the type can be
26703         incremented or decremented with add.
26704         (Unary::ResolveOperator): Also allow enumerations to be bitwise
26705         complemented. 
26706         (Unary::ResolveOperator): Implement ++, !, ~,
26707
26708         (Invocation::Emit): Deal with new Emit convetion.
26709
26710         * All Expression derivatives: Updated their Emit method to return
26711         whether they leave values on the stack or not.
26712
26713         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
26714         stack for expressions that are statements. 
26715
26716 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26717
26718         * expression.cs (LValue): New interface.  Must be implemented by
26719         LValue objects.
26720         (LocalVariableReference, ParameterReference, FieldExpr): Implement
26721         LValue interface.
26722
26723         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
26724         interface for generating code, simplifies the code.
26725
26726 2001-09-20  Ravi Pratap  <ravi@ximian.com>
26727
26728         * expression.cs (everywhere): Comment out return statements in ::Resolve
26729         methods to avoid the warnings.
26730
26731 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26732
26733         * driver.cs (parse): Report error 2001 if we can not open the
26734         source file.
26735
26736         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
26737         not resolve it.
26738
26739         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
26740         object. 
26741
26742         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
26743         otherwise nested blocks end up with the same index.
26744
26745         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
26746
26747         * expression.cs:  Instead of having FIXMEs in the Resolve
26748         functions, throw exceptions so it is obvious that we are facing a
26749         bug. 
26750
26751         * cs-parser.jay (invocation_expression): Pass Location information.
26752
26753         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
26754         Use a basename for those routines because .NET does not like paths
26755         on them. 
26756
26757         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
26758         already defined.
26759
26760 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
26761
26762         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
26763         are loading the correct data types (throws an exception if not).
26764         (TypeManager::InitCoreTypes): Use CoreLookupType
26765
26766         * expression.cs (Unary::ResolveOperator): return the child
26767         expression for expressions which are just +expr.
26768         (Unary::ResolveOperator): Return negative literals for -LITERAL
26769         expressions (otherwise they are Unary {Literal}).
26770         (Invocation::Badness): Take into account `Implicit constant
26771         expression conversions'.
26772
26773         * literal.cs (LongLiteral): Implement long literal class.
26774         (IntLiteral): export the `Value' of the intliteral. 
26775
26776 2001-09-19  Ravi Pratap  <ravi@ximian.com>
26777
26778         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
26779
26780         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
26781         instead of 'Operator'
26782
26783         * expression.cs (Binary::ResolveOperator): Update accordingly.
26784         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
26785         and 'Minus'
26786
26787         * cs-parser.jay (unary_expression): Update to use the new names.
26788
26789         * gen-treedump.cs (GetUnary): Same here.
26790
26791         * expression.cs (Unary::Resolve): Implement.
26792         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
26793         operators are found instead of making noise ;-)
26794         (Unary::ResolveOperator): New method to do precisely the same thing which
26795         Binary::ResolveOperator does for Binary expressions.
26796         (Unary.method, .Arguments): Add.
26797         (Unary::OperName): Implement.   
26798         (Unary::ForceConversion): Copy and Paste !
26799
26800         * class.cs (Operator::Define): Fix a small bug for the case when we have 
26801         a unary operator.
26802
26803         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
26804         for the inbuilt operators. Only overloading works for now ;-)
26805
26806 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
26807
26808         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
26809         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
26810
26811         * expression.cs (This::Emit): Implement. 
26812         (This::Resolve): Implement.
26813         (TypeOf:Resolve): Implement.
26814         (Expression::ResolveSimpleName): Add an implicit this to instance
26815         field references. 
26816         (MemberAccess::Resolve): Deal with Parameters and Fields. 
26817         Bind instance variable to Field expressions.
26818         (FieldExpr::Instance): New field used to track the expression that
26819         represents the object instance.
26820         (FieldExpr::Resolve): Track potential errors from MemberLookup not
26821         binding 
26822         (FieldExpr::Emit): Implement.
26823
26824         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
26825         the last instruction contains a return opcode to avoid generating
26826         the last `ret' instruction (this generates correct code, and it is
26827         nice to pass the peverify output).
26828
26829         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
26830         initializer for static and instance variables.
26831         (Constructor::Emit): Allow initializer to be null in the case of
26832         static constructors.  Only emit initializer for instance
26833         constructors. 
26834
26835         (TypeContainer::FindMembers): Return a null array if there are no
26836         matches.
26837
26838         Also fix the code for the MemberTypes.Method branch, as it was not
26839         scanning that for operators (or tried to access null variables before).
26840
26841         * assign.cs (Assign::Emit): Handle instance and static fields. 
26842
26843         * TODO: Updated.
26844
26845         * driver.cs: Stop compilation if there are parse errors.
26846
26847         * cs-parser.jay (constructor_declaration): Provide default base
26848         initializer for non-static constructors.
26849         (constructor_declarator): Do not provide a default base
26850         initializers if none was specified.
26851         Catch the fact that constructors should not have parameters.
26852
26853         * class.cs: Do not emit parent class initializers for static
26854         constructors, that should be flagged as an error.
26855
26856 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26857
26858         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
26859         Move back code into TypeContainer::Populate.
26860
26861 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26862
26863         * class.cs (TypeContainer::AddConstructor): Fix the check to
26864         compare against Name, not Basename. 
26865         (Operator::OpType): Change Plus and Minus to Add and Subtract.
26866
26867         * cs-parser.jay : Update accordingly.
26868
26869         * class.cs (TypeContainer::FindMembers): For the case where we are searching
26870         for methods, don't forget to look into the operators too.
26871         (RegisterMethodBuilder): Helper method to take care of this for
26872         methods, constructors and operators.
26873         (Operator::Define): Completely revamp.
26874         (Operator.OperatorMethod, MethodName): New fields.
26875         (TypeContainer::Populate): Move the registering of builders into
26876         RegisterMethodBuilder.
26877         (Operator::Emit): Re-write.
26878
26879         * expression.cs (Binary::Emit): Comment out code path to emit method
26880         invocation stuff for the case when we have a user defined operator. I am
26881         just not able to get it right !
26882
26883 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26884
26885         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
26886         argument. 
26887
26888         (Expression::MemberLookup): Provide a version that allows to
26889         specify the MemberTypes and BindingFlags. 
26890
26891         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
26892         so it was not fetching variable information from outer blocks.
26893
26894         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
26895         Beforefieldinit as it was buggy.
26896
26897         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
26898         that Ravi put here.  
26899
26900         * class.cs (Constructor::Emit): Only emit if block is not null.
26901         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
26902         deal with this by semantically definining it as if the user had
26903         done it.
26904
26905         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
26906         constructors as we now "emit" them at a higher level.
26907
26908         (TypeContainer::DefineDefaultConstructor): Used to define the
26909         default constructors if none was provided.
26910
26911         (ConstructorInitializer): Add methods Resolve and Emit. 
26912
26913         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
26914
26915 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26916
26917         * class.cs (TypeContainer::EmitDefaultConstructor): Register
26918         the default constructor builder with our hashtable for methodbuilders
26919         to methodcores.
26920
26921         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
26922         and argument_count is 0 in which case we have a match.
26923         (Binary::ResolveOperator): More null checking and miscellaneous coding
26924         style cleanup.
26925
26926 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26927
26928         * rootcontext.cs (IsNameSpace): Compare against null.
26929
26930         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
26931
26932         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
26933         and Unary::Operator.
26934
26935         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
26936         accordingly.
26937
26938         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
26939         we have overloaded operators.
26940         (Binary::ResolveOperator): Implement the part which does the operator overload
26941         resolution.
26942
26943         * class.cs (Operator::Emit): Implement.
26944         (TypeContainer::Emit): Emit the operators we have too.
26945
26946         * expression.cs (Binary::Emit): Update to emit the appropriate code for
26947         the case when we have a user-defined operator.
26948
26949 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26950
26951         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
26952
26953 2001-09-16  Ravi Pratap  <ravi@ximian.com>
26954
26955         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
26956         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
26957         (Constructor::Emit): Implement.
26958         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
26959         if we have no work to do. 
26960         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
26961         Emit method.
26962
26963         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
26964         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
26965
26966         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
26967         of parent.parent.
26968
26969 2001-09-15  Ravi Pratap  <ravi@ximian.com>
26970
26971         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
26972         in the source.
26973         (Tree::RecordNamespace): Method to do what the name says ;-)
26974         (Tree::Namespaces): Property to get at the namespaces hashtable.
26975
26976         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
26977         keep track.
26978
26979         * rootcontext.cs (IsNamespace): Fixed it :-)
26980
26981 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
26982
26983         * class.cs (TypeContainer::FindMembers): Add support for
26984         constructors. 
26985         (MethodCore): New class that encapsulates both the shared aspects
26986         of a Constructor and a Method.  
26987         (Method, Constructor): Factored pieces into MethodCore.
26988
26989         * driver.cs: Added --fatal which makes errors throw exceptions.
26990         Load System assembly as well as part of the standard library.
26991
26992         * report.cs: Allow throwing exceptions on errors for debugging.
26993
26994         * modifiers.cs: Do not use `parent', instead use the real type
26995         container to evaluate permission settings.
26996
26997         * class.cs: Put Ravi's patch back in.  He is right, and we will
26998         have to cope with the
26999
27000 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27001
27002         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
27003         FamORAssem, not FamANDAssem.
27004
27005 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27006
27007         * driver.cs: Added --parse option that only parses its input files
27008         and terminates.
27009
27010         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
27011         incorrect.  IsTopLevel is not used to tell whether an object is
27012         root_types or not (that can be achieved by testing this ==
27013         root_types).  But to see if this is a top-level *class* (not
27014         necessarly our "toplevel" container). 
27015
27016 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27017
27018         * enum.cs (Enum::Define): Modify to call the Lookup method on the
27019         parent instead of a direct call to GetType.
27020
27021 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27022
27023         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
27024         Modifiers.TypeAttr. This should just be a call to that method.
27025
27026         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
27027         object so that we can determine if we are top-level or not.
27028
27029         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
27030         TypeContainer too.
27031
27032         * enum.cs (Enum::Define): Ditto.
27033
27034         * modifiers.cs (FieldAttr): Re-write.
27035
27036         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
27037         (TypeContainer::HaveStaticConstructor): New property to provide access
27038         to precisely that info.
27039
27040         * modifiers.cs (MethodAttr): Re-write.
27041         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
27042
27043         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
27044         of top-level types as claimed.
27045
27046 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27047
27048         * expression.cs (MemberLookup): Fruitless attempt to lookup
27049         constructors.  Maybe I need to emit default constructors?  That
27050         might be it (currently .NET emits this for me automatically).
27051         (Invocation::OverloadResolve): Cope with Arguments == null.
27052         (Invocation::EmitArguments): new function, shared by the new
27053         constructor and us.
27054         (Invocation::Emit): Handle static and instance methods.  Emit
27055         proper call instruction for virtual or non-virtual invocations.
27056         (New::Emit): Implement.
27057         (New::Resolve): Implement.
27058         (MemberAccess:Resolve): Implement.
27059         (MethodGroupExpr::InstanceExpression): used conforming to the spec
27060         to track instances.
27061         (FieldExpr::Resolve): Set type.
27062
27063         * support.cs: Handle empty arguments.
27064                 
27065         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
27066         SimpleLookup): Auxiliary routines to help parse a qualifier
27067         identifier.  
27068
27069         Update qualifier_identifier rule.
27070
27071         * codegen.cs: Removed debugging messages.
27072
27073         * class.cs: Make this a global thing, this acts just as a "key" to
27074         objects that we might have around.
27075
27076         (Populate): Only initialize method_builders_to_methods once.
27077
27078         * expression.cs (PropertyExpr): Initialize type from the
27079         PropertyType. 
27080
27081         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
27082         Resolve pattern.  Attempt to implicitly convert value to boolean.
27083         Emit code.
27084
27085         * expression.cs: Set the type for the int32/int32 argument case.
27086         (Binary::ResolveOperator): Set the return type to boolean for
27087         comparission operators
27088
27089         * typemanager.cs: Remove debugging print code.
27090
27091         (Invocation::Resolve): resolve type.
27092
27093         * class.cs: Allocate a MemberInfo of the correct size, as the code
27094         elsewhere depends on the test to reflect the correct contents.
27095
27096         (Method::) Keep track of parameters, due to System.Reflection holes
27097
27098         (TypeContainer::Populate): Keep track of MethodBuilders to Method
27099         mapping here.
27100
27101         (TypeContainer::FindMembers): Use ArrayList and then copy an array
27102         of the exact size and return that.
27103
27104         (Class::LookupMethodByBuilder): New function that maps
27105         MethodBuilders to its methods.  Required to locate the information
27106         on methods because System.Reflection bit us again.
27107
27108         * support.cs: New file, contains an interface ParameterData and
27109         two implementations: ReflectionParameters and InternalParameters
27110         used to access Parameter information.  We will need to grow this
27111         as required.
27112
27113         * expression.cs (Invocation::GetParameterData): implement a cache
27114         and a wrapper around the ParameterData creation for methods. 
27115         (Invocation::OverloadResolve): Use new code.
27116
27117 2001-09-13  Ravi Pratap  <ravi@ximian.com>
27118
27119         * class.cs (TypeContainer::EmitField): Remove and move into 
27120         (Field::Define): here and modify accordingly.
27121         (Field.FieldBuilder): New member.
27122         (TypeContainer::Populate): Update accordingly.
27123         (TypeContainer::FindMembers): Implement.
27124
27125 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27126
27127         * statement.cs: (VariableInfo::VariableType): New field to be
27128         initialized with the full type once it is resolved. 
27129
27130 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
27131
27132         * parameter.cs (GetParameterInfo): Use a type cache to compute
27133         things only once, and to reuse this information
27134
27135         * expression.cs (LocalVariableReference::Emit): Implement.
27136         (OpcodeCast::Emit): fix.
27137
27138         (ParameterReference::Resolve): Implement.
27139         (ParameterReference::Emit): Implement.
27140
27141         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
27142         that are expressions need to stay as Expressions.
27143
27144         * typemanager.cs (CSharpName): Returns the C# name of a type if
27145         possible. 
27146
27147         * expression.cs (Expression::ConvertImplicit): New function that
27148         implements implicit type conversions.
27149
27150         (Expression::ImplicitReferenceConversion): Implements implicit
27151         reference conversions.
27152
27153         (EmptyCast): New type for transparent casts.
27154
27155         (OpcodeCast): New type for casts of types that are performed with
27156         a sequence of bytecodes.
27157
27158         (BoxedCast): New type used for casting value types into reference
27159         types.  Emits a box opcode.
27160
27161         (Binary::DoNumericPromotions): Implements numeric promotions of
27162         and computation of the Binary::Type.
27163
27164         (Binary::EmitBranchable): Optimization.
27165
27166         (Binary::Emit): Implement code emission for expressions.
27167
27168         * typemanager.cs (TypeManager): Added two new core types: sbyte
27169         and byte.
27170
27171 2001-09-12  Ravi Pratap  <ravi@ximian.com>
27172
27173         * class.cs (TypeContainer::FindMembers): Method which does exactly
27174         what Type.FindMembers does, only we don't have to use reflection. No
27175         implementation yet.
27176
27177         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
27178         typecontainer objects as we need to get at them.
27179         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
27180
27181         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
27182         typecontainer object.
27183
27184         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
27185         of just a Report object.
27186
27187 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27188
27189         * class.cs (Event::Define): Go back to using the prefixes "add_" and
27190         "remove_"
27191         (TypeContainer::Populate): Now define the delegates of the type too.
27192         (TypeContainer.Delegates): Property to access the list of delegates defined
27193         in the type.
27194
27195         * delegates.cs (Delegate::Define): Implement partially.
27196
27197         * modifiers.cs (TypeAttr): Handle more flags.
27198
27199 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27200
27201         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
27202         and not <=
27203         (Operator::Define): Re-write logic to get types by using the LookupType method
27204         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
27205         (Indexer::Define): Ditto.
27206         (Event::Define): Ditto.
27207         (Property::Define): Ditto.
27208
27209 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27210
27211         * class.cs (TypeContainer::Populate): Now define operators too. 
27212         (TypeContainer.Operators): New property to access the list of operators
27213         in a type.
27214         (Operator.OperatorMethodBuilder): New member to hold the method builder
27215         for the operator we are defining.
27216         (Operator::Define): Implement.
27217
27218 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27219
27220         * class.cs (Event::Define): Make the prefixes of the accessor methods
27221         addOn_ and removeOn_ 
27222
27223         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
27224         of the location being passed in too. Ideally, this should go later since all
27225         error reporting should be done through the Report object.
27226
27227         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
27228         (Populate): Iterate thru the indexers we have and define them too.
27229         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
27230         for the get and set accessors.
27231         (Indexer::Define): Implement.
27232
27233 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
27234
27235         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
27236         my previous implementation, did not work.
27237
27238         * typemanager.cs: Add a couple of missing types (the longs).
27239
27240         * literal.cs: Use TypeManager.bool_type instead of getting it.
27241
27242         * expression.cs (EventExpr): New kind of expressions.
27243         (Expressio::ExprClassFromMemberInfo): finish
27244
27245 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
27246
27247         * assign.cs: Emit stores to static fields differently.
27248
27249 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27250
27251         * Merge in changes and adjust code to tackle conflicts. Backed out my
27252         code in Assign::Resolve ;-) 
27253
27254 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27255
27256         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
27257         instead Report.Error and also pass in the location.
27258         (CSharpParser::Lexer): New readonly property to return the reference
27259         to the Tokenizer object.
27260         (declare_local_variables): Use Report.Error with location instead of plain 
27261         old error.
27262         (CheckDef): Ditto.
27263
27264         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
27265         (Operator.CheckBinaryOperator): Ditto.
27266
27267         * cs-parser.jay (operator_declarator): Update accordingly.
27268
27269         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
27270         (CheckBinaryOperator): Same here.
27271
27272         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
27273         on the name without any prefixes of namespace names etc. This is because we
27274         already might have something already fully qualified like 
27275         'System.Console.WriteLine'
27276
27277         * assign.cs (Resolve): Begin implementation. Stuck ;-)
27278
27279 2001-09-07  Ravi Pratap  <ravi@ximian.com>
27280
27281         * cs-tokenizer.cs (location): Return a string which also contains
27282         the file name.
27283
27284         * expression.cs (ElementAccess): New class for expressions of the
27285         type 'element access.'
27286         (BaseAccess): New class for expressions of the type 'base access.'
27287         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
27288         respectively.
27289
27290         * cs-parser.jay (element_access): Implement action.
27291         (base_access): Implement actions.
27292         (checked_expression, unchecked_expression): Implement.
27293
27294         * cs-parser.jay (local_variable_type): Correct and implement.
27295         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
27296
27297         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
27298
27299         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
27300         name and the specifiers.
27301
27302         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
27303
27304         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
27305         making them all public ;-)
27306
27307         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
27308         class anyways.
27309
27310 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
27311
27312         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
27313         PropertyExprs.
27314         (FieldExpr, PropertyExprs): New resolved expressions.
27315         (SimpleName::MemberStaticCheck): Perform static checks for access
27316         to non-static fields on static methods. Maybe this should be
27317         generalized for MemberAccesses. 
27318         (SimpleName::ResolveSimpleName): More work on simple name
27319         resolution. 
27320
27321         * cs-parser.jay (primary_expression/qualified_identifier): track
27322         the parameter index.
27323
27324         * codegen.cs (CodeGen::Save): Catch save exception, report error.
27325         (EmitContext::EmitBoolExpression): Chain to expression generation
27326         instead of temporary hack.
27327         (::EmitStatementExpression): Put generic expression code generation.
27328
27329         * assign.cs (Assign::Emit): Implement variable assignments to
27330         local variables, parameters and fields.
27331
27332 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
27333
27334         * statement.cs (Block::GetVariableInfo): New method, returns the
27335         VariableInfo for a variable name in a block.
27336         (Block::GetVariableType): Implement in terms of GetVariableInfo
27337
27338         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
27339         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
27340
27341 2001-09-06  Ravi Pratap  <ravi@ximian.com>
27342
27343         * cs-parser.jay (operator_declaration): Continue on my quest : update
27344         to take attributes argument.
27345         (event_declaration): Ditto.
27346         (enum_declaration): Ditto.
27347         (indexer_declaration): Ditto.
27348
27349         * class.cs (Operator::Operator): Update constructor accordingly.
27350         (Event::Event): Ditto.
27351
27352         * delegate.cs (Delegate::Delegate): Same here.
27353
27354         * enum.cs (Enum::Enum): Same here.
27355
27356 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27357
27358         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
27359
27360         * ../tests/cs0658.cs : New file to demonstrate error 0658.
27361
27362         * attribute.cs (Attributes): New class to encapsulate all attributes which were
27363         being passed around as an arraylist.
27364         (Attributes::AddAttribute): Method to add attribute sections.
27365
27366         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
27367         (struct_declaration): Update accordingly.
27368         (constant_declaration): Update.
27369         (field_declaration): Update.
27370         (method_header): Update.
27371         (fixed_parameter): Update.
27372         (parameter_array): Ditto.
27373         (property_declaration): Ditto.
27374         (destructor_declaration): Ditto.
27375
27376         * class.cs (Struct::Struct): Update constructors accordingly.
27377         (Class::Class): Ditto.
27378         (Field::Field): Ditto.
27379         (Method::Method): Ditto.
27380         (Property::Property): Ditto.
27381         (TypeContainer::OptAttribute): update property's return type.
27382
27383         * interface.cs (Interface.opt_attributes): New member.
27384         (Interface::Interface): Update to take the extra Attributes argument.
27385
27386         * parameter.cs (Parameter::Parameter): Ditto.
27387
27388         * constant.cs (Constant::Constant): Ditto.
27389
27390         * interface.cs (InterfaceMemberBase): New OptAttributes field.
27391         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
27392         the attributes as a parameter.
27393         (InterfaceProperty): Update constructor call.
27394         (InterfaceEvent): Ditto.
27395         (InterfaceMethod): Ditto.
27396         (InterfaceIndexer): Ditto.
27397
27398         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
27399         pass the attributes too.
27400         (interface_event_declaration): Ditto.
27401         (interface_property_declaration): Ditto.
27402         (interface_method_declaration): Ditto.
27403         (interface_declaration): Ditto.
27404
27405 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
27406
27407         * class.cs (Method::Define): Track the "static Main" definition to
27408         create an entry point. 
27409
27410         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
27411         EntryPoint if we find it. 
27412
27413         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
27414         (EmitContext::ig): Make this variable public.
27415
27416         * driver.cs: Make the default output file be the first file name
27417         with the .exe extension.  
27418
27419         Detect empty compilations
27420
27421         Handle various kinds of output targets.  Handle --target and
27422         rename -t to --dumper.
27423
27424         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
27425         methods inherited from Expression return now an Expression.  This
27426         will is used during the tree rewriting as we resolve them during
27427         semantic analysis.
27428
27429         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
27430         the spec.  Missing entirely is the information about
27431         accessability of elements of it.
27432
27433         (Expression::ExprClassFromMemberInfo): New constructor for
27434         Expressions that creates a fully initialized Expression based on
27435         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
27436         a Type.
27437
27438         (Invocation::Resolve): Begin implementing resolution of invocations.
27439
27440         * literal.cs (StringLiteral):  Implement Emit.
27441
27442 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27443
27444         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
27445         member.
27446
27447 2001-09-04  Ravi Pratap  <ravi@ximian.com>
27448
27449         * cs-parser.jay (attribute_arguments): Implement actions.
27450         (attribute): Fix bug in production. Implement action.
27451         (attribute_list): Implement.
27452         (attribute_target): Implement.
27453         (attribute_target_specifier, opt_target_specifier): Implement
27454         (CheckAttributeTarget): New method to check if the attribute target
27455         is valid.
27456         (attribute_section): Implement.
27457         (opt_attributes): Implement.
27458
27459         * attribute.cs : New file to handle attributes.
27460         (Attribute): Class to hold attribute info.
27461
27462         * cs-parser.jay (opt_attribute_target_specifier): Remove production
27463         (attribute_section): Modify production to use 2 different rules to 
27464         achieve the same thing. 1 s/r conflict down !
27465         Clean out commented, useless, non-reducing dimension_separator rules.
27466
27467         * class.cs (TypeContainer.attributes): New member to hold list
27468         of attributes for a type.
27469         (Struct::Struct): Modify to take one more argument, the attribute list.
27470         (Class::Class): Ditto.
27471         (Field::Field): Ditto.
27472         (Method::Method): Ditto.
27473         (Property::Property): Ditto.
27474
27475         * cs-parser.jay (struct_declaration): Update constructor call to
27476         pass in the attributes too.
27477         (class_declaration): Ditto.
27478         (constant_declaration): Ditto.
27479         (field_declaration): Ditto.
27480         (method_header): Ditto.
27481         (fixed_parameter): Ditto.
27482         (parameter_array): Ditto.
27483         (property_declaration): Ditto.
27484
27485         * constant.cs (Constant::Constant): Update constructor similarly.
27486         Use System.Collections.
27487
27488         * parameter.cs (Parameter::Parameter): Update as above.
27489
27490 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27491
27492         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
27493         (TypeContainer.delegates): New member to hold list of delegates.
27494
27495         * cs-parser.jay (delegate_declaration): Implement the action correctly 
27496         this time as I seem to be on crack ;-)
27497
27498 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
27499
27500         * rootcontext.cs (RootContext::IsNamespace): new function, used to
27501         tell whether an identifier represents a namespace.
27502
27503         * expression.cs (NamespaceExpr): A namespace expression, used only
27504         temporarly during expression resolution.
27505         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
27506         utility functions to resolve names on expressions.
27507
27508 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
27509
27510         * codegen.cs: Add hook for StatementExpressions. 
27511
27512         * class.cs: Fix inverted test for static flag in methods.
27513
27514 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27515
27516         * class.cs (Operator::CheckUnaryOperator): Correct error number used
27517         to make it coincide with MS' number.
27518         (Operator::CheckBinaryOperator): Ditto.
27519
27520         * ../errors/errors.txt : Remove error numbers added earlier.
27521
27522         * ../errors/cs1019.cs : Test case for error # 1019
27523
27524         * ../errros/cs1020.cs : Test case for error # 1020
27525
27526         * cs-parser.jay : Clean out commented cruft.
27527         (dimension_separators, dimension_separator): Comment out. Ostensibly not
27528         used anywhere - non-reducing rule.
27529         (namespace_declarations): Non-reducing rule - comment out.
27530
27531         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
27532         with TypeContainer::AddEnum.
27533
27534         * delegate.cs : New file for delegate handling classes.
27535         (Delegate): Class for declaring delegates.
27536
27537         * makefile : Update.
27538
27539         * cs-parser.jay (delegate_declaration): Implement.
27540
27541 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
27542
27543         * class.cs (Event::Define): Implement.
27544         (Event.EventBuilder): New member.
27545
27546         * class.cs (TypeContainer::Populate): Update to define all enums and events
27547         we have.
27548         (Events): New property for the events arraylist we hold. Shouldn't we move to using
27549         readonly fields for all these cases ?
27550
27551 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27552
27553         * class.cs (Property): Revamp to use the convention of making fields readonly.
27554         Accordingly modify code elsewhere.
27555
27556         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
27557         the Define method of the Property class.
27558
27559         * class.cs : Clean up applied patch and update references to variables etc. Fix 
27560         trivial bug.
27561         (TypeContainer::Populate): Update to define all the properties we have. Also
27562         define all enumerations.
27563
27564         * enum.cs (Define): Implement.
27565
27566 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27567
27568         * cs-parser.jay (overloadable_operator): The semantic value is an
27569         enum of the Operator class.
27570         (operator_declarator): Implement actions.
27571         (operator_declaration): Implement.
27572
27573         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
27574         validity of definitions.
27575         (Operator::CheckBinaryOperator): Static method to check for binary operators
27576         (TypeContainer::AddOperator): New method to add an operator to a type.
27577
27578         * cs-parser.jay (indexer_declaration): Added line to actually call the
27579         AddIndexer method so it gets added ;-)
27580
27581         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
27582         already taken care of by the MS compiler ?  
27583
27584 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27585
27586         * class.cs (Operator): New class for operator declarations.
27587         (Operator::OpType): Enum for the various operators.
27588
27589 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27590
27591         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
27592         ostensibly handle this in semantic analysis.
27593
27594         * cs-parser.jay (general_catch_clause): Comment out
27595         (specific_catch_clauses, specific_catch_clause): Ditto.
27596         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
27597         (catch_args, opt_catch_args): New productions.
27598         (catch_clause): Rewrite to use the new productions above
27599         (catch_clauses): Modify accordingly.
27600         (opt_catch_clauses): New production to use in try_statement
27601         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
27602         and re-write the code in the actions to extract the specific and
27603         general catch clauses by being a little smart ;-)
27604
27605         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
27606         Hooray, try and catch statements parse fine !
27607
27608 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27609
27610         * statement.cs (Block::GetVariableType): Fix logic to extract the type
27611         string from the hashtable of variables.
27612
27613         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
27614         I end up making that mistake ;-)
27615         (catch_clauses): Fixed gross error which made Key and Value of the 
27616         DictionaryEntry the same : $1 !!
27617
27618 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27619
27620         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
27621
27622         * cs-parser.jay (event_declaration): Correct to remove the semicolon
27623         when the add and remove accessors are specified. 
27624
27625 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27626
27627         * cs-parser.jay (IndexerDeclaration): New helper class to hold
27628         information about indexer_declarator.
27629         (indexer_declarator): Implement actions.
27630         (parsing_indexer): New local boolean used to keep track of whether
27631         we are parsing indexers or properties. This is necessary because 
27632         implicit_parameters come into picture even for the get accessor in the 
27633         case of an indexer.
27634         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
27635
27636         * class.cs (Indexer): New class for indexer declarations.
27637         (TypeContainer::AddIndexer): New method to add an indexer to a type.
27638         (TypeContainer::indexers): New member to hold list of indexers for the
27639         type.
27640
27641 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27642
27643         * cs-parser.jay (add_accessor_declaration): Implement action.
27644         (remove_accessor_declaration): Implement action.
27645         (event_accessors_declaration): Implement
27646         (variable_declarators): swap statements for first rule - trivial.
27647
27648         * class.cs (Event): New class to hold information about event
27649         declarations.
27650         (TypeContainer::AddEvent): New method to add an event to a type
27651         (TypeContainer::events): New member to hold list of events.
27652
27653         * cs-parser.jay (event_declaration): Implement actions.
27654
27655 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27656
27657         * cs-parser.jay (dim_separators): Implement. Make it a string
27658         concatenating all the commas together, just as they appear.
27659         (opt_dim_separators): Modify accordingly
27660         (rank_specifiers): Update accordingly. Basically do the same
27661         thing - instead, collect the brackets here.
27662         (opt_rank_sepcifiers): Modify accordingly.
27663         (array_type): Modify to actually return the complete type string
27664         instead of ignoring the rank_specifiers.
27665         (expression_list): Implement to collect the expressions
27666         (variable_initializer): Implement. We make it a list of expressions
27667         essentially so that we can handle the array_initializer case neatly too.
27668         (variable_initializer_list): Implement.
27669         (array_initializer): Make it a list of variable_initializers
27670         (opt_array_initializer): Modify accordingly.
27671
27672         * expression.cs (New::NType): Add enumeration to help us
27673         keep track of whether we have an object/delegate creation
27674         or an array creation.
27675         (New:NewType, New::Rank, New::Indices, New::Initializers): New
27676         members to hold data about array creation.
27677         (New:New): Modify to update NewType
27678         (New:New): New Overloaded contructor for the array creation
27679         case.
27680
27681         * cs-parser.jay (array_creation_expression): Implement to call
27682         the overloaded New constructor.
27683
27684 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
27685
27686         * class.cs (TypeContainer::Constructors): Return member
27687         constructors instead of returning null.
27688
27689 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
27690
27691         * typemanager.cs (InitCoreTypes): Initialize the various core
27692         types after we have populated the type manager with the user
27693         defined types (this distinction will be important later while
27694         compiling corlib.dll)
27695
27696         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
27697         on Expression Classification.  Now all expressions have a method
27698         `Resolve' and a method `Emit'.
27699
27700         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
27701         generation from working.     Also add some temporary debugging
27702         code. 
27703
27704 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
27705
27706         * codegen.cs: Lots of code generation pieces.  This is only the
27707         beginning, will continue tomorrow with more touches of polish.  We
27708         handle the fundamentals of if, while, do, for, return.  Others are
27709         trickier and I need to start working on invocations soon.
27710
27711         * gen-treedump.cs: Bug fix, use s.Increment here instead of
27712         s.InitStatement. 
27713
27714         * codegen.cs (EmitContext): New struct, used during code
27715         emission to keep a context.   Most of the code generation will be
27716         here. 
27717
27718         * cs-parser.jay: Add embedded blocks to the list of statements of
27719         this block.  So code generation proceeds in a top down fashion.
27720
27721 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
27722
27723         * statement.cs: Add support for multiple child blocks.
27724
27725 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
27726
27727         * codegen.cs (EmitCode): New function, will emit the code for a
27728         Block of code given a TypeContainer and its ILGenerator. 
27729
27730         * statement.cs (Block): Standard public readonly optimization.
27731         (Block::Block constructors): Link children. 
27732         (Block::Child): Child Linker.
27733         (Block::EmitVariables): Emits IL variable declarations.
27734
27735         * class.cs: Drop support for MethodGroups here, delay until
27736         Semantic Analysis.
27737         (Method::): Applied the same simplification that I did before, and
27738         move from Properties to public readonly fields.
27739         (Method::ParameterTypes): Returns the parameter types for the
27740         function, and implements a cache that will be useful later when I
27741         do error checking and the semantic analysis on the methods is
27742         performed.
27743         (Constructor::GetCallingConvention): Renamed from CallingConvetion
27744         and made a method, optional argument tells whether this is a class
27745         or a structure to apply the `has-this' bit.
27746         (Method::GetCallingConvention): Implement, returns the calling
27747         convention. 
27748         (Method::Define): Defines the type, a second pass is performed
27749         later to populate the methods.
27750
27751         (Constructor::ParameterTypes): implement a cache similar to the
27752         one on Method::ParameterTypes, useful later when we do semantic
27753         analysis. 
27754
27755         (TypeContainer::EmitMethod):  New method.  Emits methods.
27756
27757         * expression.cs: Removed MethodGroup class from here.
27758
27759         * parameter.cs (Parameters::GetCallingConvention): new method.
27760
27761 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
27762
27763         * class.cs (TypeContainer::Populate): Drop RootContext from the
27764         argument. 
27765
27766         (Constructor::CallingConvention): Returns the calling convention.
27767         (Constructor::ParameterTypes): Returns the constructor parameter
27768         types. 
27769
27770         (TypeContainer::AddConstructor): Keep track of default constructor
27771         and the default static constructor.
27772
27773         (Constructor::) Another class that starts using `public readonly'
27774         instead of properties. 
27775
27776         (Constructor::IsDefault): Whether this is a default constructor. 
27777
27778         (Field::) use readonly public fields instead of properties also.
27779
27780         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
27781         track of static constructors;  If none is used, turn on
27782         BeforeFieldInit in the TypeAttributes. 
27783
27784         * cs-parser.jay (opt_argument_list): now the return can be null
27785         for the cases where there are no arguments. 
27786
27787         (constructor_declarator): If there is no implicit `base' or
27788         `this', then invoke the default parent constructor. 
27789
27790         * modifiers.cs (MethodAttr): New static function maps a set of
27791         modifiers flags into a MethodAttributes enum
27792         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
27793         MethodAttr, TypeAttr to represent the various mappings where the
27794         modifiers are used.
27795         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
27796
27797 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
27798
27799         * parameter.cs (GetParameterInfo): Fix bug where there would be no
27800         method arguments.
27801
27802         * interface.cs (PopulateIndexer): Implemented the code generator
27803         for interface indexers.
27804
27805 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
27806
27807         * interface.cs (InterfaceMemberBase): Now we track the new status
27808         here.  
27809
27810         (PopulateProperty): Implement property population.  Woohoo!  Got
27811         Methods and Properties going today. 
27812
27813         Removed all the properties for interfaces, and replaced them with
27814         `public readonly' fields. 
27815
27816 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
27817
27818         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
27819         initialize their hashtables/arraylists only when they are needed
27820         instead of doing this always.
27821
27822         * parameter.cs: Handle refs and out parameters.
27823
27824         * cs-parser.jay: Use an ArrayList to construct the arguments
27825         instead of the ParameterCollection, and then cast that to a
27826         Parameter[] array.
27827
27828         * parameter.cs: Drop the use of ParameterCollection and use
27829         instead arrays of Parameters.
27830
27831         (GetParameterInfo): Use the Type, not the Name when resolving
27832         types. 
27833
27834 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
27835
27836         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
27837         and instead use public readonly fields.
27838
27839         * class.cs: Put back walking code for type containers.
27840
27841 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
27842
27843         * class.cs (MakeConstant): Code to define constants.
27844
27845         * rootcontext.cs (LookupType): New function.  Used to locate types 
27846
27847
27848 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
27849
27850         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
27851         this System.Reflection code is.  Kudos to Microsoft
27852
27853         * typemanager.cs: Implement a type cache and avoid loading all
27854         types at boot time.  Wrap in LookupType the internals.  This made
27855         the compiler so much faster.  Wow.  I rule!
27856
27857         * driver.cs: Make sure we always load mscorlib first (for
27858         debugging purposes, nothing really important).
27859
27860         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
27861         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
27862
27863         * rootcontext.cs: Lookup types on their namespace;  Lookup types
27864         on namespaces that have been imported using the `using' keyword.
27865
27866         * class.cs (TypeContainer::TypeAttr): Virtualize.
27867         (Class::TypeAttr): Return attributes suitable for this bad boy.
27868         (Struct::TypeAttr): ditto.
27869         Handle nested classes.
27870         (TypeContainer::) Remove all the type visiting code, it is now
27871         replaced with the rootcontext.cs code
27872
27873         * rootcontext.cs (GetClassBases): Added support for structs. 
27874
27875 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
27876
27877         * interface.cs, statement.cs, class.cs, parameter.cs,
27878         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
27879         Drop use of TypeRefs, and use strings instead.
27880
27881 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
27882
27883         * rootcontext.cs: 
27884
27885         * class.cs (Struct::Struct): set the SEALED flags after
27886         checking the modifiers.
27887         (TypeContainer::TypeAttr): new property, returns the
27888         TypeAttributes for a class.  
27889
27890         * cs-parser.jay (type_list): Oops, list production was creating a
27891         new list of base types.
27892
27893         * rootcontext.cs (StdLib): New property.
27894         (GetInterfaceTypeByName): returns an interface by type name, and
27895         encapsulates error handling here.
27896         (GetInterfaces): simplified.
27897         (ResolveTree): Encapsulated all the tree resolution here.
27898         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
27899         types. 
27900
27901         * driver.cs: Add support for --nostdlib, to avoid loading the
27902         default assemblies.
27903         (Main): Do not put tree resolution here. 
27904
27905         * rootcontext.cs: Beginning of the class resolution.
27906
27907 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
27908
27909         * rootcontext.cs: Provide better error reporting. 
27910
27911         * cs-parser.jay (interface_base): set our $$ to be interfaces.
27912
27913         * rootcontext.cs (CreateInterface): Handle the case where there
27914         are no parent interfaces.
27915
27916         (CloseTypes): Routine to flush types at the end.
27917         (CreateInterface): Track types.
27918         (GetInterfaces): Returns an array of Types from the list of
27919         defined interfaces.
27920
27921         * typemanager.c (AddUserType): Mechanism to track user types (puts
27922         the type on the global type hash, and allows us to close it at the
27923         end). 
27924
27925 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
27926
27927         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
27928         RecordInterface instead.
27929
27930         * cs-parser.jay: Updated to reflect changes above.
27931
27932         * decl.cs (Definition): Keep track of the TypeBuilder type that
27933         represents this type here.  Not sure we will use it in the long
27934         run, but wont hurt for now.
27935
27936         * driver.cs: Smaller changes to accomodate the new code.
27937
27938         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
27939         when done. 
27940
27941         * rootcontext.cs (CreateInterface):  New method, used to create
27942         the System.TypeBuilder type for interfaces.
27943         (ResolveInterfaces): new entry point to resolve the interface
27944         hierarchy. 
27945         (CodeGen): Property, used to keep track of the code generator.
27946
27947 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
27948
27949         * cs-parser.jay: Add a second production for delegate_declaration
27950         with `VOID'.
27951
27952         (enum_body): Put an opt_comma here instead of putting it on
27953         enum_body or enum_member_declarations so we can handle trailing
27954         commas on enumeration members.  Gets rid of a shift/reduce.
27955
27956         (type_list): Need a COMMA in the middle.
27957
27958         (indexer_declaration): Tell tokenizer to recognize get/set
27959
27960         * Remove old targets.
27961
27962         * Re-add the parser target.
27963
27964 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27965
27966         * cs-parser.jay: Add precendence rules for a number of operators
27967         ot reduce the number of shift/reduce conflicts in the grammar.
27968
27969 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
27970
27971         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
27972         and put it here.
27973
27974         Get rid of old crufty code.
27975
27976         * rootcontext.cs: Use this to keep track of the parsed
27977         representation and the defined types available to the program. 
27978
27979         * gen-treedump.cs: adjust for new convention.
27980
27981         * type.cs: Split out the type manager, and the assembly builder
27982         from here. 
27983
27984         * typemanager.cs: the type manager will live here now.
27985
27986         * cil-codegen.cs: And the code generator here. 
27987
27988 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
27989
27990         * makefile: Fixed up for easy making.
27991
27992 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27993
27994         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
27995         the 
27996
27997         (unary_expression): Expand pre_increment_expression and
27998         post_decrement_expression to reduce a shift/reduce.
27999
28000 2001-07-11  Simon Cozens
28001
28002         * cs-tokenizer.cs: Hex numbers should begin with a 0.
28003
28004         Improve allow_keyword_as_indent name.
28005
28006 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
28007
28008         * Adjustments for Beta2. 
28009
28010 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
28011
28012         * decl.cs: Added `Define' abstract method.
28013         (InTransit): new property, used to catch recursive definitions. 
28014
28015         * interface.cs: Implement `Define'. 
28016
28017         * modifiers.cs: Map Modifiers.constants to
28018         System.Reflection.TypeAttribute flags.
28019
28020         * class.cs: Keep track of types and user-defined types.
28021         (BuilderInit): New method for creating an assembly
28022         (ResolveType): New function to launch the resolution process, only
28023         used by interfaces for now.
28024
28025         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
28026         that are inserted into the name space. 
28027
28028 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
28029
28030         * ARGH.  I have screwed up my tree so many times due to the use of
28031         rsync rather than using CVS.  Going to fix this at once. 
28032
28033         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
28034         load types.
28035
28036 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
28037
28038         * Experiment successful: Use System.Type rather that our own
28039         version of Type.  
28040
28041 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
28042
28043         * cs-parser.jay: Removed nsAliases from here.
28044
28045         Use new namespaces, handle `using XXX;' 
28046
28047         * namespace.cs: Reimplemented namespace handling, use a recursive
28048         definition of the class.  Now we can keep track of using clauses
28049         and catch invalid using clauses.
28050
28051 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
28052
28053         * gen-treedump.cs: Adapted for all the renaming.
28054
28055         * expression.cs (Expression): this class now has a Type property
28056         which returns an expression Type.
28057
28058         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
28059         `Type', as this has a different meaning now in the base
28060
28061 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
28062
28063         * interface.cs, class.cs: Removed from all the sources the
28064         references to signature computation, as we can not do method
28065         signature computation during the parsing time, as we are not
28066         trying to solve at that point distinguishing:
28067
28068         class X {
28069                 void a (Blah x) {}
28070                 void a (NS.Blah x) {}
28071         }
28072
28073         Which depending on the context might be valid or not, as we do not
28074         know if Blah is the same thing as NS.Blah at that point.
28075
28076         * Redid everything so the code uses TypeRefs now instead of
28077         Types.  TypeRefs are just temporary type placeholders, that need
28078         to be resolved.  They initially have a pointer to a string and the
28079         current scope in which they are used.  This is used later by the
28080         compiler to resolve the reference to an actual Type. 
28081
28082         * DeclSpace is no longer a CIR.Type, and neither are
28083         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
28084         are all DeclSpaces, but no Types. 
28085
28086         * type.cs (TypeRefManager): This implements the TypeRef manager,
28087         which keeps track of all the types that need to be resolved after
28088         the parsing has finished. 
28089
28090 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
28091
28092         * ARGH.  We are going to have to store `foreach' as a class rather
28093         than resolving it, as we need to verify error 1579 after name
28094         resolution.   *OR* we could keep a flag that says `This request to
28095         IEnumerator comes from a foreach statement' which we can then use
28096         to generate the error.
28097
28098 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
28099
28100         * class.cs (TypeContainer.AddMethod): we now add methods to the
28101         MethodGroup instead of the method hashtable.  
28102
28103         * expression.cs: Add MethodGroup abstraction, which gets us one
28104         step closer to the specification in the way we handle method
28105         declarations.  
28106
28107         * cs-parser.jay (primary_expression): qualified_identifier now
28108         tried to match up an identifier to a local variable reference or
28109         to a parameter reference.
28110
28111         current_local_parameters is now a parser global variable that
28112         points to the current parameters for the block, used during name
28113         lookup.
28114
28115         (property_declaration): Now creates an implicit `value' argument to
28116         the set accessor.
28117
28118 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
28119
28120         * parameter.cs: Do not use `param' arguments as part of the
28121         signature, per the spec.
28122
28123 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
28124
28125         * decl.cs: Base class for classes, structs and interfaces.  This
28126         is the "Declaration Space" 
28127
28128         * cs-parser.jay: Use CheckDef for checking declaration errors
28129         instead of having one on each function.
28130
28131         * class.cs: Factor out some code for handling error handling in
28132         accordance to the "Declarations" section in the "Basic Concepts"
28133         chapter in the ECMA C# spec.
28134
28135         * interface.cs: Make all interface member classes derive from
28136         InterfaceMemberBase.
28137
28138 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
28139
28140         * Many things: all interfaces are parsed and generated in
28141         gen-treedump.  Support for member variables, constructors,
28142         destructors, properties, constants is there.
28143
28144         Beginning of the IL backend, but very little done, just there for
28145         testing purposes. 
28146
28147 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
28148
28149         * cs-parser.jay: Fix labeled statement.
28150
28151         * cs-tokenizer.cs (escape): Escape " and ' always.
28152         ref_line, ref_name: keep track of the line/filename as instructed
28153         by #line by the compiler.
28154         Parse #line.
28155
28156 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
28157
28158         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
28159         to match the values in System.CodeDOM.
28160
28161         Divid renamed to Divide.
28162
28163         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
28164         statements. 
28165         (Statements.set): remove.
28166
28167         * System.CodeDOM/CodeCatchClause.cs: always have a valid
28168         statements. 
28169
28170         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
28171         falseStatements always have valid values. 
28172
28173         * cs-parser.jay: Use System.CodeDOM now.
28174