2008-03-27 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2008-03-27  Marek Safar  <marek.safar@gmail.com>
2
3         A fix for bug #374214
4         * ecore.cs: Correctly report argument type mismatch.
5
6 2008-03-27  Marek Safar  <marek.safar@gmail.com>
7
8         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
9         and not rely on broken IsEnum.
10
11 2008-03-27  Marek Safar  <marek.safar@gmail.com>
12
13         * nullable.cs: New file, extracted from generic.cs.
14         
15         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
16
17 2008-03-27  Marek Safar  <marek.safar@gmail.com>
18
19         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
20         predefined comparison operators and null literals.
21         
22         * report.cs: New warning ID.
23         
24 2008-03-25  Marek Safar  <marek.safar@gmail.com>
25
26         A fix for bug #370577
27         * lambda.cs: Check return type too.
28
29 2008-03-25  Marek Safar  <marek.safar@gmail.com>
30
31         A fix for bug #372846
32         * class.cs: Automatic properties can be declared as unsafe.
33
34 2008-03-20  Marek Safar  <marek.safar@gmail.com>
35
36         * location.cs: Use string based concatenation.
37         
38         * expression.cs: LiftedBinaryOperator is gmcs only.
39         
40 2008-03-20  Marek Safar  <marek.safar@gmail.com>
41
42         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
43         conversions rules and expression trees.
44
45 2008-03-19  Marek Safar  <marek.safar@gmail.com>
46
47         * delegate.cs: Use extension method source as delegate target.
48
49 2008-03-19  Marek Safar  <marek.safar@gmail.com>
50
51         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
52         binary operations to be purely based on binary operations and optimized
53         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
54         and other ET refactoring.
55         
56         * typemanager.cs: Fixed warning.
57         
58 2008-03-17  Marek Safar  <marek.safar@gmail.com>
59
60         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
61         
62         * symbolwriter.cs: Fixed.
63
64 2008-03-17  Marek Safar  <marek.safar@gmail.com>
65
66         * anonymous.cs, driver.cs: Reset anonymous types counters.
67
68 2008-03-17  Marek Safar  <marek.safar@gmail.com>
69
70         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
71         
72         * class.cs: Use fullname for all type member definitions.
73         
74 2008-02-19  Martin Baulig  <martin@ximian.com>
75
76         * class.cs
77         (IMethodData.EmitExtraSymbolInfo): New interface method.
78         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
79         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
80         interface method here as an empty public virtual method.
81
82         * anonymous.cs
83         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
84         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
85         CodeGen.SymbolWriter.SetRealMethodName().       
86
87 2008-02-18  Martin Baulig  <martin@ximian.com>
88
89         * anonymous.cs
90         (ScopeInfo.EmitType): Override this and emit debugging
91         information for captured variables.
92         (RootScopeInfo.EmitType): Override this and emit symbol
93         information for a captured `this'.
94
95 2008-02-15  Martin Baulig  <martin@ximian.com>
96
97         * iterators.cs: Emit debugging info.
98
99         * codegen.cs
100         (EmitContext.Flags): Add `OmitDebuggingInfo'.
101         (EmitContext.OmitDebuggingInfo): New public property.
102
103         * statement.cs
104         (While): Override Emit() and don't emit symbol info there; do it
105         inside DoEmit() instead.
106         (Block.Emit): Omit symbol information while emitting the scope
107         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
108         block logic.
109         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
110         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
111         .ctor to make `IsIterator' work.
112
113 2008-03-14  Martin Baulig  <martin@ximian.com>
114
115         * symbolwriter.cs: Added the new symbol writer function from the
116         debugger's `terrania' branch; temporarily enclose them inside
117         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
118         my vacations.
119
120 2008-03-14  Martin Baulig  <martin@ximian.com>
121
122         * symbolwriter.cs
123         (SymbolWriter): Make this a public static class.
124
125         * codegen.cs
126         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
127         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
128
129 2008-03-14  Marek Safar  <marek.safar@gmail.com>
130
131         A fix for bug #370577
132         * statement.cs, lambda.cs: Added extra limitations when dealing with void
133         return type.
134         
135 2008-03-14  Marek Safar  <marek.safar@gmail.com>
136
137         * typemanager.cs (CSharpName): Made 250 times faster.
138
139 2008-03-13  Marek Safar  <marek.safar@gmail.com>
140
141         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
142         
143 2008-03-12  Marek Safar  <marek.safar@gmail.com>
144
145         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
146         crash when predefined field does not exist.
147         
148 2008-03-12  Marek Safar  <marek.safar@gmail.com>
149
150         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
151         
152 2008-03-12  Marek Safar  <marek.safar@gmail.com>
153
154         * class.cs (FixedField): Don't crash when contructors are missing.
155
156 2008-03-11  Marek Safar  <marek.safar@gmail.com>
157
158         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
159         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
160         check internal types accessibility for internal and external types.
161         Replaced EnumToUnderlying by GetEnumUnderlyingType.
162
163 2008-03-11  Marek Safar  <marek.safar@gmail.com>
164
165         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
166         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
167         attribute.cs, statement: Use corect instance of predefined types (work
168         related to #364674).
169
170 2008-03-07  Marek Safar  <marek.safar@gmail.com>
171
172         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
173         
174 2008-03-07  Marek Safar  <marek.safar@gmail.com>
175
176         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
177         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
178         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
179         predefined types clean up, delayed predefined types members initialization
180         (work related to #364674).
181
182 2008-03-05  Marek Safar  <marek.safar@gmail.com>
183
184         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
185         
186 2008-03-05  Marek Safar  <marek.safar@gmail.com>
187
188         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
189         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
190         predefined types clean up (work related to #364674).
191
192 2008-03-04  Marek Safar  <marek.safar@gmail.com>
193
194         * ecore.cs: Print an error message instead of throwing exception.
195         
196 2008-03-04  Marek Safar  <marek.safar@gmail.com>
197
198         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
199         expression.cs, statement.cs: Unififed null literal representation.
200
201 2008-03-03  Marek Safar  <marek.safar@gmail.com>
202
203         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
204         expression.cs: Refactored binary operators resolve phase and improved speed.
205         The nullable code is still missing and won't work correctly, more fixes
206         required.
207
208         It also fixes #323726, #324312, #324248, and many other unreported issues.
209
210 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
211
212         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
213         instead of 'gmcs'.
214
215 2008-02-27  Marek Safar  <marek.safar@gmail.com>
216
217         * ecore.cs: Clean-up and split BetterConversion.
218         
219 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
220
221         Fix #363791
222         * enum.cs (EnumMember.Value): Only access 'value' if
223         ResolveValue says it's ok.
224         (EnumMember.DoResolveValue): Don't set prev_member.value.
225         (Enum.GetDefinition): Reverse arguments of Equals --
226         EnumMember.Value can return 'null'.
227
228         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
229
230 2008-02-22  Marek Safar  <marek.safar@gmail.com>
231
232         * generic.cs, expression.cs: More ongoing work on expression trees.
233         
234 2008-02-21  Marek Safar  <marek.safar@gmail.com>
235
236         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
237         handle missing matches when mutiple operators exist.
238         
239 2008-02-20  Marek Safar  <marek.safar@gmail.com>
240
241         A fix for bug #363218
242         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
243         initializers.
244         
245 2008-02-20  Marek Safar  <marek.safar@gmail.com>
246
247         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
248         update. This time to deal correctly with SideEffectConstant expression used
249         as an argument for another constant folding.
250
251 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
252
253         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
254         MethodBuilder.
255
256 2008-02-19  Marek Safar  <marek.safar@gmail.com>
257
258         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
259
260 2008-02-19  Marek Safar  <marek.safar@gmail.com>
261
262         A fix for bug #328136
263         * expression.cs: Do not fold immediately LogicalAnd operators when the left
264         side is a false constant, because we still need to evaluate the right-hand
265         side.
266
267         * statement.cs (If): Emit two types of boolean constants (simple constant,
268         side-effect constant).
269
270 2008-02-19  Marek Safar  <marek.safar@gmail.com>
271
272         * constant.cs (SideEffectConstant): Don't emit boolean constant.
273
274         * expression.cs: Fold immediately LogicalAnd operators when both sides are
275         constants.
276
277 2008-02-18  Marek Safar  <marek.safar@gmail.com>
278
279         A fix for bug #361457
280         * ecore.cs (IsApplicable): Params methods have lower priority.
281
282         * support.cs: Return correct parameter modifier for params types.
283
284 2008-02-18  Marek Safar  <marek.safar@gmail.com>
285
286         * generic.cs (TypeParameter): Cache attribute target name.
287
288         * support.cs: Removed unused variable.
289
290         * typemanager.cs: Removed debugging leftover.
291
292         * ecore.cs: Use local type instead of a property;
293
294         * class.cs (VerifyMembers): Consider also parent to test whether type member
295         is local or public.
296
297         * expression.cs (FullMethodDesc): Removed.
298
299         * attribute.cs (IsValidArgumentType): Made static.
300
301 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
302
303         Cleanup to be more readable.
304         * Makefile (GMCS_PROFILE): Remove.
305         (COMPILER_NAME): New helper.
306
307 2008-02-15  Miguel de Icaza  <miguel@novell.com>
308
309         * cs-tokenizer.cs: if a conditional expression happens inside a
310         (...) this also means that we do not need to de-ambiguate between
311         an parenthesized expression and a cast.
312
313         Fixes 346484.
314
315         * constant.cs (SideEffectConstant): a constant value that happens
316         to have a side effect.
317
318         Fixes the build regressions introduced by the fix for #359789
319
320 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
321
322         * expression.cs (Conditional.Emit): when emitting the ternary
323         operator, use local variables to generate code verifiable code.
324
325         The verifier cannot infer that the type on stack before the
326         stloc.0 is executed is of type ParentB. This happens because the
327         stack merge algorithm uses only parent types when deciding which
328         is the common type.  This is described in Part III 1.8.1.3 of ECMA
329         335.
330
331         This code compiled with mcs is not verifiable under MS. The MS
332         verifier picks the first common interface of Foo and Bar, which is
333         wrong, but doesn't use a full join type of the 2 interfaces.
334
335         CSC uses a clever hack to compile such code in a verifiable
336         way. It stores the intermediate values in a local variable with
337         the expected type.
338
339         Fixes: #358102
340
341 2008-02-14  Miguel de Icaza  <miguel@novell.com>
342
343         * expression.cs: Do not fold BitwiseAnd operators when the left
344         side is a false constant, because we still need to evaluate the
345         right-hand side.
346
347         Fixes #359789
348
349         * support.cs: Instead of throwing an InternalErrorException when
350         the position of the stream is outside the boundary of our buffer,
351         reset the state of the reader, and restart the reading from the
352         beginning of the file.
353
354 2008-02-14  Marek Safar  <marek.safar@gmail.com>
355
356         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
357
358 2008-02-14  Marek Safar  <marek.safar@gmail.com>
359
360         A fix for bug #361686
361         * decl.cs: A protected types used inside a private class which parents
362         derives from the protected class are accessible.
363
364 2008-02-13  Marek Safar  <marek.safar@gmail.com>
365
366         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
367         the parameterless constructor.
368
369 2008-02-13  Marek Safar  <marek.safar@gmail.com>
370
371         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
372         lookup methods to use standard member cache when doing member lookup.
373
374 2008-02-12  Marek Safar  <marek.safar@gmail.com>
375
376         * driver.cs: Don't report full path for referenced module as assembly error.
377
378 2008-02-12  Marek Safar  <marek.safar@gmail.com>
379
380         * Makefile: Fixed `qh' target to work on all machines.
381
382         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
383         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
384         and HasElementType with TypeManager implementation.
385
386 2008-02-08  Marek Safar  <marek.safar@gmail.com>
387
388         A fix for bugs #325134, #359749
389         * expression.cs, ecore.cs: Try to resolve an extension method even if the
390         first binds point to non-method member expression.
391
392 2008-02-08  Marek Safar  <marek.safar@gmail.com>
393
394         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
395
396 2008-02-08  Marek Safar  <marek.safar@gmail.com>
397
398         A fix for bugs #321394, #323028
399         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
400         Reworked naive IsAccessibleAs implementation to handle nested types.
401
402 2008-02-05  Jb Evain  <jbevain@novell.com>
403
404         * class.cs: use generic type comparison for parameters
405         as well.
406
407 2008-02-05  Marek Safar  <marek.safar@gmail.com>
408
409         A fix for bug #325372
410         * class.cs: Use generic type comparison when testing method signatures.
411
412 2008-02-05  Marek Safar  <marek.safar@gmail.com>
413
414         A fix for bug #357047
415         * ecore.cs: Applied C# 3.0 changes to better conversion.
416
417 2008-02-05  Marek Safar  <marek.safar@gmail.com>
418
419         A fix for bug #358374
420         * cs-parser.jay: Correctly set modifiers for all constructor types.
421
422 2008-02-04  Marek Safar  <marek.safar@gmail.com>
423
424         A fix for bug #355251
425         * generic.cs: Added base class constraint based type inference.
426
427 2008-02-01  Marek Safar  <marek.safar@gmail.com>
428
429         A fix for bug #357255
430         * decl.cs: One more missing visibility check.
431
432 2008-02-01  Marek Safar  <marek.safar@gmail.com>
433
434         * support.cs: Fixed broken return.
435
436 2008-01-25  Marek Safar  <marek.safar@gmail.com>
437
438         * report.cs: Correctly reset warnings count after probing.
439
440 2008-01-25  Martin Baulig  <martin@ximian.com>
441
442         * namespace.cs
443         (NamespaceEntry.SymbolFileID): Make this work again after
444         MemberName.ToString() is gone.
445
446 2008-01-25  Marek Safar  <marek.safar@gmail.com>
447
448         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
449         expressions.
450
451 2008-01-25  Marek Safar  <marek.safar@gmail.com>
452
453         * generic.cs: Use full implicit conversion for type inference fixing.
454
455 2008-01-24  Marek Safar  <marek.safar@gmail.com>
456
457         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
458         Fixed user operator conversions.
459
460 2008-01-24  Marek Safar  <marek.safar@gmail.com>
461
462         * generic.cs: Do nullable type to null comparison optimization during
463         resolve phase.
464
465 2008-01-24  Marek Safar  <marek.safar@gmail.com>
466
467         A fix for bug #355163
468         * generic.cs: Enabled l-value resolve on nullable expressions.
469
470 2008-01-24  Marek Safar  <marek.safar@gmail.com>
471
472         A fix for bug #353986
473         * class.cs: Ingore static ctors with parameters for any further checks.
474
475 2008-01-24  Marek Safar  <marek.safar@gmail.com>
476
477         A fix for bug #354310
478         * namespace.cs: Removed redundant check.
479
480 2008-01-24  Marek Safar  <marek.safar@gmail.com>
481
482         A fix for bug #354928
483         * expression.cs: ElementInitializers can be resolved only once.
484
485 2008-01-24  Marek Safar  <marek.safar@gmail.com>
486
487         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
488         Condition expressions.
489
490 2008-01-23  Marek Safar  <marek.safar@gmail.com>
491
492         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
493
494 2008-01-22  Marek Safar  <marek.safar@gmail.com>
495
496         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
497         not allowed.
498
499         * generic.cs: Implemented coalesce expression.
500
501 2008-01-22  Marek Safar  <marek.safar@gmail.com>
502
503         A fix for bug #355145
504         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
505         expression tree type inference.
506
507 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
508
509         Fix #354663
510         * expression.cs (Binary.IsUnsignedType): Fix typo.
511
512 2008-01-22  Marek Safar  <marek.safar@gmail.com>
513
514         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
515
516 2008-01-22  Marek Safar  <marek.safar@gmail.com>
517
518         A fix for bug #355161
519         * ecore.cs, expression.cs: Wider range of extension method supported
520         expressions.
521
522 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
523
524         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
525         AssemblyBuilder to operate in compiler context. Fixes mcs part of
526         bug #354970.
527
528 2008-01-22  Marek Safar  <marek.safar@gmail.com>
529
530         A fix for bug #355148
531         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
532
533 2008-01-22  Miguel de Icaza  <miguel@novell.com>
534
535         * expression.cs (CreateExpressionTree): Add support for or and
536         logical or, and indent following the coding conventions.
537
538         * typemanager.cs (LinqExpression): renamed from
539         ExpressionTreeManager, for a shorter name.
540
541         Use TypeManager.CoreLookupType to lookup types from our core
542         assemblies and turn those into "Type" variables.
543
544         Consumers that previously used "Namespace" and "Type" from this
545         class should instead use the TypeExpression which is a type that
546         is fully resolved (without involving the regular C# resolution
547         rules). 
548
549         This typically looks like this:
550
551         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
552         new MemberAccess (texpr, name, type_arguments, loc)
553
554         This avoids the problem in: #355178
555
556 2008-01-21  Marek Safar  <marek.safar@gmail.com>
557
558         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
559         feature in parser only as we do in other cases.
560         
561 2008-01-21  Marek Safar  <marek.safar@gmail.com>
562
563         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
564         typemanager.cs: A refactoring of params arguments to reuse existing
565         expressions (params -> array initializer) to emit params argument instead
566         of specialized handling.
567         It was required by expression tree implementation and it has other benefits
568         as well, we now apply same optimization for params arguments as we do for
569         array initializers.
570         
571 2008-01-18  Marek Safar  <marek.safar@gmail.com>
572
573         A fix for bug #353526
574         * generic.cs: A type inference of params arguments may not required any
575         temporary array creation.
576         
577 2008-01-18  Marek Safar  <marek.safar@gmail.com>
578
579         A fix for bug #353534
580         * generic.cs, ecore.cs, expression.cs: A method group type inference is
581         supported for delegates only.
582         
583 2008-01-18  Marek Safar  <marek.safar@gmail.com>
584
585         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
586         type for more than 1 candidates.
587         
588 2008-01-18  Marek Safar  <marek.safar@gmail.com>
589
590         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
591         expressions.
592         
593 2008-01-16  Marek Safar  <marek.safar@gmail.com>
594
595         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
596         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
597         operator) expressions. 
598                 
599 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
600
601         * statement.cs: Avoid declaring an IL variable for this_variable since it is
602         not accessed from the generated IL.
603
604 2008-01-14  Marek Safar  <marek.safar@gmail.com>
605
606         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
607         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
608         statement.cs: The first expression tree implementation drop, mostly
609         infrastructure work.
610
611 2008-01-14  Marek Safar  <marek.safar@gmail.com>
612
613         * ecore.cs (IsNestedChild): Refactored.
614
615 2008-01-11  Marek Safar  <marek.safar@gmail.com>
616
617         * lambda.cs: Don't use a cast on unknown expression statement.
618
619 2008-01-10  Geoff Norton  <gnorton@novell.com>
620
621         * cs-tokenizer.cs: One more token to distinguish between method and lambda
622         arguments
623
624 2008-01-09  Marek Safar  <marek.safar@gmail.com>
625
626         * doc.cs: Report better /doc crash details.
627         
628 2008-01-09  Marek Safar  <marek.safar@gmail.com>
629
630         A fix for bug #352536
631         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
632
633 2008-01-08  Marek Safar  <marek.safar@gmail.com>
634
635         A fix for bug #352287
636         * ecore.cs, expression.cs: Do `this' access checking in all member access
637         expressions.
638         
639 2008-01-08  Marek Safar  <marek.safar@gmail.com>
640
641         * rootcontext.cs, driver.cs: Switch to linq mode by default.
642         
643         * report.cs: Reset message stacks.
644         
645 2008-01-08  Marek Safar  <marek.safar@gmail.com>
646
647         * generic.cs (InferInPhases): Correctly calculate params position.
648         
649 2008-01-08  Marek Safar  <marek.safar@gmail.com>
650
651         * cs-tokenizer.cs: No need to parse full string when parsing lambda
652         arguments.
653
654 2008-01-07  Marek Safar  <marek.safar@gmail.com>
655
656         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
657         
658         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
659         
660         * driver.cs: Updated --help option.
661         
662 2008-01-07  Marek Safar  <marek.safar@gmail.com>
663
664         * generic.cs (InferParamsTypeArguments): Removed.
665         (InferInPhases): Add params type inference.
666         (LowerBoundInference): Fixed scoring mechanism.
667         
668         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
669         
670 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
671
672         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
673         byte array for unsigned "baked" assemblies.
674
675 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
676
677         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
678         array for assemblies that are not strongnamed.
679
680 2008-01-04  Marek Safar  <marek.safar@gmail.com>
681
682         A fix for bug #351481
683         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
684         declaring type for nested generic types.
685         
686 2008-01-04  Marek Safar  <marek.safar@gmail.com>
687
688         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
689         instead of ToString.
690         
691 2008-01-03  Marek Safar  <marek.safar@gmail.com>
692
693         A fix for bug #351047
694         * expression.cs (Binary.ResolveOperator): Allow equality operators between
695         null and structs only when equality and inequality operators are defined
696         either as an user-operators or predefined operators.
697         
698 2008-01-03  Marek Safar  <marek.safar@gmail.com>
699
700         A fix for bug #351047
701         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
702         
703 2008-01-03  Marek Safar  <marek.safar@gmail.com>
704
705         A fix for bug #351257
706         * cs-tokenizer.cs: Advance line number for '\r' correctly.
707         
708 2008-01-03  Marek Safar  <marek.safar@gmail.com>
709
710         A fix for bug #351157
711         * class.cs (Using): Fixed yet another broken cloning.
712         
713         (Block): Put back more sensible default value for statements.
714         
715 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
716
717         * codegen.cs: Allow AssemblyVersion with only major version component.
718         Fixes bug #351055.
719
720 2007-12-29  Marek Safar  <marek.safar@gmail.com>
721
722         A fix for bug #324654
723         * class.cs: Use FullName property as member name.
724
725 2007-12-28  Marek Safar  <marek.safar@gmail.com>
726
727         A fix for bug #342117
728         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
729         constructor constraint.
730
731 2007-12-28  Marek Safar  <marek.safar@gmail.com>
732
733         A fix for bug #338273
734         * class.cs (ProbertyBase): Access modifier checks are required for overrides
735         only.
736
737 2007-12-28  Marek Safar  <marek.safar@gmail.com>
738
739         A fix for bug #350839
740         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
741
742 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
743
744         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
745         GHOP:
746         
747         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
748
749         * statement.cs: Changed some Hashtables to use HybridDictionaries
750         instead. It was observed that some HashTables only contained a few
751         items in the vast majority of cases. Since HybridDictionary is
752         more efficient on small sets (<10 elements), "known_variables"
753         from class ExplicitBlock as well as "labels" and "constants " from
754         class Block were changed to HybridDictionaries. 
755
756         Atsai results: (56216kb->54987kb)
757
758         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
759
760
761 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
762
763         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
764         GHOP:
765         
766         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
767         
768         * expression.cs: foreach loop to for loop, saved on allocation of
769         enumerator (59333kb->59141kb)
770
771         * statement.cs. Changed foreach loops to for loops, saved on
772         allocation of enumerator (59141kb->59006kb)
773
774         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
775         when constructed with no specified capacity. This was causing a
776         few ArrayLists to allocate more memory than they would potentially
777         need in the Block class and MemberCache class. Setting the
778         ArrayLists to construct with a capacity of 1 saves some
779         memory. (56216kb->55585kb)
780
781 2007-12-27  Marek Safar  <marek.safar@gmail.com>
782
783         A fix for bug #347189 (2nd issue)
784         * expression.cs (MemberAccess): Nested type can be found in base non-generic
785         type.
786
787 2007-12-27  Miguel de Icaza  <miguel@novell.com>
788         
789         * report.cs: Do not use colors if stdout and stderr are not a
790         terminal.
791
792 2007-12-27  Marek Safar  <marek.safar@gmail.com>
793
794         A fix for bug #346998
795         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
796         overloads.
797
798 2007-12-27  Marek Safar  <marek.safar@gmail.com>
799
800         A fix for bug #343465
801         * class.cs: Explicit method name for nested types uses dots only.
802
803 2007-12-27  Marek Safar  <marek.safar@gmail.com>
804
805         A fix for bug #343707
806         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
807
808 2007-12-27  Marek Safar  <marek.safar@gmail.com>
809
810         * ecore.cs: Report type inference errors only when arguments count matches
811         parameter count.
812         
813         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
814         
815         * expression.cs, report.cs: New warning.
816         
817         * typemanager.cs: Catch anonymous method type too.
818
819 2007-12-23  Marek Safar  <marek.safar@gmail.com>
820
821         A fix for bug #346379
822         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
823
824 2007-12-23  Marek Safar  <marek.safar@gmail.com>
825
826         A fix for bug #347359
827         * expression.cs (Invocation): Don't resolve already resolved expression.
828
829 2007-12-23  Marek Safar  <marek.safar@gmail.com>
830
831         A fix for bug #347189
832         * class.cs (FixedField): Use non-dependent code only in the define phase.
833
834 2007-12-23  Marek Safar  <marek.safar@gmail.com>
835
836         A fix for bug #348076
837         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
838
839 2007-12-22  Marek Safar  <marek.safar@gmail.com>
840
841         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
842         discovered extension methods.
843
844 2007-12-22  Marek Safar  <marek.safar@gmail.com>
845
846         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
847         method.
848
849 2007-12-21  Miguel de Icaza  <miguel@novell.com>
850
851         * report.cs (ErrorMessage): Add support for using colors on
852         terminals that support it. 
853
854 2007-12-21  Marek Safar  <marek.safar@gmail.com>
855
856         * ecore.cs: Use information about expanded params for error reporting.
857
858 2007-12-21  Marek Safar  <marek.safar@gmail.com>
859
860         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
861         and logic for params overloads.
862         
863 2007-12-15  Miguel de Icaza  <miguel@novell.com>
864
865         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
866         as this is also created from the parser.  Fixes #349034
867
868 2007-12-12  Miguel de Icaza  <miguel@novell.com>
869
870         * statement.cs (Throw.CloneTo): it is valid to have empty
871         expressions for throw. 
872
873 2007-12-03  Marek Safar  <marek.safar@gmail.com>
874
875         * cs-parser.jay: Set delegate constraint parsing region correctly.
876
877 2007-12-03  Marek Safar  <marek.safar@gmail.com>
878
879         A fix for bug #345467
880         * typemanager.cs (IsEqual): Compare generic parameters position only.
881         
882 2007-11-28  Marek Safar  <marek.safar@gmail.com>
883
884         * expression.cs (BaseAccess): Type arguments can be null.
885
886 2007-11-27  Raja R Harinath  <harinath@gmail.com>
887
888         * statement.cs (Block.Resolve): Ensure flow-branching tree is
889         consistent even when an error has occured.
890         (Switch.Resolve): Likewise.
891
892 2007-11-22  Marek Safar  <marek.safar@gmail.com>
893
894         A fix for bug #334505
895         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
896         overrides.
897         
898 2007-11-22  Marek Safar  <marek.safar@gmail.com>
899
900         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
901         refactorings required to resolve extension methods correctly when mixing
902         generics and non-generics members.
903         
904 2007-11-20  Marek Safar  <marek.safar@gmail.com>
905
906         A fix for bug #342584
907         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
908         conversion.
909         
910 2007-11-19  Marek Safar  <marek.safar@gmail.com>
911
912         A fix for bug #342512
913         * delegate.cs: Use delegate argument expression when is available. Don't
914         emit virtual call when class is sealed.
915         
916 2007-11-16  Marek Safar  <marek.safar@gmail.com>
917
918         A fix for bug #325423
919         * assign.cs (FieldInitializer): Use resolved expression for emit.
920         
921         * class.cs: Print less confusing error message.
922         
923 2007-11-16  Marek Safar  <marek.safar@gmail.com>
924
925         * cs-tokenizer.cs: Removed GMCS ifdefs.
926         
927         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
928         mcs.
929         
930         * cs-parser.jay: Disabled nullable check.
931         
932         * generic-mcs: Copied more generic stuff.
933                 
934 2007-11-16  Marek Safar  <marek.safar@gmail.com>
935
936         * gcs-parser.jay: Merged to cs-parser.jay.
937         
938         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
939         * *.csproj, *.sources: Updated to use only jay parser file.
940
941 2007-11-16  Marek Safar  <marek.safar@gmail.com>
942
943         * gcs-parser.jay: Added nullable and default expression feature checks.
944         
945 2007-11-16  Marek Safar  <marek.safar@gmail.com>
946
947         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
948         it fixes many TODOs and hidden bugs.
949         
950         * expression: Removed duplicate error check.
951
952 2007-11-15  Marek Safar  <marek.safar@gmail.com>
953
954         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
955         implicitly type local variable only when it is used in a declaration.
956
957 2007-11-15  Marek Safar  <marek.safar@gmail.com>
958
959         * attribute.cs: Use CS0612 for empty strings.
960
961 2007-11-14  Marek Safar  <marek.safar@gmail.com>
962
963         * lambda.cs, statement.cs: Contextual return may act as a statement.
964
965 2007-11-14  Marek Safar  <marek.safar@gmail.com>
966
967         A fix for a regression cause by #324222
968         * class.cs: Don't report unused even when it implements an interface.
969         
970 2007-11-13  Marek Safar  <marek.safar@gmail.com>
971
972         A fix for bug #341205
973         * ecore.cs, expression.cs: Method group expression cannot do static
974         method access with an instance reference check before overloading takes
975         a place.
976         
977 2007-11-13  Marek Safar  <marek.safar@gmail.com>
978
979         A fix for bug #325359
980         * class.cs: Use predictable name for automatically generated property.
981         
982 2007-11-12  Marek Safar  <marek.safar@gmail.com>
983
984         A fix for bug #324996
985         * expression.cs (Is): Handle case where D is nullable and T is not
986         correctly.
987         
988         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
989         
990 2007-11-12  Marek Safar  <marek.safar@gmail.com>
991
992         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
993         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
994         Flush small error reporting changes.
995         
996 2007-11-09  Marek Safar  <marek.safar@gmail.com>
997
998         A fix for bug #324996
999         * expression.cs: Rewrote Is expression implementation to work with
1000         generics, nullable types, anonymous method. A const result expression 
1001         uses existing infrastructure instead of custom not fully-featured one.
1002         
1003 2007-11-08  Marek Safar  <marek.safar@gmail.com>
1004
1005         A fix for bug #340202
1006         * class.cs: Consider generics for volatile field.
1007
1008 2007-11-08  Marek Safar  <marek.safar@gmail.com>
1009
1010         A fix for bug #335594
1011         * expression.cs: Use conversion rules when handling string addition.
1012         
1013 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1014
1015         A fix for bug #336651
1016         * expression.cs: Fixed a crash when probing is on.
1017         
1018 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1019
1020         A fix for bug #324242
1021         * covert.cs: Added a conversion from any nullable-type with an 
1022         underlying enum-type to the type System.Enum.
1023         
1024 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1025
1026         A fix for bug #324222
1027         * class.cs: Report all non-used event fields.
1028         
1029 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1030
1031         A fix for bug #325161
1032         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
1033         qualifier for generic types.
1034         
1035 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1036
1037         A fix for bug #322971
1038         * expression.cs, ecore.cs: Added intermediate result value check for
1039         indexers. 
1040         
1041 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1042
1043         A fix for bug #324754
1044         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
1045         when it was requested.
1046
1047 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1048
1049         A fix for bug #325101
1050         * expression.cs: Do type not value comparison for `is' expression.
1051
1052 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1053
1054         A fix for bug #320236
1055         * convert.cs: Don't apply user conversion on underlying target type.
1056
1057 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1058
1059         * expression.cs: Don't use unresolved expression for error reporting.
1060  
1061 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1062
1063         A fix for bugs #337712, #324490
1064         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
1065         overloading resolution too.
1066         
1067         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
1068         the process consistent and more robust.
1069         
1070         * expression.cs, linq.cs, report.cs: Update.
1071
1072 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1073
1074         A fix for bug #332909
1075         * attribute.cs: Resolve attributes in correct context using error
1076         handling procedure.
1077         
1078         * rootcontext.cs: Define Obsolete attribute members as core members.
1079         
1080 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1081
1082         * statement.cs: Removed unused methods.
1083         
1084 2007-10-31  Wade Berrier  <wberrier@novell.com>
1085
1086         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
1087         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
1088         during 'make dist')
1089
1090 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1091
1092         A fix for bug #338102
1093         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
1094         methods registered as non-generics.
1095         
1096 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1097
1098         A fix for bugs #337712, #324490
1099         * delegate.cs: Delegate covariance and contravariance is not allowed for
1100         value types.
1101         
1102 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1103
1104         A fix for bug #337719 
1105         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
1106         `from' keyword.
1107         
1108 2007-10-30  Marek Safar  <marek.safar@gmail.com>
1109  
1110         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
1111
1112 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1113  
1114         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
1115         query expressions.
1116
1117 2007-10-29  Raja R Harinath  <rharinath@novell.com>
1118
1119         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
1120
1121 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1122  
1123         A fix for bug #334652
1124         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
1125         extension methods when we have not found the best candidate in normal
1126         container.
1127
1128 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1129
1130         * AssemblyInfo.cs: Keep up-to-date.
1131
1132 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1133
1134         * Makefile: Fixed generics compiler name.
1135         
1136 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1137
1138         * lambda.test: removed, lambda parsing is done differently.
1139         
1140         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
1141
1142 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
1143
1144         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
1145
1146 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1147
1148         * Makefile, *.sources : All C# compilers are in mcs folder.
1149         
1150         * *.cs: Use existing 2_1 define for smcs.
1151
1152 2007-10-26  Marek Safar  <marek.safar@gmail.com>
1153
1154         A fix for bug #335847
1155         * assign.cs, expression.cs: Couple of changes to avoid creating a
1156         temporary variable for each object initializer assignment statement. It
1157         simplifies struct initialization too, otherwise two temporary variables
1158         would be required.
1159         Implemented optimization of redundant default element initializers.
1160         
1161 2007-10-25  Marek Safar  <marek.safar@gmail.com>
1162
1163         A fix for bug #336766
1164         * expression.cs (Class.CheckBase): Use generic name when method is
1165         generic.
1166         
1167 2007-10-25  Marek Safar  <marek.safar@gmail.com>
1168
1169         A fix for bug #334737
1170         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
1171         variable and not variable argument for prepared copies.
1172
1173 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1174
1175         A fix for bug #325110
1176         * class.cs, expression.cs, attribute.cs: Use open generic method when
1177         checking conditional attribute.
1178         
1179 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1180
1181         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
1182         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
1183         FeatureIsNotAvailable.
1184
1185 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1186
1187         ** C# 3.0 Partial methods
1188         
1189         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
1190         methods support. Because of member cache issue with generics only
1191         non-generics partial methods are fully supported.
1192         
1193 2007-10-23  Marek Safar  <marek.safar@gmail.com>
1194         
1195         * class.cs, decl.cs: Rewrote member overloads check to cope with 
1196         generics and to use member cache for member checking. It also improves
1197         performance and fixes remaining overloads issues.
1198         
1199 2007-10-20  Marek Safar  <marek.safar@gmail.com>
1200         
1201         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
1202         roottypes.cs, typemanager.cs:
1203                 
1204         A member cache creation logic changed to add members immediately and
1205         not rely on fallback. The member cache is now only prefered way
1206         how to access and find type declaration members. It saves 5 MB of memory
1207         during MWF compilation and makes code ready for more optimizations and
1208         clean-ups, it's also a pre-requirement for partial methods.
1209         
1210 2007-10-18  Raja R Harinath  <harinath@gmail.com>
1211
1212         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
1213         handling for generic parameters.
1214
1215 2007-10-15  Marek Safar  <marek.safar@gmail.com>
1216         
1217         * class.cs (FixedField): Removed redundant volatile check.
1218         
1219 2007-10-15  Marek Safar  <marek.safar@gmail.com>
1220         
1221         * class.cs, decl.cs: Fixed overload members verification to do only one
1222         check per possible collision.
1223         
1224 2007-10-13  Marek Safar  <marek.safar@gmail.com>
1225         
1226         A fix for bug #325478
1227         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
1228         and create only one disposable flags container.
1229         
1230 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1231         
1232         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
1233         * statement.cs (Fixed): Fixed variables cloning.
1234         
1235 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1236         
1237         A fix for bug #333342
1238         * class.cs (EventField): Don't mark value type event as synchronized. 
1239         
1240 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1241         
1242         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
1243         inference to identify best candidate method correctly.
1244         (ProperyExpr): A range variable is read only and cannot be modified.
1245         
1246 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1247         
1248         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
1249         logic to identify best candidate method correctly.
1250         
1251 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1252         
1253         * location.cs (Equals, GetHashCode): Removed.
1254         
1255 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1256         
1257         * report.cs: Implemented message recorder. It is used mainly for lambda
1258         expressions to capture otherwise swallowed error messages.
1259         
1260         * anonymous.cs, lambda.cs.cs: Do full parameters check.
1261
1262         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
1263         and not at the top.
1264         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
1265                 
1266         * expression.cs (MemberAccess): Always report lookup failure.
1267         
1268         * location.cs: Implemented Equals, GetHashCode.
1269         
1270         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
1271         
1272 2007-10-10  Jb Evain  <jbevain@novell.com>
1273
1274         * codegen.cs: re-enable assembly version check.
1275
1276 2007-10-09  Marek Safar  <marek.safar@gmail.com>
1277         
1278         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
1279         checks.
1280         
1281         * namespace.cs (UsingAlias): Do correct version check.
1282         
1283 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1284         
1285         * expresison.cs, ecore.cs: Issue extension method error message when
1286         appropriate.
1287         
1288         * rootcontext.cs: Added ISO_2 compiler mode option.
1289
1290 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1291         
1292         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
1293          message.
1294         
1295 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1296         
1297         * attribute.cs (GetString, GetBoolean): Work with both literal and
1298         constant.
1299         
1300         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
1301         Moved method overload specific methods to MethodGroupExpr.
1302         
1303         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
1304         it should be less memory consuming.
1305         
1306 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
1307
1308         * codegen.cs: remove the assembly version check until the buildbot is
1309         fixed.
1310
1311 2007-10-07  Jb Evain  <jbevain@novell.com>
1312
1313         * attribute.cs (Attribute.GetString): if the value
1314         expression is a StringConstant, return its string value.
1315
1316 2007-10-07  Jb Evain  <jbevain@novell.com>
1317
1318         * typemanager.cs: add `assembly_version_attribute_type`.
1319         * codegen.cs: on attribute emission, check that the
1320         AssemblyVersionAttribute doesn't overflow.
1321
1322 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1323         
1324         A fix for bug #324677
1325         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
1326         parent container of a scope container with currently resolved one. 
1327         
1328 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1329         
1330         A fix for bug #325534
1331         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
1332         only.
1333         
1334 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1335         
1336         A fix for bug #327504
1337         * class.cs (Operator.Define): Refactored implicit and explicit user
1338         operator conversion rules.
1339         
1340 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1341         
1342         A fix for bug #327520
1343         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
1344         
1345 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1346         
1347         A fix for bug #328022
1348         * class.cs (MethodData.Define): Use correct method to check whether
1349         a method implementents an accessor.
1350         
1351 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1352         
1353         A fix for bug #330069
1354         * statement.cs (Fixed.Resolve): Read the first array element only when
1355         an array is instantiated. 
1356         
1357 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1358         
1359         * expression.cs, assign.cs, generics.cs: Print correct operator when
1360         compound assignment is used.
1361         
1362 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1363         
1364         A fix for bug #325841
1365         * expression.cs (ArrayAccess): Use full argument cloning only for
1366         string compound concatenation.
1367         
1368 2007-10-03  Marek Safar  <marek.safar@gmail.com>
1369         
1370         A fix for bug #328774
1371         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
1372         assignment.
1373         (PropertyExpr.EmitAssign): Fixed string concatenation compound
1374         assignment.
1375
1376 2007-10-03  Raja R Harinath  <rharinath@novell.com>
1377
1378         Fix #328490
1379         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
1380         Event accessibility checks here.  Remove some bogus code that
1381         accidently made GenericMethods work.
1382         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
1383
1384 2007-09-25  Marek Safar  <marek.safar@gmail.com>
1385         
1386         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
1387         
1388         * statement.cs (Block): Refactored AddVariable to allow error handling
1389         customization.
1390         
1391         * generic.cs: New stub.
1392         
1393 2007-09-23  Marek Safar  <marek.safar@gmail.com>
1394         
1395         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
1396         flag.
1397         
1398 2007-09-17  Marek Safar  <marek.safar@gmail.com>
1399
1400         * class.cs: Use partial container to record whether any partial part
1401         contains static field initializer and therefore default contructor has
1402         to be defined.
1403         
1404 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1405
1406         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
1407         mono-list when only one of two partial parts has defined accessibility
1408         modifier.
1409         
1410 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1411
1412         A fix for bug #82845
1413         
1414         * class.cs (TypeContainer): Set correct resolve context for all field
1415         initializers.
1416         
1417 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1418
1419         * assign.cs: Fixed a crash when field is resolved twice with an error.
1420         
1421         * codegen.cs: Changed InFieldInitializer to be flag.
1422         
1423         * anonymous.cs, ecore.cs, expression.cs: Update after
1424         IsInFieldInitializer rename.
1425         
1426         * const.cs: Removed unused parameter.
1427         
1428         * class.cs: Changed the way how we resolve and emit field initializers.
1429         The field initilizers have to have access to contructor block to emit
1430         compiler generated code.
1431
1432 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1433
1434         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
1435         generics use TypeContainer instead.
1436         
1437 2007-09-12  Marek Safar  <marek.safar@gmail.com>
1438         
1439         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
1440
1441         * lambda.cs (ResolveParameters): Use more powerful
1442         InflateGenericArgument.
1443         
1444         * parameters.cs: Better exception message.
1445                 
1446 2007-09-10  Marek Safar  <marek.safar@gmail.com>
1447
1448         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
1449         correct expression block type. 
1450         
1451         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
1452         
1453         * expression.cs (Invocation): Extracted method group resolve to
1454         DoResolveOverload.
1455         
1456 2007-09-07  Marek Safar  <marek.safar@gmail.com>
1457
1458         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
1459         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
1460         
1461         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
1462         generic extension methods.
1463
1464 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1465
1466         A fix for bug #82676 (Do I get it right now?)
1467         * convert.cs (Binary.ResolveOperator): An interface is converted to the
1468         object before a standard conversion is applied.
1469         
1470 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1471
1472         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
1473         #82676.
1474         
1475 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1476
1477         A fix for bug #82676
1478         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
1479         non-generic interface types.
1480         
1481 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1482
1483         A fix for bug #82690
1484         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
1485         
1486 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1487
1488         A fix for bug #82571
1489         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
1490         modifier for container based methods.
1491         
1492 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1493
1494         A fix for bug #82676
1495         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
1496         any interface-type T means to any of interface type T.
1497
1498 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1499
1500         * namespace.cs: We have 2 versions of System.Core assembly.
1501
1502 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1503
1504         A fix for bug #82652
1505         * class.cs (Class.GetClassBases): Compare types and not expressions.
1506
1507 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1508
1509         A fix for bug #82620
1510         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
1511         actually never worked before.
1512         (IndexerAccess): Emit prepared arguments before they are modified.
1513         
1514 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1515
1516         A fix for bug #82563
1517         * assign.cs: Revert wrong fix.
1518         
1519         * expression.cs (VariableReference.EmitAssign): Handle ref reference
1520         correctly.
1521         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
1522         Instead of ldelema/stdind we have to use temporary variables to handle
1523         cases like String.Concat (params string[]).
1524         
1525 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1526
1527         * class.cs: EmitAttributes to Emit rename.
1528         
1529         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
1530         null.
1531         (MemberCore.HasClsCompliantAttribute): Don't depend on 
1532         GetClsCompliantAttributeValue execution.
1533         
1534 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1535
1536         * anonymous.cs: Use shorter type prefix.
1537         
1538         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
1539         when exist.
1540         
1541         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
1542         variables when probing is on.
1543         
1544         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
1545         unresolved variables.
1546         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
1547         handle transparent identifiers.
1548         
1549 2007-08-26  Marek Safar  <marek.safar@gmail.com>
1550
1551         * attribute.cs (IsClsCompliant): Add nullable types test.
1552         
1553 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
1554
1555         * doc.cs : catch other types of exception than XmlException to
1556           report CS1570. Fixed bug #82565.
1557
1558 2007-08-23  Marek Safar  <marek.safar@gmail.com>
1559
1560         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
1561         The number of delegate parameters has to match.
1562         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
1563         arrays.
1564
1565 2007-08-21  Marek Safar  <marek.safar@gmail.com>
1566
1567         * anonymous.cs (AnonymousMethod): Generate private anonymous method
1568         to fix problem with private arguments.
1569
1570 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1571
1572         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
1573         
1574         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
1575         
1576         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
1577         empty. Add cloning suport.
1578         
1579         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
1580
1581 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1582
1583         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
1584         to create EmptyCast. It handles EmptyConstantCast specialization for
1585         constants.
1586         
1587 2007-08-18  Marek Safar  <marek.safar@gmail.com>
1588
1589         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
1590         (EmitArrayArgument): One routine for array arguments.
1591         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
1592         
1593 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1594
1595         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
1596
1597 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1598
1599         * anonymous.cs: MemberLookupFinal update.
1600
1601         * class.cs (ConstructorInitializer): Is expression based.
1602         
1603         * delegate.cs: MethodGroupExpr update.
1604         
1605         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
1606         messages.
1607         (Error_MemberLookupFailed): Customizable error override.
1608         (MethodGroupExpr): Keep queried type for later usage.
1609         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
1610         resolve.
1611         
1612         * expression.cs: Error_MemberLookupFailed refactoring.
1613         (New.DoResolve): Resolve as much as possible.
1614         (ElementInitializer.Error_MemberLookupFailed): Object initializer
1615         customization for invalid member types.
1616
1617         * statement.cs: MethodGroupExpr update.
1618         
1619 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1620
1621         * modifier.cs (Check): Check all modifiers and not only accessibility
1622         ones.
1623
1624 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1625
1626         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
1627         type and not an expression.
1628
1629 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1630
1631         * statement.cs (Catch.Clone): Type and variable can be null.
1632
1633 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1634
1635         A fix for bug #81979
1636         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
1637         I am really not sure whether this is the best fix.
1638         
1639         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
1640         only once.
1641         
1642 2007-08-14  Marek Safar  <marek.safar@gmail.com>
1643
1644         ** C# 3.0 Object and collection initializers (major re-write)
1645         
1646         * assign.cs (DoResolve): Initializers are not assign related.
1647         
1648         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
1649         used during collection or object initialization.
1650         
1651         * expression.cs (Error_InvalidArguments): Add initializers specific
1652         messages. More will come later because it requires some general
1653         refactoring.
1654         (New.DoResolve): Better error handling for unsafe types.
1655         (EmptyExpressionStatement): New class.
1656         (ElementInitializer): An object initializer expression.
1657         (CollectionElementInitializer): A collection initializer expression.
1658         (CollectionOrObjectInitializers): A block of object or collection
1659         initializers.
1660         (NewInitialize): New expression with element/object initializers.
1661         
1662         * statement.cs: Reverted object/collection initializer hacks.
1663         
1664         * typemanager.cs (CSharpName): Filter __arglist type.
1665         
1666 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1667
1668         ** C# 3.0 Anonymous Types (update to the latest standard)
1669         
1670         * expression.cs (Binary.ResolveOperator): Threat all null based types
1671         same.
1672         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
1673         (AnonymousTypeParameter): Updated.
1674         
1675         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
1676         (AnonymousTypeClass): New anonymous type container.
1677         
1678         * class.cs (AddField): Return operation result.
1679         
1680         * generic.cs: Another empty TypeArguments overload.
1681         
1682         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
1683         are stored at top of normal hierarchy.
1684         
1685         * typemanager.cs (CSharpName): Filter anonymous types.
1686         
1687 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1688
1689         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
1690         as single Concat call. How could we miss that :-(
1691         
1692 2007-08-08  Marek Safar  <marek.safar@gmail.com>
1693
1694         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
1695         
1696 2007-08-07  Miguel de Icaza  <miguel@novell.com>
1697
1698         * expression.cs: Fix the previous commit, the creation of the
1699         arguments array list needs also to be conditional on the arguments
1700         not being null.
1701
1702         * class.cs: Add a little bit of help to help narrow down problems.
1703
1704         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
1705         not try to copy in that case. 
1706
1707         * driver.cs: When building SMCS, include a new different set of
1708         default assemblies here.   Do this here so we can control whether
1709         to include the default assemblies with /noconfig.
1710
1711 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1712
1713         A fix for bug #81979
1714         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
1715         only.
1716
1717 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1718
1719         A fix for bug #82300
1720
1721         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
1722         we are in probing scope.
1723
1724 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1725
1726         A fix for bug #82301
1727
1728         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
1729         (Statement.CloneTo): Clone and not map children blocks.
1730
1731 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1732
1733         A fix for bug #82299
1734
1735         * expression.cs (LocalVariableReference.CloneTo): Remap local info
1736         variable too.
1737         
1738         * statement.cs (Statement.CloneTo): Clone variables before statements
1739         to allow remaping of local variables.
1740
1741 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1742
1743         A fix for bug #82296
1744
1745         * anonymous.cs,
1746         * report.cs: Log crash details for future clone problems.
1747         
1748         * statement.cs (Return.Clone): Don't clone non-existent expression.
1749
1750 2007-08-03  Raja R Harinath  <harinath@gmail.com>
1751
1752         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
1753         (Class.AddBasesForPart): Move CS0537 check here from ...
1754         * cs-parser.jay (class_declaration): ... here.  Move calling of
1755         'AddBasesForPart' to ...
1756         (class_bases): ... here.
1757         (struct_declaration, interface_declaration): Update to changes.
1758
1759 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1760
1761         A fix for bug #81923
1762
1763         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
1764         conversion is allowed.
1765
1766 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1767
1768         A fix for bug #81564
1769
1770         * ecore.cs (EventExpr): Add IsBase handling.
1771
1772         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
1773         too.    
1774         
1775 2007-08-02  Raja R Harinath  <harinath@gmail.com>
1776
1777         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
1778         * cs-parser.jay: Some whitespace cleanups.
1779         (current_delegate): New.
1780         (type_name): New.
1781         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
1782         a dummy code block, and use 'type_name' instead of 'member_name'.
1783         (interface_declaration, class_declaration): Likewise.
1784         (delegate_declaration): Likewise.  Rearrange slightly and use
1785         'current_delegate'.
1786         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
1787         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
1788
1789 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1790
1791         A fix for bug #82039
1792
1793         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
1794         available.
1795
1796         * typemanager.cs (CSharpName): Split to string overload.
1797
1798 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1799
1800         * expression.cs,
1801         * report.cs: Updated warning CS0472.
1802
1803 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1804
1805         A fix for bug #82181
1806         * cs-parser.jay,
1807         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
1808
1809 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1810
1811         A fix for bug #82277
1812         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
1813
1814 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1815
1816         ** C# 3.0 Type Inference (major bits are working)
1817         
1818         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
1819         (.ImplicitStandardConversionExists): Uses compatible.
1820         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
1821         (.InferReturnType): New method.
1822         (.Compatible): Refactored.
1823         (.ResolveParameters): Uses factory to create resolved parameters.
1824         (.CompatibleMethod): Add probing mode support.
1825         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
1826         clearly distinguish between 2 different operations.
1827         (LambdaMethod): Moved to lambda.cs.
1828         (AnonymousMethod): Removed unused fields and methods.
1829         (AnonymousDelegate): Simplified.
1830         
1831         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
1832         
1833         * convert. cs (ImplicitConversionStandard): Compatible works differently.
1834         
1835         * delegate.cs (Delegate): New mehods to reduce code duplication.
1836         (.GetConstructor): New method.
1837         (.GetInvokeMethod): New method.
1838         (DelegateCreation): Updated.
1839         
1840         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
1841         does not exist.
1842         (OverloadResolve): Made probing little bit faster.
1843         
1844         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
1845         when probing is on.
1846         
1847         * generic.cs (TypeInferenceContext): Dummy implementation.
1848         
1849         * iterators.cs: Updated after Resolve/Define rename.
1850         
1851         * lambda.cs (LambdaExpression)
1852         (.ResolveParameters): Handles both type of arguments and type inference too.
1853         
1854         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
1855         (InflateTypes): Updated.
1856         
1857         * support.cs (InflateTypes): Changed signature and updated.
1858         
1859         * typemanager.cs (LookupMemberCache): Better dynamic type check.
1860         (MemberLookup_FindMembers): More MS tricks.
1861         (GetParameterData): Ditto.
1862         (GetDelegateParameters): Uses quick path for dynamic types.
1863         
1864 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1865
1866         * class.cs (MethodData.Define): EmitContext is required for generic stuff
1867         only.
1868
1869 2007-07-31  Marek Safar  <marek.safar@gmail.com>
1870
1871         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
1872         syntax.
1873         
1874 2007-07-26  Jb Evain  <jbevain@novell.com>
1875
1876         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
1877         which takes a boolean 'report_errors', similar to the GetMethod.
1878         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
1879         in .net 2.1, do not report errors here.
1880
1881         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
1882         System.Runtime.CompilerServices.RequiredAttributeAttribute and
1883         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
1884         in .net 2.1.
1885
1886         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
1887         of the type InternalsVisibleToAttribute before the first call
1888         to CoreLookupType which is allowed to fail (third boolean parameter
1889         to true). Because, during the resolution for a type that is not
1890         immediately found, we try to check if the type is not defined in
1891         a friend assembly, and to do so, we need the
1892         InternalVisibleToAttribute.
1893
1894 2007-07-23  Miguel de Icaza  <miguel@novell.com>
1895
1896         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
1897         feature that allows structs to be compared against null and inline
1898         the result as true or false.
1899
1900         Notice that the same code is not permitted inside a generic block
1901         of code that would do:
1902
1903         class Foo<T> where T : struct {
1904             bool Eval (T x)
1905             {
1906                  return x == null;
1907             }
1908         }
1909
1910         It is only allowed if the type of T is not bound (no where
1911         clause).   In my opinion, this CSC 2 behavior is broken but people
1912         seem to be using it (IronRuby does, a few bug reports on bugzilla
1913         have it and some people have complained about it).
1914
1915         All of the users that depend on this behavior have code that is
1916         very likely broken. 
1917         
1918         * report.cs (Warning, Error): make these take object arguments,
1919         not strings, as that allows us to take advantage of Format.
1920
1921 2007-07-20  William Holmes  <billholmes54@gmail.com>
1922
1923         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
1924           Left member variable for the Count.
1925         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
1926           MemberName.CountTypeArguments to avoid a NRE. 
1927
1928         This code is contributed under the MIT X11 license
1929
1930 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1931
1932         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
1933
1934 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1935
1936         * doc.cs : generic method arguments are written as ``x while generic
1937           type arguments are `x. Combined with the previous change, fixed bug
1938           #79706.
1939
1940 2007-07-18  Raja R Harinath  <rharinath@novell.com>
1941
1942         Fix #82120
1943         * expression.cs (Binary.ResolveOperator): When converting
1944         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
1945
1946 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1947
1948         * doc.cs : when T: or whatever x: is specified, it does not really
1949           check the doc comment's syntax correctness. Fixed bug #82006.
1950
1951 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1952
1953         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
1954         LambdaExpression better.
1955         
1956         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
1957         
1958         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
1959         
1960         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
1961         as it can be generated.
1962         
1963         * expression.cs (Invocation.Error_InvalidArguments): Show correct
1964         modifiers.
1965         
1966         * lambda.cs (LambdaExpression): Refactored to share same code with
1967         AnonymousMethodExpression.
1968         
1969 2007-07-17  Marek Safar  <marek.safar@gmail.com>
1970
1971         * anonymous.cs (MakeName): Include host name for easier debugging.
1972         (LambdaMethod): New class for lambda spcecific stuff.
1973         
1974         * attribute.cs: Set EmitContext return type.
1975
1976         * class.cs: Set EmitContext return type.
1977         
1978         * codegen.cs (EmitContext): Return type cannot be null to stop messing
1979         with null/void meaning.
1980         
1981         * iterators.cs (ContainerType): Implemented.
1982         
1983         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
1984         
1985         * statement.cs (Return): Updated to lambda expressions.
1986         (Block.CloneTo): Parent can be null.
1987                 
1988 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1989
1990         A fix for bug #81917
1991         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
1992         
1993         * class.cs (FixedField): Check whether field is in unsafe scope.
1994
1995         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
1996         (FieldExpr.Emit): Fixed buffers cannot be volatile.
1997
1998         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
1999         FieldExpr.
2000         
2001         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
2002                 
2003 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2004
2005         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
2006         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
2007         from Report class.
2008
2009 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2010
2011         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
2012         
2013 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2014
2015         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
2016         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
2017         
2018         * codegen.cs(EmitContext): Add ProbingMode flag.
2019         
2020         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
2021         
2022         * driver.cs: For now set both warning values.
2023         
2024         * ecore.cs (SimpleName): Name is readonly.
2025         (MethodGroup.OverloadResolve): One quick path for probing.
2026         
2027         * expression.cs (Unary): Set Oper r/o.
2028         (Binary): Set Oper r/o.
2029         (ParameterReference): Set few instance variables as r/o.
2030         (ParameterReference.DoResolveBase): Don't capture aruments when 
2031         the probing is on.
2032         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
2033         (Arglist): arguments are private.
2034         (SizeOf): type is private and r/o.
2035         (MemberAccess): arguments are private.
2036
2037         * report.cs: Enhanced reporting on/off capabilities.
2038         
2039         * lambda.cs: Uses ec.IsInProbingMode.
2040         (ContextualReturn): Derives from return.
2041         
2042         * rootcontext.cs: For now set both warning values.
2043         
2044         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
2045         copy if one exists.
2046         (Return.Resolve): Don't die immediately.
2047         (Block.Resolve): Speed-up probing.
2048         (Block.CloneTo): Clone only child blocks.
2049
2050 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
2051
2052         * iterators.cs: reverted Miguel's latest change (r81925) as it
2053         breaks the build in System.
2054
2055 2007-07-13  Miguel de Icaza  <miguel@novell.com>
2056
2057         * iterators.cs (Yield.CheckContext): Check for the iterator type
2058         also here as we can call into Yield even in codepaths that are not
2059         directly checked by
2060         (MethodOrOperator is the only path that was checked).
2061
2062         In addition to the standard check, use a more specific check for
2063         constructors to report a more verbose error. 
2064
2065 2007-07-12  Miguel de Icaza  <miguel@novell.com>
2066
2067         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
2068         report the warning and continue 
2069
2070         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
2071         values on the stack on the call to Emit.   Use EmitStatement if
2072         possible, or using Emit + Pop if not possible.   Fixes #82064
2073
2074 2007-07-12  Raja R Harinath  <rharinath@novell.com>
2075
2076         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
2077         avoid try...finally in some cases.
2078
2079 2007-07-10  Marek Safar  <marek.safar@gmail.com>
2080
2081         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
2082         
2083         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
2084         instead of method. Re-use standard error handling.
2085         (ConstructorInitializer.Emit): Simplified.
2086         
2087         * delegate.cs: Updated after Invocation.EmitCall change.
2088         
2089         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
2090         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
2091         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
2092         method and don't permanently changing input arguments.
2093         (MethodGroupExpr): Introduced resolved best_candidate, when method group
2094         is resolved it has one of the candidates is the best one which is later
2095         used to emit. Removed a few unused method.
2096         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
2097
2098         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
2099         (Binary.ResolveOperator): Ditto.
2100         (ConditionalLogicalOperator.DoResolve): Ditto.
2101         (Invocation): Uses method group.
2102         (Invocation.DoResolve): Simplified.
2103         (Invocation.EmitCall): Removed useless is_static.
2104         (Invocation.Emit): Delegate to method group.
2105         (Invocation.EmitStatement): Simplified.
2106         (New): Uses method group.
2107         (MemberAccess.DoResolve): Don't destroy original expression.
2108         
2109         * statement.cs (ForEach.Resolve): Use null for no method arguments.
2110         
2111 2007-07-04  Marek Safar  <marek.safar@gmail.com>
2112
2113         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
2114         
2115         * anonymous.cs,
2116         * lambda.cs: Add custom error message type.
2117
2118 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2119
2120         * lambda.cs: Simplified little bit.
2121         
2122         * parameter.cs: Introduced ImplicitLambdaParameter.
2123         (Parameters.CreateFullyResolved): New factory instead of ctor.
2124         
2125         * anonymous.cs,
2126         * class.cs,
2127         * delegate.cs: Updated parameter creation.
2128         
2129 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2130
2131         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
2132         arguments.
2133         
2134         * generic.cs: Synchronized with gmcs.
2135         
2136 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2137
2138         * class.cs (Indexer): Check return type as soon as possible.
2139         
2140         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
2141         members too.
2142         
2143         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
2144         
2145         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
2146         
2147         * parameter.cs (Parameter): Use expression type when it is available.
2148         
2149         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
2150         method modifier for the first parameter only.
2151
2152 2007-06-24  Marek Safar  <marek.safar@gmail.com>
2153
2154         A fix for bug #81938
2155         * typemanager.cs (ChangeType): Fixed couple of char conversions.
2156         
2157         * constant.cs: Tide up an exception message.
2158
2159 2007-06-22  Marek Safar  <marek.safar@gmail.com>
2160
2161         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
2162         an uninitialized variable is used.
2163         
2164         * expression.cs (LocalVariableReference.DoResolve): Ditto.
2165
2166 2007-06-22  Marek Safar  <marek.safar@gmail.com>
2167
2168         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
2169         not found error handling.
2170
2171         * expression.cs (ArrayCreation): Removed redundant fields and little bit
2172         simplified.
2173         (ArrayCreation.ResolveArrayElement): To be ready to customization.
2174         (ArrayCreation.DoResolve): Simplified.
2175         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
2176         its own resolve process.
2177         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
2178
2179 2007-06-20  Marek Safar  <marek.safar@gmail.com>
2180
2181         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
2182         more error details.
2183         
2184 2007-06-20  Marek Safar  <marek.safar@gmail.com>
2185
2186         * cs-tokenizer.cs: Removed var related stuff.
2187         
2188         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
2189         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
2190         a type and a keyword at same time.
2191         
2192         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
2193         matches to "var".
2194         
2195         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
2196         implicitly typed arrays, more changes will follow.
2197         
2198         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
2199         
2200 2007-06-19  Marek Safar  <marek.safar@gmail.com>
2201
2202         * ecore.cs (VarExpr): Removed Handled field.
2203         
2204         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
2205         build-in assign functionality.
2206         (ForEach.Resolve): Removed all implicitly typed local variable code and
2207         simplified.
2208         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
2209         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
2210
2211 2007-06-18  Marek Safar  <marek.safar@gmail.com>
2212
2213         * assign.cs: Removed implicitly typed local variable check.
2214         
2215         * expression.cs (LocalVariableReference.DoResolve): Add check for self
2216         referencing implicitly typed local variable.
2217         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
2218         variable here.
2219         
2220         * statement.cs (Fixed): Removed unsupported implicitly typed local
2221         variable code.
2222
2223 2007-06-15  Marek Safar  <marek.safar@gmail.com>
2224
2225         * decl.cs (MemberName): Moved all Unbound stuff to parser.
2226
2227 2007-06-14  Marek Safar  <marek.safar@gmail.com>
2228
2229         A fix for bugs #81855 and #76274
2230         * attribute.cs (AttachTo): Always set owner for global attributes to
2231         prefined owner.
2232         
2233         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
2234         usefull too.
2235         
2236         * cs-parser.jay: Assembly and module attributes must precede all other
2237         elements except using clauses and extern alias declarations.
2238
2239 2007-06-13  Marek Safar  <marek.safar@gmail.com>
2240
2241         A fix for bug #81748
2242         * cs-tokenizer.cs,
2243         * expression.cs: More checks for non ISO-1 features.
2244
2245 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2246
2247         A fix for bug #81807
2248         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
2249         present inside switch statement and it is required by nullable check.
2250
2251 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2252
2253         A fix for bug #81840
2254         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
2255         when type matching fails.
2256         
2257         * namespace.cs: Tiny error message change.
2258
2259 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2260
2261         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
2262         reporting. Added automatic property check.
2263         
2264         * class.cs: Updated after CheckAbstractAndExtern relocation.
2265         (AEventPropertyAccessor.GetSignatureForError): Customized.
2266         
2267 2007-06-11  Marek Safar  <marek.safar@gmail.com>
2268
2269         * class.cs (DefineBaseTypes): Base type can be undefined.
2270         
2271         * ecore.cs (TypeLookup): Minor refactoring.
2272         (DoResolveAsTypeStep): Removed redundant check.
2273
2274         * namespace.cs (Lookup): Removed redundant check.
2275                 
2276         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
2277         ResolveAsTypeTerminal step.
2278         (BootstrapCorlib_*): Simplified.
2279         (PopulateCoreType): Core types can be now external.
2280
2281 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2282
2283         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
2284          verification only.
2285          (InferTypeArguments): Infers anonymous expression type arguments.
2286          (Compatible): Split to Compatible and InferTypeArguments. 
2287         
2288         * lambda.cs: Updated.
2289
2290 2007-06-08  Marek Safar  <marek.safar@gmail.com>
2291
2292         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
2293
2294 2007-06-07  Raja R Harinath  <harinath@gmail.com>
2295
2296         Fix #80477, cs0135-2.cs, cs0135-3.cs
2297         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
2298         names to the "known" variables list.
2299         (Block.CheckInvariantMeaningInBlock): Handle the fact the
2300         parameter names are also "known".
2301         (Block.CheckError136): Remove.
2302         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
2303         null.
2304
2305 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2306
2307         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
2308
2309 2007-06-06  Marek Safar  <marek.safar@gmail.com>
2310
2311         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
2312         internal error not an user error.
2313          
2314         * expression.cs (IsApplicable): Refactored to make debugging easier.
2315
2316         * support.cs: More tricks for non-mono runtimes.
2317         
2318         * typemanager.cs (CoreLookupType): Made public.
2319         (InitSystemCore): All linq specific stuff moved to linq.cs
2320
2321 2007-06-05  Marek Safar  <marek.safar@gmail.com>
2322
2323         * typemanager.cs (CSharpSignature): One more missing build-in types
2324         replacement.
2325         More tricks for non-mono runtime.
2326
2327 2007-06-05  Raja R Harinath  <harinath@gmail.com>
2328
2329         * statement.cs (Block.CheckError136_InParents): Remove.
2330         (Block.AddVariable): Use GetParameterInfo instead.
2331         (ToplevelBlock.ProcessArguments): Likewise.
2332
2333 2007-06-04  Raja R Harinath  <rharinath@novell.com>
2334
2335         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
2336         information too.
2337         (ToplevelBlock.GetParameterInfo): Split out of ...
2338         (ToplevelBlock.GetParameterRefernce): ... this.
2339         (ToplevelBlock.ParameterMap): Remove.
2340         * expression.cs (ParameterReference): Update to use
2341         ToplevelParameterInfo.
2342
2343         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
2344         regression.
2345
2346         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
2347         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
2348
2349         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
2350         (ToplevelBlock.ProcessParameters) ... here.
2351         (ToplevelBlock..ctor): Invoke it.
2352
2353         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
2354         new parameters.
2355
2356         * statement.cs (IKnownVariable): New interface.
2357         (LocalInfo): Implement it.
2358         (ToplevelParameterInfo): New class.
2359         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
2360         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
2361         GetKnownVariableInfo.
2362
2363 2007-06-03  Raja R Harinath  <harinath@gmail.com>
2364
2365         Partly speed up CS0136 error checks.
2366         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
2367         'recurse' parameter.
2368         (Block.DoCheckError136): Only check errors in parameters.  Move
2369         local variable checks ...
2370         (Block.AddVariable): ... here, and ...
2371         (ToplevelBlock.ResolveMeta): ... here.
2372
2373 2007-06-02  Raja R Harinath  <harinath@gmail.com>
2374
2375         * statement.cs (Block.IsChildOf): Remove.
2376
2377         * statement.cs (Statement.Clone): Move special case code ...
2378         (Block.CloneTo): ... here.
2379
2380 2007-05-29  Raja R Harinath  <rharinath@novell.com>
2381
2382         * statement.cs (ToplevelBlock.container): Remove field.  It's
2383         redundant with 'Parent'.
2384         (ToplevelBlock.ContainerBlock): Remove accessor.
2385         (ToplevelBlock..ctor): Update to changes.  Register anonymous
2386         child with parent here, ...
2387         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
2388         current_block.
2389         (start_anonymous): Don't save current_block.
2390         (top_current_block): Remove.
2391
2392         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
2393         (Block.Resolve): Update to changes.
2394         (Block..ctor): Move setting of "correct" 'Toplevel'
2395         and 'Explicit' fields to ...
2396         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
2397
2398 2007-05-27  Raja R Harinath  <harinath@gmail.com>
2399
2400         Kill Block.Implicit
2401         * statement.cs (Block.Implicit): Remove.
2402         (Block): Update to changes.
2403         * flowanalysis.cs: Likewise.
2404
2405         Mildly speed up CheckInvariantMeaningInBlock
2406         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
2407         Recursively call AddKnownVariable to all enclosing blocks.
2408         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
2409         Remove recursive calls.
2410         (Block): Update to changes.
2411
2412         New ExplicitBlock invariants
2413         * statement.cs (Block.Explicit): New field.  It points to the
2414         immediately enclosing non-implicit block.
2415         (Block..ctor): Maintain the invariant.
2416         * cs-parser.jay: Take advantage of invariant.
2417
2418         Introduce ExplicitBlock
2419         * statement.cs (ExplicitBlock): New.
2420         (ToplevelBlock): Derive from it.
2421         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
2422         sense of flag.
2423         (Block.Implicit): Update to changes.
2424         * cs-parser.jay: Update to changes.
2425
2426         Remove unused field
2427         * codegen.cs (EmitContext.IsLastStatement): Remove.
2428         * statement.cs (Block.DoEmit): Update to changes.
2429
2430 2007-05-25  Raja R Harinath  <rharinath@novell.com>
2431
2432         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
2433         modifying current_block directly.
2434
2435 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
2436         
2437         * class.cs: Implemented automatic properties (C# 3.0)
2438           Thanks to Marek for the help.
2439
2440 2007-05-23  Raja R Harinath  <rharinath@novell.com>
2441
2442         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
2443         variable as assigned, note also that all its components are
2444         assigned too.
2445         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
2446
2447 2007-05-19  Marek Safar  <marek.safar@gmail.com>
2448
2449         * anonymous.cs, class.cs: Emit Compiler generated attribute when
2450         member is marked as compiler generated.
2451         
2452         * decl.cs (MemberCore): Refactored ModFlags into property.
2453
2454         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
2455         (Check): Check only accessibility modifiers.
2456
2457 2007-05-18  Raja R Harinath  <rharinath@novell.com>
2458
2459         Track all assignable slots in one bit array
2460         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
2461         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
2462         logic from VariableMap constructor here.  Use the same 'offset'
2463         variable that's later used for computing offsets of local
2464         variables.
2465         * flowanalysis.cs (UsageVector.parameters): Remove.
2466         (UsageVector): Update to changes.
2467         (VariableMap): Remove.
2468
2469         Avoid creating ParameterMap in every block
2470         * statement.cs (Block.ParameterMap): Move ...
2471         (ToplevelBlock.ParameterMap): ... here.
2472         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
2473         only once.
2474         * flowanalysis.cs (FlowBranching.param_map): Remove.
2475         (FlowBranching.UsageVector): Update to changes.
2476         (FlowBranchingToplevel.CheckOutParameters): Likewise.
2477
2478         * statement.cs (Block.CloneTo): Clone Toplevel field too.
2479
2480         * expression.cs (ParameterReference): Distinguish between block
2481         where parameter was referenced and declared.
2482
2483 2007-05-18  Marek Safar  <marek.safar@gmail.com>
2484
2485         * flowanalysis.cs, statement.cs: Put back improved error handling.
2486
2487 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
2488         
2489         * assign.cs:
2490         * expression.cs:
2491           Imporved object and collection initialization (C# 3.0).
2492
2493 2007-05-15  Marek Safar  <marek.safar@gmail.com>
2494
2495         A fix for bug #81380
2496         * expression.cs (Is.DoResolve): Only value types have constant `is'
2497         behaviour.
2498
2499 2007-05-15  Raja R Harinath  <rharinath@novell.com>
2500
2501         * statement.cs (ToplevelBlock.child): Remove.
2502
2503 2007-05-15  Raja R Harinath  <harinath@gmail.com>
2504
2505         Rationalize ResolveMeta: refactoring
2506         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
2507         out constant handling code into ...
2508         (Block.DoResolveConstants): ... this.
2509
2510         Rationalize ResolveMeta: kill local_map
2511         * statement.cs (Block.local_map, Block.LocalMap): Remove.
2512         (Block.AssignableSlots): New.
2513         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
2514         for locals -- move code from VariableMap here.  Avoid unnecessary
2515         allocations.
2516         * flowanalysis.cs (FlowBranching.local_map): Remove.
2517         (FlowBranching..ctor): Use Block.AssignableSlots.
2518         (VariableMap): Remove unused constructors.
2519
2520 2007-05-11  Raja R Harinath  <rharinath@novell.com>
2521
2522         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
2523
2524 2007-05-11  Marek Safar  <marek.safar@gmail.com>
2525
2526         * typemanager.cs (IsFriendAssembly): Should not be called for building
2527         assembly.
2528
2529 2007-05-09  Marek Safar  <marek.safar@gmail.com>
2530
2531         * literal.cs (NullConstant): Print null in all cases.
2532         
2533         * expression.cs (Binary.ResolveOperator): Implemented delegate
2534          comparison based on C# 2.0 changes.
2535
2536 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
2537
2538         This code is contributed under the MIT X11 license
2539         
2540         The following enables support for several C# 3.0 language features:
2541         
2542         * cs-tokenizer.cs: Added support for the "var" keyword.
2543         
2544         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
2545           Added VarExpr class to facilitate type inferencing.
2546         
2547         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
2548           to support anonymous types.
2549         
2550         * assign.cs: Added support for type inferencing and initialization.
2551         
2552         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
2553         
2554         * expression.cs: Added implicit array support to ArrayCreation.
2555           Added 5 types and 1 interface:
2556           
2557           IInitializable                Implementing classes can inject initializing
2558                                         statements after object instantiation.
2559           
2560           Initializer                   Stores data for object initialization.
2561           
2562           AnonymousType                 An expression for anonymous types.
2563           
2564           AnonymousTypeParameter        Stores data about an anonymous type's field.
2565           
2566           NewInitialize                 An expression for object initialization.
2567           
2568           CollectionInitialize          An expression for collection initialization.
2569         
2570         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
2571           statements.
2572
2573 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2574
2575         A fix for bug #81500
2576         * cs-tokenizer.cs: Add special handling for coalescing operator.
2577
2578 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2579
2580         A fix for bug #81529
2581         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
2582         its value from base class until it is redefined.
2583
2584 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2585
2586         Fix regression in cs0631-3.cs
2587         * cs-parser.jay (operator_declarator): Add opt_attributes to error
2588         fallback.  Make error fallback catch more cases.
2589
2590 2007-05-01  Miguel de Icaza  <miguel@novell.com>
2591
2592         * cs-parser.jay: Allow parameters in operator declarations to have
2593         attributes. 
2594
2595 2007-04-27  Miguel de Icaza  <miguel@novell.com>
2596
2597         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
2598         exists. 
2599
2600         * lambda.cs (ContextualReturn.Resolve): An expression is valid
2601         inside the ContextualReturn, it does not have to be an
2602         ExpressionStatement. 
2603
2604 2007-04-24  Miguel de Icaza  <miguel@novell.com>
2605
2606         * lambda.cs (ContextualReturn.Resolve): if the return type is not
2607         set, set it.
2608
2609 2007-04-23  Miguel de Icaza  <miguel@novell.com>
2610
2611         * anonymous.cs (AnonymousContainer): split the virtual Resolve
2612         method in two methods: ResolveNoDefine and Resolve.
2613
2614         ResolveNoDefine will stop just after ResolveTopBlock has been
2615         called.   
2616
2617         Resolve will then continue by creating a method and issuing the
2618         call to method.Define ().
2619
2620         (AnonymousMethod): Split and implement the new Resolve and
2621         ResolveNoDefine as well.
2622
2623         * lambda.cs (LambdaExpression): Split the anonymous method
2624         resolution code into a separate routine (CoreCompatibilityTest)
2625         from DoCompatibleTest.
2626
2627         (LambdaExpression.TryBuild): New method, this method tries to
2628         build the LambdaExpression with the given set of types to be used
2629         as the types for the various parameters of the lambda expression. 
2630
2631         If the compilation succeed with the given types, the infered type
2632         of the Anonymous method is returned, otherwise null is returned.
2633
2634 2007-04-23  Marek Safar  <marek.safar@gmail.com>
2635
2636         A fix for bug #81414
2637         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
2638
2639 2007-04-22  Miguel de Icaza  <miguel@novell.com>
2640
2641         * cs-tokenizer.cs: Change various identifiers here from the
2642         camelCasing to the recommended Linux-like style for instance
2643         variables from the Coding Guidelines. 
2644
2645 2007-04-19  Martin Baulig  <martin@ximian.com>
2646
2647         * convert.cs
2648         (Convert.ImplicitReferenceConversionCore): Allow conversions from
2649         System.Enum to System.ValueType.
2650
2651 2007-04-13  Martin Baulig  <martin@ximian.com>
2652
2653         Rewrote implicit reference conversions.  We need to distinguish
2654         between implicit reference conversions (13.1.4) and implicit
2655         boxing conversions (13.1.5).
2656
2657         According to the spec, there's an an implicit conversion
2658         "From a one-dimensional array-type S[] to IList<T> and base
2659         interfaces of this interface, provided there is an implicit
2660         reference conversion from S to T."  Note that this does not
2661         include boxing conversions.
2662
2663         * convert.cs
2664         (Convert.ImplicitTypeParameterBoxingConversion): New method.
2665         (Convert.ImplicitReferenceConversion): Split into
2666         ImplicitReferenceConversionCore() and
2667         ImplicitBoxingConversionExist().
2668         (Convert.ImplicitReferenceConversionExists): Use the new
2669         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
2670
2671 2007-04-12  Martin Baulig  <martin@ximian.com>
2672
2673         * convert.cs (Convert.ImplicitReferenceConversion): Move the
2674         `TypeManager.null_type' checks up to the top of the method.
2675
2676 2007-04-11  Marek Safar  <marek.safar@gmail.com>
2677
2678         A fix for bug #81350
2679         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
2680         extension methods.
2681
2682 2007-04-11  Martin Baulig  <martin@ximian.com>
2683
2684         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
2685         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
2686         to make this work for generic classes; fixes #79561.
2687
2688 2007-04-11  Martin Baulig  <martin@ximian.com>
2689
2690         * expression.cs (As): Add support for nullable types; fixes #79371.
2691
2692 2007-04-11  Martin Baulig  <martin@ximian.com>
2693
2694         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
2695         `type.FullName' is null; fixes #80243.
2696
2697 2007-04-11  Martin Baulig  <martin@ximian.com>
2698
2699         * expression.cs (Invocation.IsApplicable): Don't modify the method
2700         if type inference succeeded, but the method was not applicable.
2701         Fixes #81250.
2702
2703 2007-04-10  Marek Safar  <marek.safar@gmail.com>
2704
2705         A fix for bug #81324
2706         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
2707         internal and external namespaces containers.
2708
2709 2007-04-10  Martin Baulig  <martin@ximian.com>
2710
2711         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
2712         TypeManager.DropGenericMethodArguments() so we also call
2713         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
2714
2715 2007-04-10  Martin Baulig  <martin@ximian.com>
2716
2717         * iterators.cs (Iterator.CreateIterator): Don't crash if
2718         `method.ReturnType' is null.  This happens if something went wrong
2719         while resolving that typ (we already reported an error in this case).
2720
2721 2007-04-10  Martin Baulig  <martin@ximian.com>
2722
2723         * expression.cs (New.DoResolve): Don't call CheckComImport() on
2724         generic interfaces; report the CS0144 directly.
2725
2726 2007-04-10  Martin Baulig  <martin@ximian.com>
2727
2728         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
2729         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
2730
2731 2007-04-10  Martin Baulig  <martin@ximian.com>
2732
2733         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
2734
2735 2007-04-09  Raja R Harinath  <rharinath@novell.com>
2736
2737         A better fix
2738         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
2739         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
2740
2741         Fix #81338
2742         * statement.cs (For.Resolve): If resolution fails, use
2743         KillFlowBranching.
2744
2745 2007-04-08  Marek Safar  <marek.safar@gmail.com>
2746
2747         * anonymous.cs (MakeName): Make faster and zero-based.
2748         (VerifyExplicitParameterCompatibility): Back to mode where generic
2749         parameter is ignored.
2750         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
2751
2752         * class.cs (EmitType): Method can emit another new method.
2753
2754         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
2755
2756         * driver.cs: Updated.
2757
2758         * lambda.cs: Reuse predefined empty parameters.
2759
2760         * parameter.cs: Updated
2761
2762         * support.cs: Implemented InflateTypes.
2763
2764         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
2765         (InitSystemCore): Introduced to isolate 3.0 dependencies.
2766
2767 2007-04-03  Martin Baulig  <martin@ximian.com>
2768
2769         Fix #80632.
2770
2771         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
2772         version of TypeManager.IsOverride() which also works with generic
2773         types.  
2774
2775 2007-04-03  Martin Baulig  <martin@ximian.com>
2776
2777         Fix #81044.
2778
2779         * convert.cs
2780         (Convert.ExplicitReferenceConversion): We need to cast when
2781         converting from IList<T> to S[].
2782
2783 2007-04-01  Marek Safar  <marek.safar@gmail.com>
2784
2785         * decl.cs (FindExtensionMethods): Consider all candidates with same name
2786         at this level.
2787         
2788         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
2789
2790 2007-03-31  Marek Safar  <marek.safar@gmail.com>
2791
2792         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
2793         argument and return type inferring.
2794
2795         * codegen.cs (InferReturnType): Flag whether return can be inferred.
2796         (ReturnType): Turned to property.
2797
2798         * statement.cs (Return): Implemented return type inferring.
2799
2800         * support.cs (ReflectionParameters): Use local types if possible.
2801
2802 2007-03-30  Raja R Harinath  <rharinath@novell.com>
2803
2804         * flowanalysis.cs (FlowBranching.Reachability): Remove.
2805         (FlowBranching.UsageVector): Update to changes.
2806
2807         Prepare to kill 'Reachability'
2808         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
2809         argument of constructor.
2810
2811 2007-03-29  Raja R Harinath  <rharinath@novell.com>
2812
2813         Prepare to kill 'Reachability'
2814         * flowanalysis.cs (UsageVector.is_unreachable): New.
2815         (UsageVector): Update to maintain 'is_unreachable' in parallel to
2816         'reachability', and verify they're consistent.
2817
2818         Fix #81121
2819         * expression.cs (New.EmitStatement): Handle type parameters here too.
2820
2821 2007-03-29  Martin Baulig  <martin@ximian.com>
2822
2823         Fix #79148.
2824
2825         * anonymous.cs
2826         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
2827         CompilerGeneratedClass.
2828         (ScopeInfo.EmitScopeInstance): Make this protected.
2829         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
2830         `ec.CurrentAnonymousMethod.Scope == Scope'.
2831
2832         * statement.cs (Block.ScopeInfo): Make this a property.
2833
2834 2007-03-27  Raja R Harinath  <harinath@gmail.com>
2835
2836         Prepare to kill 'Reachability'
2837         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
2838         (FlowBranching.UsageVector.Reachability): Remove property.
2839         (FlowBranching.UsageVector.IsUnreachable): New property.
2840         (FlowBranching.UsageVector.ResetBarrier): New.
2841         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
2842         * codegen.cs, statement.cs: Update to changes.
2843
2844 2007-03-27  Martin Baulig  <martin@ximian.com>
2845
2846         Fix #81209.
2847
2848         * decl.cs
2849         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
2850         generic types.
2851
2852 2007-03-26  Raja R Harinath  <rharinath@novell.com>
2853
2854         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
2855         instead of TriState.  Remove all mention of TriState.
2856
2857         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
2858         replaced by a boolean.  Add boolean 'is_unreachable' field, check
2859         and maintain invariants.
2860
2861 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2862
2863         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
2864
2865 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2866
2867         * expression.cs: Stop using obsolete 2.0 opcodes.
2868
2869 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2870
2871         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
2872         one of the latests Martin's fixes.
2873
2874 2007-03-23  Miguel de Icaza  <miguel@novell.com>
2875
2876         * expression.cs: On BigEndian systems, swap the bytes, temporary
2877         solution until we get a new bitconverter class.
2878
2879 2007-03-23  Martin Baulig  <martin@ximian.com>
2880
2881         Fix #81158.
2882
2883         * decl.cs (MemberCache.AddMembers): Add generic methods both as
2884         "Method" and "Method`1".  Normally, a cache lookup is done on the
2885         "Method" form (ie. without the generic arity), but this one makes
2886         lookups on the full form work as well.
2887
2888 2007-03-22  Raja R Harinath  <rharinath@novell.com>
2889
2890         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
2891         unused properties.
2892
2893 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
2894         * class.cs: 
2895         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
2896         ordered_member_list, to TypeBuilder to store members to be defined
2897         in the order they were parsed in.
2898         - ordered_explicit_member_list contains all properties indexers
2899           and methods that are defined as explicit implementation of an
2900           interface or base class.
2901         - ordered_member_list contains all properties indexers and methods
2902           that are not defined as explicit implementation of an interface
2903           or base class.
2904
2905         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
2906         functionality in these removed classes has been replaced with 
2907         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
2908         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
2909
2910         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
2911         to CheckForDuplications inside GetMethod and SetMethod Define Method
2912         to handle method property and indexer name conflicts.
2913
2914         Fixes #79434
2915
2916         All code is contributed under the MIT/X11 license.
2917
2918 2007-03-20  Martin Baulig  <martin@ximian.com>
2919
2920         * class.cs (TypeContainer.Interfaces): Removed; they're now
2921         included in `TypeContainer.Types'.
2922
2923 2007-03-20  Martin Baulig  <martin@ximian.com>
2924
2925         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
2926
2927         * class.cs (TypeContainer.CreateType): New public method.  This is
2928         now called before DefineType() to create the TypeBuilders.
2929         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
2930         has already been created by CreateType().
2931         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
2932         don't resolve our base classes here; this has been moved into
2933         DefineBaseTypes().  We're now called from CreateType().
2934         (TypeContainer.DefineBaseTypes): New private method; resolve our
2935         base classes here.  We're now called from DefineType().
2936
2937         * rootcontext.cs
2938         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
2939         our types first to create all the TypeBuilders.  After that, call
2940         TypeContainer.DefineType() on all the types which'll resolve their
2941         base classes and setup the resolve order.
2942
2943 2007-03-20  Martin Baulig  <martin@ximian.com>
2944
2945         * class.cs (TypeContainer.Enums): Removed; they're now included in
2946         `TypeContainer.Types'.  
2947
2948 2007-03-20  Martin Baulig  <martin@ximian.com>
2949
2950         * class.cs
2951         (TypeContainer.DefineType): Don't call ResolveMembers() here.
2952         (TypeContainer.DoResolveMembers): Call DefineType() on our
2953         `compiler_generated' classes; moved here from DefineNestedTypes().
2954
2955         * rootcontext.cs
2956         (RootContext.ResolveTree): Call ResolveMembers() on all
2957         TypeContainer's in the `type_container_resolve_order'.
2958
2959 2007-03-19  Marek Safar  <marek.safar@gmail.com>
2960
2961         * class.cs: Use corlib to handle InternalMethodImplAttribute.
2962
2963 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2964
2965         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
2966         implementation flags.
2967
2968 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2969
2970         * class.cs: More optimizations for type parameters.
2971
2972 2007-03-15  Marek Safar  <marek.safar@gmail.com>
2973
2974         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
2975
2976         * ecore.cs, parameter.cs: More common code for both corlibs.
2977
2978         * typemanager.cs (IsGenericMethod): Simplified.
2979
2980 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2981
2982         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2983         'returns'.
2984         * statement.cs, iterators.cs, lambda.cs: Update to changes.
2985
2986         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
2987         unconditionally.  Simplify explanation.
2988         (Try.Resolve, Using.Resolve): Likewise.
2989
2990 2007-03-15  Martin Baulig  <martin@ximian.com>
2991
2992         Fix #80731.
2993
2994         * decl.cs (DeclSpace): If we're a partial class, use our
2995         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
2996
2997 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2998
2999         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
3000         'throws'.
3001         (FlowBranching.UsageVector): Update to changes.
3002         (FlowBranching.MergeSiblings): Likewise.
3003         * statement.cs: Likewise.
3004
3005 2007-03-15  Martin Baulig  <martin@ximian.com>
3006
3007         Fix #79302.
3008
3009         * decl.cs
3010         (MemberCache): Added a special .ctor for type parameters.
3011
3012         * typemanager.cs
3013         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
3014         `MemberCache'.  
3015
3016 2007-03-09  Martin Baulig  <martin@ximian.com>
3017
3018         * enum.cs (Enum): Make this a TypeContainer.
3019         (EnumMember): Derive from `Const'.
3020
3021         * const.cs
3022         (Const.DoResolveValue): New protected virtual method; move most of
3023         the functionality of ResolveValue() here so we can override it in
3024         `EnumMember'.
3025         (Const.CreateConstantReference): Make this virtual.
3026
3027         * class.cs (Kind): Add `Kind.Enum'.
3028         (TypeContainer.Emit): Don't emit the enums here; they're already
3029         in the `RootContext.typecontainer_resolve_order'.
3030
3031         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
3032         here; they're already in the `typecontainer_resolve_order'.
3033
3034         * ecore.cs (EnumConstant.ConvertImplicitly): Add
3035         TypeManager.DropGenericTypeArguments().
3036
3037         * typemanager.cs
3038         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
3039         (TypeManager.IsEnumType): Likewise.
3040         (TypeManager.EnumToUnderlying): Likewise.
3041         (TypeManager.IsEqual): Add support for enums.
3042
3043 2007-03-12  Raja R Harinath  <rharinath@novell.com>
3044
3045         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
3046         DefaultParameterValueAttribute to be undefined, say if System.dll
3047         is not referenced.
3048
3049 2007-03-11  Marek Safar  <marek.safar@gmail.com>
3050
3051         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
3052         any mscorlib.
3053
3054 2007-03-10  Marek Safar  <marek.safar@gmail.com>
3055
3056         * class.cs, parameter.cs: Unified parameters verification.
3057
3058 2007-03-08  Martin Baulig  <martin@ximian.com>
3059
3060         * cs-parser.jay (constructor_header): Pass the location to the
3061         newly created TopLevelBlock.
3062
3063 2007-03-07  Martin Baulig  <martin@ximian.com>
3064
3065         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
3066
3067 2007-03-06  Miguel de Icaza  <miguel@novell.com>
3068
3069         * convert.cs (ExplicitReferenceConversionExists): Sync this method
3070         with the changes from David, fixes the build.
3071
3072 2007-03-05  David Mitchell  <dmitchell@logos.com>
3073
3074         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
3075         and its base interfaces to a one-dimensional array type S[],
3076         provided there is an implicit or explicit reference conversion
3077         from S to T.
3078
3079 2007-03-03  Marek Safar  <marek.safar@gmail.com>
3080
3081         * cs-tokenizer.cs: Implemented basic linq grammar.
3082
3083         * driver.cs: Set linq lang version on demand.
3084
3085 2007-02-26  Marek Safar  <marek.safar@gmail.com>
3086
3087         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
3088
3089 2007-02-25  Marek Safar  <marek.safar@gmail.com>
3090
3091         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
3092         (Fixes #80455)
3093
3094         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
3095         here.
3096         Check property and event extern attributes.
3097
3098         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
3099         charset.
3100
3101 2007-02-24  Marek Safar  <marek.safar@gmail.com>
3102
3103         A fix for bug #80407
3104         * ecore.cs: Don't report ambiguity error when methods have same parent.
3105
3106 2007-02-23  Marek Safar  <marek.safar@gmail.com>
3107
3108         A fix for bug #80878
3109         * class.cs, cs-parser.jay: Event property can host anonymous methods.
3110
3111 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3112
3113         * attribute.cs: Enable ExtensionAttribute presence test.
3114
3115 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3116
3117         * class.cs: Warn about missing GetHashCode only when Equals is override.
3118
3119         * decl.cs: Check accessibility of type arguments.
3120
3121         * typemanager.cs: Correctly report nullable array.
3122
3123 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3124
3125         * class.cs, report.cs: Capture more details when things go wrong.
3126
3127 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3128
3129         A fix for bug #80650
3130         * cs-parser.jay: Anonymous container starts at constructor declaration
3131         and not at block beginning because it has to be usable in constructor
3132         initializer.
3133
3134         * statement.cs: Use context location and not block one for error reporting.
3135
3136 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3137
3138         A fix for bug #78712
3139         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
3140         too.
3141
3142 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3143
3144         A fix for bug #80493 by Atsushi Enomoto
3145         * cs-parser.jay: Ignore invalid attribute target.
3146
3147 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3148  
3149         * cs-tokenizer.cs: Ignore '\0' as white space character.
3150
3151 2007-02-17  Miguel de Icaza  <miguel@novell.com>
3152
3153         * cs-parser.jay: Add support for lambda expressions to the mcs
3154         compiler as well.
3155
3156         * lambda.cs: Only clone when we are probing, not on the final call
3157         (Compatible is the final call). 
3158
3159         * statement.cs (CloneContext): Introduce class to provide block
3160         remapping during clone.
3161
3162         All statements Clone themselves now.
3163
3164         (Clone): special handling for blocks, when we clone a block, we
3165         register the block inside this routine, as children of the block
3166         might trigger a lookup. 
3167         
3168         * expression.cs: Add support for CloneContext in all expressions. 
3169         
3170 2007-02-17  Marek Safar  <marek.safar@gmail.com>
3171  
3172         A fix for bug #80493
3173         * statement.cs: Report ambiguous warning when interfaces are not related.
3174
3175 2007-02-15  Marek Safar  <marek.safar@gmail.com>
3176
3177         C# 3.0 extension methods.
3178
3179         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
3180         cannot be used directly.
3181
3182         * class.cs (Class.Emit): Emit extension attribute if any class method
3183         is extension method.
3184         (Method.Define): Add basic extension method validation conditions.
3185         (Method.Emit): Emit extension attribute for method.
3186
3187         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
3188         extension method exists. Currently we follow same approach as Microsoft
3189         does, emit even if a method or a class are private but this can change
3190         later.
3191
3192         * cs-parser.jay: Add handling of `this' keyword in method parameters
3193         context.
3194
3195         * decl.cs (DeclSpace.IsStaticClass): New property.
3196         (MemberCache.FindExtensionMethods): Looks for extension methods with
3197         defined name and extension type.
3198
3199         * doc.cs: Updated after OverloadResolve changes.
3200
3201         * driver.cs: Add new soft reference to System.Core.dll.
3202
3203         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
3204         (ExtensionMethodGroupExpr): Represents group of extension methods.
3205
3206         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
3207         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
3208         to MethodGroupExpr and made non-static for easier customization.
3209         (Invocation.DoResolve): Add extension method lookup when no standard
3210         method was found.
3211         (MemberAccess.DoResolve): Try extension methods if no member exists.
3212
3213         * modifiers.cs: Add METHOD_EXTENSION modifier.
3214
3215         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
3216         as well as candidate extension type.
3217         (ComputeNamespaces): When assembly constains extension methods registers
3218         them.
3219         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
3220         extension method lookup.
3221         (Namespace.LookupExtensionMethod): Looks for extension method in this
3222         namespace.
3223         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
3224         find a method which matches name and extensionType.
3225
3226         * parameter.cs (Parameter): Add This modifer.
3227         (HasExtensionMethodModifier): New property.
3228         (Resolve): Add extension parameter check.
3229         (ModFlags): turned to property to exclude this modifier as it is not real
3230         parameter modifier.
3231         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
3232
3233         * support.cs (ParameterData): Add ExtensionMethodType.
3234         (ReflectionParameters): Implemented ExtensionMethodType interface property.
3235
3236         * typemanager.cs: Add type and ctor extension attribute type.
3237
3238 2007-02-15  Miguel de Icaza  <miguel@novell.com>
3239
3240         * report.cs (DisableErrors, EnableErrors): used to prevent error
3241         output when we are "trying" to compile various methods with
3242         different types. 
3243
3244         * ecore.cs (Expression): Add Clone method that calls the virtual
3245         CloneTo method.  The current CloneTo method in Expression throws
3246         an exception so we can track down all the places where this must
3247         be implemented (not using abstract, because that would be a lot of
3248         up-front-work before we can start testing the implementation
3249         idea). 
3250
3251         Important: we only need Clone capabilities for expressions created
3252         by the parser, as the expressions we will be cloning are
3253         expressions in the pre-resolved state.   This vastly simplifies
3254         the work required. 
3255         
3256         (SimpleName): Add CloneTo that does nothing.
3257         (EmptyCast): Add CloneTo.
3258         
3259         * expression.cs (Binary): Implement CloneTo.
3260         (Invocation.IsApplicable): Store the current ec in
3261         EmitContext.TempEc and restore it on return.  This is used so we
3262         do not have to sprinkle hundres of methods with an extra
3263         EmitContext, we know that the only user is the lambda expression
3264         ImplicitConversionExists code. 
3265         
3266         (Argument): Add Cloning capabilities.
3267         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
3268         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
3269         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
3270         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
3271         IndexerAccess): Add Clone capability.
3272
3273         (LocalVariableReference, This): TODO: needs cloned Block mapping.
3274
3275         (Argument): Add cloning capability.
3276
3277         * assign.cs (Assign): Implement CloneTo.
3278
3279         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
3280         
3281         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
3282         version by calling Convert with the EmitContext (that we are
3283         currently storing in ec, this is not great, but will do for now,
3284         to avoid passing EmitContext parameters to hundreds of functions
3285         that do not need them now).
3286
3287         (SetExpression): Remove, it is not needed.
3288         
3289         (ContextualReturn): Implement CloneTo.
3290
3291         * statement.cs (Statement): Implement cloning infrastructure,
3292         similar to expressions.
3293
3294         (Block): Partial implementation of Clone for statements.
3295
3296         (Return): Implement clone.
3297         
3298         * constant.cs (Constant.CloneTo): New method, does nothing.
3299
3300         * codegen.cs (TempEc): Add a static EmitContext as a temporary
3301         solution, until we decide how to exactly do this.  
3302         
3303 2007-02-14  Marek Safar  <marek.safar@gmail.com>
3304  
3305         A fix for bug #80493
3306         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
3307         a property is override we need to use second accessor.
3308
3309 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3310  
3311         A fix for bug #80418
3312         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
3313         methods.
3314
3315 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3316
3317         Another fix for bug #80749
3318         * pending.cs: Abstract class has priority over interfaces.
3319
3320 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3321
3322         Another fix for bug #80749
3323         * pending.cs: Abstract class has priority over interfaces.
3324
3325 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3326
3327         Another fix for bug #80749
3328         * pending.cs: Abstract class has priority over interfaces.
3329
3330 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3331
3332         Another fix for bug #80749
3333         * pending.cs: Abstract class has priority over interfaces.
3334
3335 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3336
3337         * class.cs Better error message.
3338
3339         * driver.cs: Add shorter versions of -optimize option.
3340
3341 2007-02-13  Martin Baulig  <martin@ximian.com>
3342
3343         * class.cs (Constructor.Emit): Check the return value of
3344         ec.ResolveTopBlock() and return on error.
3345
3346 2007-02-13  Raja R Harinath  <rharinath@novell.com>
3347
3348         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
3349         message to fix error message regression.
3350
3351 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3352
3353         * delegate.cs: Delegate creation expression cannot be of Nullable type.
3354
3355 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3356
3357         A fix for bug #80749
3358         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
3359         its parent container.
3360
3361         * class.cs (DefineFieldInitializers): Each initializer can has different
3362         resolve context.
3363
3364         * const.cs: Updated.
3365
3366 2007-02-11  Miguel de Icaza  <miguel@novell.com>
3367
3368         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
3369         now all the heavy lifting to check that embedded statements or
3370         expressions have the right form is done in the ContextualReturn.
3371
3372         (ContextualReturn): New class.  
3373
3374         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
3375         method that can be invoked to report 201, so we do not replicate
3376         this everywhere.
3377
3378         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
3379         
3380         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
3381         treating tabs as spaces. 
3382
3383 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3384
3385         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
3386         * assign.cs: Use full implicit conversion for right side check.
3387
3388 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3389
3390         * statement.cs (Switch): Switch over boolean type is not standardized.
3391
3392 2007-02-08  Marek Safar  <marek.safar@gmail.com>
3393
3394         A fix for bug #80755
3395         * decl.cs (FindBaseEvent): Don't use method cache for events.
3396
3397 2007-02-07  Marek Safar  <marek.safar@gmail.com>
3398
3399         * cs-parser.jay: Better syntax error handling.
3400
3401         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
3402         instead of underlying type value.
3403
3404 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3405
3406         * driver.cs: Check define identifier before is registered.
3407
3408         * namespace.cs: Use existing error message.
3409
3410         * report.cs: New warning.
3411
3412 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3413
3414         A fix for bug #80742
3415         * expression.cs: Delegate Invoke method can be called directly.
3416
3417 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3418
3419         A fix for bug #80676
3420         * class.cs (IsEntryPoint): The Main method can have params modifier.
3421
3422 2007-02-04  Miguel de Icaza  <miguel@novell.com>
3423
3424         * parameter.cs (Parameter, Parameters): Add Clone method.
3425
3426         * anonymous.cs (Compatible): Turn method into virtual method, so
3427         LambdaExpression can implement a different behavior.
3428
3429         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
3430         out the basic checking here, so it can be used by
3431         LambdaExpressions.
3432         
3433         * lambda.cs: Introduce "Compatible" function that will do the
3434         heavy lifting.
3435
3436 2007-02-02  Marek Safar  <marek.safar@gmail.com>
3437
3438         * attribute.cs: Unified one error message.
3439
3440         * class.cs (Class): Use type attributes and not properties to test static
3441         class.
3442         (IsEntryPoint): Don's pass local variable.
3443
3444         * convert.cs: Removed duplicate check.
3445
3446         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
3447
3448         * driver.cs: Don't crash when soft reference does not exist.
3449
3450         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
3451         (UsingEntry): Removed redundant allocation.
3452
3453         * parameter.cs: Add fast path for type parameters.
3454
3455         * support.cs: Don't allocate attribute when it's not used.
3456
3457 2007-01-30  Miguel de Icaza  <miguel@novell.com>
3458
3459         * anonymous.cs
3460         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
3461         this into a virtual method, so we can override it in LambdaExpression.
3462
3463         * driver.cs: Improve diagnostics in case of failure. 
3464
3465         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
3466         write a function that is slightly more complex and that parses:
3467
3468         type identifier [, type identifier]* )
3469
3470         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
3471         this expression:
3472
3473                 (canEmpty ? i >= 0 : i > 0)
3474
3475 2007-01-30  Raja R Harinath  <rharinath@novell.com>
3476
3477         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
3478         exception on possibly valid code.
3479
3480 2007-01-29  Raja R Harinath  <rharinath@novell.com>
3481
3482         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
3483         Push/PopPosition.
3484         (parse_opt_type_arguments): Remove.  It's almost the same as
3485         parse_less_than.
3486         (parse_namespace_or_typename): Use parse_less_than.
3487
3488 2007-01-28  Miguel de Icaza  <miguel@novell.com>
3489
3490         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
3491         this bug took a few hours to find, because the state saved and
3492         restored by PushPosition and PopPosition was ignoring the state of
3493         parse_generic_less_than.
3494
3495         I can also now remove the handling of OP_LT and OP_GT, this solves
3496         the big mistery.
3497         
3498         * cs-tokenizer.cs: store the location for the ARROW token, we use
3499         that in the parser.
3500
3501         (PushPosition, PopPosition): save/restore also `current_token',
3502         restore `parse_generic_less_than' (was missing).
3503
3504         (parse_opt_type_arguments): use parse_type, not
3505         parse_namespace_or_typename to parse types.
3506
3507         * lambda.cs: Empty new file, will eventually have the lambda
3508         expression implementation.
3509
3510         * lambda.test: used to test the internal tokenizer. 
3511
3512         * report.cs (FeatureIsNotISO1): Rename from
3513         FeatureIsNotStandardized, because it was about the language level
3514         (1 vs 2) it was not about standarization.
3515
3516         (FeatureRequiresLINQ): New.
3517
3518         * support.cs (SeekableStreamReader): Only require that the reader
3519         is a TextReader, not a StreamReader, so we can plug StringReader. 
3520
3521         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
3522         given position in the input stream the following tokens can be
3523         parsed as a type followed by an identifier.
3524
3525         (is_punct): after a '(' if parse_type_and_parameter returns true,
3526         then return a special token OPEN_PARENS_LAMBDA which is used to
3527         avoid reduce/reduce errors in the grammar for the
3528         lambda_expression rules.
3529
3530         (parse_type): implement a type parser inside the
3531         tokenizer, the parser only returns true or false depending on
3532         whether the input at a given position can be parsed as a type.
3533
3534         (peek_token): new method used during type parsing.
3535
3536 2007-01-28  Raja R Harinath  <rharinath@novell.com>
3537
3538         Fix #80531
3539         * anonymous.cs (ScopeInfo.InflateParameters): New.
3540         (AnonymousContainer.Resolve): Use it to redirect types of
3541         delegate parameters.
3542
3543 2007-01-27  Raja R Harinath  <rharinath@novell.com>
3544
3545         Fix #80530
3546         * expression.cs (Error_InvalidArguments): Don't use two different
3547         messages for CS1503.  Use ExtraInformation and
3548         SymbolRelatedToPreviousError instead.
3549
3550         Fix #80358
3551         * decl.cs (DeclSpace.initialize_type_params): Don't access
3552         'type_params' of a partial class directly.
3553
3554 2007-01-26  Miguel de Icaza  <miguel@novell.com>
3555
3556         * constant.cs: Removed a handful of out-of-range checks that were
3557         not necessary. 
3558
3559 2007-01-25  Marek Safar  <marek.safar@gmail.com>
3560
3561         * expression.cs (CheckUselessComparison): Add additional check for char
3562         constants.
3563
3564         * namespace.cs: Fixed typo.
3565
3566 2007-01-23  Miguel de Icaza  <miguel@novell.com>
3567
3568         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
3569         gone, instead we inline the test, preventing the needless casts to
3570         longs, ulongs and doubles for the parameters, avoiding calls to
3571         methods that overchecked stuff, and instead inlined things
3572         nicely. 
3573
3574 2007-01-20  Marek Safar  <marek.safar@gmail.com>
3575
3576         * cs-parser.jay: Better parameter error handling.
3577
3578 2007-01-17  Marek Safar  <marek.safar@gmail.com>
3579
3580         A fix for bug #80368, #80522
3581         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
3582         whether array initializer contains constants only.
3583         (ArrayCreation.Emit): Use better formula to decide when
3584         are array initializers for static initialization.
3585         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
3586         have to emit even constants otherwise they are pre-initialized.
3587
3588 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
3589             Raja R Harinath  <rharinath@novell.com>
3590
3591         Fix emit order of 'get' vs. 'set'.
3592         * support.cs (Accessors): New.
3593         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
3594         Note the order in which accessors are declared in the source.
3595         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
3596         Refactored from Property.Define and Indexer.Define.
3597         (PropertyBase.DefineAccessors): New helper that calls the above in
3598         appropriate order as noted by the parser.
3599         (Property.Define, Indexer.Define): Update to changes.
3600         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
3601
3602 2007-01-17  Raja R Harinath  <rharinath@novell.com>
3603
3604         Fix cs0029-6.cs and gcs0029-2.cs (regression)
3605         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
3606         there's an implicit conversion from the current type to the target
3607         type before converting the underlying constant.
3608
3609 2007-01-16  Marek Safar  <marek.safar@gmail.com>
3610
3611         * const.cs (ResolveValue): Updated after constant conversion was made more
3612         generic.
3613
3614         * constant.cs (GetAttributableValue): constant to object conversion is
3615         used for attributes only.
3616         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
3617         constant conversions.
3618         (LongConstant.ConvertImplicitly): Ditto.
3619
3620         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
3621         (ImplicitConversionStandard): Handle constant conversion as extra step.
3622         It solves the issue when constant conversion was called indirectly like
3623         inside array initializer and constant folding was skipped.
3624
3625         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
3626         this change.
3627
3628         * statement.cs(ImplicitConversionStandard): Updated after constant
3629         conversion was made more generic.
3630
3631 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
3632
3633         * expression.cs (As.DoResolve): Use GenericConstraints instead of
3634         Constraints, solves the problem where the compiler incorrectly
3635         reported that a type parameter was not constrained to a class (Bug
3636         80518)
3637
3638 2007-01-14  Marek Habersack  <grendello@gmail.com>
3639
3640         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
3641
3642 2007-01-14  Marek Safar  <marek.safar@gmail.com>
3643
3644         A fix for bug #80368
3645         * assign.cs (FieldInitializer): New class implements field
3646         initializer statement.
3647
3648         * attribute.cs: Update after FieldMember rename.
3649
3650         * class.cs (PropertyBasedMember): New common class for property based
3651         types.
3652         (InterfaceMemberBase): New base class for all members which can be used as
3653         an interface members.
3654         (MethodCore): Moved really common code to InterfaceMemberBase.
3655         (Method.Define): Equal and GetHasCode detection is relevant for methods
3656         only.
3657         (MethodData.Define): Don't assume that public event implements an
3658         interface automatically.
3659         (MethodData.DefineMethodBuilder): Issue an error even if only extern
3660         modifier is used.
3661         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
3662         (FieldMember): Merged with FieldBase.
3663         (EventProperty.AEventPropertyAccessor): New specialization to check whether
3664         event extern modifier can be used.
3665         (EventField.EventFieldAccessor): Moved event field specific code here.
3666         (Event.AllowedModifiers): Even event can be extern.
3667         (Event.FindOutBaseMethod): New override specific to events.
3668         (Indexer.parameters): Reintroduce parameters because base class holds
3669         only properties common data.
3670         (Indexer.CheckForDuplications): Indexers are threated as methods so we
3671         need do extra parameters check.
3672
3673         * const.cs: Update after FieldMember rename.
3674
3675         * decl.cs (MemberCache.FindBaseEvent): New method.
3676
3677         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
3678         to reflect that indexer is now derived from PropertyBased.
3679
3680         * ecore.cs (GetMemberType): Made public.
3681         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
3682         obsolete event.
3683
3684         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
3685         
3686         * typemanager.cs (CSharpSignature): Correctly print event accessors.
3687         (RegisterEvent): Removed.
3688         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
3689         (GetPrivateFieldOfEvent): Renamed to GetEventField.
3690
3691 2007-01-11  Raja R Harinath  <rharinath@novell.com>
3692
3693         Fix #80249
3694         * statement.cs (CollectionForeach.TryType): Prefer generic
3695         GetEnumerator over non-generic variant.  Fix code to follow comments.
3696
3697 2007-01-09  Raja R Harinath  <rharinath@novell.com>
3698
3699         Fix #80446
3700         * support.cs (ReflectionParameter): Don't use an invalid index on
3701         the generic parameter data.
3702
3703 2007-01-08  Miguel de Icaza  <miguel@novell.com>
3704
3705         * driver.cs: Just add a tiny bit of infrastructure.
3706
3707 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3708
3709         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
3710         where field type is struct from current assembly.
3711         
3712         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
3713         it is possible.
3714
3715 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3716
3717         A fix for bug #80381
3718         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
3719         the core types.
3720
3721         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
3722         messages.
3723         (Namespace.LookupType): Always use core types from corlib when speficied.
3724
3725         * report.cs: A new warning.
3726
3727         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
3728         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
3729         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
3730
3731         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
3732         (InitCoreTypes): Set expression type of object_type and value_type
3733         immediately after lookup.
3734
3735 2007-01-01  Miguel de Icaza  <miguel@novell.com>
3736
3737         * cs-tokenizer.cs: Accept Pc class characters (Connector
3738         Punctuation) as valid identifiers.  Fixes #78259
3739
3740         * expression.cs (Invocation.DoResolve): Moved the check for the
3741         use of `this' for doing method calls to the Invocation resolution
3742         step, after overload resolution has taken place instead of doing
3743         the check at the low-level `This.DoResolve' level.
3744
3745         The `This.DoResolve'(appens before overload resolution, so it has
3746         no way of knowing if the method that will be called will be
3747         instace or static, triggering an erroneous report for cs0188 (Bug
3748         78113).
3749
3750         We now do the check for instance method invocations after we know
3751         what method will be called.
3752
3753         (This.CheckThisUsage): Move the actual use of this structure
3754         checking into its own method and expose it. 
3755
3756         * Everywhere that called Error_ValueCannotBeConverted: pass a new
3757         EmitContext.
3758
3759         Exceptions: Null.ConvertImplicitly,
3760         Constant.ImplicitConversionRequired as there are too many call
3761         sites for passing the ec. 
3762
3763         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
3764         EmitContext, if the value is null, then we do not try to provide
3765         the extra information from the error (If a userdefined conversion
3766         exists, as UserDefinedConversion requires a non null-EmitContext).
3767
3768         Fixes: #80347
3769
3770 2006-12-30  Raja R Harinath  <rharinath@novell.com>
3771
3772         * flowanalysis.cs (MyBitVector): Document some invariants.
3773         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
3774         introduced below, and add a couple of others, 
3775
3776 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3777
3778         * attribute.cs (GetMethodObsoleteAttribute): Uses new
3779         GetPropertyFromAccessor and GetEventFromAccessor.
3780         
3781         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
3782         overrides non-obsolete one.
3783         (Indexer.Define): Error message has been moved to the parser.
3784
3785         * cs-parser.jay: Better syntax errors handling.
3786
3787         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
3788         when an invocation has no arguments.
3789
3790         * ecore.cs: Removed not used caching.
3791
3792         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
3793         implementation.
3794
3795         * report.cs: Add a new warning.
3796
3797         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
3798
3799         * typemanager.cs (enumeration_type): Removed.
3800         (CSharpSignature): Reuses IsSpecialMethod.
3801         (IsEqual): Hack for MS BCL.
3802         (GetPropertyFromAccessor): New method.
3803         (GetEventFromAccessor): New method.
3804         (IsSpecialMethod): Fixed to handle more cases.
3805
3806 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3807
3808         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
3809         Made white spaces array static.
3810
3811         * ecore.cs (RemoveGenericArity): Optimized.
3812
3813         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
3814         10 times faster).
3815         (MyBitVector.initialize_vector): Simplified.
3816
3817 2006-12-22  Miguel de Icaza  <miguel@novell.com>
3818
3819         * ecore.cs: Am not entirely happy with this hack, but it seems to
3820         address the issue in 80257 (a small test case for
3821         CreativeDocs.NET). 
3822
3823         I set the MethodGroupExpr.Type to an internal compiler type
3824         (itself in this case) to force the resolution to take place.   Why
3825         it does not take place with a null is beyond me.
3826
3827 2006-12-20  Marek Safar  <marek.safar@gmail.com>
3828
3829         A fix for bug #80288
3830         * expression.cs (ResolveOperator): Consider user defined conversion for
3831         logical and operator too.
3832         (EmitBranchable): Optimization for logical and when full constant folding
3833         could not be applied but one operand is constant.
3834
3835 2006-12-19  Marek Safar  <marek.safar@gmail.com>
3836
3837         * class.cs (GetClassBases): Write 5 times every day, will never use
3838         FullName for error reporting.
3839
3840         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
3841
3842 2006-12-19  Martin Baulig  <martin@ximian.com>
3843
3844         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
3845         the symbol file info here.
3846
3847 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3848
3849         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
3850         of `elseif' is taking then following sections are not taking.
3851         Fixes an issue reported on mono mailing list.
3852
3853 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3854
3855         A fix for bug #80300
3856         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
3857         a caller is not taking.
3858
3859 2006-12-18  Raja R Harinath  <rharinath@novell.com>
3860
3861         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
3862         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
3863         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
3864         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
3865         * class.cs: Update to changes.
3866
3867 2006-12-17  Marek Safar  <marek.safar@gmail.com>
3868
3869         A fix for bug #79934
3870         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
3871         partial container.
3872
3873         * class.cs (ResolveMembers): Register an iterator in current container and
3874         not in shared one.
3875
3876 2006-12-16  Raja R Harinath  <rharinath@novell.com>
3877
3878         Fix test-543.cs
3879         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
3880         satisfy a params annotated parameter.
3881
3882 2006-12-16  Marek Safar  <marek.safar@gmail.com>
3883
3884         A fix for bug #77014
3885         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
3886         paramters correctly and not rely on hacks in Parameters class.
3887         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
3888         at any possition.
3889         (Invocation.VerifyArgumentsCompat): Ditto.
3890         (Invocation.EmitArguments): Changed to correctly emit params arguments at
3891         any possition.
3892
3893         * parameter.cs (HasParams): Don't assume that params is the last one.
3894
3895         * support.cs (ReflectionParameters.ctor): Look for params attribute
3896         correctly.
3897         (ReflectionParameters.ParameterType): Removed hack when we returned last
3898         parameter for out of range parameters.
3899         (ParameterName, ParameterModifier): Ditto.
3900
3901 2006-12-14  Marek Safar  <marek.safar@gmail.com>
3902
3903         A fix for bug #79987
3904         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
3905         when assembly is not CLS compliant but type is. I have no idea why is this
3906         allowed.
3907
3908         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
3909
3910 2006-12-13  Miguel de Icaza  <miguel@novell.com>
3911
3912         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
3913         in struct constructors, they are basically no-ops.
3914
3915 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3916
3917         * cs-tokenizer.cs (Position): Save preprocessor status too.
3918
3919 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3920
3921         A fix for bug #77794
3922         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
3923
3924 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3925
3926         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
3927         Fixes #69299.
3928         (pp_expr): Report error for an invalid expression.
3929         (handle_preprocessing_directive): Simplified; add more error checking.
3930
3931 2006-12-11  Marek Safar  <marek.safar@gmail.com>
3932
3933         A fix for bug #74939
3934         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
3935         directives handling.
3936
3937 2006-12-10  Marek Safar  <marek.safar@gmail.com>
3938
3939         A fix for bugs #80093, and #75984
3940         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
3941         logic, it seems to me as it worked before "by coincidence".
3942         (xtoken): Simplified to use reworked handle_preprocessing_directive.
3943         (cleanup): Enabled endif check.
3944
3945 2006-12-09  Marek Safar  <marek.safar@gmail.com>
3946
3947         A fix for bug #80162
3948         * statement.cs (CollectionForeach.TryType): Generics and non-generics
3949         enumerators are never ambiguous.
3950
3951 2006-12-08  Raja R Harinath  <rharinath@novell.com>
3952
3953         Fix #80060
3954         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
3955
3956 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3957
3958         A fix for bug #80144
3959         * class.cs (EventProperty.Define): Explicit implementation means
3960         that an even is used.
3961
3962 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3963
3964         Fixes the operators implementation (part II)
3965
3966         * cfold.cs (DoConstantNumericPromotions): Renamed to
3967         DoBinaryNumericPromotions and simplified.
3968         (BinaryFold): Couple of conversion fixes; simplified.
3969
3970         * constant.cs, ecore.cs, literal.cs
3971         (ToType): Renamed to ConvertImplicitly.
3972         (Reduce): Renamed to ConvertExplicitly.
3973
3974         * class.cs, convert.cs: Updated.
3975
3976         * expression.cs: TryReduce doesn't throw an exception.
3977
3978 2006-12-01  Marek Safar  <marek.safar@gmail.com>
3979
3980         A fix for bug #80108
3981         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
3982         compatible.
3983
3984 2006-11-30  Marek Safar  <marek.safar@gmail.com>
3985
3986         Fixes unary operators implementation (part I)
3987         Also fixes #80026
3988
3989         * cfold.cs (Error_CompileTimeOverflow): Made internal
3990
3991         * const.cs (IConstant): Changed to use reference to constant and
3992         not constant itself.
3993         Updated IConstant implementations.
3994
3995         * constant.cs (CreateConstant): New factory method.
3996         Updated IConstant implementation.
3997
3998         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
3999
4000         * ecore.cs: Updated to use CreateConstantReference.
4001
4002         * enum.cs: Reflects IConstant changes.
4003
4004         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
4005
4006         * literal.cs (NullConstant): Change to be independently usable.
4007
4008 2006-11-29  Martin Baulig  <martin@ximian.com>
4009
4010         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
4011         we need to emit the scope initializer before calling the base .ctor.
4012
4013         * anonymous.cs: Merged back from the new anonymous methods branch.
4014         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
4015
4016         * expression.cs (ParameterReference.DoResolveBase): Create a
4017         "normal" ScopeInfo when capturing parameters rather than using the
4018         root scope; this makes things work with anonymous methods having
4019         parameters.
4020
4021         * statement.cs
4022         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
4023
4024 2006-11-22  Marek Safar  <marek.safar@gmail.com>
4025
4026         A fix for bug #79987
4027         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
4028         check to a base class.
4029         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
4030         only when assembly has missing attribute.
4031         * report.cs: Update.
4032
4033 2006-11-21  Marek Safar  <marek.safar@gmail.com>
4034
4035         * cs-tokenizer.cs: Merged with gmcs version.
4036
4037 2006-11-20  Marek Safar  <marek.safar@gmail.com>
4038
4039         * cs-tokenizer.cs,
4040         * cs-parser.jay: Better error message when partial keyword is misplaced.
4041
4042 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
4043
4044         A fix for bug #79810
4045         report.cs: CS1058 only applies to 2.0 profile (gmcs).
4046         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
4047         a RuntimeWrappedException by default.
4048
4049 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4050
4051         A fix for bug #79843
4052         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
4053         implementation.
4054         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
4055
4056 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4057
4058         * driver.cs, namespace.cs: Uses faster IndexOf version.
4059
4060 2006-11-17  Marek Safar  <marek.safar@gmail.com>
4061
4062         A fix for bug #79941
4063         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
4064         operators.
4065         (Operator.Define): Implicit/Explicit operator of same type is duplicate
4066         even if internal name is different.
4067         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
4068         (UserDefinedConversion): Simplified as the operators cannot be internal.
4069         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
4070         conversions.
4071         (MethodLookup): Replaced EmitContext with parentType.
4072         * expression.cs: Updated.
4073
4074 2006-11-09  Raja R Harinath  <rharinath@novell.com>
4075
4076         * driver.cs (BadAssembly): Handle all the ugliness of
4077         DefineDynamicAssembly.
4078
4079 2006-11-08  Raja R Harinath  <rharinath@novell.com>
4080
4081         Address parts of #58244 -- most of what's left is in the runtime
4082         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
4083         CS1509 error checks, and handle them for all assembly loads, not
4084         just the first invocation.
4085         (LoadModule): Likewise.  Move handling of 'adder_method' ...
4086         * codegen.cs (AssemblyClass.AddModule): ... here.
4087
4088 2006-11-02  Marek Safar  <marek.safar@gmail.com>
4089
4090         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
4091         IEnumerable<T> is ambiguous.
4092
4093 2006-10-31  Marek Safar  <marek.safar@gmail.com>
4094
4095         A fix for bug #67689
4096         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
4097         GetEnumerator is ambiguous.
4098
4099         * report.cs: Add new warning.
4100
4101 2006-10-29  Marek Safar  <marek.safar@gmail.com>
4102
4103         A fix for bug #78602
4104         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4105         to protected member can be nested type.
4106
4107 2006-10-28  Marek Safar  <marek.safar@gmail.com>
4108
4109         A fix for bug #78965
4110         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4111         to protected member must derive from current type.
4112
4113 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4114
4115         assign.cs: Reuses error method.
4116
4117         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
4118         instead of type for constants.
4119         (Expression.Error_ValueAssignment): Common error method.
4120
4121         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
4122         for any assignment.
4123
4124 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4125
4126         A fix for bug #79081
4127         * expression.cs (MemberAccess.DoResolve): Check nested type
4128         accessibility.
4129
4130 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
4131
4132         * doc.cs : nested delegates were not handled. Fixed bug #79754.
4133
4134 2006-10-26  Marek Safar  <marek.safar@gmail.com>
4135
4136         A fix for bug #76591
4137         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
4138
4139 2006-10-26  Marek Safar  <marek.safar@gmail.com>
4140
4141         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
4142         type forwarder of the same type multiple times.
4143
4144 2006-10-26  Raja R Harinath  <rharinath@novell.com>
4145
4146         Fix #78820
4147         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
4148         instance as an rvalue, even when we later resolve as an lvalue.
4149
4150 2006-10-25  Martin Baulig  <martin@ximian.com>
4151
4152         * anonymous.cs: Fix #79673.
4153
4154 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
4155
4156         A fix for bug #79666
4157         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
4158         ignored when is optimized (= default value) as its value is already set.
4159
4160 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
4161
4162         A fix for bug #79724
4163         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
4164         TypeContainer for type lookup.
4165
4166 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
4167
4168         A fix for bug #79231
4169         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
4170         * expression.cs (OverloadResolve): Always convert type name for
4171         an error message.
4172         (ResolveNamespaceOrType): Don't confuse a nested type with any 
4173         other member.
4174
4175 2006-10-18  Martin Baulig <martin@ximian.com>
4176
4177         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
4178
4179 2006-10-17  Miguel de Icaza  <miguel@novell.com>
4180
4181         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
4182         an int32, but requesting an int64 from the conversion
4183
4184 2006-10-12  Martin Baulig  <martin@ximian.com>
4185
4186         * anonymous.cs
4187         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
4188         
4189 2006-10-12  Martin Baulig  <martin@ximian.com>
4190
4191         * statement.cs
4192         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
4193
4194 2006-10-11  Miguel de Icaza  <miguel@novell.com>
4195
4196         * convert.cs: Remove broken code: I was doing the "Existance"
4197         tests for Implicit conversions.
4198
4199 2006-10-10  Miguel de Icaza  <miguel@novell.com>
4200
4201         * convert.cs: Added one missing case in
4202         ImplicitStandardConversionExists uint64 to intptr.
4203
4204         Fixes #59800
4205         
4206         * typemanager.cs (uintptr_type): another core known type.   
4207
4208         * ecore.cs (OperatorCast): routine used to do cast operations that
4209         depend on op_Explicit.  We could change some of the Decimal
4210         conversions to use this.
4211
4212         This one has a probe mechanism that checks both types for an op_
4213         which it coudl be used to eliminate two classes: CastToDecimal
4214         and CastFromDecimal.
4215
4216         * convert.cs: Implement the conversions documented in #59800
4217         
4218 2006-10-10  Martin Baulig  <martin@ximian.com>
4219
4220         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
4221         before RootScope.ResolveMembers().
4222
4223         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
4224         `CurrentType' if appropriate.
4225
4226 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
4227
4228         A fix for bug #78568
4229         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
4230         when contains binary operators.
4231         * cs-parser.jay: Updated.
4232
4233 2006-10-09  Martin Baulig  <martin@ximian.com>
4234
4235         * delegate.cs
4236         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
4237         moved that into Define() and also do the other type parameter
4238         checks there.  Fixes #79094.  Added gtest-292.cs.
4239
4240         * expression.cs
4241         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
4242         since that doesn't include type parameters; don't use `Ldelema'
4243         for type parameters.  Fixes #78980.  Added gtest-293.cs.
4244
4245 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
4246
4247         A fix for #77796
4248         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
4249         conversion is allowed.
4250
4251 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
4252
4253         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
4254         error reporting when no error occurs.
4255
4256 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
4257
4258         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
4259         does not exist.
4260
4261 2006-10-06  Raja R Harinath  <rharinath@novell.com>
4262
4263         Fix #79584
4264         * class.cs (DefineTypeBuilder): Check circular dependencies before
4265         setting the parent of the TypeBuilder.
4266         (CheckRecursiveDefinition): Don't use 'BaseType', since
4267         it may not be valid until after DefineTypeBuilder.  Use
4268         'base_type' instead.
4269
4270 2006-10-04  Martin Baulig  <martin@ximian.com>
4271
4272         Merged the Anonymous Methods patch.
4273
4274         * anonymous.cs, iterators.cs: The new anonymous methods code.
4275
4276         * statement.cs (Variable): New public abstract class.
4277         (LocalInfo.Variable): New public property.
4278         (LocalInfo.ResolveVariable): New public method.
4279         (Block.Flags): Add `IsIterator'.
4280         (Block.AddVariable): Improved the CS0136 check.
4281         (Block.AnonymousChildren): New public property.
4282         (Block.AddAnonymousChild): New public method.
4283         (ToplevelBlock): Update to use the new anonymous method framework.
4284         (ToplevelBlock.ctor): `container' is now a `Block' and not a
4285         `ToplevelBlock'; this is required to correctly implement the
4286         CS0136 check.
4287         (Fixed, Using): Use `TemporaryVariable' instead of directly
4288         creating the `LocalBuilder'.
4289
4290         * parameter.cs (Parameter.ResolveVariable): New public method.
4291         (Parameters.ResolveVariable): Likewise.
4292
4293         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
4294
4295         * class.cs (TypeContainer): Replaced the `iterators' list and
4296         corresponding methods with a list of `CompilerGeneratedClass'es.
4297         (TypeContainer.ResolveMembers): New public method.
4298         (Method): `IIteratorContainer' has been replaced by
4299         `IAnonymousHost'.
4300
4301         * expression.cs (VariableReference): New public abstract base
4302         class for `LocalVariableReference', `ParameterReference' and
4303         `This'.
4304
4305         * codegen.cs (EmitContext): Removed `capture_context',
4306         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
4307         (EmitContext.EmitThis): Removed.
4308
4309         * cs-parser.jay: Replace `iterator_container' with
4310         `anonymous_host'.       
4311
4312 2006-10-04  Martin Baulig  <martin@ximian.com>
4313
4314         * generic.cs (GenericMethod): Don't make this abstract.
4315         (Constraints.Clone): Added dummy implementation.
4316
4317 2006-10-04  Raja R Harinath  <harinath@gmail.com>
4318
4319         Fix #79577
4320         * namespace.cs (LookForAnyGenericType): Avoid nullref on
4321         'declspaces'.  Avoid allocating arrays willy-nilly.
4322
4323         Fix #79553
4324         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
4325         cases out of the switch.
4326
4327 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4328
4329         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
4330         message when non-generic type is used with the type arguments.
4331         * expression.cs: Updated.
4332
4333 2006-09-28  Raja R Harinath  <rharinath@novell.com>
4334
4335         Fix #79013
4336         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
4337         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4338         Change semantics slightly.  Don't insist on having only one
4339         temporary EmptyExpression -- just throttle the creation of new ones.
4340
4341         Fix #79451
4342         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
4343         non-interfaces too.  If no methods are found, don't try to create
4344         a MethodGroupExpr.
4345
4346 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4347
4348         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
4349         generic type.
4350
4351         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
4352         us produce better error message.
4353
4354 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
4355
4356         * expression.cs (Binary.ResolveOperator): Warn about a side effect
4357         of the `|' operator.
4358
4359         * report.cs: A new warning added.
4360
4361 2006-09-27  Martin Baulig  <martin@ximian.com>
4362
4363         * generic.cs (GenericMethod): Don't make this abstract.
4364
4365 2006-09-27  Martin Baulig  <martin@ximian.com>
4366
4367         * report.cs
4368         (InternalErrorException): Added overloaded ctor taking a params array.
4369
4370 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
4371
4372         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
4373         Fixed the cases when same error was reported twice.
4374
4375         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
4376         now report symbol information.
4377
4378 2006-09-25  Martin Baulig  <martin@ximian.com>
4379
4380         * class.cs: Completely unified with the gmcs version.
4381
4382 2006-09-25  Martin Baulig  <martin@ximian.com>
4383
4384         * typemanager.cs (TypeManager.IsNullableType): New public function.
4385         (TypeManager.IsNullableTypeOf): Likewise.
4386         (TypeManager.IsNullableValueType): Likewise.
4387
4388         * class.cs (MethodCore): Added the `GenericMethod' argument from
4389         gmcs and also unified all classes derived from `MethodCore' with gmcs.
4390
4391 2006-09-24  Raja R Harinath  <harinath@gmail.com>
4392
4393         * convert.cs: Unify with gmcs version.
4394
4395 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4396
4397         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
4398         verify them as well.
4399
4400         * report.cs: New warning.
4401
4402 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4403
4404         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
4405         for anonymous block with out argument.
4406
4407 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4408
4409         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
4410         not used private events only.
4411
4412 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
4413
4414         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
4415
4416         * const.cs (Const.Define): Check for constant type.
4417         (Const.IsConstantTypeValid): Looks for valid constant types.
4418
4419         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
4420
4421         * ecore.cs (EmptyConstantCast): New common class for all constant based
4422         EmptyCast(s).
4423
4424         * expression.cs (Is.DoResolve): Handle null constant especially.
4425         (New.DoResolve): Check for new void().
4426         (MemberAccess.DoResolve): Cope with all kind of nulls.
4427
4428         * literal.cs (NullConstant): Uses EmptyConstantCast.
4429         (NullDefault): Based on EmptyConstantCast.
4430         (NullLiteral): Uses EmptyConstantCast.
4431
4432         * statement.cs (Block.ResolveMeta): Check for constant type.
4433
4434 2006-09-22  Martin Baulig  <martin@ximian.com>
4435
4436         * delegate.cs, attribute.cs: Merged with the gmcs versions.
4437
4438 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4439
4440         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
4441         not the null type.
4442
4443         Fix part of #79451
4444         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
4445         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
4446         code slightly.
4447
4448 2006-09-22  Martin Baulig  <martin@ximian.com>
4449
4450         * ecore.cs: Merged with the gmcs version.
4451
4452         * generic.cs (ConstructedType): New dummy class.
4453         (TypeArguments): Don't make this abstract.
4454
4455         * typemanager.cs
4456         (TypeManager.IsGenericTypeDefinition): New method.
4457         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
4458
4459 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4460
4461         * expression.cs (ComposedCast): Check for arrays of TypedReference
4462         before creating the type, not after.
4463
4464 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
4465
4466         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
4467         after ToType change.
4468
4469         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
4470         when constant must be implicitly convertible.
4471
4472         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
4473
4474         * ecore.cs (NullCast): Derives from NullConstant.
4475
4476         * expression.cs (Is.DoResolve): Removed useless variables.
4477         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
4478         (New.Constantify): Add enum support.
4479         (MemberAccess.DoResolve): Add warning when accessing null constant or
4480         variable.
4481
4482         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
4483         property.
4484
4485         * literal.cs (NullConstant): New abstract class with common
4486         functionality for all null specializations.
4487         (NullDefault): Represents default(X) when result can be
4488         reduced to null.
4489         (NullLiteral): Updated.
4490
4491         * report.cs: Add new warning.
4492
4493 2006-09-21  Martin Baulig  <martin@ximian.com>
4494
4495         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
4496
4497 2006-09-21  Martin Baulig  <martin@ximian.com>
4498
4499         * generic.cs (GenericConstraints): New dummy class.
4500         (Constraints): Likewise.
4501         (TypeParameter): Likewise.
4502         (TypeParameterName): Likewise.
4503         (GenericMethod): Likewise.
4504
4505         * typemanager.cs (TypeManager.GetGenericArguments): New method.
4506
4507         * decl.cs: Merged with the gmcs version.
4508
4509 2006-09-21  Raja R Harinath  <rharinath@novell.com>
4510
4511         * generic.cs (TypeParameter): Implement IMemberContainer.
4512         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
4513
4514         * rootcontext.cs: Unify with gmcs version.
4515
4516         * report.cs: Unify with gmcs version.
4517         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
4518         from gmcs/generics.cs.
4519         * generics.cs (TypeParameter): New dummy class.
4520
4521         * support.cs: Unify with gmcs version.
4522
4523 2006-09-20  Raja R Harinath  <rharinath@novell.com>
4524
4525         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
4526         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
4527
4528         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
4529         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
4530         * mcs.exe.sources: Add generic.cs.
4531
4532         * codegen.cs: Unify with gmcs version.
4533
4534         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
4535         (EmitContext): Add GenericDeclContainer implementation.
4536         * decl.cs (MemberCore, DeclSpace): Likewise.
4537         * namespace.cs: Remove #ifdef GMCS_SOURCE.
4538
4539         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
4540         MCS TypeManager has a corresponding dummy method.
4541
4542 2006-09-19  Martin Baulig  <martin@ximian.com>
4543
4544         * expression.cs: Completely merged with the gmcs version.
4545
4546 2006-09-19  Martin Baulig  <martin@ximian.com>
4547
4548         * expression.cs (Invocation): Merged with the gmcs version.
4549         (ArrayAccess.GetStoreOpcode): Likewise.
4550
4551 2006-09-19  Martin Baulig  <martin@ximian.com>
4552
4553         * typemanager.cs
4554         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
4555         (TypeManager.IsGenericMethodDefinition): Likewise.
4556
4557 2006-09-19  Martin Baulig  <martin@ximian.com>
4558
4559         * typemanager.cs
4560         (TypeManager.IsEqual): Moved the gmcs implementation here.
4561         (TypeManager.DropGenericTypeArguments): Likewise.
4562         (TypeManager.DropGenericMethodArguments): Likewise.
4563         (TypeManager.GetTypeArguments): Moved here from gmcs.
4564         (TypeManager.HasGenericArguments): Likewise.
4565
4566 2006-09-19  Martin Baulig  <martin@ximian.com>
4567
4568         * expression.cs (Binary): Merged with the gmcs version.
4569
4570 2006-09-19  Martin Baulig  <martin@ximian.com>
4571
4572         * expression.cs (Probe, As, Is): Merged with the gmcs version.
4573
4574 2006-09-19  Martin Baulig  <martin@ximian.com>
4575
4576         * typemanager.cs: Merged with the gmcs version.
4577
4578 2006-09-16  Raja R Harinath  <rharinath@novell.com>
4579
4580         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
4581         * driver.cs: Likewise.
4582
4583 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
4584
4585         A fix for #79401
4586         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
4587         only if parent type is class.
4588         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
4589         update.
4590
4591 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
4592
4593         * cs-parser.jay,
4594         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
4595         keywords are used.
4596         * typemanager.cs(CSharpName): Converts NullType to null.
4597
4598 2006-09-15  Martin Baulig  <martin@ximian.com>
4599
4600         * typemanager.cs
4601         (TypeManager.GetMethodName): Added mcs implementation.
4602         (TypeManager.IsEqual): Likewise.
4603
4604         * ecore.cs
4605         (SimpleName.RemoveGenericArity): Added dummy implementation.
4606
4607         * pending.cs: Merged with the gmcs version.     
4608
4609 2006-09-15  Martin Baulig  <martin@ximian.com>
4610
4611         * statement.cs: Merge with the gmcs version.
4612
4613 2006-09-15  Martin Baulig  <martin@ximian.com>
4614
4615         * statement.cs (Switch): Merge with the gmcs implementation
4616         (without nullables), which is newer.
4617
4618 2006-09-15  Martin Baulig  <martin@ximian.com>
4619
4620         * statement.cs (Block.Variables): Make this public.
4621         (ToplevelBlock.Parameters): Make this a property.
4622         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
4623
4624 2006-09-15  Martin Baulig  <martin@ximian.com>
4625
4626         * namespace.cs: Merge with the gmcs version.
4627
4628 2006-09-15  Martin Baulig  <martin@ximian.com>
4629
4630         * decl.cs (MemberName): Minor code cleanups.
4631
4632 2006-09-15  Martin Baulig  <martin@ximian.com>
4633
4634         * parameter.cs: Merge with the gmcs version.
4635
4636 2006-09-15  Martin Baulig  <martin@ximian.com>
4637
4638         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
4639         and an error in mcs.
4640
4641 2006-09-15  Martin Baulig  <martin@ximian.com>
4642
4643         * flowanalysis.cs: Merged from GMCS; added the generics code into
4644         a `GMCS_SOURCE' conditional so we can share this file.
4645
4646 2006-09-08  Martin Baulig  <martin@ximian.com>
4647
4648         * typemanager.cs (TypeManager.interlocked_type): New public field.
4649         (TypeManager.int_interlocked_compare-exchange): New public field.
4650         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
4651         enumerator types here and call InitGenericCoreTypes().
4652         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
4653         after calling InitEnumUnderlyingTypes().
4654
4655         * rootcontext.cs
4656         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
4657         `classes_second_stage'. 
4658
4659 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
4660
4661         * assign.cs, ecore.cs, expression.cs: Share error message text.
4662         * class.cs (FieldMember.Define): Check for varible of static type.
4663         * driver.cs (LoadAssembly): Uses error output for errors.
4664         * statement.cs: Updated.
4665
4666 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
4667
4668         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
4669         type instance.
4670
4671 2006-09-07  Martin Baulig  <martin@ximian.com>
4672
4673         * driver.cs
4674         (MainDriver): Revert r62663 from Marek; see #70506 for details.
4675
4676 2006-08-29  Miguel de Icaza  <miguel@novell.com>
4677
4678         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4679         
4680 2006-08-17  Miguel de Icaza  <miguel@novell.com>
4681
4682         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
4683         #52019 and #79064, the use of the \uXXXX sequence in source code
4684         to represent unicode characters.
4685
4686 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
4687
4688         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
4689         support.
4690         * class.cs, ecore.cs, statement.cs: Merged to one error message.
4691
4692 2006-08-13  Miguel de Icaza  <miguel@novell.com>
4693
4694         * assign.cs: Catch attempts to assign to a method groups in += and
4695         report as 1656
4696
4697 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
4698
4699         A fix for #79056
4700         * cs-parser.jay: Don't destroy current array type by typeof of array's.
4701
4702 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
4703
4704         * class.cs (Method.Define): Issue a warning when generic method looks like
4705         an entry point.
4706         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
4707         as well.
4708
4709 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
4710  
4711         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
4712         looking for ctor.
4713         * decl.cs (MemberCache.FindMembers): When container is interface we need to
4714         search all base interfaces as a member can be ambiguous.
4715         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
4716         Constructor member type filter. 
4717         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
4718         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
4719         reporting for returned memberinfos.
4720         * report.cs: Updated.
4721         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
4722         version to work on all runtimes.
4723         (TypeManager.RealMemberLookup): Removed members filtering.
4724
4725 2006-08-08  Raja R Harinath  <rharinath@novell.com>
4726
4727         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
4728         (PropertyExpr.EmitAssign): Likewise.
4729         * expression.cs (Indirection.EmitAssign): Likewise.
4730         (LocalVariableReference.EmitAssign): Likewise.
4731         (ParameterReference.EmitAssign): Likewise.
4732         (Invocation.EmitArguments): Likewise.
4733         (ArrayAccess.EmitAssign): Likewise.
4734         (IndexerAccess.EmitAssign): Likewise.
4735         (This.EmitAssign): Likewise.
4736         (ConditionalLogicalOperator.Emit): Likewise.
4737
4738         Fix #79026
4739         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
4740         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
4741         leave it in after returning it.
4742         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
4743
4744 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
4745
4746         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
4747         message.
4748
4749 2006-08-03  Raja R Harinath  <rharinath@novell.com>
4750
4751         Fix cs0146-3.cs and cs0146-4.cs.
4752         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
4753         enclosing types don't depend on the current type.
4754
4755 2006-08-02  Raja R Harinath  <rharinath@novell.com>
4756
4757         Fix #77963
4758         * class.cs (TypeContainer.DoDefineMembers): Use
4759         FindBaseMemberWithSameName on Parent, since we're interested in
4760         whether we hide inherited members or not.
4761         (FindBaseMemberWithSameName): Make slightly more robust.
4762
4763         Fix the non-generic testcase from #77396
4764         * decl.cs (DeclSpace.DeclContainer): Remove override.
4765
4766         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
4767         declspaces for doppelgangers too.
4768         (UsingEntry): Implement IResolveContext.
4769         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
4770         'this' as the resolve context.
4771         (LocalAliasEntry): Likewise.
4772
4773         Implement parts of #77403
4774         * roottypes.cs (RootDeclSpace): New.  Used to represent the
4775         toplevel declaration space.  Each namespace declaration introduces
4776         a "partial" root declaretion space.
4777         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
4778         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
4779         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
4780         from 'current_namespace.SlaveDeclSpace'.
4781         (namespace_declaration): Likewise.
4782         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
4783         check.  It can't happen now.
4784         * decl.cs (DeclSpace.LookupType): Likewise.
4785         * driver.cs (MainDriver): Sanity check.
4786
4787 2006-08-01  Raja R Harinath  <rharinath@novell.com>
4788
4789         * decl.cs (DeclSpace.FindNestedType): Remove.
4790         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
4791         LookupTypeContainer to get the container of the nested type.
4792         * class.cs (TypeContainer.FindNestedType): Make non-override.
4793
4794 2006-07-31  Raja R Harinath  <rharinath@novell.com>
4795
4796         * decl.cs (DeclSpace.PartialContainer): Move field from ...
4797         * class.cs (TypeContainer.PartialContainer): ... here.
4798         (TypeContainer.AddBasesForPart): New helper.
4799         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
4800         instead.
4801         * cs-parser.jay (current_class): Convert to DeclSpace.
4802         (struct_declaration, interface_declaration, class_declaration):
4803         Use AddBasesForPart instead of .Bases directly.
4804         * const.cs, iterators.cs: Update to changes.
4805
4806 2006-07-28  Raja R Harinath  <rharinath@novell.com>
4807
4808         * class.cs (TypeContainer.AddMemberType): Rename from
4809         AddToTypeContainer.
4810         (TypeContainer.AddMember): Rename from AddToMemberContainer.
4811         (AddTypeContainer): New.  Combine AddClassOrStruct and
4812         AddInterface.
4813         (AddPartial): Update.  Add 'is_partial' argument.
4814         * roottypes.cs: Update to changes.
4815         * cs-parser.jay (push_current_class): New helper for handling
4816         current_container and current_class.
4817         (struct_declaration, interface_declaration, class_declaration):
4818         Use it.
4819
4820 2006-07-26  Raja R Harinath  <rharinath@novell.com>
4821
4822         * roottypes.cs: Rename from tree.cs.
4823
4824         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
4825         * tree.cs (Tree, ITreeDump): Remove types.
4826         * rootcontext.cs (tree, Tree): Remove fields.
4827         (root, ToplevelTypes): New.
4828         * *.cs: Update to rename.
4829
4830         * tree.cs (Tree.RecordDecl): Remove.
4831         (RootTypes.AddToTypeContainer): Record the toplevel type in its
4832         namespace here.
4833         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
4834
4835 2006-07-23  Raja R Harinath  <harinath@gmail.com>
4836
4837         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
4838         DoFlowAnalysis and OmitStructFlowAnalysis here.
4839         (ec.With): Rename from WithUnsafe and generalize.
4840         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
4841         (ec.WithFlowAnalyis): New.
4842         * ecore.cs, expression.cs, statement.cs: Update.
4843
4844 2006-07-22  Raja R Harinath  <harinath@gmail.com>
4845
4846         * statement.cs (Block.ResolveMeta): Simplify slightly.
4847
4848         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
4849         multiple boolean fields.  Convert InUnsafe, constant_check_state,
4850         check_state to flags.
4851         (CheckState, ConstantCheckState): Update.
4852         (InUnsafe): New read-only property.
4853         (FlagsHandle): Rename from CheckStateHandle and convert to handle
4854         arbitrary flags.
4855         (WithUnsafe): New helper similar to WithCheckState.
4856         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
4857         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
4858
4859 2006-07-21  Raja R Harinath  <rharinath@novell.com>
4860
4861         Make comparisons use the same IL irrespective of whether they're
4862         in a 'checked' or 'unchecked' context: one of the issues in #78899
4863         * codegen.cs (EmitContext.CheckState): Make read-only property.
4864         (EmitContext.ConstantCheckState): Likewise.
4865         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
4866         helper that implement a save/restore stack for CheckState
4867         values.  This is the only way to change check-state.
4868         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
4869         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
4870         (CheckedExpr.EmitBranchable): New forwarding method.
4871         (UnCheckedExpr): Likewise.
4872         * statement.cs (Block.ResolveMeta): Use WithCheckState.
4873         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
4874         (Checked.Resolve, checked.DoEmit): Likewise.
4875
4876 2006-07-20  Miguel de Icaza  <miguel@novell.com>
4877
4878         * anonymous.cs: Cache the resolved anonymous delegate, and return
4879         this so that the ResolveTopBlock is only triggered once, not
4880         twice.
4881
4882         Currently we trigger ResolvetopBlock twice due to a first pass of
4883         argument check compatibility, and a second pass that does the
4884         actual resolution.   
4885         
4886 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4887
4888         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
4889         modifiers.
4890         * rootcontext.cs (Reset): Add helper_classes.
4891
4892 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4893
4894         A fix for #78860
4895         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
4896         correctly.
4897
4898 2006-07-13  Miguel de Icaza  <miguel@novell.com>
4899
4900         * statement.cs (Lock): Handle expressions of type
4901         TypeManager.null_type specially.  Fixes #78770
4902
4903 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4904
4905         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
4906         to an event.
4907
4908 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4909
4910         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
4911         for accessors as well.
4912         * ecore.cs (EventExpr): Add AccessorTable.
4913
4914 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
4915
4916         A fix for #78738
4917         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
4918         for CS0122 where appropriate.
4919         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
4920         level attributes.
4921         (Filter): Assembly can be null in the case of top level attributes.
4922
4923 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
4924
4925         A fix for #78690
4926
4927         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
4928         is done at global level.
4929
4930 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4931
4932         A fix for #77002, Implemented TypeForwarder support.
4933
4934         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
4935         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
4936         * typemanager.cs (): Add type_forwarder_attr_type.
4937
4938 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4939
4940         * report.cs: Add CS0469 warning.
4941
4942 2006-06-21  Martin Baulig  <martin@ximian.com>
4943
4944         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
4945         the `try'-block, so we also report CS0016 etc. there.
4946
4947 2006-06-21  Martin Baulig  <martin@ximian.com>
4948
4949         * delegate.cs
4950         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
4951
4952 2006-06-21  Martin Baulig  <martin@ximian.com>
4953
4954         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
4955         also report CS1686 for parameters.
4956
4957 2006-06-21  Martin Baulig  <martin@ximian.com>
4958
4959         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
4960         instead of an error if the value is not implicitly convertible to
4961         the switch types; fixes #77964.
4962
4963 2006-06-21  Raja R Harinath  <rharinath@novell.com>
4964
4965         Fix #78673
4966         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
4967         FieldBuilder is null.
4968
4969         Fix #78662
4970         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
4971         'left' and 'right' before error-checking.
4972
4973 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
4974
4975         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
4976         Fixed bug #78601.
4977         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
4978         (FieldExpr.DoResolve): likewise.
4979         (PropertyExpr.InstanceResolve): likewise.
4980         (EventExpr.InstanceResolve): likewise. 
4981
4982 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
4983
4984         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
4985         attribute applicable tests for attribute argument.
4986
4987 2006-06-02  Raja R Harinath  <rharinath@novell.com>
4988
4989         Fix #78079
4990         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
4991         (Binary.OverloadResolve_PredefinedIntegral): New.
4992         (Binary.OverloadResolve_PredefinedFloating): New.
4993         (Binary.OverloadResolve_PredefinedString): New.
4994         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
4995         Follow the standard more closely, and treat numeric promotions in
4996         terms of overload resolution.
4997         (Binary.CheckShiftArguments): Simplify.
4998
4999 2006-06-01  Raja R Harinath  <rharinath@novell.com>
5000
5001         * flowanalysis.cs (MyBitVector): Simplify representation.
5002         (MyBitVector.Clone): Avoid allocating BitArray.
5003         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
5004         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
5005         (*): Update.  Change all references to MyBitVector.And and
5006         MyBitVector.Or to &= and |=.
5007
5008 2006-05-29  Raja R Harinath  <rharinath@novell.com>
5009
5010         Fix cs0231-[34].cs.
5011         * cs-parser.jay (formal_parameter_list): Extend the pattern below
5012         to param arguments too.
5013
5014 2006-05-26  Miguel de Icaza  <miguel@novell.com>
5015
5016         * cs-parser.jay: Catch another parsing form for arglist being
5017         followed by other arguments.  Fixes #78313.
5018
5019 2006-05-24  Raja R Harinath  <rharinath@novell.com>
5020
5021         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
5022         checking of out parameters to ...
5023         (FlowBranchingToplevel.Merge): ... here.
5024         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
5025         set, propagate the origin upward, and only complain if there was
5026         no other error.
5027         (FlowBranchingException.AddContinueOrigin): Likewise.
5028         (FlowBranchingException.AddReturnOrigin): Likewise.
5029         (FlowBranchingException.AddGotoOrigin): Likewise.       
5030
5031 2006-05-23  Raja R Harinath  <rharinath@novell.com>
5032
5033         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
5034         unreachable, skip it.
5035         (FlowBranchingException.Merge): Always propagate jumps, even if
5036         the finally block renders subsequent code unreachable.
5037
5038 2006-05-18  Raja R Harinath  <rharinath@novell.com>
5039
5040         Fix #77601
5041         * statement.cs (Goto.Resolve): Move responsibility for resolving
5042         'goto' to FlowBranching.AddGotoOrigin.
5043         (Goto.SetResolvedTarget): New.  Callback to set the
5044         LabeledStatement that's the target of the goto.
5045         (Goto.DoEmit): Use Leave instead of Br when crossing an
5046         unwind-protect boundary.
5047         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
5048         LookupLabel and adjust to new semantics.
5049         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
5050         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
5051         Goto.SetResolvedTarget to update target.
5052         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
5053         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
5054         AddBreakOrigin & co.  Delay propagation until ...
5055         (FlowBranchingException.Merge): ... this.
5056
5057         * statement.cs (Block.Resolve): Always depend on flow-branching to
5058         determine unreachability.  Kill workaround that originally emitted
5059         only one statement after an "unreachable" label (see infloop in
5060         test-515.cs).
5061
5062         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
5063         This is still "wrong", but anything better would probably need a
5064         multi-pass algorithm.
5065         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
5066         usage vector.  Force current usage vector to be reachable, to
5067         optimistically signify backward jumps.
5068         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
5069         detected.
5070         (FlowBranchingLabeled.Merge): New.  If no backward jump was
5071         detected, return the original salted-away usage vector instead,
5072         updated with appropriate changes.  Print unreachable warning if
5073         necessary.
5074         * statement.cs (Block.Resolve): Don't print unreachable warning on
5075         a labeled statement.
5076
5077 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
5078
5079         * driver.cs: Pass filename without path to AssemblyBuilder's 
5080         AddResourceFile. Fixes bug #78407.
5081
5082 2006-05-17  Raja R Harinath  <rharinath@novell.com>
5083
5084         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
5085         * flowanalysis.cs (FlowBranchingLabeled): ... here.
5086         (FlowBranching.MergeChild): Overwrite
5087         reachability information from Labeled branchings too.
5088
5089 2006-05-16  Raja R Harinath  <rharinath@novell.com>
5090
5091         * statement.cs (Goto.Resolve): Merge jump origins here ...
5092         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
5093
5094         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
5095         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
5096         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
5097         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
5098         here, ...
5099         * statement.cs (Goto.Resolve): ... not here.
5100         (Goto.Emit): Remove CS1632 check.
5101
5102 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
5103
5104         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
5105         error message.
5106
5107 2006-05-11  Raja R Harinath  <rharinath@novell.com>
5108
5109         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
5110         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
5111         (FlowBranchingException.Label): Likewise.
5112
5113         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
5114         given value.
5115         (MyBitVector.Or): Use it to avoid losing information (Count).
5116         (FlowBranching.MergeOrigins): Likewise.
5117
5118         * flowanalysis.cs (UsageVector.IsDirty): Remove.
5119         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
5120         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
5121         (UsageVector.ToString): Simplify.
5122         (UsageVector.MergeSiblings): Move here from ...
5123         (FlowBranching.Merge): ... here.
5124         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
5125         not a MyBitVector.
5126
5127 2006-05-10  Raja R Harinath  <rharinath@novell.com>
5128
5129         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
5130         null bitvector is treated as all-true.
5131
5132         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
5133         (MyBitVector): Rationalize invariants.  'vector != null' implies
5134         that we have our own copy of the bitvector.  Otherwise,
5135         'InheritsFrom == null' implies all inherited bits are true.
5136
5137 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
5138
5139         * statement.cs (LocalInfo): Add IsConstant.
5140         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
5141         local variable for constants.
5142
5143 2006-05-09  Raja R Harinath  <rharinath@novell.com>
5144
5145         * flowanalysis.cs (MyBitVector.Empty): New.
5146         (MyBitVector): Don't allow InheritedFrom to be null.
5147         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
5148         (UsageVector, FlowBranching): Update to changes.
5149
5150         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
5151         recursion.  The 'Parent == null' condition isn't sufficient for
5152         anonymous methods.
5153         (FlowBranching.AddBreakOrigin): Likewise.
5154         (FlowBranching.AddContinueOrigin): Likewise.
5155         (FlowBranching.AddReturnOrigin): Likewise.
5156         (FlowBranching.StealFinallyClauses): Likewise.
5157         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
5158         (FlowBranching.CheckOutParameters): Likewise.
5159         (FlowBranchingToplevel): Terminate all the above recursions here.
5160         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
5161         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
5162
5163         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
5164         toplevel block.
5165         (FlowBranchingToplevel): New.  Empty for now.
5166         (FlowBranching.MergeTopBlock): Update.
5167         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
5168         branching for the anonymous delegate.
5169         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
5170
5171         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
5172         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
5173         information at the start of the merge.  Reorganize.
5174
5175 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5176
5177         * class.cs (MethodData.Define): Method cannot implement interface accessor.
5178
5179 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5180
5181         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
5182         to newly introduced ctor.
5183
5184         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
5185         message to one place.
5186         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
5187         global namespace.
5188
5189 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5190
5191         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
5192
5193         * ecore.cs (Expression.ResolveAsConstant): Updated.
5194
5195         * statement.cs (ResolveMeta): Updated.
5196
5197 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
5198
5199         * cs-parser.jay: __arglist cannot be used in initializer.
5200
5201 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
5202
5203         A fix for #77879
5204         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
5205         private types.
5206
5207 2006-05-05  Raja R Harinath  <rharinath@novell.com>
5208
5209         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
5210         (LabeledStatement): Add 'name' parameter.
5211         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
5212         (Block.AddLabel): Update to changes.
5213         * cs-parser.jay (labeled_statement): Likewise.
5214
5215         * flowanalysis.cs (BranchingType.Labeled): New.
5216         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
5217         (FlowBranchingLabeled): New.  Does nothing for now, but will
5218         eventually handle 'goto' flows.
5219         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
5220         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
5221         that's terminated ...
5222         (Block.Resolve): ... here.
5223
5224         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
5225         (UsageVector.MergeFinallyOrigins): Likewise.
5226         (FlowBranching.InTryOrCatch): Likewise.
5227         (FlowBranching.AddFinallyVector): Likewise.
5228         (FlowBranchingException): Update to changes.
5229
5230         Fix #78290
5231         * statement.cs (Return.Resolve): Move error checking to ...
5232         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
5233         (FlowBranchingException): Handle return origins like break and
5234         continue origins.
5235         (FlowBranching.UsageVector.CheckOutParameters): Remove.
5236
5237 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
5238
5239         A fix for #76122
5240         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
5241         filter.
5242
5243 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
5244
5245         A fix for #77543
5246         * class.cs (MethodData.Define): Do public accessor check only when method
5247         implements an interface.
5248
5249 2006-05-04  Raja R Harinath  <rharinath@novell.com>
5250
5251         Remove special handling of 'break'
5252         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
5253         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
5254         (UsageVector.Break): Remove.
5255         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
5256         reachability.
5257         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
5258
5259         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
5260         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
5261
5262 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
5263
5264         A fix for #75726
5265         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
5266         be the interface member.
5267
5268 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
5269
5270         A fix for #60069
5271         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
5272         for emitting small (int) values.
5273
5274 2006-05-03  Raja R Harinath  <rharinath@novell.com>
5275
5276         Fix #59427
5277         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
5278         control-flow passes through the 'finally' after merging-in all the
5279         control-flows from 'try' and the 'catch' clauses.
5280
5281         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
5282         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
5283         always true at the only non-recursive entry point.
5284         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
5285         FlowBranchingBreakable.
5286         (FlowBranchingLoop): Remove.
5287         * statement.cs (Return.DoResolve): Update to changes.
5288
5289         Fix #76471, #76665
5290         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
5291         (FlowBranching.CreateBranching): Handle it: create a
5292         FlowBranchingContinuable.
5293         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
5294         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
5295         except that it handles the 'continue' command.
5296         (FlowBranching.UsageVector.MergeOrigins): Rename from
5297         MergeBreakOrigins.
5298         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
5299         except that it overrides AddContinueOrigin.
5300         (FlowBranchingException): Override AddContinueOrigin, similar to
5301         AddBreakOrigin.
5302         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
5303         Create a new branching around the embedded statement.
5304         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
5305         control flow after the embedded statement.
5306         (Continue.Resolve): Move all error checking to AddContinueOrigin.
5307
5308         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
5309         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
5310         FlowBranchingBreakable.
5311         (FlowBranchingSwitch): Remove.
5312
5313         Fix test-503.cs
5314         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
5315         error reporting to ...
5316         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
5317         Rename from 'AddBreakVector'.  Add new location argument.  Return
5318         a bool indicating whether the 'break' crosses an unwind-protect.
5319         (FlowBranchingException.AddBreakOrigin): Add.
5320         (FlowBranchingException.Merge): Propagate 'break's to surrounding
5321         flowbranching after updating with the effects of the 'finally'
5322         clause.
5323         (FlowBranchingBreakable): New common base class for
5324         FlowBranchingLoop and FlowBranchingSwitch.
5325
5326         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
5327         embedded statement.
5328         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
5329
5330 2006-05-02  Raja R Harinath  <rharinath@novell.com>
5331
5332         * statement.cs (Do.Resolve): If the loop is infinite, set the
5333         barrier.
5334         (While.Resolve, For.Resolve): Set a barrier after the embedded
5335         statement.  There's no direct control flow that goes from the end
5336         of the embedded statement to the end of the loop.
5337         * flowanalysis.cs (FlowBranching.Infinite): Remove.
5338         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
5339         above ensure that the reachability is correctly computed.
5340
5341         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
5342         (UsageVector.MergeBreakOrigins): If the current path is
5343         unreachable, treat it as if all parameters/locals are initialized.
5344         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
5345         infinite loops before merging-in break origins.
5346
5347         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
5348         (Reachability.Reachable): Split part into ...
5349         (Reachability.Unreachable): ... this.  Simplify.
5350         (Reachability.IsUnreachable): Use 'Unreachable' instead.
5351
5352         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
5353         (Reachability.SetThrowsSometimes): Likewise.
5354         (FlowBranchingBlock.MergeTopBlock): Don't compare against
5355         TriState.Always, use corresponding property.
5356         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
5357         (Block.Resolve): Likewise.  Remove some redundant checks.
5358
5359 2006-05-02  Raja R Harinath  <harinath@gmail.com>
5360
5361         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
5362         (Reachability.Meet): Don't bother checking AlwaysThrows --
5363         barrier is always set.
5364         (FlowBranchingBlock.Merge): Likewise.
5365
5366 2006-05-01  Raja R Harinath  <harinath@gmail.com>
5367
5368         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
5369         checks for unreachable.
5370
5371 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
5372
5373         A fix for #77980
5374         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
5375
5376         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
5377         whether field is really assigned.
5378
5379 2006-04-30  Raja R Harinath  <harinath@gmail.com>
5380
5381         * flowanalysis.cs (Reachability): Make 4-argument constructor
5382         private.
5383         (Reachability.Meet): Rename from 'And'.  Remove static variant.
5384         (Reachability.Always): Rename from the highly misleading
5385         'Reachability.Never'.
5386         (FlowBranching.Merge): Update to changes.  Mark an impossible
5387         situation with a 'throw'.
5388         (*): Update to changes.
5389
5390 2006-04-29  Raja R Harinath  <harinath@gmail.com>
5391
5392         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
5393         Remove 'Undefined'.
5394         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
5395         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
5396         (*): Update to changes.
5397         * statement.cs: Update to changes.
5398
5399 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
5400
5401         A fix for #78049
5402         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
5403
5404 2006-04-28  Raja R Harinath  <harinath@gmail.com>
5405
5406         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
5407         dummy UsageVector.
5408
5409         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
5410         argument to two arguments: an usage-vector and a bool.  Move call
5411         to FlowBranching.Merge () ...
5412         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
5413
5414         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
5415         handling of loop and switch reachability to ...
5416         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
5417
5418 2006-04-27  Raja R Harinath  <harinath@gmail.com>
5419
5420         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
5421         handling to FlowBranchingLoop.InLoop.
5422         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
5423
5424 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
5425
5426         A fix for #78115
5427         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
5428         anonymous method is allowed from AnonymousContainer here.
5429
5430         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
5431
5432 2006-04-24  Raja R Harinath  <rharinath@novell.com>
5433
5434         Fix #78156
5435         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
5436
5437 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
5438
5439         A fix for #49011.
5440         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
5441         (DoubleConstant.Reduce): Ditto.
5442
5443 2006-04-23  Raja R Harinath  <rharinath@novell.com>
5444
5445         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
5446         Remove 'lvalue_right_side' argument.  Move parts to ...
5447         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
5448         (LocalVariable.DoResolveLValue): ... these.
5449
5450 2006-04-21  Raja R Harinath  <rharinath@novell.com>
5451
5452         Fix cs1655.cs
5453         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
5454         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
5455         (LocalVariableReference.DoResolveBase): Use it to implement new
5456         CS1655 check.
5457         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
5458         (Argument.Resolve): Simplify.  Move CS1510 check ...
5459         * ecore.cs (Expression.ResolveLValue): ... here.
5460         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
5461         (PropertyExpr.DoResolveLValue): Likewise.
5462         (FieldExpr.Report_AssignToReadonly): Likewise.
5463         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
5464         LValueMemberAccess or LValueMemberOutAccess on instance depending
5465         on it.
5466         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
5467         DoResolve as appropriate.
5468
5469 2006-04-20  Raja R Harinath  <rharinath@novell.com>
5470
5471         Fix #75800
5472         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
5473         implicit conversions on 'out' and 'ref' arguments.
5474
5475         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
5476         improve clarity.  Remove dead code.
5477
5478         Fix #66031
5479         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
5480         (Catch.Resolve): Resolve VarBlock if it exists.
5481
5482 2006-04-19  Miguel de Icaza  <miguel@novell.com>
5483
5484         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
5485         twice, this was some residual code, the enumerator was emitted
5486         properly in the two branche of if later.
5487
5488 2006-04-19  Raja R Harinath  <rharinath@novell.com>
5489
5490         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
5491         cast is never an lvalue.
5492         (Cast.DoResolve, Cast.ResolveRest): Combine.
5493         (Argument.Emit): Simplify slightly.  Move 'Expr is
5494         IMemoryLocation' check ...
5495         (Argument.Resolve): ... here.
5496         (Argument.Error_LValueRequired): Remove.  Inline into only user.
5497
5498         Simplifications.  Fix cs0191-2.cs
5499         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
5500         CS1649 and CS1651 to ...
5501         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
5502         the actual selection of the error code and message to a lookup
5503         table.  Add a dummy return value to simplify callsites.
5504         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
5505         readonly fields of other instances of the same type.  Move CS0197
5506         warning from ...
5507         * expression.cs (Argument.Resolve): ... here.  Simplify code.
5508         Ensure that ec.InRefOutArgumentResolving is only set during LValue
5509         resolution of an out or ref argument.  The code simplification
5510         above uses this invariant.
5511
5512 2006-04-18  Raja R Harinath  <rharinath@novell.com>
5513
5514         Possibly fix #77752.  Fix cs1690-[4-7].cs.
5515         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
5516         CheckMarshallByRefAccess.  Drop parameter.
5517         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
5518         warning.
5519         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
5520         InstanceExpression.
5521         * report.cs (AllWarnings): Add CS1690.
5522         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
5523         for ref access too.
5524         (LocalVariableReference.DoResolveBase): Update.
5525
5526 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5527
5528         * class.cs (MethodOrOperator): Moved common parts from method class.
5529         detect obsolete attributes.
5530         (Method.Define): Simplified as it reuses code from base.
5531         (Constructor.ValidAttributeTargets): Fixed issue found during
5532         refactoring.
5533         (Destructor.ValidAttributeTargets): Fixed issue found during
5534         refactoring.
5535         (Operator): Finished refactoring set off by #78020. Operator class is now
5536         ordinary method class.
5537
5538         * anonymous.cs: Updated.
5539
5540         * decl.cs (DeclSpace): Add IsGeneric
5541
5542 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5543
5544         * class.cs (Constructor.Emit): Don't emit the attributes twice.
5545
5546 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5547
5548         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
5549         detect obsolete attributes.
5550         (Method.CreateEmitContext): Moved to MethodOrOperator.
5551
5552 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5553
5554         A fix for #78048.
5555         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
5556         customized exception to make crash detection easier.
5557         (MethodOrOperator): Started to work on new base class for methods and
5558         operators.
5559         (Method): Derives from MethodOrOperator.
5560         (Constructor.Emit): Emits its own attributes.
5561         (AbstractPropertyEventMethod.Emit): Ditto.
5562         (Operator): Derives from MethodOrOperator, will refactor fully in extra
5563         patch.
5564         (Operator.Emit): It's temporary more tricky than should be.
5565         
5566         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
5567
5568         * report.cs (InternalErrorException): Add ctor with inner exception.
5569
5570 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
5571
5572         A fix for #76744.
5573         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
5574         only not visible.
5575
5576 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
5577
5578         A fix for #77916.
5579         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
5580         array.
5581
5582 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5583
5584         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
5585         attribute is present and Guid not.
5586         (Interface.ApplyAttributeBuilder): Ditto.
5587
5588         * attribute.cs: Add error message.
5589
5590 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5591
5592         A fix for #78020.
5593
5594         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
5595         sources (it's composite) so hold them in extra array as they are used in
5596         Emit phase only. It worked in the previous versions by mistake.
5597         (Attribute.Emit): Emit attribute for more owners when exist.
5598
5599         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
5600         it has now different behaviour.
5601
5602 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
5603
5604         * constant.cs (Constant.IsDefaultInitializer): New method.
5605
5606         * class.cs: Updated.
5607
5608         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
5609         re-initialize default values. It saves KBs almost for every assembly.
5610         Thanks Zoltan for the idea.
5611         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
5612         (ArrayCreation.DoResolve): Resolve only once.
5613         (ArrayCreation.Emit): Emit static initializer only when it is faster.
5614         (ArrayCreation.GetAttributableValue): Cope with optimized values.
5615
5616 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
5617
5618         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
5619         From #77961.
5620
5621 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5622
5623         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
5624         in an embedded statement too.
5625
5626 2006-04-01  Raja R Harinath  <rharinath@novell.com>
5627
5628         Fix #77958
5629         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
5630
5631 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5632
5633         A fix for #77966.
5634
5635         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
5636         was not specified.
5637
5638         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
5639
5640 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
5641
5642         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
5643         phase.
5644
5645         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
5646         LocalTemporary change.
5647
5648         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
5649         TypeContainer.
5650         (ClassOrStruct.DefineFieldInitializers): Implemented static field
5651         initializers optimization.
5652         (ClassOrStruct.TypeAttr): Moved from modifiers.
5653         (Constructor.CheckBase): Don't crash when static ctor has parameters.
5654         (FieldBase.ResolveInitializer): Resolves initializer.
5655         (FieldBase.HasDefaultInitializer): New property.
5656
5657         * cs-parser.jay: Removed message.
5658
5659         * expression.cs (CompilerGeneratedThis): New specialization.
5660
5661         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
5662
5663 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
5664
5665         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
5666
5667 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5668
5669         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
5670         be now EnumConstants only.
5671
5672 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5673
5674         * attribute.cs, driver.cs: Reset more caches.
5675
5676 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5677
5678         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
5679
5680 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5681
5682         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
5683         for easier reuse. Updated all overrides.
5684         (IntegralConstant): New base class for all integral constants.
5685         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
5686         of the constant range, report custom error.
5687         (UIntConstant.Reduce): Fixed uint conversion.
5688
5689         * ecore.cs, literal.cs: Reduce updates.
5690
5691 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5692
5693         A fix for #75813.
5694
5695         * class.cs (Constructor.Define): Removed extra if for default ctors.
5696         A patch from Atsushi Enomoto.
5697
5698 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5699
5700         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
5701         GetAttributableValue.
5702
5703         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
5704         when required.
5705
5706         * convert.cs (ImplicitConversionRequired): Error message moved to
5707         DoubleLiteral.
5708
5709         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
5710         automatic implicit conversion of an output value.
5711         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
5712
5713         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
5714         conversion.
5715         (TypeOf.GetAttributableValue): Add extra handling for object type.
5716
5717         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
5718         special error message.
5719
5720 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
5721
5722         * class.cs (Constructor.Emit): Don't crash when struct ctor is
5723         InternalCall.
5724         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
5725         compatible with MS runtime.
5726
5727 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
5728
5729         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
5730         attribute arguments here.
5731
5732         * class.cs (Indexer.Define): The check was moved to attribute class.
5733
5734 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
5735
5736         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
5737         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
5738         easier.
5739
5740 2006-03-22  Raja R Harinath  <rharinath@novell.com>
5741
5742         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
5743         mcs to keep code differences small.
5744         * attribute.cs (Attribute.GetParameterDefaultValue): New.
5745         * typemanager.cs (parameter_default_value_attribute_type): New.
5746         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
5747         CS1908 check.
5748
5749 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5750
5751         * expression.cs (StringConcat.Append): Reverted back to no warning state.
5752
5753 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5754
5755         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
5756
5757         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
5758         the blocks too.
5759
5760 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
5761
5762         * doc-bootstrap.cs : fix build.
5763
5764 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5765
5766         * expression.cs (StringConcat.Append): Issue a warning when empty string
5767         is going to append.
5768
5769 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5770
5771         * assign.cs (CompoundAssign.ResolveSource): Removed.
5772
5773         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
5774         clean up.
5775
5776         * class.cs (TypeContainer.FindMethods): Removed.
5777         (TypeContainer.CheckMemberUsage): Made static.
5778
5779         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
5780
5781         * constant.cs (CheckRange): Removed unused type argument.
5782         (CheckUnsigned): Removed unused type argument.
5783
5784         * cs-parser.jay: Updated after MemberAccess clean up.
5785         Uses Length for empty string test.
5786
5787         * cs-tokenizer.cs: Uses Length for empty string test.
5788         (IsCastToken): Made static.
5789         (is_hex): Made static.
5790         (real_type_suffix): Made static.
5791
5792         * decl.cs (SetupCache): Made static.
5793         (OnGenerateDocComment): Removed unused ds argument.
5794
5795         * delegate.cs (VerifyDelegate): Removed unused argument.
5796
5797         * doc.cs: Uses Length for empty string test.
5798
5799         * driver.cs: Uses Length for empty string test.
5800
5801         * enum.cs (IsValidEnumType): Made static
5802
5803         * expression.cs (EnumLiftUp): Removed unused argument.
5804         (ResolveMethodGroup): Ditto.
5805         (BetterConversion): Ditto.
5806         (GetVarargsTypes): Ditto.
5807         (UpdateIndices): Ditto.
5808         (ValidateInitializers): Ditto.
5809         (MemberAccess.ctor): Ditto.
5810         (GetIndexersForType): Ditto.
5811
5812         * flowanalysis.cs: (MergeFinally): Removed unused argument.
5813
5814         * iterators.cs: Updated after MemberAccess clean up.
5815
5816         * location.cs: Uses Length for empty string test.
5817
5818         * namespace.cs: Uses Length for empty string test.
5819
5820          * report.cs (CheckWarningCode): Made static.
5821
5822         * statement.cs (LabeledStatement): Removed unused argument.
5823
5824         * typemanager.cs (FilterNone): Removed.
5825
5826 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5827
5828         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
5829         obsolete.
5830
5831         * class.cs: Updated.
5832
5833 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5834
5835         * cs-parser.jay.cs: __arglist is not allowed for delegates.
5836
5837 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5838
5839         A fix for #77822.
5840
5841         * expression.cs (VerifyArgumentsCompat): Reverted to double error
5842         reporting, it's more tricky than I thought.
5843
5844 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5845
5846         A fix for #77816.
5847
5848         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
5849         host container.
5850         (AnonymousMethod.ImplicitStandardConversionExists): New method.
5851         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
5852         Add more error reporting; Fixed issue with params.
5853
5854         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
5855
5856         * cs-parser.jay: AnonymousMethod requires host container.
5857
5858         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
5859
5860 2006-03-18  Raja R Harinath  <harinath@gmail.com>
5861
5862         * class.cs: Change 'TypeContainer ds' constructor argument to
5863         'DeclSpace parent'.  Some classes were missed below due to
5864         different naming convention.
5865
5866         * class.cs (MemberCore.Parent): Delete.  This makes the
5867         ParentContainer changes below enforceable by the compiler.
5868
5869         Treat pointers to enclosing declaration space as 'DeclSpace', not
5870         'TypeContainer'.
5871         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
5872         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
5873
5874         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
5875         of TypeContainer.
5876         (Block.AddThisVariable): Likewise.
5877         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
5878         (AbstractPropertyEventMethod.Emit): Likewise.
5879         (AbstractPropertyEventMethod.EmitMethod): Likewise.
5880         (GetMethod.Define, SetMethod.Define): Likewise.
5881         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
5882         (DelegateMethod.EmitMethod): Likewise.
5883
5884         Fix regression test-partial-13.cs.
5885         Rationalize use of PartialContainer.  Ensure that the partial
5886         class semantics can be tied to type-correctness, i.e., any
5887         violation will cause a compile error.
5888         * class.cs, const.cs: Access all fields that belong to class
5889         TypeContainer via ParentContainer.  Arguments of EmitContexts and
5890         Resolve()-like functions still use 'Parent'.
5891
5892         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
5893         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
5894         (PropertyMethod.CheckModifiers): Remove unused argument.
5895         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
5896         DeclSpace.
5897
5898 2006-03-17  Raja R Harinath  <harinath@gmail.com>
5899
5900         Make semantics of PartialContainer simpler.
5901         * decl.cs (DeclSpace.IsPartial): Remove.
5902         * class.cs (TypeContainer.IsPartial): Likewise.
5903         (TypeContainer..ctor): Set PartialContainer to point to self.
5904         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
5905         (TypeContainer.FindNestedType): Likewise.
5906         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
5907
5908 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
5909
5910         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
5911
5912 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5913
5914         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
5915         classes.
5916
5917 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5918
5919         * class.cs (Operator.Define): An error for base conversion was not
5920         reported correctly.
5921
5922 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
5923
5924         * iterator.cs : yield break is allowed in try statement which has
5925           catch clauses. Fixed bug #77767.
5926
5927 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
5928
5929         A fix for #77593, #77574.
5930
5931         * class.cs (MethodCore.CheckBase): Another if for operator.
5932
5933 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
5934
5935         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
5936         were not resolved
5937
5938         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
5939         (DelegateCreation.ImplicitStandardConversionExists): New method for just
5940         conversion test.
5941         
5942         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
5943         not needed.
5944
5945         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
5946         Updated after another emitcontext usage was clean up. It should help us to
5947         synchronize with gmcs easier.
5948
5949 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
5950
5951         A fix for #77353.
5952
5953         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
5954         (Event.Define): ditto
5955         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
5956
5957         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
5958         Removed redundant code and set NewSlot for Invoke method too.
5959
5960         * parameter.cs (Parameters.ctor): Add custom, type ctor.
5961         (Parameters.MergeGenerated): New method. Use this method when you merge
5962         compiler generated argument with user arguments.
5963
5964 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
5965
5966         * attribute.cs (ResolveAsTypeTerminal): Removed.
5967
5968         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
5969         specialization for predefined types; 30% speed up.
5970         Finally placed obsolete check to right place.
5971         (Expression.ResolveType): Removed.
5972
5973         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
5974         Updated after ResolveType was removed.
5975
5976         * expression.cs (Cast.ctor): Check void cast.
5977         (Binary.ResolveAsTypeTerminal): Is never type.
5978         (Conditional.ResolveAsTypeTerminal): Is never type.
5979
5980         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
5981
5982 2006-03-01  Raja R Harinath  <rharinath@novell.com>
5983
5984         Fix #77679.
5985         * expression.cs (ParameterReference.DoResolveBase): Change return
5986         type to bool.
5987         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
5988         Update.
5989
5990         Fix #77628.
5991         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
5992
5993         Fix #77642.
5994         * typemanager.cs (GetFullNameSignature): Don't nullref on
5995         protected accessors.
5996
5997 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
5998
5999         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
6000         these two separated members to simplify the code.
6001         (Attribute.Resolve): Refactored to use new fields and methods.
6002         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
6003         implemented obsolete attribute checking.
6004         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
6005         implemented obsolete checking again. It look line never ending quest ;-)
6006         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
6007
6008         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
6009
6010         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
6011
6012         *class.cs (Property.Define): Add RegisterProperty call.
6013
6014         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
6015         argument groups (only 2).
6016
6017         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
6018         encoding expression to arguments.
6019         (Expression.ExprClassToResolveFlags): Just turned to property.
6020
6021         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
6022         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
6023         optimized as well as implemented support for zero-length attributes.
6024
6025         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
6026         Add caching of PropertyInfo's.
6027
6028 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
6029
6030         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
6031         error multiple times.
6032
6033 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
6034
6035         New partial class implementation.
6036         A fix for #77027, #77029, #77403
6037
6038         * attribute.cs (Attributable): Made attributes protected.
6039
6040         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
6041         the replacements of ClassPart and PartialContainer.
6042         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
6043         (TypeContainer.AddInterface): Ditto.
6044         (TypeContainer.AddPartial): The main method for partial classes. It checks
6045         for errors and merges ModFlags and attributes. At the end class is added to
6046         partial_parts list.
6047         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
6048         required here.
6049         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
6050         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
6051         from the rest of partial classes.
6052         (TypeContainer.GetClassBases): Simplified.
6053         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
6054         DefineType.
6055         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
6056         (TypeContainer.HasExplicitLayout): Uses Flags now.
6057         (PartialContainer): Removed.
6058         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
6059         (StaticClass): Was merged with Class.
6060         (Class.GetClassBases): class and static class bases are verified here.
6061         (Class.TypeAttr): Added static attributes when class is static.
6062         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
6063         (MemberBase): In some cases we need to call parent container for partial
6064         class. It should be eliminated but it's not easy now.
6065
6066         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
6067
6068         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
6069         partial classed to accumulate class comments.
6070         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
6071
6072         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
6073
6074         * driver.cs (MainDriver): Tree.GetDecl was removed.
6075
6076         * modifiers.cs (Modifiers): Add partial modifier.
6077
6078         * tree.cs (Tree.decl): Removed.
6079         (RootTypes): Started to use this class more often for root types
6080         specializations.
6081
6082 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6083
6084         A fix for #77615
6085
6086         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
6087         external interface does not have an attribute.
6088
6089 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6090
6091         Another prerequisites for new partial classs implementation.
6092         
6093         * attribute.cs (Attribute.Equal): Implemented.
6094         (Attribute.Emit): Changed as attributes can be applied more than twice.
6095         (Attributes.Emit): Check for duplicate attributes here.
6096
6097         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
6098         as a parameter, clean-up.
6099
6100 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6101
6102         A fix for #77485
6103
6104         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
6105         contains obsolete attribute check which can in some cases look for base
6106         type of current class which is not initialized yet.
6107         (TypeContainer.BaseType): Replacement of ptype.
6108
6109         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
6110
6111 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6112
6113         First of prerequisites for new partial classs implemention.
6114         
6115         * attribute.cs (Attributable): Extended by ResolveContext;
6116         Attributes finally have correct context for resolving in all cases.
6117         (AttachTo): Attribute owner is assigned here.
6118
6119         * codegen.cs (IResolveContext): Introduce new interface to hold
6120         all information needed in resolving phase.
6121         (EmitContext): Implements IResolveContext; more clean-up needed here.
6122         
6123         * decl.cs (MemberCore): Implemented IResolveContext.
6124
6125         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
6126         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
6127         parameter.cs, statement.cs, tree.cs, typemanager.cs:
6128         Refactored to use new IResolveContext instead of EmitContext; cleanup
6129
6130 2006-02-06  Miguel de Icaza  <miguel@novell.com>
6131
6132         * codegen.cs (EmitScopeInitFromBlock): check here the
6133         capture_context, there is no need to make two calls to the
6134         EmitContext. 
6135
6136         * anonymous.cs: Add some debugging messages that might help me
6137         track other instances of this problem in the future (the
6138         regression of test 467).
6139
6140         * cs-parser.jay: track the variable block, as we need to initalize
6141         any captured variables declared in this block for the "catch"
6142         portion of the "Try" statement.
6143
6144         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
6145         scope initialization for captured variables. 
6146
6147         Also, move the emit for the variables after the block location has
6148         been marked.
6149
6150 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
6151
6152         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
6153
6154 2006-02-02  Miguel de Icaza  <miguel@novell.com>
6155
6156         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
6157         commit yesterday, the initialization for the roots is necessary.
6158         What is not necessary is the scope activation.
6159
6160 2006-02-02  Raja R Harinath  <rharinath@novell.com>
6161
6162         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
6163         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
6164         CS0206 checks.
6165         (Argument.Resolve): Remove CS0206 checks.
6166
6167 2006-02-01  Miguel de Icaza  <miguel@novell.com>
6168
6169         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
6170         scopes for all the roots, the scopes will now be emitted when the
6171         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
6172
6173         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
6174         code.  This reduces a lot of existing cruft.
6175         
6176         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
6177         that the ScopeInfo is generated as we enter the scope, not at the
6178         time of use, which is what we used to do before.
6179
6180         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
6181         every time a Block is about to be emitted if we have a
6182         CaptureContext. 
6183
6184 2006-02-01  Raja R Harinath  <rharinath@novell.com>
6185
6186         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
6187         (Reset): Update.
6188         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
6189
6190         * typemanager.cs (cons_param_array_attribute): Make private.
6191         (Reset): Set it to null.
6192         (InitCoreHelpers): Don't initialize it.
6193         (ConsParamArrayAttribute): New.  Initialize it as needed.
6194         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
6195
6196 2006-01-31  Miguel de Icaza  <miguel@novell.com>
6197
6198         * expression.cs: There might be errors reported during the
6199         selection of applicable methods.  If there are errors, do not
6200         continue execution as it will lead the compiler to crash.
6201
6202 2006-01-30  Miguel de Icaza  <miguel@novell.com>
6203
6204         * expression.cs: Member access is not allowed on anonymous
6205         methods.  Fixes #77402.
6206
6207 2006-01-30  Raja R Harinath  <rharinath@novell.com>
6208
6209         Fix #77401
6210         * cs-parser.jay (VariableDeclaration): Don't set
6211         current_array_type to null.
6212         (field_declaration, event_declaration, declaration_statement):
6213         Set it to null here.
6214
6215 2006-01-28  Raja R Harinath  <harinath@gmail.com>
6216
6217         * typemanager.cs (GenericParameterPosition): New.
6218         * doc.cs: Use it.
6219
6220 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
6221
6222         * doc.cs : To process "include" elements, first we should create
6223           another list than XmlNodeList, because it could result in node
6224           removal, which could result in that the XmlNodeList gives up
6225           yielding next node.
6226
6227           (Also made code identical to gmcs again.)
6228
6229 2006-01-25  Miguel de Icaza  <miguel@novell.com>
6230
6231         * ecore.cs: Introduce an error report that we were not catching
6232         before, if not silent, we must report the error.  Gonzalo ran into
6233         it.
6234
6235 2006-01-23  Miguel de Icaza  <miguel@novell.com>
6236
6237         A fix for bug: #76957
6238         
6239         * iterators.cs (MoveNextMethod.CreateMethodHost): call
6240         ComputeMethodHost before creating the method, this is a new
6241         requirement. 
6242
6243         * anonymous.cs (AnonymousContainer): Now we track all the scopes
6244         that this method references (RegisterScope).  The actual scope
6245         where the method is hosted is computed with the ComputeMethodHost
6246         before we create the method.
6247
6248         Moved the Deepest routine here.
6249
6250         (AnonymousContainer.ComputeMethodHost): New routine used to
6251         compute the proper ScopeInfo that will host the anonymous method.
6252
6253         (ScopeInfo): Deal with multiple roots.  The problem was that we
6254         did not have a unique root where all ScopeInfos could be hanged
6255         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
6256         of roots.  
6257
6258         Remove AdjustMethodScope which is now computed at the end.  Remove
6259         LinkScope which did a partial link, instead link all ScopeInfos
6260         before code generation from the new "LinkScopes" routine. 
6261
6262         Simplify all the Add* routines as they no longer need to maintain
6263         the tree, they just need to record that they are using variables
6264         from a ScopeInfo.
6265
6266         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
6267         routines to produce the forest of ScopeInfo trees.
6268
6269         * class.cs (TypeContainer.AppendMethod): This is just like
6270         AddMethod, but ensures that an interface implementation method
6271         (IEnumerable.XXX) is not inserted at the beginning of the queue of
6272         methods, but at the end.
6273
6274         We use this functionality to ensure that the generated MoveNext
6275         method in the iterator class is resolved/emitted before the
6276         enumerator methods created.   
6277
6278         This is required because the MoveNext method computes the right
6279         ScopeInfo for the method.  And the other methods will eventually
6280         need to resolve and fetch information computed from the anonymous
6281         method. 
6282
6283 2006-01-21  Raja R Harinath  <harinath@gmail.com>
6284             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
6285
6286         Fix rest of #76995.
6287         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
6288         the 'aliases' hash.
6289         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
6290         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
6291
6292 2006-01-18  Raja R Harinath  <rharinath@novell.com>
6293
6294         Fix #76656, cs0231-2.cs.
6295         * cs-parser.jay (formal_parameter_list): Make error case catch
6296         more issues.
6297         (parenthesized_expression_0): Add CS1026 check.
6298         (invocation_expression): Remove unused { $$ = lexer.Location }.
6299
6300 2006-01-17  Raja R Harinath  <rharinath@novell.com>
6301
6302         Fix #76824.
6303         * cs-parser.jay (statement_expression): Don't list out the
6304         individual statement-expressions.  Convert syntax error into
6305         CS0201 check.
6306
6307 2006-01-16  Raja R Harinath  <rharinath@novell.com>
6308
6309         Fix #76874.
6310         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
6311         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
6312         CheckIntermediateModification.
6313         (FieldExpr.DoResolve): Add new two-argument version that
6314         allows us to resolve the InstanceExpression as an lvalue.
6315         The one-argument variant is now just a wrapper.
6316         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
6317         Resolve the lhs as an lvalue if the it has a value type.
6318         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
6319         from Assign.DoResolve.
6320         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
6321         resolved as an lvalue.
6322         (PropertyExpr.DoResolve): Update.
6323         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
6324         has a value type.  Move CS1612 check here from
6325         CheckIntermediateModification.
6326         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
6327         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
6328         'right_side' of a ResolveLValue on an 'out' argument.
6329         (EmptyExpression.LValueMemberAccess): New.  Used as the
6330         'right_side' of a propagated ResolveLValue on a value type.
6331         (LocalVariableReference.DoResolveBase): Recognize
6332         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
6333         Add CS1654 check.
6334         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
6335         EmptyExpression.Null.
6336
6337 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
6338
6339         * typemanager.cs : added IsGenericParameter(). In mcs it always
6340           return false.
6341         * doc.cs : for generic parameters, use GenericParameterPosition,
6342           not FullName.
6343
6344 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
6345
6346         * expression.cs: Fix Console.WriteLine ((this = x).foo);
6347
6348 2006-01-12  Miguel de Icaza  <miguel@novell.com>
6349
6350         This fixes the problem where we used ldfld instead of ldflda to
6351         load the "THIS" pointer on captured parameters, when THIS is a
6352         value type.  See bug #77205.
6353         
6354         * iterators.cs (CapturedThisReference.Emit): Pass false to
6355         EmitThis (we do not need the address).
6356
6357         * codegen.cs (EmitThis): it needs to know whether we need the
6358         address of `this' or not.  This is used by value types.  
6359
6360         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
6361         every other call passes false.
6362
6363 2006-01-12  Raja R Harinath  <rharinath@novell.com>
6364
6365         Fix #77221.
6366         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
6367         GetOverride.
6368         * expression.cs (Invocation.OverloadResolve): Update.
6369         (Invocation.DoResolve): Avoid double resolution of invocation.
6370
6371 2006-01-11  Raja R Harinath  <rharinath@novell.com>
6372
6373         Fix #77180.
6374         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
6375         unary negation of floating point types as 0-expr; negation cannot
6376         overflow in floating point types.
6377
6378         Fix #77204.
6379         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
6380         on operands of 'void' type.
6381
6382         Fix #77200.
6383         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
6384         and ExclusiveOr for boolean constants too.
6385
6386 2006-01-09  Raja R Harinath  <rharinath@novell.com>
6387
6388         Fix #75636.
6389         * expression.cs (Invocation.OverloadResolve): Replace reflected
6390         override methods with their base virtual methods, rather than
6391         skipping over them.
6392         * typemanager.cs (TypeManager.GetOverride): New.
6393
6394 2006-01-05  Jb Evain  <jbevain@gmail.com>
6395
6396         * class.cs (Property.Define, Indexer.Define): do not tag the
6397         properties as SpecialName | RTSpecialName.
6398
6399 2006-01-04  Miguel de Icaza  <miguel@novell.com>
6400
6401         * class.cs (MethodCore.IsDuplicateImplementation): This method was
6402         doing a low-level comparission of parameter types.  It was lacking
6403         a check for __argslist. 
6404
6405 2005-12-30  Miguel de Icaza  <miguel@novell.com>
6406
6407         * expression.cs (ParameterReference.DoResolveBase): Allow
6408         reference parameters if they are local to this block. 
6409
6410         This allows the ref and out parameters of a delegate to be used in
6411         an anonymous method, for example:
6412
6413         delegate void set (out int x);
6414
6415         set s = delegate (out int x){
6416                 x = 0;
6417         };
6418
6419         This is used by functionality introduced late in the C# language.
6420         
6421         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
6422         method that take ref and out parameters. 
6423
6424         Fixes #77119 which was a late change in the spec.
6425
6426 2005-12-23  Miguel de Icaza  <miguel@novell.com>
6427
6428         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
6429         parent if its the same scope.  Fixes #77060.
6430
6431 2005-12-21  Miguel de Icaza  <miguel@novell.com>
6432
6433         * driver.cs: Report the case of no source files and no -out:
6434         argument provided.
6435
6436 2005-12-20  Raja R Harinath  <rharinath@novell.com>
6437
6438         Fix #77035.
6439         * expression.cs (ComposedCast.GetSignatureForError): Define.
6440
6441 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
6442
6443         Fix #76995
6444
6445         * namespace.cs (NamespaceEntry): Add extern_aliases as a
6446         ListDictionary, to contain the ExternAliasEntry entries (in
6447         addition to the NamespaceEntry.aliases hashtable). This field is
6448         shared between the original entry and its doppelganger (bodyless 
6449         copy of it).
6450         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
6451         extern_aliases field.
6452         (NamespaceEntry.Lookup): Move the IsImplicit check after the
6453         lookup in extern_aliases.
6454
6455 2005-12-16  Raja R Harinath  <rharinath@novell.com>
6456
6457         Fix #77006.
6458         * class.cs (TypeContainer.Mark_HasEquals): New.
6459         (TypeContainer.Mark_HasGetHashCode): New.
6460         (ClassPart): Override them.
6461         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
6462
6463         Fix #77008.
6464         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
6465         'parent' argument to the base constructor.
6466
6467         Remove all mention of TypeContainer from decl.cs.
6468         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
6469         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
6470         (DeclSpace.DeclSpace): Likewise.
6471         (DeclSpace.DefineMembers): Remove unused argument.
6472         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
6473         debugging check -- we don't care if the debug code throws an
6474         InvalidCastException instead of an InternalErrorException.
6475         * class.cs (TypeContainer.DefineMembers): Update to changes.
6476         (TypeContainer.DoDefineMembers): Likewise.
6477         (TypeContainer.GetMethods): Likewise.
6478         (PropertyMember.Define): Likewise.
6479         (MemberBase.Parent): New property that forwards to
6480         MemberCore.Parent, but ensures that we get a TypeContainer.
6481         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
6482         (RootContext.PopulateTypes): Likewise.  Remove special case code
6483         for !RootContext.StdLib: DefineMembers is idempotent.
6484
6485 2005-12-14  Miguel de Icaza  <miguel@novell.com>
6486
6487         * convert.cs (ExplicitConversionCore): Check the return value from
6488         ExplicitConversionCore which can return null on failure.  Fixes #76914
6489
6490 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
6491
6492         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
6493
6494 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
6495
6496         * doc.cs : The search for referenced namespace was insufficient to
6497           get global one as it used to do. Fixed bug #76965.
6498
6499 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
6500
6501         * doc.cs : check name in cref in the last phase that whether it is
6502           namespace or not.
6503
6504 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6505
6506         * cs-tokenizer.cs : reverted the latest change: it somehow broke
6507           Mono.C5.
6508
6509 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6510
6511         * doc.cs : so it turned out that we cannot skip override check for 
6512           interface members. Fixed bug #76954.
6513
6514 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6515
6516         * cs-tokenizer.cs : fixed bug #75984:
6517           - #warning and #error should not be handled when the source line
6518             is disabled.
6519           - #line is not checked strictly when the source line is disabled.
6520           - #define and #undef is on the other hand checked strictly at any
6521             state.
6522
6523 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
6524
6525         * cs-tokenizer.cs : missing Location (actually, filename) in one of
6526           CS1027 report.
6527
6528 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6529
6530         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
6531
6532         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
6533         event initializers.
6534         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
6535         (FieldBase.Initializer): Initializer is now optional.
6536         (EventField.Define): Only event field can have initializer.
6537
6538         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
6539
6540         * const.cs (Const): Reuse initializer.
6541
6542         * cs-parser.jay: Updated after FieldBase changes.
6543         Added current_array_type to simplify array initializers.
6544
6545         * ecore.cs (NullCast.IsDefaultValue): Implemented.
6546
6547         * expression.cs, iterators.cs: Updated.
6548
6549         * namespace.cs (NamespaceEntry): Made UsingFound private.
6550
6551 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6552
6553         * parameterCollection.cs: Obsolete, removed.
6554         * parser.cs: Obsolete, removed.
6555
6556 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6557
6558         Fix #76849.
6559         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
6560
6561         * enum.cs (Enum.Define): Set obsolete context here.
6562
6563 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6564
6565         * doc.cs :
6566           - FindDocumentedMember() now expects 1) paramList as null
6567             when "we don't have to check the number of parameters" and
6568             2) Type.EmptyTypes when "there is no arguments".
6569           - Introduced FoundMember struct to hold the exact type which was
6570             used to find the documented member (the above change broke
6571             test-xml-044; it might be better just to use DeclaringType than
6572             what MS does, like this change does, but it depends on usage.)
6573
6574 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6575
6576         * doc.cs : documented member might be from DeclaringType for nested
6577           types. Fixed bug #76782.
6578
6579 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
6580
6581         * anonymous.cs: Have the param code handle leaving copies on the
6582         stack etc. Allows anonymous params to take part in the assignment
6583         code (++, +=, etc). Fixes bug #76550
6584
6585         * expression.cs: Handle the prepare_for_load/leave_copy by passing
6586         it down to the anon code.
6587
6588         * iterators.cs: Use dummy var here
6589
6590         * codegen.cs: Handle new vars
6591
6592 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6593
6594         Fix #76849.
6595         * class.cs (MethodData.Define): Set proper Obsolete context.
6596
6597         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
6598         obsolete context.
6599         (FieldExpr.DoResolve): Ditto.
6600
6601 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6602
6603         Fix #76849.
6604         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
6605         parent is not obsolete.
6606
6607 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
6608
6609         * doc.cs : (FindDocumentedMember) find parameterless members first
6610           and get CS0419 in the early stage. Fixed first case of bug #76727.
6611
6612 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
6613
6614         Fix #76859.
6615         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
6616         no error was reported.
6617
6618         *expression.cs (Binary.DoResolve): left can be null.
6619
6620 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
6621
6622         Fix #76783.
6623         * class.cs (MethodData.Emit): Parameters should be labeled first.
6624
6625 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
6626
6627         Fix #76761.
6628         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
6629
6630 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
6631
6632         * attribute.cs (AreParametersCompliant): Moved to Parameter.
6633
6634         * class.cs (MethodCore): Parameter clean up.
6635         (IMethodData): Added ParameterInfo.
6636         (MethodData): Parameter clean up.
6637         (Indexer.Define): Parameter clean up.
6638
6639         * anonymous.cs,
6640         * codegen.cs,
6641         * cs-parser.jay,
6642         * decl.cs,
6643         * doc.cs,
6644         * ecore.cs,
6645         * flowanalysis.cs,
6646         * iterators.cs,
6647         * pending.cs,
6648         * statement.cs,
6649         * typemanager.cs: Parameter clean up.
6650
6651         * delegate.cs (Define): Get rid of duplicated code.
6652
6653         * expression.cs (ParameterReference): Removed useless parameters
6654         and simplified.
6655         (Invocation): Ditto.
6656
6657         * parameter.cs (ParamsParameter): New class, params specialization.
6658         (ArglistParameter): Attemp to separate arglist.
6659         (Parameter): Refactored to be reusable and faster.
6660         (Parameter.Modifier): Made understandable.
6661         (Parameters): Changed to be used as a class for `this' assembly
6662         parameters. Refactored to use new specialized classes.
6663
6664         * support.cs (ParameterData): Added Types property.
6665         (InternalParameters): Deleted.
6666
6667 2005-08-20  Martin Baulig  <martin@ximian.com>
6668
6669         Merging this patch from GMCS to fix #75867.
6670
6671         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6672         scope if we don't already have it.
6673
6674 2005-11-17  Martin Baulig  <martin@ximian.com>
6675
6676         * anonymous.cs
6677         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
6678         inherit the scope from our parent.  Fixes #76653.
6679
6680 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6681
6682         * doc.cs : the previous patch does not actually fix the bug.
6683           PropertyInfo override check is now implemented and really fixed it.
6684         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
6685
6686 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6687
6688         * doc.cs : apply "override filter" also to properties.
6689           Fixed bug #76730.
6690
6691 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6692
6693         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
6694           no need to check overrides. For classes, omit those results from 
6695           interfaces since they must exist in the class. Fixed bug #76726.
6696
6697 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6698
6699         * typemanager.cs : (GetFullNameSignature) differentiate indexers
6700           with different parameters. Fixed the second problem in #76685.
6701
6702 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6703
6704         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
6705           get expected 'protected' access in CheckValidFamilyAccess()).
6706           Fixed bug #76692.
6707
6708 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6709
6710         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
6711           Fixed bug #76705.  CS1569 was incorrectly commented out.
6712
6713 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6714
6715         * doc.cs : use Invocation.IsOverride() to do real override check.
6716         * expression.cs : made Invocation.IsOverride() internal.
6717
6718 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6719
6720         * doc.cs : use TypeManager.FindMembers() instead of (possible)
6721           TypeBuilder.FindMembers() and filter overriden base members out.
6722           Fixed bug #76990.
6723
6724 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6725
6726         * doc.cs : ref/out parameters are represented as '@' (instead of
6727           '&' in type FullName). Fixed bug #76630 (additionally crefs).
6728
6729 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6730
6731         * doc.cs : when there was no '.' in cref to methods in doc comment,
6732           then parameters were missing in the output. Fixed bug #76691.
6733
6734 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6735
6736         * driver.cs : don't output docs when there is an error.
6737           Fixed bug #76693.
6738
6739 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6740
6741         * doc.cs :
6742           Now it should detect indexers. Fixed primary concern in bug #76685.
6743           Fixed CS0419 message to not show the identical member signature in
6744           the message.
6745
6746 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6747
6748         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
6749           instead of Type.FindMembers() since it does not handle events.
6750           Fixed bug #71604.
6751
6752 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
6753
6754         * codegen.cs: Fixed typo (speficied -> specified).
6755
6756 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6757
6758         Fix #76369.
6759         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
6760
6761 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6762
6763         * attribute.cs: Changed error message.
6764
6765         * cs-tokenizer.cs: One more check.
6766
6767 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6768
6769         * statement.cs (Block.Resolve): Ignore empty statement.
6770
6771 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6772
6773         * report.cs: Made error/warning methods more strict to avoid
6774         their misuse.
6775
6776         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
6777         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
6778         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
6779         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
6780
6781 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
6782
6783         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
6784         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
6785
6786         * class.cs (TypeContainer.IsComImport): New property.
6787         (Constructor.Define): Create proper ctor for ComImport types.
6788
6789         * expression.cs (New.CheckComImport): Fixed.
6790
6791 2005-11-07  Miguel de Icaza  <miguel@novell.com>
6792
6793         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
6794         that a parameter has been captured does not mean that we do not
6795         have to do the rest of the processing.  This fixes the second part
6796         of #76592.  If there was another anonymous method capturing
6797         values in the past, the Scope would never be set for the second
6798         method that captured the same parameter.
6799
6800         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
6801         properly manipulate the stack.   Second part of fix for #76592.
6802
6803         * expression.cs (New): Add support for invoking "new" on
6804         interfaces that have been flagged with the ComImport attribute and
6805         the CoClass.  Fixes #76637 
6806
6807         * statement.cs (Try.DoEmit): When a variable is captured, do not
6808         try to emit the vi.LocalBuilder variable as it has been captured.
6809         Create a temporary variable and store the results on the
6810         FieldBuilder.  Fixes #76642
6811
6812 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
6813
6814         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
6815
6816         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
6817
6818         * expression.cs (Binary.DoResolve): Added && optimalization.
6819     
6820         * typemanager.cs (AddUserType): Removed useless argument.
6821
6822 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
6823
6824         * statement.cs (Block.variables): Uses ListDictionary.
6825
6826 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6827
6828         Fix #75969.
6829         * class.cs (PartialContainer.EmitType): Customized to emit
6830         security attributes.
6831         (ClassPart.ApplyAttributeBuilder): Transform security attribute
6832         for partial classes.
6833
6834 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6835
6836         Fix #76599.
6837         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
6838         access has to be fixed.
6839         
6840         * typemanager.cs (IsUnmanagedType): Wrong common field type.
6841
6842 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
6843
6844         Fix #76590.
6845         * ecore.cs (NullCast.Reduce): Implemented.
6846
6847         * expression.cs (ArrayCreation.CheckIndices): Correcly check
6848         constant type.
6849         
6850         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
6851         properly.
6852         (Foreach.Resolve): Catch null properly.
6853
6854 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6855  
6856         * cs-tokenizer.cs: Warning text fix.
6857
6858         * driver.cs: AllWarningNumbers exposed on public interface.
6859
6860         * report.cs (): Reviewed warning numbers.
6861         (IsValidWarning): Use binary search.
6862
6863 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6864  
6865         * driver.cs: Implemeted resource visibility.
6866         (Resources): New class for code sharing between /res: and
6867         /linkres:
6868  
6869 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
6870
6871         Fix #76568.
6872         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
6873         folding.
6874         
6875         * convert (Convert.ImplicitReferenceConversion): NullCast holds
6876         contants only.
6877         
6878         * ecore.cs (NullCast): Child is contant only.
6879         
6880         * literal.cs (NullLiteral.Reduce): null can be converted to any
6881         reference type.
6882
6883 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
6884
6885         * driver.cs: Use Encoding.Default as default code page instead
6886           of ISO-28591.
6887
6888 2005-10-27  Raja R Harinath  <rharinath@novell.com>
6889
6890         Fix #76085.
6891         * expression.cs (Invocation.Error_InvalidArguments): Handle
6892         __arglist parameters.
6893         (Invocation.VerifyArgumentsCompat): Likewise.
6894         * support.cs (ReflectionParameters.GetSignatureForError): Print
6895         __arglist parameters.
6896         (InternalParamters.GetSignatureForError): Likewise.
6897         * parameter.cs (Parameters.GetSignatureForError): Likewise.
6898
6899 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
6900
6901         * attribute.cs (GetPropertyValue): Made public.
6902
6903         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
6904         Resolve.
6905         Add new property WrapNonExceptionThrows to handle 2.0 assembly
6906         attribute.
6907         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
6908         is not defined.
6909         
6910         * driver.cs: Reflect method name change.
6911         
6912         * statement.cs (Try.Resolve): Warn when try has both general
6913         exception handlers.
6914         
6915         * typemanager.cs: runtime_compatibility_attr_type new predefined
6916         type.
6917
6918 2005-10-26  Raja R Harinath  <harinath@gmail.com>
6919
6920         Fix #76419.
6921         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
6922         treat it as an empty parameter list.
6923
6924 2005-10-26  Raja R Harinath  <rharinath@novell.com>
6925
6926         Fix #76271.     
6927         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
6928         ResolveAsTypeStep silent.
6929         * statement.cs (Block.AddConstant): Mark block as used.
6930         (Block.ResolveMeta): Avoid piling on error messages
6931         if a constant initializer resolution fails.
6932
6933 2005-10-25  Raja R Harinath  <rharinath@novell.com>
6934
6935         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
6936         Remove.
6937         (NamespaceEntry.VerifyAllUsing): New.
6938         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
6939         behaviour.  Delegates actual resolution of alias to ...
6940         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
6941         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
6942         Update.
6943         * driver.cs (Driver.MainDriver): Update.
6944         
6945         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
6946         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
6947         property.
6948         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
6949         Remove.
6950         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
6951         RootNamespace.DefineNamespacesForAll.
6952
6953 2005-10-24  Raja R Harinath  <harinath@gmail.com>
6954
6955         * typemanager.cs (assemblies, external_aliases, modules)
6956         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
6957         (ComputeNamespaces, GetRootNamespace): Remove extra staging
6958         overhead.  Move resposibility ...
6959         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
6960         * driver.cs, attribute.cs, codegen.cs: Update to changes.
6961
6962 2005-10-23  Raja R Harinath  <harinath@gmail.com>
6963
6964         * namespace.cs (RootNamespace.all_namespaces): Renamed from
6965         cached_namespaces.  Improve usage.
6966         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
6967         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
6968         Move from GlobalRootNamespace and simplify.
6969         (RootNamespace.Global): Make instance variable.
6970         (RootNamespace.RootNamespace): Add "alias name" parameter.
6971         (GlobalRootNamespace): Simplify drastically.
6972         (Namespace.Lookup): Don't use GetNamespace.
6973         * typemanager.cs (GetRootNamespace): Rename from
6974         ComputeNamespaceForAlias.
6975         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
6976
6977 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6978
6979         * anonymous.cs (AnonymousContainer): Don't crash when container
6980         doesn't exist.
6981
6982 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6983
6984         * expression.cs (Binary.DoResolve): Warn when comparing same
6985         values.
6986
6987 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6988
6989         Fix #76486.
6990         * expression.cs (Binary.DoResolve): It looks like there are no
6991         convetsion rules in enum context.
6992
6993 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
6994
6995         Add support for extern alias qualifiers.
6996         * typemanager.cs: Move some LookupTypeReflection code
6997         to namespace.cs, to have cleaner code. Added some methods
6998         to help us keep track of the extern aliased references.
6999         * driver.cs: Add suport for extern alias assemblies on command
7000         line and check for their warnings/errors. Also keep track of the
7001         extern aliased assemblies.
7002         * namespace.cs: Move the global functionality of Namespace
7003         to GlobalRootNamespace/RootNamespace. Now the global namespace
7004         is GlobalRootNamespace.Globa. Also the code moved from 
7005         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
7006         Finally added LocalAliasEntry (AliasEntry before) and
7007         ExternAliasEntry, to handle alias statements.
7008         * cs-parser.jay: Add support in the grammar for extern alias
7009         statement.
7010         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
7011         Update callings to Namespace (now in GlobalRootNamespace).
7012
7013 2005-10-18  Raja R Harinath  <rharinath@novell.com>
7014
7015         Fix #76371.
7016         * class.cs (TypeContainer.DefineType): Move updating of
7017         topological sort earlier in the code.
7018         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
7019
7020 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
7021
7022         Fix #76273.
7023         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
7024         
7025         * constant.cs (Constant.TryReduce): Moved from Cast class.
7026         (Reduce): Made little bit more OO and fixed missing conversions.
7027         
7028         * ecore.cs (Reduce): Implemented.
7029         (Binary.EnumLiftUp): New method to upgrade values to enum values.
7030         
7031         * literal.cs (Reduce): Implemented.
7032         
7033         * class.cs: Reverted Miguel's wrong commit.
7034
7035 2005-10-14  Miguel de Icaza  <miguel@novell.com>
7036
7037         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
7038
7039 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
7040
7041         * cs-parser.jay, expression.cs : CS0214 was missing error location
7042           for constants. Fixed bug #76404.
7043
7044 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
7045
7046         Fix #76370.
7047         * convert.cs (ExplicitConversionCore): Fixed object->enum
7048         conversion.
7049
7050 2005-10-10  Raja R Harinath  <rharinath@novell.com>
7051
7052         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
7053         InstanceExpression.
7054         (PropertyExpr.EmitCall): Likewise.
7055         * expression.cs (Invocation.EmitArguments): Handle case where
7056         arguments == null.
7057         (Invocation.EmitCall): Avoid allocating temporary variable if
7058         there are no arguments.
7059
7060 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7061
7062         Fix #76323.
7063         * convert.cs (ImplicitConversionStandard): Move conversion of
7064         void* to arbitrary pointer types ...
7065         (ExplicitConversionStandard): .. here.
7066         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
7067         error to always print typenames.
7068
7069 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7070
7071         * convert.cs (GetConversionOperator): Rename from
7072         GetConversionOperators.  Move operator selection code from ...
7073         (UserDefinedConversion): ... here.
7074
7075 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
7076
7077         * convert.cs (ExplicitConversionCore): Removed duplicate enum
7078         conversion.
7079
7080 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
7081
7082         * assign.cs (Assign.DoResolve): Error method changed.
7083
7084         * cfold.cs (DoConstantNumericPromotions): Error method changed.
7085         
7086         * const.cs (ResolveValue): Reset in_transit immediately.
7087         
7088         * constant.cs: Error method changed.
7089         
7090         * convert.cs: Removed useless location parameter.
7091         (ExplicitNumericConversion): Don't do double enum check.
7092         (ExplicitConversionCore): Renamed from ExplicitConversion.
7093         (ExplicitUnsafe): Extracted from ExplicitConversion.
7094         (ExplicitConversion): Uses for error reporting.
7095         
7096         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
7097         error messages.
7098         (ResolveBoolean): Uses common error method.
7099         (CastToDecimal): Get rid of ec.
7100         (CastFromDecimal): Optimized.
7101         (ConvCast): Get rid of ec.
7102         
7103         * enum.cs (ResolveValue): Reset in_transit immediately.
7104         (Emit): Return after first error.
7105         
7106         * expression.cs: Convert changes.
7107         
7108         * literal.cs: Error method changed.
7109         
7110         * statement.cs: Error method changed.
7111
7112 2005-10-03  Raja R Harinath  <rharinath@novell.com>
7113
7114         * support.cs (SeekableStreamReader.Position): Don't error out when
7115         the requested position is just beyond the end of the current
7116         buffered data.
7117
7118 2005-09-28  Raja R Harinath  <rharinath@novell.com>
7119
7120         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
7121         try to keep in sync with the byte count of the underlying Stream.
7122         However, this limits us to a window size of 2048 characters: i.e.,
7123         the maximum lookahead of our lexer/parser can be 2048 characters.
7124
7125 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
7126
7127         Fix #76255.
7128         * driver.cs: Fix compilation files with full root path.
7129
7130 2005-09-25  Miguel de Icaza  <miguel@novell.com>
7131
7132         * report.cs (SymbolRelatedToPreviousError): Format the output so
7133         it does not use an open parenthesis that is never closed. 
7134
7135         * driver.cs: Follow coding guidelines
7136
7137 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
7138
7139         Fix #72930.
7140         * const.cs (Const.ResolveValue): Check for assigning non-null
7141         value to reference type.
7142
7143 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
7144
7145         * anonymous.cs: Implemented ExprClassName.
7146         
7147         * assign.cs (Assign.DoResolve): Don't chrash when type is not
7148         delegate.
7149         
7150         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
7151         check.
7152         
7153         * class.cs (StaticClass.DefineContainerMembers): Report protected
7154         members as error.
7155         
7156         * codegen.cs: if(ed) PRODUCTION.
7157         
7158         * convert.cs (Error_CannotImplicitConversion): Better error
7159         distinction.
7160         
7161         * cs-parser.jay: More error checks.
7162         
7163         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
7164         
7165         * driver.cs (CSCParseOption): Enabled wrong option check.
7166         
7167         * ecore.cs (Expression.ExprClassName): Turned to property.
7168         (MemberExpr.CheckIntermediateModification): For checking boxed
7169         value types     modification.
7170         
7171         * statement.cs (Fixed.Resolve): Expression type must be
7172         convertible to fixed type.
7173         (CollectionForeach.GetEnumeratorFilter,TryType):
7174         Small refactoring for easier error checking.
7175
7176 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
7177
7178         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
7179         attributes.
7180         
7181         * class.cs (GeneratedBaseInitializer): New class for customization
7182         compiler generated initializers.
7183         (MemberBase.DoDefine): Check Obsolete attribute here.
7184         (FieldMember.DoDefine): Ditto.
7185         
7186         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
7187         constants.
7188         
7189         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
7190         (MemberCore.GetObsoleteAttribute): Removed argument.
7191         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
7192         (MemberCore.CheckObsoleteType): New helper.
7193         
7194         * delegate.cs,
7195         * enum.cs,
7196         * statement.cs: Updates after MemberCore changes.
7197         
7198         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
7199         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
7200         
7201         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
7202         obsolete attribute for compiler construct.
7203         (As.DoResolve): Cache result.
7204         
7205         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
7206
7207 2005-09-26  Raja R Harinath  <rharinath@novell.com>
7208
7209         Fix #76133.
7210         * expression.cs (This.VerifyFixed): In a value type T, the type of
7211         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
7212         value type R, 'this' is treated as a value parameter.
7213
7214 2005-09-22  Miguel de Icaza  <miguel@novell.com>
7215
7216         * statement.cs (Lock): Use the TemporaryVariable class instead of
7217         manually using local variables as those do not work when variables
7218         are captured.
7219
7220         * ecore.cs: Moved the TemporaryVariable class from being a nested
7221         class inside Foreach to be a public class that can be employed in
7222         other places. 
7223
7224 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
7225
7226         * cs-parser.jay: interface_accessors replaced by
7227         accessor_declarations.
7228
7229         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
7230         location.
7231         
7232         * statement.cs (GotoCase.Resolve): Convert null constant to
7233         null case.
7234         (SwitchLabel.ResolveAndReduce): Ditto.
7235         (SwitchLabel.NullStringCase): Custom null stamp.
7236         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
7237         
7238         typemanager.cs (CSharpSignature): Don't skip first argument
7239         for full names.
7240
7241 2005-09-18  Miguel de Icaza  <miguel@novell.com>
7242
7243         * driver.cs: Set InEmacs based on the environment variable EMACS. 
7244
7245         * location.cs (InEmacs): in this mode, do not report column
7246         location as it confuses Emacs.
7247
7248 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
7249
7250         * cfold.cs, constant.cs, convert.cs, ecore.cs,
7251         expression.cs, iterators.cs, literal.cs: Store constants and
7252         literals location.
7253         
7254         * class.cs (MemberBase.ShortName): Pass location.
7255         
7256         * cs-parser.jay: Some location fixes.
7257         
7258         * ecore.cs (Expression.Location): Made virtual.
7259
7260 2005-09-05  Miguel de Icaza  <miguel@novell.com>
7261
7262         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
7263         if the underlying types are the same, otherwise we need to produce
7264         code that will do the proper cast.
7265
7266         This was exposed by Marek's constant rewrite which produced
7267         invalid code for the call site:
7268
7269         enum X : long { a }
7270         void Method (X v) {}
7271
7272         Method ((X) 5)
7273
7274         This fixes test-49.cs
7275
7276 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7277
7278         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
7279           Type/Object should be allowed as well. Fixed bug #75968.
7280
7281 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7282
7283         * expression.cs : (Binary.DoResolve): when one is enum constant and
7284           another is constant 0, then return enum one *as enum type*.
7285           Fixed bug 74846.
7286
7287 2005-09-02  Raja R Harinath  <rharinath@novell.com>
7288
7289         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
7290         internal.
7291
7292         Fix #75941.
7293         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
7294         flow-branching for LocalVariableReferences in case we were invoked
7295         from a MemberAccess.
7296         * expression.cs (LocalVariableReference.VerifyAssigned): New.
7297         Carved out of ...
7298         (LocalVariableReference.DoResolveBase): ... this.
7299         (MemberAccess.Resolve): Do the check that was disabled during
7300         SimpleNameResolve.
7301
7302 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7303
7304         * class.cs :
7305           (PartialContainer.Create): check abstract/sealed/static strictly
7306           but abstract/sealed can exist only at one side. Fixed bug #75883.
7307
7308 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
7309
7310         Fix #75945.
7311         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
7312         specified, don't default to UnmanagedType.I4.
7313
7314 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7315
7316         * expression.cs : conditional operator should check possibly
7317           incorrect assign expression. Fixed bug #75946.
7318
7319 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7320
7321         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
7322           Reverting the change. gmcs is much complex than mcs on this matter.
7323
7324 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7325
7326         * cs-tokenizer.cs : To read another token ahead of the actual 
7327           consumption, use new SavedToken and cache token instead of moving
7328           back the stream with SeekableStreamReader (it seemed problematic).
7329         * cs-parser.jay,
7330           driver.cs : Thus use StreamReader directly.
7331         * support.cs : Thus removed SeekableStreamReader.
7332
7333 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7334
7335         Fix #75934.
7336         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
7337         (ScopeInfo.EmitScopeType): Use it to construct field names from
7338         names of captured locals.
7339
7340         Fix #75929.
7341         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
7342         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
7343         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
7344         (ExplicitConversion): Remove enum cases already handled by
7345         implicit conversion.  Move implicit conversion check to the beginning.
7346         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
7347         * expression.cs (ArrayCreation.EmitDynamicInitializers):
7348         Don't treat System.Enum as a struct.
7349
7350 2005-08-30  Jb Evain  <jbevain@gmail.com>
7351
7352         * attribute.cs: handles as expression in parameters.
7353
7354 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7355
7356         Fix #75802.
7357         * class.cs (TypeContainer.VerifyClsName): Don't use a
7358         PartialContainer when verifying CLS compliance.
7359         (AbstractPropertyEventMethod): Set Parent here, ...
7360         (PropertyMethod): ... not here.
7361
7362 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
7363
7364         * attribute.cs : escaped attribute name should not be allowed to be
7365           resolved (e.g. @class as classAttribute). Fixed bug #75930.
7366
7367 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7368
7369         Fix #75927.
7370         * convert.cs (ImplicitStandardConversionExists): Allow zero also
7371         when converting a long constant to unsigned long.
7372         * expression.cs (Invocation.OverloadResolve): Add sanity check to
7373         detect where IsApplicable and VerifyArgumentsCompat disagree.
7374
7375 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7376         and Carlos Alberto Cortez  <carlos@unixmexico.org>
7377
7378         Fix #75848.
7379         * class.cs (TypeContainer.CanElideInitializer): New helper.
7380         (TypeContainer.EmitFieldInitializers): Use it to determine if we
7381         can safely emitting the initializer of a field.
7382
7383 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7384
7385         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
7386           allowed inside a switch (without loop). Fixed bug #75433.
7387
7388 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
7389
7390         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
7391         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
7392
7393 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7394
7395         * driver.cs : kinda reverting the default encoding changes (not exact 
7396           revert since I noticed that "codepage:reset" might not work fine).
7397
7398 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7399
7400         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
7401           Location. Now getter and setter store location correctly.
7402           (errors/cs0111-12.cs now reports the expected location.)
7403
7404 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7405
7406         * driver.cs : Use default encoding on the environment.
7407           Removed (now that) extra parameter for SeekableStreamReader.
7408         * support.cs : (SeekableStreamReader) third .ctor() argument for
7409           StreamReader is not required (always true). preamble size could
7410           be acquired in simpler and safe way.
7411
7412 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
7413
7414         * cs-parser.jay: report CS0642 at warning level 3
7415           and report CS0642 for an if else statement also
7416           fixes bug #74745. Patch by John Luke (and a bit
7417           modified by me).
7418           Removed extra CS0642 warning check for "while",
7419           "for" and "fixed".
7420         * statement.cs: In Block.Resolve(), CS0642 check
7421           is reimplemented to check a sequence of an empty
7422           statement and a block.
7423
7424           Both fix bug #66777.
7425
7426 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
7427
7428         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
7429         detection until I fix it.
7430         
7431         * cs-tokenizer.cs: Changed error message.
7432         
7433         * cs-parser.jay: Fixed 2 error locations.
7434         
7435         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
7436         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
7437         properties.
7438         
7439         * enum.cs (GetSignatureForError): Fixed.
7440         
7441         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
7442         method detection.
7443         
7444         * class.cs,
7445         * typemanager.cs (RegisterProperty): Removed.
7446         
7447         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
7448
7449 2005-08-24  Raja R Harinath  <rharinath@novell.com>
7450
7451         Fix #75874.
7452         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
7453         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
7454
7455 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7456
7457         * expression.cs : tiny fix is required for not warning positive ulong.
7458           See test-441.cs.
7459
7460 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7461
7462         * expression.cs : add CS0652 check for constant and integral
7463           expression. Fixed bug #53974.
7464
7465 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7466
7467         * expression.cs : in DoNumericPromotions(), check if there is implicit
7468           conversion overload for string (to check CS0034). Fixed bug #52492.
7469
7470 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7471
7472         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
7473
7474 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7475
7476         * ecore.cs : report location when it is *not* Null.
7477
7478 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7479
7480         * codegen.cs,
7481           ecore.cs,
7482           flowanalysis.cs,
7483           expression.cs:
7484           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
7485           correctly. Fixed bug #75721.
7486
7487 2005-08-23  Raja R Harinath  <rharinath@novell.com>
7488
7489         * support.cs (SeekableStreamReader.Position): Avoid an expensive
7490         loop that performs 'min (pos, char_count)'.
7491
7492         Fix #75862.
7493         * expression.cs (Unary.ResolveOperator): Don't discard implicit
7494         converted value in Operator.OnesComplement.
7495
7496 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
7497
7498         * anonymous.cs: If the anon method is pulled into a helper class,
7499         it needs to be `internal' not `private'. Fixes runtime behavior on
7500         msft. bug #75704
7501
7502 2005-08-20  Martin Baulig  <martin@ximian.com>
7503
7504         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
7505         scope if we don't already have it.
7506
7507         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
7508         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
7509         fixes #75867.
7510
7511 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
7512
7513         Fix #75803
7514         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
7515         is a partial class.
7516
7517 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
7518
7519         The big constants rewrite
7520         Fix #75746, #75685 and more
7521         As a side effect saved 1MB for MWF ;-)
7522         
7523         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
7524         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
7525         enum based for corlib compilation.
7526         
7527         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
7528         subtractions.
7529         
7530         * class.cs (FixedField.Define): Use ResolveAsConstant.
7531         
7532         * const.cs (IConstant): Interface constants and enums.
7533         (Const.ResolveValue): New method for constant resolvning.
7534         (ExternalConstant): Constants from imported assemblies.
7535         
7536         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
7537         conversion; like enums.
7538         (Constant.ToType): Converts this constant to different type.
7539         (Constant.Increment): Adds 1.
7540         
7541         * convert.cs (ImplicitConversionRequired): Simplified.
7542         
7543         * cs-parser.jay: Create EnumMember directly.
7544         
7545         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
7546         
7547         * doc.cs (GenerateEnumDocComment): Removed.
7548         
7549         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
7550         (ConvertIntLiteral): Removed.
7551         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
7552         
7553         * enum.cs (EnumMember): Implement IConstant.
7554         (Enum.IsValidEnumConstant): Removed.
7555         (Enum.GetNextDefaultValue): Removed.
7556         (Enum.FindMembers): Updated.
7557         (Enum.GenerateDocComment): Iterate enum members.
7558         
7559         * expression.cs (Cast.TryReduce): Handle enums correctly.
7560         (New.Constantify): Made public.
7561         (MemberAccess.DoResolve): Removed contant specific if(s).
7562         
7563         * literal.cs (NullLiteral): Implement new abstract methods.
7564         
7565         * statement.cs (GotoCase.Resolve): Use new constant methods.
7566         (SwitchLabel.ResolveAndReduce): Use new constant methods.
7567         
7568         * typemanager.cs (LookupEnum): Removed.
7569         (IsEnumType): Fixed to work with corlib.
7570         (RegisterConstant): Removed.
7571         (LookupConstant): Removed.
7572         (GetConstant): Changed to work with IConstant.
7573
7574 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
7575
7576         * location.cs : Fixed overflown (>255) column number.
7577
7578 2005-08-03  Raja R Harinath  <rharinath@novell.com>
7579
7580         First cut of the qualified-alias-member feature.
7581         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
7582         token.
7583         * cs-parser.jay (DOUBLE_COLON): New token.
7584         (namespace_or_type_name): Add rule for recognizing
7585         qualified-alias-members.
7586         (primary_expression): Likewise.
7587         (element_access): Allow QualifiedAliasMember as a possible
7588         type-bearing expression.
7589         (local_variable_type, local_variable_pointer_type): Likewise.
7590         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
7591         aliases in the current and enclosing namespace declarations.
7592         (NamespaceEntry.UsingAlias): Add CS0440 warning.
7593         * decl.cs (MemberName.is_double_colon): New.
7594         (MemberName.MemberName): Add new constructor for alias-member.
7595         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
7596         * expression.cs (QualifiedAliasMember): New expression type.
7597
7598 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7599
7600         * location.cs : it borked when no argument was specified.
7601
7602 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7603
7604         * location.cs : tiny ToString() format fix.
7605
7606 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7607
7608         * statement.cs : oops, it was missing.
7609
7610 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7611
7612         A set of fixes for precise line/column location.
7613
7614         * location.cs :
7615           "token" field now holds a file/line "delta", a line number offset 
7616           from the segment, and a column number. See also:
7617           http://lists.ximian.com/pipermail/mono-devel-list/2004-
7618           December/009508.html
7619           Removed static IsNull. Use instance IsNull property instead.
7620         * cs-tokenizer.cs :
7621           For some tokens it stores Location. For Identifier it stores
7622           LocatedToken which is a pair of string name and location.
7623           Column numbers are adjusted only at getChar().
7624         * report.cs :
7625           Use Location.ToString() for reporting (it now contains column).
7626         * cs-parser.jay :
7627           Largely modified to use LocatedToken instead of
7628           string (IDENTIFIER), and to acquire Location from some tokens.
7629         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
7630           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
7631           codegen.cs :
7632           Now MemberName holds Location. DeclSpace.ctor() receives Location
7633           as a parameter. Removed extra parameters to all derived classes.
7634           Replaced Location.IsNull() with instance property.
7635         * assign.cs, expression.cs :
7636           Added .ctor() overload that omits Location.
7637         * attribute.cs :
7638           Added "nameEscaped" flag that indicates the identifier was escaped
7639           in the source file. This fixes bug #57047.
7640
7641 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
7642
7643         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
7644         New method, looking for lo-case imported cls type.
7645
7646         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
7647         here.
7648
7649         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
7650
7651         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
7652
7653         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
7654         all_imported_types.
7655         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
7656
7657         Optimized to save 3.5 MB for SWF compilation.
7658
7659 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7660
7661         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
7662         (PartialContainer.Create): Moved logic AddToContainer.
7663         (PartialContainer.MarkForDuplicationCheck): Shares name.
7664         
7665         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
7666         place.
7667         
7668         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
7669         initialization.
7670         (Namespace.GetSignatureForError): New method.
7671         
7672         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
7673         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
7674
7675 2005-08-01  Raja R Harinath  <rharinath@novell.com>
7676
7677         Fix #75669.
7678         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
7679         member lookup rather than qualifier_type, since qualifier_type can
7680         be null.
7681
7682 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7683
7684         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
7685         enum member.
7686
7687 2005-07-31  Miguel de Icaza  <miguel@novell.com>
7688
7689         * statement.cs: Copy the local exception into the exception
7690         captured local.  Fixes 75674
7691
7692 2005-07-31  Raja R Harinath  <harinath@gmail.com>
7693
7694         Fix #75658.
7695         * expression.cs (Invocation.OverloadResolve): Don't report error
7696         CS1501 if error CS1502 has been reported.
7697         (New.DoResolve): Delegate CS1501 reporting to
7698         Invocation.OverloadResolve.
7699
7700         Fix #75656.
7701         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
7702         invariant-meaning-in-block property in an enclosing block if
7703         necessary.
7704
7705 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
7706
7707         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
7708         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
7709         (Switch.CheckSwitch): Just save 50kb for SWF.
7710
7711 2005-07-27  Martin Baulig  <martin@ximian.com>
7712
7713         * anonymous.cs (CaptureContext.AddField): Added
7714         `AnonymousContainer am' argument; compute its toplevel scope if
7715         it's not already computed.  Fixes #75649.
7716
7717 2005-07-26  Raja R Harinath  <rharinath@novell.com>
7718
7719         Fix #75628.
7720         * class.cs (Constructor.Emit): Reset block to null if the block
7721         resolve fails.
7722
7723 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7724
7725         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
7726
7727 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7728
7729         * class.cs (MethodData.Define): Check whether accessor implementing
7730         interface is public.
7731
7732         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
7733
7734 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
7735
7736         Fix #57245
7737         * namespace.cs (LookupType): Moved same type check to...
7738         
7739         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
7740         with the same name.
7741
7742 2005-07-21  Raja R Harinath  <rharinath@novell.com>
7743
7744         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
7745         already found a typebuilder.
7746         * class.cs (MethodCore.IsDuplicateImplementation): Compare
7747         MemberNames, not strings.
7748
7749         * const.cs (Error_ExpressionMustBeConst): 
7750         Rename from Error_EpressionMustBeConst.
7751         * const.cs, class.cs, statement.cd: Update.
7752
7753 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
7754
7755         Fix #65573
7756
7757         * const.cs (Const.LookupConstantValue): Report missing contant expression
7758         everytime.
7759         (Error_EpressionMustBeConstant): Only one error method.
7760
7761         * class.cs, statement.c: Updated.
7762
7763 2005-07-20  Raja R Harinath  <rharinath@novell.com>
7764
7765         * statement.cs (Block.Flags): Add back HasVarargs.
7766         (Block.flags): Make protected.
7767         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
7768
7769         * typemanager.cs (types, typecontainers, user_types): Remove.
7770         (UserTypes, TypeContainers): Likewise.
7771         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
7772         (CleanUp, Reset): Update.
7773         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
7774         (GetNestedType): Use Type.GetNestedType.
7775         (CoreLookupType): Take two arguments, the namespace and the
7776         basename of the type.  Update to use the Namespace.Lookup
7777         mechanism.
7778         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
7779         (RealMemberLookup): Use IsNestedChildOf instead of playing with
7780         string concatenation and substring matches.
7781         * class.cs, enum.cs, delegate.cs: Update to changes.
7782
7783 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
7784
7785         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
7786         Expression and made virtual.
7787
7788         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
7789         (ImplicitStandardConversionExists): Fixed `byte' typo ?
7790
7791         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
7792
7793         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
7794         error message.
7795
7796         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
7797         change.
7798
7799 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
7800
7801         Fix #57707
7802         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
7803         AssemblyCultureAttribute is not used on executable.
7804
7805         * rootcontext.cs,
7806         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
7807
7808 2005-07-16  Raja R Harinath  <rharinath@novell.com>
7809
7810         Fix #60638.
7811         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
7812         New.  Reports CS0252/CS0253.
7813         Mostly taken from preliminary patch by Duncak Mak.
7814         (Binary.DoResolveOperator): Store results of operator lookup.
7815         Use them to detect if we need to warn about unintended reference
7816         comparisons.
7817
7818 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7819
7820         Fix #72969.
7821         * namespace.cs (Namespace.Lookup): Add back location parameter.
7822         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
7823         * delegate.cs, ecore.cs, expression.cs: Update to changes.
7824
7825         * codegen.cs (EmitContext.DeclSpace): Make readonly.
7826         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
7827         (Namespace.LookupType): ... this.
7828         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
7829         of namespaces.
7830         * typemanager.cs (LookupTypeReflection): Remove buggy code that
7831         purported to handle pointers.
7832         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
7833         CoreLookupType.
7834
7835 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
7836
7837         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
7838         type as namespace.
7839
7840 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7841
7842         * namespace.cs (Namespace.Lookup): Drop location parameter.
7843         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
7844         (NamespaceEntry.Lookup): ... this.
7845         (NamespaceEntry.Error_AmbiguousTypeReference):
7846         Move here from DeclSpace.
7847         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
7848         names ...
7849         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
7850         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
7851         Move to NamespaceEntry.
7852         * delegate.cs, expression.cs: Update to changes.
7853
7854 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
7855
7856         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
7857         CheckAttributeType and refactored.
7858         (Attribute.ResolvePossibleAttributeType): Changed to reuse
7859         ResolveAsTypeTerminal error handling.
7860         (ResolveAsTypeTerminal): Introduced because of global attributes extra
7861         handling.
7862         (GetSignatureForError): Print errors in same way.
7863
7864         * class.cs,
7865         * codegen.cs: Reflect attribute GetSignatureForError change.
7866
7867         * ecore.cs,
7868         * expression.cs: Add silent parameter to ResolveAsTypeStep.
7869
7870         * namespace.cs (UsingEntry): Refactored to make fields private.
7871
7872         * assign.cs,
7873         statement.cs: Error_UnexpectedKind has extra parameter.
7874
7875 2005-07-14  Raja R Harinath  <rharinath@novell.com>
7876
7877         * ecore.cs (IAlias): Remove.
7878         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
7879         that implement the interface.
7880         * namespace.cs (Namespace): Likewise.
7881         (Namespace.declspaces): Renamed from 'defined_names'.
7882         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
7883         DeclSpace instead of an IAlias.
7884         * tree.cs (Tree.AddDecl): Update.
7885
7886 2005-07-12  Raja R Harinath  <rharinath@novell.com>
7887
7888         * statement.cs (Block.Flags); Remove HasVarargs.
7889         (Block.HasVarargs): Move to ToplevelBlock.
7890         (Block.ThisVariable, Block.AddThisVariable): Likewise.
7891         (Block.Variables): Make protected.  Initialize variable hashtable
7892         if necessary.
7893         (Block.AddVariable): Update.
7894         (Block.Resolve): Update to changes.
7895         (ToplevelBlock.HasVarargs): New boolean.
7896         (ToplevelBlock.ThisVariable): Move here from Block.
7897         (ToplevelBlock.AddThisVariable): Likewise.
7898         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
7899         * expression.cs (This.ResolveBase): Update to changes.
7900         (ArglistAccess.DoResolve): Likewise.
7901
7902 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7903
7904         Fix #75321
7905         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
7906
7907         * class.cs (TypeContainer.VerifyMembers): Distinguish between
7908         not used and not used & assigned.
7909         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
7910
7911 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7912
7913         Fix #75053
7914         * expression.cs (Is.DoResolve): null is never provided type.
7915
7916 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
7917
7918         Fix #52496
7919         * cs-parser.jay: Less strict event error rule to catch more errors.
7920
7921 2005-07-08  Martin Baulig  <martin@ximian.com>
7922
7923         Fix test-iter-10.cs - distinguish whether we `yield' in a property
7924         gettter (allowed) or setter (not allowed).
7925
7926         * class.cs (Accessor): Implement IIteratorContainer.
7927         (Accessor.Yields): New public field.
7928         (PropertyBase.PropertyMethod.Define): Handle iterators on a
7929         per-accessor basis.
7930
7931         * cs-parser.jay
7932         (get_accessor_declaration, set_accessor_declaration): Set the
7933         `yields' flag on the accessor, not the property.
7934         (property_declaration): Do the iterators check on a per-accessor
7935         basis and not for the whole property.
7936
7937 2005-07-08  Martin Baulig  <martin@ximian.com>
7938
7939         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
7940         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
7941
7942 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
7943
7944         Fix #74975
7945         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
7946         (ExtractSecurityPermissionSet): Cope with self referencing security
7947         attributes properly.
7948
7949         * driver.cs (SetOutputFile): Made public property OutputFile.
7950
7951 2005-07-07  Raja R Harinath  <rharinath@novell.com>
7952
7953         Fix #75486.
7954         * class.cs (TypeContainer.first_nonstatic_field): Rename from
7955         has_nonstatic_fields.  Make into a FieldBase pointer.
7956         (TypeContainer.AddField): Add CS0282 check.
7957         (TypeContainer.EmitType): Update.
7958
7959 2005-07-06  Miguel de Icaza  <miguel@novell.com>
7960
7961         * cs-tokenizer.cs (consume_identifier): Do not create strings to
7962         compare if they start with __.
7963
7964 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7965
7966         * statement.cs (Switch.SwitchGoverningType): Only look at
7967         UserCasts that don't need implicit standard conversions to one of
7968         the allowed switch types (Fixes test-322.cs).
7969         (LocalInfo.Resolve): Re-enable sanity-test.
7970
7971 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
7972
7973         * cs-tokenizer.cs (consume_identifier): Detect double undescores
7974         
7975         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
7976         
7977         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
7978
7979 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7980
7981         Fix #75472.
7982         * ecore.cs (SimpleName.GetSignatureForError): Add.
7983         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
7984         (MemberAccess.GetSignatureForError): Add.
7985
7986 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
7987  
7988         The big error and warning messages review.
7989         
7990         * anonymous.cs,
7991         * assign.cs,
7992         * attribute.cs,
7993         * class.cs,
7994         * codegen.cs,
7995         * convert.cs,
7996         * cs-parser.jay,
7997         * cs-tokenizer.cs,
7998         * decl.cs,
7999         * delegate.cs,
8000         * doc.cs,
8001         * driver.cs,
8002         * ecore.cs,
8003         * enum.cs,
8004         * expression.cs,
8005         * flowanalysis.cs,
8006         * iterators.cs,
8007         * literal.cs,
8008         * location.cs,
8009         * modifiers.cs,
8010         * namespace.cs,
8011         * parameter.cs,
8012         * pending.cs,
8013         * report.cs,
8014         * rootcontext.cs,
8015         * statement.cs,
8016         * support.cs,
8017         * tree.cs,
8018         * typemanager.cs: Updated.
8019         
8020         * class.cs: (MethodCore.SetYields): Moved here to share.
8021         (PropertyMethod.Define): Moved iterator setup here.
8022         
8023         * iterators.cs: Add orig_method to have full access to parent
8024         container.
8025
8026 2005-07-05  Raja R Harinath  <rharinath@novell.com>
8027
8028         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
8029         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
8030         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
8031         variable of struct type.
8032         * expression.cs (Unary.ResolveOperator): Update to change.
8033         (Indirection.VerifyFixed): Likewise.
8034         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
8035         (ParameterReference.VerifyFixed): Value parameters are fixed.
8036         (This.VerifyFixed): Treat 'this' as a value parameter.
8037         * statement.cs (LocalInfo.IsFixed): Remove.
8038
8039 2005-07-01  Martin Baulig  <martin@ximian.com>
8040
8041         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
8042         `ec.EmitThis ()' to get the correct scope.
8043
8044 2005-07-01  Martin Baulig  <martin@ximian.com>
8045
8046         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
8047         instance is a ParameterReference; fixes #75299.
8048
8049 2005-07-01  Martin Baulig  <martin@ximian.com>
8050
8051         Reverted Marek's latest patch (r46725):
8052         - it contains structural changes which are neither mentioned in
8053           the ChangeLog nor explained anywhere; for example the additional
8054           argument of EmitContext's and Iterator's .ctor's and the
8055           TypeContainer.DefineMembers() change.
8056         - structural changes like this should go in in seperate patches
8057           and not be hidden in a huge patch which just seems to affect
8058           warnings and errors.
8059           a big and hard to understand patch.
8060         - it breaks iterators and causes regressions, for instance in
8061           test-iter-03.cs.      
8062
8063 2005-06-30  Raja R Harinath  <rharinath@novell.com>
8064
8065         Fix #75412.
8066         * expression.cs (Indexers.map): Remove.
8067         (Indexers.Append): Filter out inaccessible setters and getters.
8068         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
8069
8070         Fix #75283.
8071         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
8072         Refactored from ...
8073         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
8074         (FieldExpr.Emit, PropertyExpr.Emit): Update.
8075         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
8076         * expression.cs (Invocation.EmitCall): Add CS0120 check.
8077
8078 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
8079
8080         Fix #75322
8081         * class.cs (FieldBase.GetInitializerExpression): One more field
8082         for backup.
8083
8084 2005-06-28  Miguel de Icaza  <miguel@novell.com>
8085
8086         * pending.cs: Do not define a proxy if the base method is virtual,
8087         it will be picked up by the runtime (bug 75270).
8088
8089 2005-06-08  Martin Baulig  <martin@ximian.com>
8090
8091         The big Iterators rewrite :-)
8092
8093         * iterators.cs: Rewrite this to use the anonymous methods framework.
8094
8095         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
8096         before the TypeContainers; see 2test-21.cs.
8097
8098         * class.cs
8099         (TypeContainer.DefineType): Don't create a new EmitContext if we
8100         already have one (this only happens if we're an Iterator).
8101         (TypeContainer.Define): Also call Define() on all our iterators.
8102         (Method.CreateEmitContext): Added support for iterators.
8103
8104         * anonymous.cs
8105         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
8106         (AnonymousContainer.CreateMethodHost): Moved here from
8107         AnonymousMethod and made abstract.
8108         (AnonymousContainer.CreateScopeType): New abstract method.
8109         (AnonymousContainer.IsIterator): New public property.
8110         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
8111         get the ScopeTypeBuilder rather than manually defining it here. 
8112         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
8113         iterators here.
8114
8115         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
8116         before RootContext.DefineTypes().
8117
8118         * codegen.cs (EmitContext.RemapToProxy): Removed.
8119         (EmitContext.CurrentAnonymousMethod): Changed type from
8120         AnonymousMethod -> AnonymousContainer.
8121         (EmitContext.ResolveTopBlock): Protect from being called twice.
8122         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
8123         (EmitContext.EmitThis): Removed the iterators hacks; use the
8124         anonymous methods framework for that.
8125
8126         * statement.cs
8127         (ToplevelBlock.Container): Make this a property, not a field.
8128         (ToplevelBlock.ReParent): New public method; move the
8129         ToplevelBlock into a new container.
8130         (Foreach.TemporaryVariable): Simplify.
8131
8132 2005-06-05  Martin Baulig  <martin@ximian.com>
8133
8134         * statement.cs (LocalInfo.CompilerGenerated): New flag.
8135         (Block.AddTemporaryVariable): New public method; creates a new
8136         `LocalInfo' for a temporary variable.
8137         (Block.EmitMeta): Create the LocalBuilders for all the temporary
8138         variables here.
8139         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
8140         non-iterator variables.
8141
8142 2005-06-05  Martin Baulig  <martin@ximian.com>
8143
8144         * statement.cs (Foreach.TemporaryVariable): Create the
8145         LocalBuilder in the Emit phase and not in Resolve since in some
8146         situations, we don't have an ILGenerator during Resolve; see
8147         2test-19.cs for an example.
8148
8149 2005-06-04  Martin Baulig  <martin@ximian.com>
8150
8151         **** Merged r45395 from GCS ****
8152
8153         The big Foreach rewrite - Part II.
8154
8155         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
8156         with `PropertyInfo ienumerator_getcurrent'.
8157
8158         * codegen.cs (VariableStorage): Removed.
8159
8160         * statement.cs
8161         (Foreach): Derive from Statement, not ExceptionStatement.
8162         (Foreach.CollectionForeach): New nested class.  Moved all the code
8163         dealing with collection foreach here.
8164         (Foreach.ForeachHelperMethods): Removed.
8165         (Foreach.TemporaryVariable): Implement IMemoryLocation.
8166
8167 2005-05-23  Martin Baulig  <martin@ximian.com>
8168
8169         * statement.cs (Try.DoResolve): Don't create a `finally' if we
8170         don't need to.  Fix #75014.
8171
8172 2005-05-20  Martin Baulig  <martin@ximian.com>
8173
8174         Merged r44808 from GMCS.
8175
8176         * class.cs (TypeContainer.CircularDepException): Removed.
8177         (TypeContainer.DefineType): Removed the `InTransit' stuff.
8178         (TypeContainer.CheckRecursiveDefinition): Check for circular class
8179         (CS0146) and interface (CS0529) dependencies here.
8180
8181 2005-06-21  Raja R Harinath  <rharinath@novell.com>
8182
8183         * expression.cs (Invocation.EmitCall): Fix initialization
8184         'this_call' to reflect current behaviour.  Fix indentation.
8185
8186         * convert.cs (FindMostEncompassedType): Add two trivial special
8187         cases (number_of_types == 0 || number_of_types == 1).
8188         (FindMostEncompasingType): Likewise.
8189
8190 2005-06-17  Raja R Harinath  <rharinath@novell.com>
8191
8192         Some cleanups preparing for the fix of #75283.
8193         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
8194         error testing.
8195         (EventExpr.InstanceResolve): Likewise.
8196         (EventExpr.DoResolve): Remove redundant checks.
8197
8198 2005-06-10  Duncan Mak  <duncan@novell.com>
8199
8200         * cs-tokenizer.cs (process_directives): New flag for controlling
8201         the processing of preprocessor directives.
8202         (x_token): After seeing a '#', return Token.NONE instead of going
8203         to handle_preprocessing_directive() when not processing
8204         directives. This avoids unnecessary processing during the token peek in
8205         is_punct().
8206
8207         This fixes #74939.
8208
8209         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
8210         the existing error reporting methods instead of Report.Error.
8211
8212         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
8213         after Raja's rewrite.
8214
8215 2005-06-08  Miguel de Icaza  <miguel@novell.com>
8216
8217         * class.cs: Small fix.
8218
8219 2005-06-08  Raja R Harinath  <rharinath@novell.com>
8220
8221         Fix #75160.
8222         * class.cs (GetPartialBases): Fix return value check of
8223         part.GetClassBases.
8224
8225 2005-06-07  Raja R Harinath  <rharinath@novell.com>
8226
8227         Ensure that partial classes are registered in their enclosing
8228         namespace.  Initial part of fix of #75160.
8229         * tree.cs (Tree.RecordDecl): Add new namespace argument.
8230         Register declspace with namespace here, not in
8231         DeclSpace.RecordDecl.
8232         * cs-parser.jay: Pass namespace to RecordDecl.
8233         * class.cs (PartialContainer.Create): Likewise.
8234         (ClassPart.DefineType): New sanity-check.  Throws an exception if
8235         called.
8236         * decl.cs (Declspace.RecordDecl): Remove.
8237         * namespace.cs (NamespaceEntry.DefineName): Remove.
8238
8239 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
8240
8241         * rootcontext.cs: Reset TargetExt as well.
8242
8243 2005-06-03  Raja R Harinath  <rharinath@novell.com>
8244
8245         * ecore.cs (Expression.Resolve): Emit CS0654 error when
8246         -langversion:ISO-1.
8247
8248 2005-06-02  Raja R Harinath  <rharinath@novell.com>
8249
8250         Fix #75080, cs0119.cs.
8251         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
8252         of ...
8253         (Expression.Resolve): ... this.  Use it.  Remove bogus code
8254         allowing ExprClass.Type and ExprClass.Namespace for
8255         ResolveFlags.VariableOrValue.
8256         (Expression.Resolve) [1-argument variant]: Change default resolve
8257         flags based on language version.
8258         (Expression.Error_UnexpectedKind): Use a simple string array
8259         rather than an ArrayList.
8260         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
8261         not ExprClass.Type.
8262         (TypeOfVoid.DoResolve): Likewise.
8263         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
8264         flags argument -- it always has the same value.
8265
8266 2005-05-31  Raja R Harinath  <rharinath@novell.com>
8267
8268         Fix #75081.
8269         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
8270         Use it in the error message.
8271         * assign.cs, expression.cs, statement.cs: Update.
8272
8273 2005-05-30  Raja R Harinath  <rharinath@novell.com>
8274
8275         Fix #75088.
8276         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
8277         the "almostMatchedMember" case too.
8278         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
8279         that failed the accessibility checks to 'almost_match'.
8280
8281 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
8282
8283         * attribute.cs: Use internal MethodBuilder methods to set
8284         ExactSpelling and SetLastError on PInvoke methods, instead
8285         of passing them via charset.  Fixes #75060.
8286
8287 2005-05-27  Raja R Harinath  <rharinath@novell.com>
8288
8289         * parameter.cs (Parameter): Remove TODO comment.
8290         (Parameter.DefineParameter): Remove Location parameter.
8291         (Parameters.LabelParameters): Likewise.
8292         * class.cs (Constructor.Emit): Update to change.
8293         (MethodData.Emit): Likewise.
8294         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
8295         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
8296
8297 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
8298
8299         * parameter.cs,
8300           Removed Parameters.Location and added Parameter.Location instead.
8301           Removed Location parameter from Emit() and GetSignature().
8302         * anonymous.cs,
8303           class.cs,
8304           cs-parser.jay,
8305           delegate.cs,
8306           iterators.cs,
8307           statement.cs :
8308           Modified all related calls.
8309
8310 2005-05-26  Raja R Harinath  <rharinath@novell.com>
8311
8312         Improve user-defined conversion handling.
8313         * convert.cs (GetConversionOperators): Rewrite.  Return only the
8314         applicable operators.
8315         (AddConversionOperators): New.  Helper for GetConversionOperators.
8316         (FindMostEncompassedType, FindMostEncompassingType): Verify that
8317         there is only one most encompassed/encompassing type.
8318         (FindMostSpecificSource, FindMostSpecificTarget): Remove
8319         "applicable operator" handling.
8320         (UserConversion): Move cache here from GetConversionOperators.
8321         Directly cache the chosen operator, rather than the whole
8322         MethodGroup.
8323         (ExplicitNumericConversion): Fix buggy implementation of Decimal
8324         case.  Allow conversion of decimal to sbyte and byte too.
8325         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8326         New static methods.  Used to avoid allocating EmptyExpressions in
8327         convert.cs.
8328
8329 2005-05-24  Duncan Mak  <duncan@novell.com>
8330
8331         * ecore.cs (CastFromDecimal): New class for casting a decimal to
8332         another class, used in Convert.ExplicitNumericConversion.
8333         (CastToDecimal): New class, similar to above, but casts to
8334         System.Decimal, used in Convert.ImplicitNumericConversion and also
8335         in explicit convesion from double/float to decimal.
8336
8337         * convert.cs (ImplicitNumericConversion): Handle implicit
8338         conversions to System.Decimal.
8339         (ExplicitNumericConversion): handle explicit conversions to
8340         System.Decimal.
8341
8342         This fixes #68711.
8343         
8344 2005-05-20  Miguel de Icaza  <miguel@novell.com>
8345
8346         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
8347         know the type at this stage, just break through.   Fixes #75008 
8348
8349 2005-05-19  Martin Baulig  <martin@ximian.com>
8350
8351         * delegate.cs
8352         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
8353         to disable error reporting.
8354
8355         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
8356         here since we don't want to report an error; see the new test-336.cs.
8357
8358 2005-05-19  Raja R Harinath  <rharinath@novell.com>
8359
8360         * statement.cs (ToplevelBlock.GetParameterReference)
8361         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
8362         Move here from class Block.
8363         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
8364         * expression.cs (ParameterReference.DoResolveBase): Likewise.
8365
8366 2005-05-18  Martin Baulig  <martin@ximian.com>
8367
8368         Fix #74978.
8369
8370         * flowanalysis.cs
8371         (FlowBranching.Reachability): Add non-static public And() and Or()
8372         methods.
8373         (FlowBranchingSwitch): New class; do the `break_origins' thing
8374         like in FlowBranchingLoop.
8375         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
8376         reachability, not just locals and parameters.
8377         (FlowBranching.MergeChild): Remove some of the hacks for loop and
8378         switch; MergeBreakOrigins() now takes care of that.
8379
8380 2005-05-18  Martin Baulig  <martin@ximian.com>
8381
8382         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
8383         a loop and may leave it, reset the barrier; fixes #74974.
8384
8385 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
8386         
8387         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
8388         is back.
8389         
8390         * cs-parser.jay: Catch more lexical errors.
8391         
8392         * report.cs: Add one more Error method.
8393         
8394         * rootcontext.cs,
8395         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
8396
8397 2005-05-17  Martin Baulig  <martin@ximian.com>
8398
8399         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
8400         #70970. 
8401
8402 2005-05-16  Raja R Harinath  <rharinath@novell.com>
8403
8404         Fix test-382.cs.  Emit values of decimal constants.
8405         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
8406         Carved out of ...
8407         (TypeContainer.AddField): ... this.
8408         (TypeContainer.EmitFieldInitializers): Allow the list of fields
8409         with initializers to include 'Const's.
8410         (ClassPart.RegisterFieldForInitialization): Forward to
8411         PartialContainer.
8412         * const.cs (Const.Const): Pass initializer to base class.
8413         (Const.Define): In case of decimal constants, register them for
8414         initialization in a static constructor.
8415
8416 2005-05-14  Martin Baulig  <martin@ximian.com>
8417
8418         * statement.cs (Block.Resolve): Correctly handle unreachable code;
8419         do not call ResolveUnreachable() on unreachable statements in
8420         here, see the comment in the source code.
8421
8422 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8423
8424         Fix #74934.
8425         * expression.cs (BinaryResolveOperator): If one of the operands of
8426         an equality comparison is 'null' and the other is a pointer type,
8427         convert the null to a NullPointer.
8428         * convert.cs (ImplicitReferenceConversion): If the expression is a
8429         NullLiteral and the target type is a pointer type, return a
8430         NullPointer instead.
8431         (ImplicitConversionStandard): Likewise.
8432
8433 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
8434         
8435         * cs-parser.jay: Set readonly context based on special constructs.
8436         
8437         * expression.cs (LocalVariableReference.DoResolveBase): Improved
8438         readonly variable error handling.
8439         
8440         * rootcontext.cs (EmitCode): Don't verify members when error
8441         occurred.
8442         
8443         * statement.cs (LocalInfo): Add reaodnly context information.
8444         (SetReadOnlyContext, GetReadOnlyContext): New methods.
8445
8446 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8447
8448         * statement.cs (Block.Resolve): Revert change below.  Modify fix
8449         for #74041 to initialize 'resolved' to false only for explicit
8450         blocks.  Fixes #74873.
8451
8452 2005-05-12  Raja R Harinath  <harinath@gmail.com>
8453
8454         Fix #74920.
8455         * typemanager.cs (unmanaged_enclosing_types): New.
8456         (IsUnmanagedType): Avoid infloops by using
8457         'unmanaged_enclosing_types' to talk with recursive invocations.
8458
8459 2005-05-13  Martin Baulig  <martin@ximian.com>
8460
8461         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
8462         instance variable, not a local.  Fix #74873.
8463         (Block.ResolveUnreachable): Set it to true here.
8464
8465 2005-05-11  Duncan Mak  <duncan@novell.com>
8466
8467         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
8468         continuing to process for 'arg'.
8469         (handle_preprocessing_directive): Check the argument of the #endif
8470         directive and report error CS1025 if there are any trailing
8471         characters.
8472
8473         According to the C# spec, having even whitespace after the #endif
8474         directive is illegal; however, because we call arg.TrimEnd ()
8475         beforehand, we have the same behavior as csc, allowing whitespace
8476         after the directive.
8477
8478         Fixes #74892.
8479
8480 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
8481
8482         Fix #74863.
8483         
8484         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
8485         (Constructor.GetObsoleteAttribute): Implemented correctly.
8486
8487 2005-05-10  Martin Baulig  <martin@ximian.com>
8488
8489         * support.cs (ReflectionParameters.ParameterModifier): Use
8490         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
8491         and `ParameterAttributes.In'.  Fixes #74884.
8492
8493 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
8494
8495         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
8496         
8497         * expression.cs (Argument.GetParameterModifier): Turned to property.
8498         (Invocation.Error_InvalidArguments): Add more descriptive errors.
8499         
8500         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
8501         its C# equivalent.
8502         
8503 2005-05-09  Raja R Harinath  <rharinath@novell.com>
8504
8505         Fix #74852.
8506         * decl.cs (MemberCache.AddMethods): Register override methods,
8507         rather than non-override methods.
8508         * typemanager.cs (RegisterOverride): New.
8509         (IsOverride): Update.
8510
8511 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
8512
8513         Fix #73105.
8514         
8515         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
8516         recursive declaration.
8517         
8518         * statement.cs (Block.ResolveMeta): Report any error in resolving.
8519         
8520 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
8521
8522         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
8523         
8524         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
8525
8526 2005-05-05  Raja R Harinath  <rharinath@novell.com>
8527
8528         Fix #74797.
8529         * decl.cs (DeclSpace.FamilyAccessible): 
8530         Use TypeManager.IsNestedFamilyAccessible.
8531
8532         Fix reopened #64812.
8533         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
8534         internal'.
8535
8536 2005-05-04  Raja R Harinath  <rharinath@novell.com>
8537             Abin Thomas  <projectmonokochi@rediffmail.com>
8538             Anoob V E  <projectmonokochi@rediffmail.com>
8539             Harilal P R  <projectmonokochi@rediffmail.com>
8540
8541         Fix #64812.
8542         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
8543         allow access to all static members.
8544
8545 2005-05-04  Martin Baulig  <martin@ximian.com>
8546
8547         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
8548
8549 2005-05-04  Martin Baulig  <martin@ximian.com>
8550
8551         Fix #74655.
8552
8553         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
8554         section at the end; make things work if `default' is not the last
8555         section.        
8556
8557 2005-05-04  Martin Baulig  <martin@ximian.com>
8558
8559         Fix #70400.
8560
8561         * statement.cs (Switch): Replaced the `got_default' field with a
8562         `default_section' one.
8563         (Switch.CheckSwitch): Set `default_section' here.
8564         (Switch.Resolve): If we're a constant switch and the constant is
8565         not found, use the default section.
8566
8567 2005-05-03  Martin Baulig  <martin@ximian.com>
8568
8569         * expression.cs (ArrayAccess.EmitGetLength): New public method.
8570
8571         * statement.cs (Foreach.ArrayForeach): New nested class.
8572         (Foreach.TemporaryVariable): New nested class.
8573         (Foreach.EmitArrayForeach): Removed; this is now in the new
8574         ArrayForeach class.
8575
8576 2005-05-03  Raja R Harinath  <rharinath@novell.com>
8577
8578         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
8579         more conservative.
8580         (VerifyPendingMethods): Revert change below.
8581
8582         * typemanager.cs (IsOverride, RegisterNonOverride): New.
8583         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
8584         that used to trigger warning -28.  Remove warning -28.
8585         * expression.cs (Invocation.OverloadResolve): Use
8586         TypeManager.IsOverride to distinguish override methods.
8587
8588         Fix #74773.
8589         * pending.cs (VerifyPendingMethods): If a base type implements the
8590         requested interface, don't bother checking individual methods of
8591         the base type.  As a side-effect, this prevents the creation of
8592         unnecessary proxies.
8593
8594 2005-05-02  Martin Baulig  <martin@ximian.com>
8595
8596         Fix #70182.
8597
8598         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
8599         Also `And' the locals if the old vector is null.
8600         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
8601         null; in this case we basically reset all the variables.        
8602
8603 2005-05-02  Martin Baulig  <martin@ximian.com>
8604
8605         Fix #74529.
8606
8607         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
8608         Added `FlowBranching branching' argument; always `and' the
8609         variables instead of `or'ing them unless we're an infinite loop.
8610
8611         * statement.cs (While.Resolve): Create a new sibling unless we're
8612         infinite.       
8613
8614 2005-05-02  Martin Baulig  <martin@ximian.com>
8615
8616         Fix #70140.
8617
8618         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
8619         arguments; use it instead of creating a new TopLevelBlock.
8620         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
8621         our ConstructorInitializer.
8622
8623         * statement.cs
8624         (TopLevelBlock.TopLevelBranching): New public property.
8625         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
8626         and create our `TopLevelBranching'.
8627
8628         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
8629         anonymous method host, use `block.TopLevelBranching' rather than
8630         creating a new branching.
8631
8632 2005-04-20  Miguel de Icaza  <miguel@novell.com>
8633
8634         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
8635         a ScopeInfo, if any of the current children is a child of the new
8636         entry, move those children there.
8637
8638 2005-04-30  Martin Baulig  <martin@ximian.com>
8639
8640         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
8641         at the beginning of a SwitchSection.  Fix #73335.
8642
8643 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
8644
8645         Fix #74378
8646         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
8647         
8648         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
8649         (FieldExpr.DoResolve): Obsolete members are ignored for field
8650         initializers.
8651         
8652 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
8653
8654         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
8655         of arrays detection.
8656
8657         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
8658         verification.
8659         (Field.VerifyClsCompliance): Volatile fields are not compliant.
8660
8661         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
8662         arrays report.
8663
8664 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
8665
8666         * cs-parser.jay: Use the prefered version of -unsafe in error
8667         message.
8668
8669 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
8670
8671         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
8672         circumstances.
8673
8674 2005-04-20  John Luke  <john.luke@gmail.com>
8675
8676         * driver.cs: fix typo in error message, --outout to --output
8677
8678 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
8679
8680         * codegen.cs (InRefOutArgumentResolving): New field.
8681         
8682         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
8683         fields outside contructor.
8684         
8685         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
8686         
8687 2005-04-19  Miguel de Icaza  <miguel@novell.com>
8688
8689         * anonymous.cs (CaptureContext.EmitParameterInstance): The
8690         parameter code was not completed ever, so it was not as up-to-date
8691         as local variables.  Must finish it.
8692
8693         The bug fix was to compare the Toplevel of the block, not the
8694         current block.  Thanks for Ben for pointing this out. 
8695
8696 2005-04-19  Raja R Harinath  <rharinath@novell.com>
8697
8698         * decl.cs (AddMethods): Use the declaring type of the problem
8699         method to determine if we want to squash a warning.
8700
8701 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
8702
8703         * attribute.cs: Removed debug output.
8704
8705         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
8706         
8707         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
8708         Report.Stderr.
8709         
8710 2005-04-18  Raja R Harinath  <rharinath@novell.com>
8711
8712         Fix #74481.
8713         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
8714         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
8715         all null comparisons against reference types.
8716
8717 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
8718
8719         Fix# 74565
8720         * class.cs (TypeContainer.CircularDepException) New nested
8721         exception class.
8722         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
8723         (TypeContainer.DefineType): Removed error, reset InTransit before
8724         exit.
8725         (Class.DefineType): Throw exception when is in Transit.
8726         Catch exception and report error.
8727         (Struct.DefineType): Throw exception when is in Transit.
8728         Catch exception and report error.
8729         (Interface.DefineType): Throw exception when is in Transit.
8730         Catch exception and report error.
8731
8732         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
8733         handle nested exception handlers.
8734
8735         * flowanalysis.cs (InTryWithCatch): New method, search for try with
8736         a catch.
8737
8738         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
8739         InFinally and InCatch storage.
8740
8741         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
8742         (Catch.Resolve): Set and Restore ec.InCatch.
8743         (Try.Resolve): Set and Restore ec.InFinally.
8744         (Try.HasCatch): True when try has catch.
8745
8746 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
8747
8748         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
8749           for the same event member, so exclude such cases from warning 419.
8750           Fixed bug #74633.
8751
8752 2005-04-16  Miguel de Icaza  <miguel@novell.com>
8753
8754         * expression.cs (Binary.ResolveOperator): Apply patch from John
8755         Luke to fix bug 59864: operators &, | and ^ on enumerations
8756         require that the same enum type on both sides.
8757
8758         * driver.cs: Add warnings to old flag usage, this is to assist
8759         people who produce Makefiles and hope that the Makefiles will be
8760         used on Windows.
8761
8762         * class.cs (TypeContainer.EmitType): Moved the definition of the
8763         special $PRIVATE$ field from the resolve phase to the Emit phase.
8764         During resolve we do not know if we are a struct with
8765         HasExplicitLayout, we know this only after the attributes for the
8766         type are emitted.
8767
8768         Set the FieldOffset to zero on the dummy field that we create for
8769         the class.   Fixes 74590.
8770
8771 2005-04-16  Raja R Harinath  <rharinath@novell.com>
8772
8773         Fix #73834.
8774         * ecore.cs (PropertyExpr.resolved): New.
8775         (DoResolve): Use it to handle a case of double resolution here.
8776         Handle a case of identical-name-and-type-name.
8777         * expression.cs (ArrayCreation.CheckIndices): Avoid double
8778         resolution by storing the results of expression resolution back
8779         into the "probes" array.
8780
8781 2005-04-15  Raja R Harinath  <rharinath@novell.com>
8782
8783         Fix cs0208-7.cs and cs0208-8.cs.
8784         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
8785         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
8786         error reporting to point out the reason a struct is not unmanaged.
8787
8788 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8789
8790         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
8791           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
8792
8793 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8794
8795         Fix #74528.
8796         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
8797         IdenticalNameAndTypeName here.
8798         (EventExpr.InstanceResolve): Likewise.
8799
8800 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
8801
8802         C# 2.0 DefaultCharSetAttribute implementation
8803         
8804         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
8805         which allows us to set GlobalNamespace for every resolve.
8806         (Attribute.ResolveArguments): Cut from Resolve.
8807         (Attribute.GetCharSetValue): Returns CharSet named argument.
8808         (Attribute.DefinePInvokeMethod): Gets default charset from
8809         module settings.
8810         (GlobalAttribute.ResolveAsTypeStep): Override.
8811         (GlobalAttribute.ResolveArguments): Override.
8812         
8813         * class.cs (TypeAttr): Is protected.
8814         
8815         * codegen.cs (ModuleClass.DefaultCharSet): New member.
8816         (ModuleClass.DefaultCharSetType): New memeber.
8817         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
8818         
8819         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
8820         charset from module.
8821         
8822         * delegate.cs (TypeAttr): Override.
8823         (Delegate.DefineType): Use this TypeAttr.
8824         
8825         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
8826         at very early stage (before types are defined) to resolve model
8827         module attributes. It will probably not work with corlib but it
8828         should be ok.
8829         
8830         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
8831         charset from module.
8832         
8833         * typemanager.cs (default_charset_type): New type.
8834
8835 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8836
8837         * decl.cs (MemberCache.AddMethods): Don't warn if
8838         System.Object.Finalize has buggy MethodAttributes.
8839
8840         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
8841         removed below.
8842
8843 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8844
8845         * doc.cs : detect ambiguous reference to overloaded members.
8846           Fixed bug #71603. MS 1.1 csc does not detect it.
8847
8848 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8849
8850         * doc.cs : delegates must not be referenced with parameters.
8851           Fixed bug #71605.
8852
8853 2005-04-12  Miguel de Icaza  <miguel@novell.com>
8854
8855         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
8856
8857 2005-04-10  Miguel de Icaza  <miguel@novell.com>
8858
8859         * driver.cs (MainDriver): Stop processing if the CLS stage found
8860         errors. 
8861
8862         (CompilerCallableEntryPoint.InvokeCompiler): Always
8863         reset after execution;   Take a TextWriter argument for the
8864         output.
8865
8866         * report.cs: Use the error stream instead of hardcoding stderr. 
8867
8868 2005-04-09  Miguel de Icaza  <miguel@novell.com>
8869
8870         * class.cs: Reduce code paths to test, too small of an
8871         optimization to make it worth the extra testing.  Always perform
8872         it. 
8873
8874 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8875
8876         Fix #74510.
8877         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
8878         operators that had errors reported on them.
8879
8880 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
8881
8882         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
8883         argument types.
8884         (Attribute.Resolve): Add named argument type checking.
8885         
8886         * class.cs (FixedField.Define): Use IsPrimitiveType
8887         
8888         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
8889         
8890         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
8891         unsafe parameter types.
8892         
8893         * statement.cs (Using.ResolveExpression): Add better error description.
8894         
8895         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
8896         
8897 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8898
8899         Fix #74484.
8900         * attribute.cs (Attribute.GetAttributeUsage): Resolve
8901         AttributeUsageAttribute in the emitcontext of the attribute class,
8902         not in the emitcontext of the attributable entity it was attached to.
8903         * cs-parser.jay: Use 'current_class', not 'current_container',
8904         when creating a GlobalAttribute.
8905
8906 2005-04-08  Alp Toker  <alp@atoker.com>
8907
8908         * pending.cs: The fix to #58413 failed to compile methods implementing
8909         interfaces with/without params modifiers and vice versa, even though
8910         params modifiers aren't part of the signature. Make the modifier check
8911         less strict as in csc.
8912
8913 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
8914             Anoob V E  <projectmonokochi@rediffmail.com>
8915             Harilal P R  <projectmonokochi@rediffmail.com>
8916
8917         Fix #58413.
8918         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
8919         modifiers of pending methods.
8920         (PendingImplementation.PendingImplementation): Initialize it.
8921         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
8922         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
8923         with ParameterData.  Add check for modifiers.
8924         * class.cs (MethodData.Define): Update to changes.
8925
8926 2005-04-07  Raja R Harinath  <rharinath@novell.com>
8927
8928         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
8929
8930 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
8931
8932         * class.cs (PropertyMethod.Define): Check private accessor in abstract
8933         property.
8934         
8935         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
8936         
8937         * rootcontext.cs,
8938         * typemanager.cs: Registered RequiredAttributeAttribute.
8939         
8940 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
8941
8942         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
8943         Warning CS0169 is back at level 3.
8944         (IMethodData.SetMemberIsUsed): New method.
8945         
8946         * decl.cs (IsUsed): New value; moved from FieldBase.Status
8947         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
8948         
8949         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
8950
8951         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
8952         contants.
8953         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
8954         is used.
8955         
8956         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
8957         is used.
8958         
8959         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
8960         to avoid the problems with nested types.
8961
8962 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
8963             Anoob V.E  <projectmonokochi@rediffmail.com>
8964             Harilal P.R  <projectmonokochi@rediffmail.com>
8965             Raja R Harinath  <rharinath@novell.com>
8966
8967         Fix #73820.
8968         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
8969         attribute.
8970         * typemanager (GetConstructor): Make public.
8971
8972 2005-04-05  John Luke  <john.luke@gmail.com>
8973             Raja R Harinath  <rharinath@novell.com>
8974
8975         Fix #62232.
8976         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
8977         struct too.  Return false quicker in a few cases.
8978         (VerifyUnManaged): Use it.
8979
8980 2005-04-05  Raja R Harinath  <rharinath@novell.com>
8981
8982         Fix #74041.
8983         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
8984         not 'unreachable_seen'.
8985
8986 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
8987
8988         * attribute.cs (Attribute.GetValue): Removed unused.
8989         
8990         * codegen.cs (CodeGen.TrimExt): Removed unused.
8991         
8992         * cs-parser.jay (output): Removed unused.
8993         
8994         * cs-tokenizer.cs (hex_digits): Removed unused.
8995         
8996         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
8997         
8998         * expression.cs (Indirection.LoadExprValue): Removed unused.
8999         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
9000         
9001         * iterators.cs (Iterator.param_types): Removed unused.
9002         
9003         * statement.cs (Goto.block): Removed unused.
9004         (ToplevelBlock.did): Removed unused.
9005         (Switch.ResolveConstantSwitch): Removed unused.
9006
9007 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
9008
9009         * rootcontext.cs: Allow mcs to bootstrap with the compilation
9010         resetting thingy.
9011
9012 2005-04-01  Raja R Harinath  <rharinath@novell.com>
9013
9014         Fix #74232 and cs0208-3.cs.
9015         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
9016         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
9017         unmanaged type.  Don't use FieldBuilders when 't' is a
9018         TypeBuilder.  Use ModFlags and MemberType fields.
9019         * class.cs (MemberBase.member_type): Rename from MemberType.
9020         (MemberBase.MemberType): New property.  Determines member_type on
9021         demand.
9022         (MemberBase.DoDefine): Don't initialize MemberType here.
9023         (FieldMember.Define): Likewise.
9024
9025 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
9026
9027         Fix #74241
9028         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
9029         Attributes are emitted there.
9030         
9031 2005-04-01  Raja R Harinath  <rharinath@novell.com>
9032
9033         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
9034         keyword in 'partial enum' too.
9035         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
9036         is not allowed).
9037         Report from Kamil Skalski <nazgul@omega.pl>.
9038
9039         Fix #74309.
9040         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
9041         have partial containers too.
9042
9043         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
9044         in block' checks to Block.CheckInvariantMeaningInBlock.
9045         * statement.cs (Block.GetKnownVariableInfo): Make private.
9046         (Block.IsVariableUsedInChildBlock): Remove.
9047         (Block.IsVariableUsedInBlock): Likewise.
9048         (Block.CheckInvariantMeaningInBlock): New.  Show location of
9049         conflicting declaration.
9050         (Block.AddVariable): Make error messages less long-winded and more
9051         specific.  Show location of conflicting declaration.
9052         * parameter.cs (Parameters.Location): New readonly property.
9053
9054 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9055
9056         Clean up semantics of invoking ResolveMemberAccess.
9057         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
9058         can have an instance, ensure that we pass in a non-TypeExpression
9059         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
9060         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
9061         argument.  Update to changes and simplify.
9062         (FieldExpr.Emitinstance): Remove CS0120 check.
9063         (PropertyExpr.EmitInstance): Likewise.
9064         * expression.cs (Argument.Resolve): Likewise.
9065         (Invocation.DoResolve): Update to changes in semantics of
9066         InstanceExpression.
9067
9068 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
9069
9070         Fix #74241
9071         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
9072         customization.
9073         
9074         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
9075
9076 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9077
9078         Fix difference in behaviour with commandline invocation.
9079         * driver.cs (Driver.Reset): New.
9080         (CompilerCallableEntryPoint): Call it.
9081
9082         * statement.cs (If.Resolve): Avoid spurious "uninitialized
9083         variable" warnings if the boolean expression failed to resolve.
9084
9085 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
9086
9087         * attribute.cs: Fix the union of several permissions when some of them
9088         are unrestricted (so the result isn't an unrestricted permission set).
9089         Fix #74036.
9090
9091 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9092
9093         * ecore.cs (MemberExpr): New class.  Convert from interface
9094         IMemberExpr.
9095         (MemberExpr.ResolveMemberAccess): Refactor and move here from
9096         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
9097         error checks.
9098         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
9099         (MethodGroupExpr.IsExplicitImpl): Remove.
9100         (Expression.GetFieldFromEvent): Remove.
9101         (SimpleName.MemberStaticCheck): Remove.
9102         (SimpleName.DoSimpleNameResolve): Update to changes.
9103         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
9104         (MemberAccess.IdenticalNameAndTypeName): Remove.
9105         (MemberAccess.error176): Move to MemberExpr.
9106         (MemberAccess.DoResolve): Update to changes.
9107         (BaseAccess.DoResolve): Likewise.
9108
9109 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
9110
9111         C# 2.0 Conditional attribute class implementation
9112         
9113         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
9114         Analyzes class whether it has attribute which has ConditionalAttribute
9115         and its condition is not defined.
9116         
9117         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
9118         (Class.IsExcluded): New method. Search for at least one defined
9119         condition in ConditionalAttribute of attribute class.
9120
9121 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9122
9123         * ecore.cs (PropertyExpr): Derive from Expression, not
9124         ExpressionStatement.
9125         (PropertyExpr.EmitStatement): Remove.
9126
9127 2005-03-29  Raja R Harinath  <rharinath@novell.com>
9128
9129         Fix #74060.
9130         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
9131         internal field "value__" of an enum be private.  The examples for
9132         "value__" that I found on MSDN all used FieldAttributes.Private.
9133
9134         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
9135         Don't mention IL method attribute names.
9136
9137         Fix #47991.  Remove a TODO.
9138         * statement.cs (Block.Toplevel): Make into a field.
9139         (Block.Parameters): Move into ToplevelBlock.
9140         (Block.known_variables): Rename from child_variable_names.
9141         (Block.Block): Remove variants that take Parameters.  Initialize
9142         'Toplevel' with the immediately surrounding toplevel block.
9143         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
9144         LocalInfo parameter.
9145         (Block.GetKnownVariableInfo): New.
9146         (Block.IsVariableNameUsedInChildBlock): Update.
9147         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
9148         the block, even though it may not be in scope.
9149         (Block.AddVariable): Remove Parameters parameter.  Use
9150         Toplevel.Parameters instead.
9151         (Block.AddConstant): Remove Parameters parameter.
9152         (Block.GetParameterReference): Update to use Toplevel.Parameters.
9153         (Block.IsParamaterReference): Likewise.
9154         (Block.IsLocalParameter): Likewise.  Simplify a lot.
9155         (ToplevelBlock.Parameters): New.  Moved from Block.
9156         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
9157         initialize Parameters to a non-null value.
9158         * cs-parser.jay: Update to changes.
9159         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
9160         simple names that mean different things in the same block.  Use
9161         Block.IsVariableNameUsedInBlock.
9162
9163 2005-03-28  Raja R Harinath  <rharinath@novell.com>
9164
9165         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
9166         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
9167         GetTypeHandle.  It is possible for a reflected type to derive from
9168         a TypeBuilder (e.g., int[] derives from the TypeBuilder
9169         System.Array during mscorlib compilation).
9170         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
9171         contain a method_hash, don't create one either.  Don't create a
9172         deep copy of the base cache's method_hash.
9173         (MemberCache.SetupCache): Rename back from DeepCopy.
9174         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
9175         already initialized.  If we see an override function, add its
9176         underlying base virtual function to the member_hash too.
9177
9178         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
9179
9180 2005-03-26  Raja R Harinath  <harinath@acm.org>
9181
9182         Fix #73038.
9183         * assign.cs (Assign.DoResolve): When the RHS of an assignment
9184         fails to resolve, ensure that the LHS is still resolved as an
9185         lvalue.
9186
9187 2005-03-25  Raja R Harinath  <harinath@acm.org>
9188
9189         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
9190         ec.ContainerType.
9191         (Enum.current_ec): Remove.
9192         (Enum.LookupEnumValue): Remove EmitContext argument.
9193         Just uses the one created during DefineType.
9194         (Enum.FindMembers): Update.
9195         * expression.cs (MemberAccess.DoResolve): Update.
9196
9197 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
9198
9199         * assign.cs (Assign.DoResolve): Check for CS1717 when
9200         source and target are same (uses Equals).
9201
9202         * expression.cs (LocalVariableReference, ParameterReference,
9203         This): Implemented Equals, GetHashCode.
9204
9205         * statement.cs (Block.GetParameterReference): Removed useless
9206         local variable.
9207
9208 2005-03-22  Raja R Harinath  <rharinath@novell.com>
9209
9210         Fix cs0128.cs
9211         * statement.cs (Block.AddVariable): Ensure that we skip implicit
9212         blocks before deciding whether the error is cs0136 or cs0128.
9213
9214         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
9215         (using_alias_directive, using_namespace_directive): Pass
9216         MemberName, not an expression to Namespace.UsingAlias and
9217         Namespace.Using.
9218         (MakeName): Use the MemberName of the namespace.
9219         * namespace.cs (Namespace.MemberName): New.
9220         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
9221         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
9222         Likewise.
9223         * decl.cs (MemberName.Name): Make readonly.
9224         (MemberName.FromDotted): New "constructor".
9225         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
9226         (MemberCore.Name): Compute from MemberName on demand.
9227         (MemberCore.SetMemberName): Provide a way to change the
9228         MemberName.
9229         (MemberCore.AddToContainer): Don't take a fullname parameter.
9230         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
9231         fully qualified name of the container to the member name.
9232         (TypeContainer.AddToTypeContainer): Use a fully qualified name
9233         only if the type is a member of the root container.
9234         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
9235         MemberName.Left rather than searching for an embedded ".".
9236         (PartialContainer.CreatePart): Update to changes in RootContext.
9237         (MemberBase.ShortName): Turn into a property.  Use
9238         MemberCore.SetMemberName.
9239         (MemberBase.ExplicitInterfaceName): Remove.
9240         (MemberBase.UpdateMemberName): Remove.
9241         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
9242         (PropertyBase.SetMemberName): New override.
9243         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
9244         (Tree.GetDecl): New.
9245         (Tree.AllDecls): Rename from Decls.
9246         * attribute.cs, enum.cs, report.cs: Update to changes.
9247         * driver.cs (MainDriver): Use MemberName.FromDotted on
9248         RootContext.MainClass.
9249
9250 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
9251
9252         * class.cs (FixedField.Define): Check for CS1664 and more sanity
9253         checks.
9254
9255         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
9256
9257 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
9258
9259         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
9260         property accessor modifiers.
9261
9262         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
9263         fixed buffer attribute (CS1716).
9264         (PropertyMethod.HasCustomAccessModifier): When property accessor
9265         has custom modifier.
9266
9267         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
9268         modifiers.
9269         (PropertyExpr.DoResolveLValue): Add CS0272.
9270
9271 2005-03-17  Miguel de Icaza  <miguel@novell.com>
9272
9273         * convert.cs: When converting to a pointer, use the proper Conv.U
9274         or Conv.I depending on the source data type.
9275
9276         * cs-tokenizer.cs: Make the size for large decimal constants,
9277         fixes #72957.
9278
9279 2005-03-17  Martin Baulig  <martin@ximian.com>
9280
9281         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
9282         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
9283
9284 2005-03-17  Martin Baulig  <martin@ximian.com>
9285
9286         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
9287         to bool so we can return an error condition.
9288         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
9289         returned an error.
9290
9291 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
9292
9293         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
9294         attributes.
9295
9296 2005-03-16  Raja R Harinath  <rharinath@novell.com>
9297
9298         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
9299         Refactor to avoid traversing the list of assemblies, and to avoid
9300         string concatenation.
9301         * typemanager.cs (guid_attr_type): Remove.
9302         (negative_hits, pointers, references): Remove hashes.
9303         (type_hash): New.
9304         (GetConstructedType): New.  Uses type_hash to handle constructed
9305         types (arrays, references, pointers).
9306         (GetReferenceType, GetPointerType): Use it.
9307         (GetNestedType): New.  Uses type_hash to handle nested types of
9308         reflected types.
9309         (LookupType, LookupTypeDirect): Remove.
9310         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
9311         'types' hash and LookupTypeReflection directly.
9312         (params_string, params_object): Use GetConstructedType.
9313         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
9314         top-level types.
9315         (Namespace.Lookup): Use cached_types.
9316         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
9317         provided by old TypeManager.LookupType.
9318         * rootcontext.cs (MakeFQN): Remove.
9319         * decl.cs (DeclSpace.MakeFQN): Likewise.
9320         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
9321         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
9322         TypeManager.GetConstructedType.
9323         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
9324
9325 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
9326
9327         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
9328         indexers.
9329
9330         * cs-parser.jay: Reports CS1527 for any namespace element.
9331
9332         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
9333         Added CS0407.
9334
9335         * expression.cs (ParameterReference.IsAssigned): Changed error to
9336         CS0269.
9337         (Error_WrongNumArguments): Moved CS0245 detection here.
9338
9339         * statement.cs (Return.Resolve): Add CS1622 report.
9340
9341 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
9342
9343         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
9344
9345 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
9346
9347         * attribute.cs expression.cs: Get rid of some allocations.
9348
9349 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
9350
9351         * doc.cs : just eliminate the latest change.
9352
9353 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9354
9355         * doc.cs : commented out the latest change. It breaks xml-030.cs
9356
9357 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9358
9359         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
9360           fail. So invoke CreateType() in FindDocumentedType().
9361
9362 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9363
9364         * cs-tokenizer.cs : added IsKeyword().
9365         * doc.cs : Detect keyword incorrectly used as identifier.
9366           Allow identifiers prefixed by @.
9367
9368 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
9369
9370         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
9371         It caused exception in namespace resolving (again!).
9372         
9373         * class.cs (Class.ctor): Removed exit.
9374         (PropertyMethod.ctor): ditto.
9375         
9376         * codegen.cs (Codegen.Reset): Reset static data.
9377         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
9378         
9379         * cs-tokenizer.cs (Cleanup): Removed.
9380         
9381         * driver.cs (GetSystemDir): Rewrote to one line command.
9382         It caused problem with unloaded dynamic modules.
9383         (UnixParseOption): Removed Exit.
9384         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
9385         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
9386         Now can be mcs used as library.
9387         
9388         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
9389         empty location.
9390         
9391         * location.cs (Reset): Reset static data.
9392         
9393         * namespace.cs (Reset): Reset static data.
9394         
9395         * report.cs (Report.Reset): Reset static data.
9396         
9397         * rootcontext.cs (RootContext.Reset): Reset static data.
9398         
9399         * tree.cs (RootTypes.ctor): Use Location.Null
9400         
9401         * typemanager.cs (TypeManager.Reset): Reset static data.
9402         (CoreLookupType): Removed Exit.
9403         (TypeHandle.Reset): Reset static data.
9404         
9405 2005-03-10  Raja R Harinath  <rharinath@novell.com>
9406
9407         Fix #73516.
9408         * typemanager.cs (ComputeNamespaces): Import namespaces from
9409         referenced modules too.
9410
9411 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9412
9413         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
9414         than '.'.
9415
9416 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9417
9418         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
9419         enclosing DeclSpace.  This ensures that a name-lookup populates
9420         more caches and there are fewer 'TypeExpression's.  Carve out
9421         nested type lookup into ...
9422         (LookupNestedTypeInHierarchy): ... this.
9423
9424 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9425
9426         Clean up a few partial-class semantics.  
9427         Fixes test-357.cs and cs1618-2.cs.
9428         * cs-parser.jay (struct_declaration): Use 'current_class' as
9429         parent of newly-created struct.  Remove call to Register ().
9430         Use 'pop_current_class' to complete handing the current struct.
9431         (interface_declaration): Likewise.
9432         (class_declaration): Likewise.
9433         (enum_declaration): Use 'current_class' as parent of newly created
9434         enum.
9435         (delegate_declaration): Likewise.
9436         (pop_current_class): New function.  This is used to handle closing
9437         up the 'current_class' and 'current_container', and pointing them
9438         to the enclosing class/container.
9439         (CSharpParser): Initialize 'current_class' too.
9440         * decl.cs (MemberCore): Add check for invariant: a partial
9441         container is not a parsed entity, and thus does not enclose any
9442         parsed members.
9443         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
9444         (DeclSpace.BaseTypeExpr): Use it.
9445         (DeclSpace.LookupType): Add check for invariant.
9446         * class.cs (TypeContainer): Add check for invariant: a nested
9447         class should have the same NamespaceEntry as its enclosing class.
9448         (TypeContainer.EmitFieldInitializers): Make virtual.
9449         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
9450         MemberCore.
9451         (TypeContainer.Register): Remove.
9452         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
9453         null.  Use TypeResolveEmitContext for resolving base types and
9454         interfaces.  Move initialization of Parts.TypeBuilder here from
9455         ...
9456         (TypeContainer.DefineNestedTypes): ... here.
9457         (PartialContainer): Take a Namespace not a NamespaceEntry.
9458         (PartialContainer.Create): Don't use Register.  Call the
9459         appropriate Add... function directly.
9460         (ClassPart): Take both the PartialContainer and the enclosing
9461         class as constructor arguments.
9462         (ClassPart.EmitFieldInitializers): Override.
9463         (ClassPart.PartFindNestedTypes): Remove.
9464         (FieldBase.GetInitializerExpression): Resolve the initializer
9465         expression in the emit context of the enclosing class.
9466         * tree.cs (RootTypes): Remove Register ().
9467         
9468 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
9469
9470         * cs-parser.jay: Removed CS0134.
9471         
9472         * driver.cs: Removed CS1901.
9473         
9474         * expression.cs (SizeOf.DoResolve): Don't report CS0233
9475         for predefined types.
9476
9477 2005-03-07  Duncan Mak  <duncan@novell.com>
9478
9479         * codegen.cs (Save):  Catch UnauthorizedAccessException as
9480         well. Fixes bug #73454.
9481
9482 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
9483
9484         * cs-tokenizer.cs (xtoken): Add CS1035.
9485         
9486         * class.cs (MethodData.Define): Add CS0683.
9487         (FieldMember.ctor): Add CS0681.
9488
9489 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9490
9491         * ecore.cs (SimpleName.DoResolve): Rename from
9492         SimpleName.DoResolveAllowStatic.
9493         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
9494         Pass 'intermediate' flag to MemberStaticCheck.
9495         (SimpleName.MemberStaticCheck): Skip "static check" only in case
9496         of "intermediate" lookups via MemberAccess.
9497         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
9498         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
9499
9500 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9501
9502         Fix #73394.
9503         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
9504         slipped in because of variable names that are identical to a
9505         builtin type's BCL equivalent ('string String;', 'int Int32;').
9506         (PropertyExpr.EmitInstance): Likewise.
9507
9508 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
9509
9510         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
9511         
9512         * report.cs (warning_ignore_table): Made public.
9513
9514 2005-03-04  Raja R Harinath  <rharinath@novell.com>
9515
9516         Fix #73282.
9517         * class.cs (MethodData.Emit): Pass 'container' to
9518         container.GetObsoleteAttribute instead of 'container.Parent'.
9519
9520 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
9521
9522         * cs-parser.jay: Add 1534 error test.
9523
9524         * iterators.cs (Yield.CheckContext): Add error 1629.
9525         (Iterator.ctor): Save unsafe modifier.
9526         (MoveNextMethod.DoEmit): Restore unsafe context.
9527
9528         * namespace.cs (UsingAlias): Better error message.
9529
9530 2005-03-03  Dan Winship  <danw@novell.com>
9531
9532         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
9533         the warning message [#73219]
9534
9535 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9536
9537         Fix compile with MCS 1.0.0.0.
9538         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
9539         w_restore to not depend on string constant folding.
9540
9541 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9542
9543         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
9544         CS0246 check to users who passed 'silent = false'.
9545         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
9546         check.
9547         (SimpleName.SimpleNameResolve): Update.
9548         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
9549         (MemberAccess.IdenticalNameAndTypeName): Update.
9550         * doc.cs (FindDocumentedTypeNonArray): Update.
9551
9552 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
9553
9554         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
9555         * parameters.cs (ComputeAndDefineParameters): Remove.
9556         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
9557         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
9558         Use GetParameterInfo.
9559
9560 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
9561
9562         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
9563
9564 2005-03-02  Raja R Harinath  <rharinath@novell.com>
9565
9566         Unify DeclSpace.LookupType and DeclSpace.FindType.
9567         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
9568         is in charge of defining nested types on demand.
9569         (DeclSpace.LookupType): Use it when the current_type is a
9570         TypeBuilder.  Use LookupTypeDirect for reflected types.
9571         (DeclSpace.FindType): Remove.
9572         (DeclSpace.LookupInterfaceOrClass): Likewise.
9573         (DeclSpace.DefineTypeAndParents): Likewise.
9574         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
9575         DeclSpace.LookupType.
9576         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
9577         * typemanager.cs (LookupType): Simplify.
9578         (AddUserType): Remove type from negative_hits.
9579         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
9580         * class.cs (TypeContainer.FindMembers): Move handling of nested
9581         types ...
9582         (TypeContainer.FindMembers_NestedTypes): ... here.
9583         (TypeContainer.FindNestedType): Implement override.
9584         (ClassPart.FindNestedType): Delegate to PartialContainer.
9585         (ClassPart.PartFindNestedType): Looks up the nested types of the
9586         part alone.
9587
9588 2005-03-02  Martin Baulig  <martin@ximian.com>
9589
9590         * class.cs (TypeContainer.DoDefineMembers): We also need a default
9591         static constructor in static classes.
9592
9593 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
9594
9595         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
9596         sizeParamIndex is not specified.
9597
9598 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
9599
9600         Fix #73117
9601         * report.cs (WarningMessage.IsEnabled): Missing null check.
9602
9603 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9604
9605         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
9606         in the fields and not in the properties.
9607
9608 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
9609
9610         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
9611         fields as well.
9612
9613 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9614
9615         * attribute.cs: Small refactoring (improved robustness).
9616         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
9617         (ValidateGuid): Removed.
9618         (Resolve): Removed referenced to above mentioned.
9619         (GetAttributeUsage): Made private and changed to work without
9620         class assistance.
9621         (GetIndexerAttributeValue): Don't crash.
9622         (GetConditionalAttributeValue): Ditto.
9623         (GetClsCompliantAttributeValue): Ditto.
9624         (ExtractSecurityPermissionSet): All attributes exceptions are
9625         error 648.
9626         (GetPropertyValue): New helper.
9627         (GetMethodImplOptions): New method.
9628         (DefinePInvokeMethod): Reuse common code. Implemented handling of
9629         some missing properties.
9630         
9631         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
9632         (Method.ApplyAttributeBuilder): Updated.
9633         
9634         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
9635         exception.
9636
9637 2005-02-28  Raja R Harinath  <rharinath@novell.com>
9638
9639         Fix #73052.
9640         * report.cs (Report.SymbolRelatedToPreviousError): Handle
9641         non-simple types (array, pointer, reference).
9642
9643 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9644
9645         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
9646
9647         * class.cs (MethodCore.IsDuplicateImplementation): Special error
9648         for operators.
9649         (Method.CheckBase): Catch wrong destructor here.
9650         (MethodData.Define): Add errors 550, 668.
9651
9652         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
9653
9654         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
9655
9656         * pending.cs (VerifyPendingMethods): Add error 551.
9657
9658         * typemanager.cs (CSharpName): Next error report helper.
9659
9660 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
9661
9662         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
9663         attributes. Removed useless attribute double check.
9664         It saves almost 2MBs for corlib.
9665
9666 2005-02-25  Raja R Harinath  <rharinath@novell.com>
9667
9668         Fix #72924.
9669         * statement.cs (ExpressionStatement.Resolve): Make robust to being
9670         called twice in case of error.
9671
9672 2005-02-23  Chris Toshok  <toshok@ximian.com>
9673
9674         Fix compiler portions of #72827.
9675         * statement.cs (Block.Emit): call Begin/EndScope on the
9676         EmitContext instead of the ILGenerator.
9677
9678         * codegen.cs (EmitContext.BeginScope): new method, call
9679         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
9680         we have one.)
9681         (EmitContext.BeginScope): same, but EndScope and CloseScope
9682
9683         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
9684         offset and call the superclass's OpenScope(int) with it.
9685         (SymbolWriter.CloseScope): get the current il
9686         offset and call superclass's CloseScope(int) with it.
9687
9688 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
9689
9690         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
9691         CS1677 for out and ref as well.
9692
9693         * class.cs (Method.Define): Add error CS1599 detection.
9694         
9695         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
9696         
9697         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
9698         
9699         * delegate.cs (Delegate.Define): Add error CS1599 detection.
9700         
9701         * support.cs.cs (ModifierDesc): New helper method.
9702
9703 2005-02-23  Raja R Harinath  <rharinath@novell.com>
9704             Abin Thomas  <projectmonokochi@rediffmail.com>
9705             Anoob V E  <projectmonokochi@rediffmail.com>
9706             Harilal P R  <projectmonokochi@rediffmail.com>
9707
9708         Fix #57851, #72718.
9709         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
9710         MemberLookup (used for error reporting) actually returns a result.
9711         Fix error report number (122, not 112).
9712
9713 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
9714             Anoob V E  <projectmonokochi@rediffmail.com>
9715             Harilal P R  <projectmonokochi@rediffmail.com>
9716
9717         Fix #71134.
9718         * pending.cs (PendingImplementation.GetAbstractMethods):
9719         Find NonPublic members too.
9720
9721 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
9722
9723         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
9724         Fixed error 217.
9725         
9726         * class.cs (MethodCore.CheckMethodAgainstBase):
9727         Add error 239 report.
9728
9729 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9730
9731         Fix #68955.
9732         * expression.cs (Invocation.IsApplicable): Make public.
9733         (Invocation.IsParamsMethodApplicable): Likewise.
9734         * delegate.cs (Delegate.VerifyApplicability): Don't use
9735         Invocation.VerifyArgumentCompat for parameter applicability
9736         testing.  Use Invocation.IsApplicable and
9737         Invocation.IsParamsMethodApplicable.
9738
9739 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9740
9741         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
9742         
9743         * class.cs (Operator.Define): Add error 217 report.
9744         
9745 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9746
9747         * namespace.cs (UsingEntry.Resolve): Undo change below.
9748
9749 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9750
9751         Fix #72756.
9752         * ecore.cs (Expression.MemberLookupFailed): Add argument to
9753         disable the error message when the extended MemberLookup also
9754         fails.
9755         (Expression.MemberLookupFinal): Update.
9756         (SimpleName.DoSimpleNameResolve): Update.
9757         * expression.cs (MemberAccess.ResolveNamespaceOrType):
9758         Don't use MemberLookupFinal.
9759         (New.DoResolve): Update.
9760         (BaseAccess.CommonResolve): Update.
9761
9762 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9763
9764         Fix #72732.
9765         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
9766         occured previously, don't resolve again.
9767
9768 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9769
9770         Fix #69949
9771         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
9772         argument. Call ResolveAttributeUsage for unresolved.
9773         when types doesn't match ctor arguments.
9774         
9775         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
9776         for nested attribute classes.
9777         (Class.attribute_usage): Removed.
9778         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
9779         for attribute class.
9780         
9781         * ecore.cs (IsAttribute): Removed.
9782         
9783         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
9784         
9785         * rootcontext.cs (RegisterAttribute): Removed, attributes are
9786         now normal types.
9787         (attribute_types): Removed.
9788         (EmitCode): Global attributes are emited as the latest.
9789
9790 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
9791
9792         * class.cs (EmitFieldInitializers): Don't emit field initializer
9793         for default values when optimilization is on.
9794         
9795         * constant.cs (Constant.IsDefaultValue): New property.
9796         
9797         * driver.cs: Add /optimize handling.
9798         
9799         * constant.cs,
9800         * ecore.cs,
9801         * literal.cs: Implement new IsDefaultValue property.
9802         
9803         * rootcontext.cs (Optimize): New field, holds /optimize option.
9804
9805 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9806
9807         Fix crasher in re-opened #72347.
9808         * namespace.cs (Namespace.Lookup): Return null if
9809         DeclSpace.DefineType returns null.
9810
9811         Fix #72678.
9812         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
9813
9814 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9815
9816         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
9817         now returns null if it cannot resolve to an lvalue.
9818         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
9819         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
9820         returned null.  Remove check for SimpleName.
9821         (EventExpr.DoResolveLValue): New.
9822         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
9823         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
9824         error from ...
9825         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
9826         avoid CS0131 error.
9827         (Unary.ResolveOperator): Move CS0211 check ...
9828         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
9829         CS0131 error.
9830         (Unary.DoResolveLValue): Simplify.
9831         (AddressOf.DoResolveLValue): New.
9832         (ArrayAccess.DoResolveLValue): New.
9833
9834 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
9835
9836         * attribute.cs (Attribute.Resolve): Add arguments casting for
9837         when types doesn't match ctor arguments.
9838
9839 2005-02-16  Raja R Harinath  <rharinath@novell.com>
9840
9841         Fix parts of #63202.
9842         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
9843         lookup of operator in base type.  Ensure that all checks happen
9844         when the operator resolves to an "op_..." method.
9845
9846 2005-02-15  Raja R Harinath  <rharinath@novell.com>
9847
9848         Fix #71992.
9849         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
9850         'ignore_cs0104' parameter.  Pass it to ...
9851         (NamespaceEntry.Lookup): ... this.
9852         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
9853         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
9854         (TypeLookupExpression.DoResolveAsTypeStep): Update.
9855         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
9856         Update.  Request that cs0104 errors be ignored.
9857         (ComposedCast.ResolveAsTypeStep): Update.
9858
9859 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9860
9861         Fix #59209.
9862         * expression.cs (Invocation.BetterFunction): Remove support for
9863         comparing virtual functions and their overrides.
9864         (Invocation.IsOverride): New.
9865         (Invocation.OverloadResolve): Don't consider 'override' functions
9866         during candidate selection.  Store them in a lookaside list.
9867         If the selected method is a 'virtual' function, use the list to
9868         find any overrides that are closer to the LHS type.
9869
9870 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
9871
9872         * expression.cs (New.DoResolve): Add complex core type reduction.
9873         (New.Constantify): Converts complex core type syntax like 'new int ()'
9874         to simple constant.
9875         
9876 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9877
9878         * decl.cs (EntryType.EntryType): New constructor to create an
9879         updated copy of a cache entry.
9880         (MemberCache.AddMethods): Use it.
9881         (MemberCache.ClearDeclaredOnly): Remove.
9882         (MemberCache.MemberCache): Update.
9883
9884 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9885
9886         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
9887         variable.  This one is represents the actual low-level declaration
9888         of the method, as opposed to the semantic level `IsStatic'.   
9889
9890         An anonymous method which is hosted into a static method might be
9891         actually an instance method.  IsStatic would reflect the
9892         container, while MethodIsStatic represents the actual code
9893         generated.
9894
9895         * expression.cs (ParameterReference): Use the new MethodIsStatic
9896         instead of IsStatic.
9897
9898         * anonymous.cs (AnonymousMethod.Compatible): Pass the
9899         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
9900         set on the current EmitContext. 
9901
9902         * expression.cs (Cast): Overload DoResolveLValue so we can pass
9903         resolve our casted expression as an LValue.  This triggers the
9904         proper LValue processing that is later required by Assign.
9905
9906         This fixes 72347.
9907
9908         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
9909
9910 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
9911
9912         C# 2.0 Fixed buffer implementation
9913
9914         * anonymous.cs: Update after RegisterHelperClass renaming.
9915
9916         * attribute.cs (AttributeTester.fixed_buffer_cache):
9917         Cache of external fixed buffers.
9918         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
9919         implementation if field is fixed buffer else null.
9920
9921         * class.cs
9922         (TypeContainer.AddField): Accept FieldMember instead of Field.
9923         (FieldBase.IsFieldClsCompliant): Extracted code from
9924         VerifyClsCompliance descendant customization.
9925         (FixedField): New class handles fixed buffer fields.
9926         (FixedFieldExternal): Keeps information about imported fixed
9927         buffer.
9928         (IFixedField): Make access to internal or external fixed buffer
9929         same.
9930
9931         * cs-parser.jay: Add fixed buffer parsing.
9932
9933         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
9934         buffer.
9935
9936         * expression.cs (Indirection): Extended implementation to accept
9937         fixed buffer field.
9938         (PointerArithmetic.Emit): Get element from fixed buffer as well.
9939         (ElementAccess.MakePointerAccess): Get type as parameter.
9940         (DoResolve): Add fixed buffer field expression conversion.
9941         (DoResolveLValue): Ditto.
9942         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
9943         (ArrayPtr): Derives from FixedBufferPtr.
9944         (ArrayPtr.Emit): Add extra emit for array elements.
9945
9946         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
9947
9948         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
9949         for compiler generated types.
9950         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
9951
9952         * statement.cs (Fixed): Refactored to be easier add fixed buffer
9953         and consume less memory.
9954         (Fixed.Resolve): Add fixed buffer case.
9955
9956         * typemanager.cs (compiler_generated_attr_ctor,
9957         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
9958         (HasElementType): Add our own implementation to work on every
9959         runtime.
9960
9961 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9962
9963         * anonymous.cs (CaptureContext): Track whether `this' has been
9964         referenced.   
9965
9966         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
9967         only captured `this' if it was implicitly done (instance
9968         methods/variables were used). 
9969
9970         * codegen.cs (EmitContext.CaptureThis): New method to flag that
9971         `this' must be captured.
9972
9973 2005-01-30  Miguel de Icaza  <miguel@novell.com>
9974  
9975         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
9976         is null it means that there has been no need to capture anything,
9977         so we just create a sibling.
9978
9979         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
9980
9981         Just a partial fix.  The other half is fairly elusive.
9982         
9983 2005-02-10  Raja R Harinath  <rharinath@novell.com>
9984
9985         Fix #52586, cs0121-4.cs.
9986         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
9987         and return a hashtable.
9988         (MemberCache.ClearDeclaredOnly): New.
9989         (MemberCache.MemberCache): Update to change.  Make a deep copy of
9990         the method_hash of a base type too.
9991         (MemberCache.AddMethods): Adapt to having a deep copy of the base
9992         type methods.  Overwrite entries with the same MethodHandle so
9993         that the ReflectedType is correct.  The process leaves in base
9994         virtual functions and their overrides as distinct entries.
9995         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
9996         matters since it was boxed in a ArrayList before.
9997         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
9998         modifier.
9999         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
10000         case of a virtual function and its override (choose the overload
10001         as better).
10002         (Invocation.OverloadResolve): Avoid 'override' members during
10003         'applicable_type' calculation.
10004
10005 2005-02-09  Raja R Harinath  <rharinath@novell.com>
10006
10007         Combine two near-redundant caches.
10008         * typemanager.cs (method_params): Rename from method_internal_params.
10009         (TypeManager.GetParameterData): New.  Replace
10010         Invocation.GetParameterData.
10011         (TypeManager.LookupParametersByBuilder): Remove.
10012         * expression.cs (Invocation.method_parameter_cache): Remove.
10013         (Invocation.GetParameterData): Remove.
10014         Update to changes.
10015         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
10016         Update to changes.
10017
10018 2005-02-08  Raja R Harinath  <rharinath@novell.com>
10019
10020         Fix #72015.
10021         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
10022         TypeManager.multicast_delegate_type is null, resolve it by looking
10023         up "System.MulticastDelegate".
10024         * rootcontext.cs (RootContext.ResolveCore): Simplify.
10025
10026 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
10027             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
10028             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
10029
10030         Fix cs0164.cs.
10031         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
10032         (LabeledStatement.AddReference): New.  Set 'referenced'.
10033         (Goto.Resolve): Use it.
10034
10035 2005-02-05  John Luke  <john.luke@gmail.com>
10036
10037         * driver.cs: remove duplicate -doc line in Usage ()
10038
10039 2005-02-04  Raja R Harinath  <rharinath@novell.com>
10040
10041         * location.cs (Location.AddFile): Fix CS2002 error report.
10042
10043 2005-02-02  Martin Baulig  <martin@ximian.com>
10044
10045         * delegate.cs (Delegate.DefineType): Report an internal error if
10046         TypeManager.multicast_delegate_type is null.  See bug #72015 for
10047         details.        
10048
10049 2005-02-02  Raja R Harinath  <rharinath@novell.com>
10050
10051         Fix a crasher in a variant of #31984.
10052         * const.cs (Constant.CheckBase): New override that defers the
10053         new-or-override check in case the base type hasn't been populated
10054         yet.
10055         (Constant.Define): Ensure the new-or-override check is performed.
10056
10057 2005-02-01  Duncan Mak  <duncan@ximian.com>
10058
10059         * const.cs (LookupConstantValue): Check that `ce' is not null
10060         before calling GetValue ().
10061
10062 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10063
10064         Fix test-334.cs (#69519).
10065         * cs-parser.jay (using_alias_directive): Pass in an expression to
10066         NamespaceEntry.UsingAlias.
10067         (using_namespace_directive): Pass in an expression to
10068         NamespaceEntry.Using.
10069         (namespace_name): Don't flatten to a string.
10070         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
10071         (NamespaceEntry.AliasEntry.Resolve): Lookup using
10072         ResolveAsTypeStep.
10073         (NamespaceEntry.UsingEntry): Likewise.
10074         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
10075         changes.
10076         (NamespaceEntry.LookupForUsing): Remove.
10077         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
10078         names.
10079         (NamespaceEntry.Lookup): Remove support for dotted names.
10080
10081 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10082
10083         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
10084         split into two.
10085         (NamespaceEntry.ImplicitParent): Compute on demand.
10086         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
10087         parallels the current.
10088         (NamespaceEntry.LookupForUsing): Use it.
10089         (NamespaceEntry.Lookup): If the current namespace-entry is
10090         implicit, don't search aliases and using tables.
10091
10092 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10093
10094         Fix #31984.
10095         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
10096         BaseCache here.
10097         (TypeContainer.BaseCache): Compute on demand.
10098         (TypeContainer.FindMembers): Define constants and types if they're
10099         not already created.
10100         (FieldMember.Define): Move resetting of ec.InUnsafe before error
10101         check.
10102         * const.cs (Constant.Define): Make idempotent.
10103
10104 2005-01-29  Miguel de Icaza  <miguel@novell.com>
10105
10106         * pending.cs: Produce better code (no nops produced by using Ldarg
10107         + value).
10108         
10109         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
10110         i - 1' it should be arg + 1.
10111
10112         Fixes bug #71819.
10113
10114 2005-01-28  Raja R Harinath  <rharinath@novell.com>
10115
10116         * attribute.cs (Attribute.CheckAttributeType): Make private
10117         non-virtual.
10118         (Attribute.ResolveType): Make virtual.
10119         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
10120         handling of RootContext.Tree.Types.
10121
10122 2005-01-27  Raja R Harinath  <rharinath@novell.com>
10123
10124         Update attribute-handling to use the SimpleName/MemberAccess
10125         mechanisms.
10126         * cs-parser.jay (attribute): Pass in an expression to the
10127         constructors of Attribute and GlobalAttribute.
10128         * attribute.cs (Attribute): Take an expression for the name.
10129         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
10130         passed in attribute name expression.
10131         (Attribute.CheckAttributeType): Use it.
10132         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
10133         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
10134         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
10135         argument to prevent error messages if the lookup fails.
10136
10137 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
10138
10139         * expression.cs (Indirection): Implemented IVariable interface
10140         to support indirection in AddressOf operator.
10141         (PointerArithmetic.Emit): Add optimalization for case where
10142         result can be precomputed.
10143
10144 2005-01-26  Martin Baulig  <martin@ximian.com>
10145
10146         * class.cs (TypeContainer.AttributeTargets): Return the correct
10147         AttributeTargets depending on our `Kind' instead of throwing an
10148         exception; fixes #71632.
10149
10150 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
10151
10152         Fix #71257
10153         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
10154         constant members.
10155
10156 2005-01-25  Raja R Harinath  <rharinath@novell.com>
10157
10158         Fix #71602.
10159         * expression.cs (MemberAccess.DoResolve): Don't complain with
10160         cs0572 when the LHS of a member access has identical name and type
10161         name.
10162
10163 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
10164
10165         Fix #71651, #71675
10166         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
10167         CreatePermission.
10168         Create custom PermissionSet only for PermissionSetAttribute.
10169
10170 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
10171
10172         Fix #71649
10173         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
10174         delegates in static class.
10175
10176 2005-01-24  Martin Baulig  <martin@ximian.com>
10177
10178         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
10179         merging an implicit block, just use its reachability.
10180
10181         * statement.cs (Block.Resolve): Make the unreachable code check
10182         work wrt. implicit blocks; see test-337 from #63842.
10183
10184 2005-01-21  Alp Toker  <alp@atoker.com>
10185  
10186         * cs-parser.jay: destructor_declaration's container is PartialContainer
10187         not Class when partial types are used, so use Kind prop instead of
10188         'is'.
10189         
10190 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
10191
10192         * cs-parser.jay: Improve error reporting when an interface
10193         declares new types.
10194
10195 2005-01-20  Dick Porter  <dick@ximian.com>
10196
10197         * support.cs: SeekableStreamReader fix from Sandor Dobos
10198         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
10199         chars are read.  Fixes bug 70369.
10200
10201 2005-01-20  Raja R Harinath  <rharinath@novell.com>
10202
10203         * cs-parser.jay (catch_clause): Simplify current_block handling
10204         somewhat.
10205
10206 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
10207
10208         * convert.cs (ImplicitStandardConversionExists): Synchronize the
10209         code with ImplicitStandardConversion to handle the implicit
10210         conversion of method groups into valid delegate invocations. 
10211
10212         The problem is that in parameter handling we were using this code
10213         path.  Fixes bug #64698
10214
10215 2005-01-19  Raja R Harinath  <rharinath@novell.com>
10216
10217         * cs-parser.jay: Fix several infelicities.
10218         - Avoid assigning to the parser value stack.  Code like 
10219           '$3 = null' is unclean.  Synthesize a value for the code block
10220           instead. 
10221         - Avoid using oob_stack for storing location information.  Use ...
10222         (_mark_): ... this.  New (empty) rule.  Saves the current location
10223         in $$.
10224         (foreach_statement): Avoid using oob_stack for current_block
10225         handling.  Use technique used in for_statement and
10226         using_statement.  Synthesize a value for the code block to store
10227         additional intermediate information.
10228
10229 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
10230
10231         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
10232         of a different type is only allowed to private fields of a
10233         containing type, not on fields of a base class.
10234
10235         See test-174.cs and error cs0122-9.cs
10236
10237 2005-01-13  Raja R Harinath  <rharinath@novell.com>
10238
10239         Fix test-335.cs (bug #58126).
10240         * cs-parser.jay (argument): Split out non-expression parts of the
10241         rule into 'non_simple_argument'.
10242         (invocation_expression): Support parenthesized invocations with
10243         multiple arguments, and with single non-simple arguments.
10244
10245 2005-01-13  Raja R Harinath  <rharinath@novell.com>
10246
10247         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
10248         places.
10249
10250 2005-01-12  Raja R Harinath  <rharinath@novell.com>
10251
10252         Fix cs0038-1.cs, cs1640-6.cs.
10253         * ecore.cs (Expression.Resolve): Remove special-case for
10254         SimpleName in error-handling.
10255         (Expression.almostMatchedMembers): Relax access permission to
10256         protected.
10257         (Expression.MemberLookupFailed): Handle duplicates in
10258         almostMatchedMembers list.
10259         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
10260         * expression.cs (New.DoResolve): Report CS1540 for more cases.
10261         * typemanager.cs (GetFullNameSignature): Use the MethodBase
10262         overload if the passed in MemberInfo is a MethodBase.
10263
10264 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
10265
10266         Fix #70749
10267         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
10268         for non-CAS & merge permission sets properly.
10269
10270 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10271
10272         Improve standard-compliance of simple name and member access 
10273         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
10274         * ecore.cs (FullNamedExpression): New abstract base class 
10275         for Namespaces and TypeExpressions.
10276         (ResolveFlags.SimpleName): Remove.
10277         (SimpleName): Remove support for dotted names.
10278         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
10279         DeclSpace.FindType and DeclSpace.LookupType.
10280         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
10281         (Expression.ExprClassName): Make member function.
10282         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
10283         a namespace.  Remove creation of dotted "SimpleName"s.
10284         (MemberAccess.DoResolve): Likewise.
10285         * decl.cs (DeclSpace.Cache): Make private.
10286         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
10287         (DeclSpace.FindType): Update.
10288         (DeclSpace.LookupType): Move here from RootContext.  Return a 
10289         FullNamedExpression.
10290         * namespace.cs (Namespace): Derive from FullNamedExpression
10291         so that it can be part of expression resolution.
10292         (Namespace.Lookup): Return an FullNamedExpression.
10293         (NamespaceEntry.LookupAlias): Lookup aliases only in current
10294         namespace.
10295         * rootcontext.cs (NamespaceLookup): Remove.
10296         (LookupType): Move to DeclSpace.
10297         * attribute.cs (CheckAttributeType): Update.
10298         * doc.cs (FindDocumentedType): Remove allowAlias argument.
10299         (FindDocumentedTypeNonArray): Likewise.
10300
10301 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10302
10303         Fix cs0509.cs, cs1632.cs.
10304         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
10305         is the same as IsInterface.
10306         (TypeContainer.GetClassBases): Likewise.
10307         * statement.cs (LabeledStatement.ig): New field.
10308         (LabeledStatement.LabelTarget): Save ILGenerator which created the
10309         label.
10310         (LabeledStatement.DoEmit): Check that the label was created with
10311         the same ILGenerator.
10312
10313 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10314
10315         Fix #71058
10316         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
10317         accessors to its properties.
10318
10319         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
10320         from accessors to property.
10321         
10322 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10323
10324         Fix #70722
10325         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
10326         only for overrides.
10327         
10328 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
10329
10330         * attribute.cs: Check for null and empty strings.  
10331
10332         I have lost another battle to Paolo.
10333
10334 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
10335
10336         Fix #70942
10337         * class.cs (PropertyMethod): Set Parent field in ctors.
10338         (SetMethod.InternalParameters): Add unsafe switch hack.
10339         Override MarkForDuplicationCheck where it is appropriate.
10340
10341         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
10342         It says whether container allows members with the same name.
10343         Base default is no.
10344         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
10345         Removed is_method parameter.
10346
10347 2005-01-06  Duncan Mak  <duncan@ximian.com>
10348
10349         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
10350         because the previous change led to incorrect reporting of CS1032
10351         ("Cannot define/undefine preprocessor symbols after first token in
10352         file"). Instead of using `tokens_seen' as the only flag that
10353         triggers CS1040, introduce `comments_seen'. This new flag is used
10354         to signify having seen comments on the current line, so it is
10355         unset after a newline.
10356
10357 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10358
10359         * doc.cs : When searching for a type, find nested type too.
10360           This fixes bug #71040.
10361
10362 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10363
10364         * doc.cs :
10365           - Warn missing member comment on those classes which also does not
10366             have doc comments. Fixed bug #71041.
10367           - Don't warn missing doc comment on default constructor.
10368             Fixed bug #71042.
10369
10370 2005-01-06  Duncan Mak  <duncan@ximian.com>
10371
10372         * cs-tokenizer.cs (xtoken): After handling traditional C-style
10373         comments, set `tokens_seen' to true. This allows us to detect
10374         misplaced preprocessor directives (i.e. not at the beginning of
10375         the a line, nor after whitespaces). In that case, report error
10376         CS1040. This fixes bug #56460.
10377
10378         * cs-parser.jay (interface_member_declaration): Add checks for
10379         IsExplicitImpl, and report CS0541 error if an interface member is
10380         defined as an explicit interface declaration.
10381
10382 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
10383
10384         Fix #70817
10385         * class.cs (PropertyMethod): Set Parent field in ctors.
10386         (SetMethod.InternalParameters): Add unsafe switch hack.
10387         
10388         * decl.cs (MemberCore.Parent): Cannot be readonly.
10389
10390 2005-01-06  Raja R Harinath  <rharinath@novell.com>
10391
10392         * decl.cs (DeclSpace.ResolveType): Remove.
10393         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
10394         Merge in code from ...
10395         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
10396         * class.cs, enum.cs: Update to changes.
10397
10398 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
10399
10400         * anonymous.cs: Ensure that we init the scope of our parent if it
10401         has not been initialized yet.
10402
10403 2004-12-30  Duncan Mak  <duncan@ximian.com>
10404
10405         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
10406         if field.FieldBuilder is null. Fixes #70758.
10407
10408         * convert.cs: Fixed some typos and updated some of the comments.
10409         (ImplicitStandardConversionExists):
10410         (TryImplicitIntConversion): If `target_type' is an interface and
10411         the type of `ic' implements this interface, return true or a new
10412         BoxedCast instead of null. This fixes #70468.
10413
10414 2004-12-29  Duncan Mak  <duncan@ximian.com>
10415
10416         * expression.cs (Argument.Emit): Check that Expr is
10417         IMemoryLocation before casting to it, and report CS1510 otherwise.
10418
10419         This fixes #70402.
10420
10421 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
10422
10423         * statement.cs (Block.ThisVariable): remove the recursion here, to
10424         make the --profile more sane.
10425
10426 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
10427
10428         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
10429         assembly, by JB Evain.
10430
10431 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10432
10433         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
10434           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
10435         "parent" refers to enclosing type/class.  "base" refers to superclass.
10436
10437 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10438
10439         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10440         Ensure that we only have GlobalAttributes.
10441         * attribute.cs (Attribute.Emit): Make non-virtual.
10442         (GlobalAttribute.Emit): Remove.
10443         (Attribute.Resolve): Make virtual.
10444         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
10445         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
10446         the argument. Don't create one.
10447         (Attribute.GetObsoleteAttribute): Likewise.
10448         (Attribute.GetClsCompliantAttributeValue): Likewise.
10449         * class.cs, decl.cs: Update to changes.
10450
10451 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
10452
10453         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
10454         
10455         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
10456         
10457         * statement.cs (Foreach.Resolve): Add error 186 report.
10458
10459 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
10460
10461         * expression.cs (Conditional.DoResolve): Add warning 429.
10462         
10463         * statement.cs (If.Resolve): Add warning 665.
10464
10465 2004-12-16  Raja R Harinath  <rharinath@novell.com>
10466
10467         New invariant: RootContext.Tree.Types.NamespaceEntry == null
10468         except when in the parser, and in GlobalAttribute.
10469         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
10470         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
10471         RootContext.Tree.Types.NamespaceEntry once work is done.
10472         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
10473         and resets RootContext.Tree.Types.NamespaceEntry.
10474
10475 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
10476
10477         * cs-parser.jay: Don't create a block for every variable.
10478
10479 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
10480
10481         * location.cs: Provide extra information.
10482
10483         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
10484         variables from the captured environment, it is the ldarg_0.
10485
10486 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10487
10488         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
10489         find a conclusion.
10490         
10491         * class.cs: Changed warning level for 169 to avoid developer
10492         displeasure from warning flooding. It will be changed back when they
10493         fix most of current BCL warnings.
10494         
10495         * RootContext.cs: Pushed default WarningLevel to 3.
10496         
10497         * statement.cs: Removed unused variable.
10498
10499 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10500
10501         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
10502         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
10503         Add error 502 report.
10504         (StaticClass.DefineType): Add error 441 report.
10505         (Class.AllowedModifiersProp): New virtual property as temporary
10506         extension to AllowedModifiers.
10507         (Class.DefineType): Add error 418 report. Moved ModFlags check here
10508         to share implementation with StaticClass and don't call virtual
10509         methods from ctor.
10510         
10511         * driver.cs (MainDriver): Add error 1558 test.
10512
10513         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
10514         report. Moved error 36 test here.
10515
10516         * statement.cs (Throw.Resolve): Add error 724 report.
10517
10518         * typemanager.cs: Add out_attribute_type core type.
10519         
10520 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
10521
10522         * class.cs (TypeContainer.VerifyClsCompliance): Add error
10523         3018 report.
10524         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
10525
10526         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
10527         3017 report.
10528         
10529         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
10530
10531         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
10532         Add error 3023 report.
10533         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
10534
10535         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
10536         implementation.
10537
10538 2004-12-12  John Luke  <john.luke@gmail.com>
10539
10540         * driver.cs (AddArgs): take -- into account when
10541         adding arguments, fixes bug 65710 
10542
10543 2004-12-12  Martin Baulig  <martin@ximian.com>
10544
10545         * expression.cs (Unary.TryReduceNegative): Added support for
10546         SByteConstant and ByteConstant.
10547         (Unary.Reduce): Check error values from TryReduceNegative().
10548
10549 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
10550
10551         * attributes.cs (Attribute.Resolve): Avoid multiple error report
10552         and report exception as error 182.
10553
10554 2004-12-10  Raja R Harinath  <rharinath@novell.com>
10555
10556         * driver.cs (Main): Fix message when there are warnings.
10557
10558 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
10559
10560         * delegate.cs: Fixed my fix from yesterday, sorry about that.
10561
10562 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
10563
10564         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
10565         Reduced number of warnings.
10566         
10567         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
10568
10569 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
10570
10571         * driver.cs: Removed message.
10572
10573         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
10574
10575 2004-12-08    <vargaz@freemail.hu>
10576
10577         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
10578
10579 2004-12-08  Martin Baulig  <martin@ximian.com>
10580
10581         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
10582         instead of a CS3002 for properties and indexer.
10583
10584 2004-12-08  Martin Baulig  <martin@ximian.com>
10585
10586         * decl.cs (MemberName.ToString): Make this work again.
10587
10588 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
10589
10590         * attribute.cs (Resolve): Add error 591 detection.
10591
10592         * class.cs (FieldMember.Define): Add error 1547 detection.
10593         (Indexer.Define): Add error 620 detection.
10594         (Operator.Define): Add error 590 detection.
10595
10596         * ecore.cs: Missing argument for error 79.
10597
10598         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
10599         detection.
10600
10601 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
10602
10603         Fix #70106
10604         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
10605         only.
10606
10607 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
10608
10609         * cs-parser.jay : handle doc comments on implicit/explicit operators.
10610           Some operator comments were suppressed.
10611         * doc.cs : Implicit/explicit operator name in doc comments are like
10612           "op_Explicit(type)~returnType", so added suffix handling.
10613
10614 2004-12-07  Martin Baulig  <martin@ximian.com>
10615
10616         * decl.cs
10617         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
10618         (MemberCore.GetClsCompliantAttributeValue): Likewise.
10619         (DeclSpace.ec): New protected field; store the EmitContext here.
10620         (DeclSpace.EmitContext): New public property; moved here from
10621         `TypeContainer'.
10622         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
10623         EmitContext.
10624
10625         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
10626         (Enum.Emit): Don't create a new EmitContext.
10627
10628         * delegate.cs (Delegate.DefineType): Always create the
10629         EmitContext.
10630
10631         * iterators.cs (Iterators.DefineIterator): Create a new
10632         EmitContext and store it in `ec'.
10633
10634 2004-08-24  Martin Baulig  <martin@ximian.com>
10635
10636         * typemanager.cs
10637         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10638         this for accessibility checks.
10639         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10640         IsNestedFamilyAccessible.
10641         (TypeManager.IsSubclassOf): New method, do what the name actually
10642         says.   
10643
10644 2004-12-06  Raja R Harinath  <rharinath@novell.com>
10645
10646         Fix crash on cs0657-17.cs.
10647         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10648         Use RootContext.Tree.Types, not 'new RootTypes ()'.
10649         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
10650         the case where the NamespaceEntry gets overwritten.
10651
10652 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
10653
10654         Fixed #69195, #56821
10655         * ecore.cs (ResolveBoolean): Tiny refactoring.
10656
10657         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
10658         of right expression resolving when left is false constant and
10659         operator is LogicalAnd OR true constant and operator is LogicalOr.
10660
10661         * statement.cs (ResolveUnreachable): Always reports warning.
10662
10663 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
10664
10665         * class.cs: Distinguish between 1721 and 1722 (just a little help
10666         for the programmer).
10667
10668 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
10669
10670         * delegate.cs: Only allow this on new versions of the language. 
10671
10672 2004-12-02  Duncan Mak  <duncan@ximian.com>
10673
10674         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
10675         Expression class.
10676         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
10677         here as a static method. Take an additional bool out parameter
10678         `must_do_cs1540_check' for signaling to InstanceResolve.
10679         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
10680         member field from PropertyExpr class and made it an argument of
10681         the method instead.
10682         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
10683         check for MarshalByRefObject, and report CS0122 instead of CS1540.
10684         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
10685         and `remove_accessor' as well as InstanceResolve: report CS0122
10686         where applicable.
10687
10688         Fixes #70129.
10689
10690 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10691
10692         Fix test-327.cs, test-328.cs, and put in early infrastructure
10693         for eventually fixing #52697.
10694         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
10695         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
10696         from other methods.
10697         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
10698         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
10699         (VerifyUsing, error246): Update.
10700         * rootcontext.cs (RootContext.NamespaceLookup): Just use
10701         'NamespaceEntry.LookupNamespaceOrType'.
10702
10703 2004-12-03  Martin Baulig  <martin@ximian.com>
10704
10705         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10706         method as our child, call AnonymousMethod.Compatible() on it.
10707
10708 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10709
10710         Disable XML documentation support in 'basic' profile.
10711         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
10712         Redirect XmlElement to System.Object.
10713         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
10714         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
10715         * mcs.exe.sources: Add doc-bootstrap.cs.
10716         * doc-bootstrap.cs: New file.  Contains empty stub implementation
10717         of doc.cs.
10718
10719 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
10720
10721         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
10722           comments are allowed.
10723
10724 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10725
10726         * delegate.cs: Add checks for subtypes in paramaters and return values
10727         in VerifyMethod () to add support for Covariance/Contravariance
10728         in delegates.
10729         
10730 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
10731
10732         * report.cs: Remove extra closing parenthesis.
10733
10734         * convert.cs (Error_CannotImplicitConversion): If the name of the
10735         types are the same, provide some extra information.
10736
10737         * class.cs (FieldBase): Use an unused bit field from the field to
10738         encode the `has_offset' property from the FieldMember.  This saves
10739         a couple of Ks on bootstrap compilation.
10740
10741         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10742         method as our child, return the AnonymousMethod resolved
10743         expression.
10744
10745         * expression.cs (New.DoResolve): Allow return values from
10746         NewDelegate to also include AnonymousMethods.
10747
10748         Fixes #70150.
10749
10750 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
10751
10752         Fix bug #70102
10753         * attribute.cs (Resolve): Improved implementation of params
10754         attribute arguments.
10755
10756         * support.cs (ParameterData): Add HasParams to be faster.
10757
10758 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
10759
10760         all things are for /doc support:
10761
10762         * doc.cs: new file that supports XML documentation generation.
10763         * mcs.exe.sources: added doc.cs.
10764         * driver.cs:
10765           Handle /doc command line option.
10766           Report error 2006 instead of 5 for missing file name for /doc.
10767           Generate XML documentation when required, after type resolution.
10768         * cs-tokenizer.cs:
10769           Added support for picking up documentation (/// and /** ... */),
10770           including a new XmlCommentState enumeration.
10771         * cs-parser.jay:
10772           Added lines to fill Documentation element for field, constant,
10773           property, indexer, method, constructor, destructor, operator, event
10774           and class, struct, interface, delegate, enum.
10775           Added lines to warn incorrect comment.
10776         * rootcontext.cs :
10777           Added Documentation field (passed only when /doc was specified).
10778         * decl.cs:
10779           Added DocComment, DocCommentHeader, GenerateDocComment() and
10780           OnGenerateDocComment() and some supporting private members for
10781           /doc feature to MemberCore.
10782         * class.cs:
10783           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
10784         * delegate.cs:
10785           Added overriden DocCommentHeader.
10786         * enum.cs:
10787           Added overriden DocCommentHeader and GenerateDocComment().
10788
10789 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
10790
10791         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
10792         unwrapping the enumeration values, chain to
10793         DoConstantNumericPromotions again, so we can promote things to the
10794         fundamental types (takes care of enums that are bytes, sbytes).
10795
10796         Fixes bug #62054.
10797
10798 2004-12-01  Raja R Harinath  <rharinath@novell.com>
10799
10800         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
10801         Fix long-standing bug in type-lookup.  Use FindType instead of
10802         LookupType when ec.ResolvingTypeTree.
10803         (Attribute.ResolveType, Attribute.Resolve)
10804         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
10805         Update to changes.
10806         (Attributes.Search): Remove internal version.  Update.
10807         (Attributes.SearchMulti): Update.
10808         (Attributes.GetClsCompliantAttribute): Remove.
10809         (Attributes.GetIndexerNameAttribute): Remove.
10810         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
10811         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
10812         * class.cs (Indexer.Define): Likewise.
10813
10814 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
10815
10816         Fix bug #68790
10817         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
10818         MarshallByReference members access.
10819
10820         * expression.cs: Use CheckMarshallByRefAccess;
10821         Better error CS0197 message.
10822
10823         * report.cs: Print whole related error message.
10824
10825 2004-11-30  Raja R Harinath  <rharinath@novell.com>
10826
10827         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
10828         the current directory to help debugging.
10829
10830 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10831
10832         * class (GetClassBases): Better error 60 report.
10833         (EventProperty): Disabled warning 67 detection.
10834
10835 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10836
10837         Fix bug #60324
10838         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
10839
10840         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
10841         precise values.
10842
10843 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10844
10845         Fix bug #49488
10846         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
10847
10848         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
10849
10850 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
10851
10852         * attribute.cs (Attribute.Resolve): Refine error reporting and
10853         report a cs0117 if the identifier does not exist, to distinguish
10854         from 0617 which is a miss-use of the actual identifier.
10855
10856         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
10857         between cs0070 and cs0079.
10858
10859         * class.cs (MemberBase.DoDefine): When reporting a wrong
10860         accessibility level, we use MethodCore to compare instead of
10861         Method (this was a regression in some refactoring effort).
10862
10863         So now we correctly report cs0056 again.
10864
10865         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
10866         testing the target_type (which was known to be object_type) and
10867         not the source type (which is anonymous_method).
10868
10869         Fixed reporting of error cs1660.
10870
10871         * expression.cs (UserCast.Source): Expose the underlying cast.
10872
10873         * statement.cs (Switch.SwitchGoverningType): Sort the list of
10874         allowed types to find a match to int32 first (most common).
10875
10876         In addition, it ignores any ImplicitUserConversions that did an
10877         internal implicit conversion (as the switch statement allows only
10878         one integral conversion to exist).
10879
10880         * class.cs (PartialContainer.Create): rename `name' to
10881         `member_name' for clarity.  Then replace the string calls with a
10882         call to MemberName.GetPartialName, as now using
10883         MemberName.ToString is an error (this is due to the side effects
10884         it had, that were fixed in the past).
10885
10886         This will restore the error reporting on a number of partial class
10887         errors that were missusing this (and getting an exception as a
10888         results, which is now just a plain textual warning, because
10889         yyparse debug output would crash otherwise).
10890
10891 2004-11-26  Raja R Harinath  <rharinath@novell.com>
10892
10893         * Makefile (PROGRAM_INSTALL_DIR): Remove.
10894
10895 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10896
10897         * rootcontext.cs (LookupType): Make sure to cache lookups that
10898         don't give us a negative result. This saves about 5% of corlib
10899         compilation time.
10900
10901 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10902
10903         * report.cs (AbstractMessage.Print): messages are sent to stderr
10904
10905         * class.cs (TypeContainer.GetClassBases): It is an error to have a
10906         non-interface in the list of interfaces (at this point, either
10907         parent was properly set, or a base class is being listed in the
10908         interfaces section).
10909
10910         This flags error 1722, and resolves the crash from bug 69259.
10911
10912 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10913
10914         * statement.cs (Using.EmitExpressionFinally): make this work right
10915         for valuetypes. Fixes 69926.
10916
10917 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10918
10919         * const.cs (Const.ChangeType): Cope with the "0 literal can be
10920         converted to an enum" here, before we try to change the underlying
10921         type.  This code exists, but it is a different code path than the
10922         one used while encoding constants.
10923
10924         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
10925         old bug: when converting from the null literal to a pointer,
10926         return an EmptyCast, not the NullLiteral.
10927
10928         This fixes #69921, the recent null_type changes probably made this
10929         bug more prominent.
10930
10931         (ImplicitReferenceConversionExists): In addition, resynchronized
10932         the code here, so it matches the same code in
10933         ImplicitReferenceConversionExists for the `from any class-type S
10934         to any interface-type T'.
10935         
10936
10937 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
10938
10939         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
10940
10941 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
10942
10943         * cs-parser.jay: Use verbosity accordingly. 
10944
10945 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10946
10947         * expression.cs (Unary.ResolveOperator): Do not report warning;
10948         AddressOf reads from variable.
10949         
10950         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
10951
10952 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10953
10954         Fix bug #69462
10955
10956         * attribute.cs (Attributable): Removed CheckTargets.
10957         (Attributes.Emit): Explicit attribute targets are tested here.
10958
10959         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
10960         not enabled for interfaces.
10961
10962         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
10963         (GetAssemblyName): Ouch next bug there.
10964
10965 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10966
10967         * expression.cs: Error 275 added.
10968         
10969 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
10970
10971         Fix bug #69177 (Implemented decimal constant support)
10972
10973         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
10974         (BinaryFold): Add DecimalConstant.
10975
10976         * const.cs (Define): Decimal constant 
10977         (is not constant.
10978         (ChangeType): Add decimal type handling.
10979         (LookupConstantValue): Don't set value for decimal type but
10980         emit DecimalConstantAttribute. Needed for constant optimization.
10981
10982         * constant.cs (ToDecimal): New method.
10983         (ConvertToDecimal): New method.
10984         (IntConstant): Implemented ConvertToDecimal.
10985         (DecimalConstant.Emit): Emit optimized version for decimals in
10986         int range.
10987
10988         * expression.cs (ResolveOperator): Changed order of constant
10989         reduction to work correctly with native types which have
10990         overloaded operators.
10991         (ResolveMemberAccess): Extract constant value from attribute
10992         for decimal type.
10993
10994         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
10995
10996         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
10997         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
10998         (ChangeType): Decimal is special.
10999         (TypeToCoreType): Add decimal type.
11000
11001 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
11002
11003         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
11004         decimal types.
11005
11006 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
11007
11008         * class.cs (EventField.ApplyAttributeBuilder): Fix error
11009         test cs1667-5.cs.
11010
11011 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
11012
11013         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
11014
11015         * pending.cs (PendingImplementation): Grab only interfaces.
11016
11017 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
11018
11019         * statement.cs (ForeachHelperMethods): Add location member and
11020         error 202 detection.
11021
11022 2004-11-19  Raja R Harinath  <rharinath@novell.com>
11023
11024         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
11025         automatically handled by executable.make.
11026         (PROGRAM): Make profile-specific.
11027
11028 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
11029
11030         * expression.cs (DoResolveBase): Fixed wrong warning for out
11031         variables.
11032
11033 2004-11-18  Martin Baulig  <martin@ximian.com>
11034
11035         Merged latest changes into gmcs.  Please keep this comment in
11036         here, it makes it easier for me to see what changed in MCS since
11037         the last time I merged.
11038
11039 2004-11-17  Raja R Harinath  <rharinath@novell.com>
11040
11041         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
11042         (TypeHandle.GetMemberCache): New.
11043         (TypeHandle.TypeHandle): Update.
11044         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
11045         (TypeManager.LookupParentInterfacesCache):
11046         Rename from LookupInterfaceCache.  Optimize slightly.
11047         (TypeManager.MemberLookup_FindMembers): Update.
11048         * decl.cs (MemberCache.MemberCache): Set Container to null in the
11049         multi-type variant.
11050         (AddCacheContents): Rename from AddHashtable.
11051         * class.cs (TypeContainer.parent_container): Remove.
11052         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
11053         (TypeContainer.DoDefineMembers): Don't initialize it.
11054         Update to name changes.
11055         
11056 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
11057
11058         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
11059         that factors the code to check access modifiers on override.  
11060
11061         (PropertyBase): Use the code here.
11062
11063         Patch from Lluis S'anchez, fixes bug #69361.
11064
11065 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
11066
11067         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
11068         routine that is used to report the use of a captured variable
11069         whose address has been taken.
11070
11071         There are two checks: one when variables are being captured and
11072         the other check is when the address of a variable is taken. 
11073         
11074         (because an anonymous methods might be resolved before *or* after
11075         the address has been taken) and 
11076
11077         * expression.cs (Conditional.DoResolve): Remove the special
11078         casing that Martin added to trueExpr and falseExpr being both
11079         NullLiteral.  We get the right behavior now just by introducing
11080         the null_type into the compiler. 
11081
11082         * convert.cs (ExplicitConversion): Change the code to use
11083         null_type instead of testing `expr is NullLiteral'.
11084         (ImplicitConversionStandard): use null_type too.
11085         (ImplicitReferenceConversionExists): use null_type too.
11086         (ImplicitReferenceConversion): use null_type too.
11087
11088         * literal.cs: The type of `NullLiteral' is now null_type instead
11089         of object_type. 
11090         (Resolve): Set the type here.
11091
11092         * typemanager.cs: Introduce null_type.
11093
11094 2004-11-17  Martin Baulig  <martin@ximian.com>
11095
11096         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
11097         direction, like FindMembers() does.  Fixes #69546, testcase is in
11098         test-315.cs.    
11099
11100 2004-11-16  Martin Baulig  <martin@ximian.com>
11101
11102         This is based on a patch from Marek Safar, see bug #69082.
11103         Fixes bugs #63705 and #67130.
11104
11105         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
11106         method; create a MemberCache for an interface type and cache the
11107         result.
11108
11109         * decl.cs (IMemberContainer.ParentContainer): Removed.
11110         (IMemberContainer.ParentCache): New property.
11111         (MemberCache.SetupCacheForInterface): Removed.
11112         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
11113         to create a cache for an interface's "parent".
11114
11115         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
11116         interfaces too.
11117
11118 2004-11-16  Martin Baulig  <martin@ximian.com>
11119
11120         Merged back from gmcs; these changes already went into gmcs a
11121         couple of weeks ago.
11122
11123         * typemanager.cs
11124         (TypeManager.AddUserType): Removed the `ifaces' argument.
11125         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
11126         `TypeExpr []'.
11127         (TypeManager.AddUserInterface): Removed.
11128         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
11129         `TypeExpr []'.
11130         (TypeManager.GetInterfaces): Likewise.
11131         (TypeManager.GetExplicitInterfaces): Likewise.
11132
11133         * ecore.cs (TypeExpr.GetInterfaces): Removed.
11134
11135         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
11136         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
11137
11138 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
11139
11140         * statement.cs: Avoid adding bools to a hashtable.
11141
11142 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
11143
11144         * expression.cs (Invocation.OverloadResolve): Flag error if we are
11145         calling an unsafe method from a safe location.
11146
11147 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
11148
11149         Fix #69167
11150         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
11151
11152 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
11153
11154         * namespace.cs (VerifyUsing): use GetPartialName instead of
11155         ToString. 
11156
11157 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
11158
11159         * statement.cs (Return.Resolve): Fix regression in typo: if
11160         `in_exc', we have to request a NeedReturnLabel, this was a typo
11161         introduced in the anonymous method check-in.  Fixes #69131.
11162
11163         * Indexers were using the ShortName when defining themselves,
11164         causing a regression in the compiler bootstrap when applying the
11165         patch from 2004-11-02 (first part), now they use their full name
11166         and the bug is gone.
11167
11168 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
11169
11170         * driver.cs: Strip the path from the names of embedded resources. Fixes
11171         #68519.
11172
11173 2004-11-04  Raja R Harinath  <rharinath@novell.com>
11174
11175         Fix error message regression: cs0104-2.cs.
11176         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
11177         (AliasEntry.Resolve): Update.
11178         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
11179         'silent' flag.
11180         (RootContext.LookupType): Update.
11181
11182 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
11183
11184         * cs-parser.jay: Add support for handling accessor modifiers
11185         * class: Add support port accessor modifiers and error checking,
11186         define PropertyMethod.Define as virtual (not abstract anymore)
11187         * ecore.cs: Add checking for proeprties access with access modifiers
11188         * iterators.cs: Modify Accessor constructor call based in the modified
11189         constructor
11190 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
11191
11192         * expression.cs (StringConcat): Handle being called twice,
11193         as when we have a concat in a field init with more than two
11194         ctors in the class
11195
11196 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
11197
11198         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
11199         special case explicit implementations, we should always produce
11200         the .property or .event declaration.
11201         
11202         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
11203         since it will not return correct data if people use this
11204         unresolved in the presence of using statements (see test-313).
11205
11206         * class.cs (MethodData.Define): If we are an explicit interface
11207         implementation, set the method name to the full name of the
11208         interface plus the name of the method.  
11209
11210         Notice that using the method.MethodName.GetFullName() does not
11211         work, as it will only contain the name as declared on the source
11212         file (it can be a shorthand in the presence of using statements)
11213         and not the fully qualifed type name, for example:
11214
11215         using System;
11216
11217         class D : ICloneable {
11218                 object ICloneable.Clone ()  {
11219                 }
11220         }
11221
11222         Would produce a method called `ICloneable.Clone' instead of
11223         `System.ICloneable.Clone'.
11224
11225         * namespace.cs (Alias.Resolve): Use GetPartialName.
11226         
11227 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
11228
11229         * cs-parser.jay: Add error 1055 report.
11230
11231 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
11232
11233         * assign.cs (Assign.DoResolve): Only do the transform of
11234         assignment into a New if the types are compatible, if not, fall
11235         through and let the implicit code deal with the errors and with
11236         the necessary conversions. 
11237
11238 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
11239
11240         * cs-parser.jay: Add error 1031 report.
11241
11242         * cs-tokenizer.cs: Add location for error 1038.
11243
11244 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11245
11246         * cs-parser.jay: Add error 1016 report.
11247
11248 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11249
11250         * cs-parser.jay: Add errors 1575,1611 report.
11251
11252 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11253
11254         * cs-parser.jay: Add error 1001 report.
11255
11256 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11257
11258         Fix #68850
11259         * attribute.cs (GetMarshal): Add method argument for
11260         caller identification.
11261
11262         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
11263         agument for GetMarshal and RuntimeMissingSupport.
11264
11265 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11266
11267         * attribute.cs (ExtractSecurityPermissionSet): Removed
11268         TypeManager.code_access_permission_type.
11269
11270         * typemanager.cs: Removed TypeManager.code_access_permission_type.
11271
11272 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
11273
11274         * expression.cs (LocalVariableReference.DoResolveLValue): Check
11275         for obsolete use of a variable here.   Fixes regression on errors
11276         cs0619-25 and cs0619-26.
11277
11278 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
11279
11280         Fix #62358, implemented security attribute encoding.
11281
11282         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
11283         Tests permitted SecurityAction for assembly or other types.
11284         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
11285         data from SecurityPermissionAttribute to PermisionSet class.
11286
11287         * class.cs (ApplyAttributeBuilder): Added special handling
11288         for System.Security.Permissions.SecurityAttribute based types.
11289
11290         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
11291         special handling for System.Security.Permissions.SecurityAttribute
11292         based types.
11293
11294         * enum.cs (ApplyAttributeBuilder): Added special handling
11295         for System.Security.Permissions.SecurityAttribute based types.
11296
11297         * parameter.cs (ApplyAttributeBuilder): Added special handling
11298         for System.Security.Permissions.SecurityAttribute based types.
11299
11300         * rootcontext.cs: Next 2 core types.
11301
11302         * typemanager.cs (TypeManager.security_permission_attr_type):
11303         Built in type for the SecurityPermission Attribute.
11304         (code_access_permission_type): Build in type.
11305
11306 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
11307
11308         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
11309         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
11310         all of this information into
11311         EmitContext.EmitCapturedVariableInstance.
11312         
11313         * codegen.cs (EmitCapturedVariableInstance): move here the
11314         funcionality of emitting an ldarg.0 in the presence of a
11315         remapping.   This centralizes the instance emit code.
11316
11317         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
11318         then emit a load of this: it means that we have reached the
11319         topmost ScopeInfo: the one that contains the pointer to the
11320         instance of the class hosting the anonymous method.
11321
11322         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
11323         captures to the topmost CaptureContext.
11324
11325 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
11326
11327         * expression.cs (LocalVariableReference): Move the knowledge about
11328         the iterators into codegen's EmitCapturedVariableInstance.
11329
11330 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
11331
11332         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
11333         all code paths return a value from an anonymous method (it is the
11334         same as the 161 error, but for anonymous methods).
11335
11336 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
11337
11338         The introduction of anonymous methods in the compiler changed
11339         various ways of doing things in the compiler.  The most
11340         significant one is the hard split between the resolution phase
11341         and the emission phases of the compiler.
11342
11343         For instance, routines that referenced local variables no
11344         longer can safely create temporary variables during the
11345         resolution phase: they must do so from the emission phase,
11346         since the variable might have been "captured", hence access to
11347         it can not be done with the local-variable operations from the runtime.
11348         
11349         * statement.cs 
11350
11351         (Block.Flags): New flag `IsTopLevel' to indicate that this block
11352         is a toplevel block.
11353
11354         (ToplevelBlock): A new kind of Block, these are the blocks that
11355         are created by the parser for all toplevel method bodies.  These
11356         include methods, accessors and anonymous methods.
11357
11358         These contain some extra information not found in regular blocks:
11359         A pointer to an optional CaptureContext (for tracking captured
11360         local variables and parameters).  A pointer to the parent
11361         ToplevelBlock.
11362         
11363         (Return.Resolve): Catch missmatches when returning a value from an
11364         anonymous method (error 1662).
11365         Invoke NeedReturnLabel from the Resolve phase instead of the emit
11366         phase.
11367
11368         (Break.Resolve): ditto.
11369
11370         (SwitchLabel): instead of defining the labels during the
11371         resolution phase, we now turned the public ILLabel and ILLabelCode
11372         labels into methods called GetILLabelCode() and GetILLabel() that
11373         only define the label during the Emit phase.
11374
11375         (GotoCase): Track the SwitchLabel instead of the computed label
11376         (its contained therein).  Emit the code by using
11377         SwitchLabel.GetILLabelCode ().
11378
11379         (LocalInfo.Flags.Captured): A new flag has been introduce to track
11380         whether the Local has been captured or not.
11381
11382         (LocalInfo.IsCaptured): New property, used to tell whether the
11383         local has been captured.
11384         
11385         * anonymous.cs: Vastly updated to contain the anonymous method
11386         support.
11387
11388         The main classes here are: CaptureContext which tracks any
11389         captured information for a toplevel block and ScopeInfo used to
11390         track the activation frames for various local variables.   
11391
11392         Each toplevel block has an optional capture context associated
11393         with it.  When a method contains an anonymous method both the
11394         toplevel method and the anonymous method will create a capture
11395         context.   When variables or parameters are captured, they are
11396         recorded on the CaptureContext that owns them, for example:
11397
11398         void Demo () {
11399              int a;
11400              MyDelegate d = delegate {
11401                  a = 1;
11402              }
11403         }
11404
11405         Here `a' will be recorded as captured on the toplevel
11406         CapturedContext, the inner captured context will not have anything
11407         (it will only have data if local variables or parameters from it
11408         are captured in a nested anonymous method.
11409
11410         The ScopeInfo is used to track the activation frames for local
11411         variables, for example:
11412
11413         for (int i = 0; i < 10; i++)
11414                 for (int j = 0; j < 10; j++){
11415                    MyDelegate d = delegate {
11416                         call (i, j);
11417                    }
11418                 }
11419
11420         At runtime this captures a single captured variable `i', but it
11421         captures 10 different versions of the variable `j'.  The variable
11422         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
11423         recorded on a child.  
11424
11425         The toplevel ScopeInfo will also track information like the `this'
11426         pointer if instance variables were referenced (this is necessary
11427         as the anonymous method lives inside a nested class in the host
11428         type of the method). 
11429
11430         (AnonymousMethod): Expanded to track the Toplevel, implement
11431         `AnonymousMethod.Compatible' to tell whether an anonymous method
11432         can be converted to a target delegate type. 
11433
11434         The routine now also produces the anonymous method content
11435
11436         (AnonymousDelegate): A helper class that derives from
11437         DelegateCreation, this is used to generate the code necessary to
11438         produce the delegate for the anonymous method that was created. 
11439
11440         * assign.cs: API adjustments for new changes in
11441         Convert.ImplicitStandardConversionExists.
11442
11443         * class.cs: Adjustments to cope with the fact that now toplevel
11444         blocks are of type `ToplevelBlock'. 
11445
11446         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
11447         insteda of standard blocks.
11448
11449         Flag errors if params arguments are passed to anonymous methods.
11450
11451         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
11452         `CurrentAnonymousMethod' which points to the current Anonymous
11453         Method.  The variable points to the AnonymousMethod class that
11454         holds the code being compiled.  It is set in the new EmitContext
11455         created for the anonymous method.
11456
11457         (EmitContext.Phase): Introduce a variable and an enumeration to
11458         assist in enforcing some rules about when and where we are allowed
11459         to invoke certain methods (EmitContext.NeedsReturnLabel is the
11460         only one that enfonces this right now).
11461
11462         (EmitContext.HaveCaptureInfo): new helper method that returns
11463         whether we have a CapturedContext initialized.
11464
11465         (EmitContext.CaptureVariable): New method used to register that a
11466         LocalInfo must be flagged for capturing. 
11467
11468         (EmitContext.CapturedParameter): New method used to register that a
11469         parameters must be flagged for capturing. 
11470         
11471         (EmitContext.CapturedField): New method used to register that a
11472         field must be flagged for capturing. 
11473
11474         (EmitContext.HaveCapturedVariables,
11475         EmitContext.HaveCapturedFields): Return whether there are captured
11476         variables or fields. 
11477
11478         (EmitContext.EmitMethodHostInstance): This is used to emit the
11479         instance for the anonymous method.  The instance might be null
11480         (static methods), this (for anonymous methods that capture nothing
11481         and happen to live side-by-side with the current method body) or a
11482         more complicated expression if the method has a CaptureContext.
11483
11484         (EmitContext.EmitTopBlock): Routine that drives the emission of
11485         code: it will first resolve the top block, then emit any metadata
11486         and then emit the code.  The split is done so that we can extract
11487         any anonymous methods and flag any captured variables/parameters.
11488         
11489         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
11490         during this phase, the ILGenerator should not be used as labels
11491         and local variables declared here might not be accessible to any
11492         code that is part of an anonymous method.  
11493
11494         Exceptions to this include the temporary variables that are
11495         created by some statements internally for holding temporary
11496         variables. 
11497         
11498         (EmitContext.EmitMeta): New routine, in charge of emitting all the
11499         metadata for a cb
11500
11501         (EmitContext.TemporaryReturn): This method is typically called
11502         from the Emit phase, and its the only place where we allow the
11503         ReturnLabel to be defined other than the EmitMeta.  The reason is
11504         that otherwise we would have to duplicate a lot of logic in the
11505         Resolve phases of various methods that today is on the Emit
11506         phase. 
11507
11508         (EmitContext.NeedReturnLabel): This no longer creates the label,
11509         as the ILGenerator is not valid during the resolve phase.
11510
11511         (EmitContext.EmitThis): Extended the knowledge in this class to
11512         work in anonymous methods in addition to iterators. 
11513
11514         (EmitContext.EmitCapturedVariableInstance): This emits whatever
11515         code is necessary on the stack to access the instance to a local
11516         variable (the variable will be accessed as a field).
11517
11518         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
11519         EmitContext.EmitAddressOfParameter): Routines to support
11520         parameters (not completed at this point). 
11521         
11522         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
11523         will also remove the parameters.
11524
11525         * convert.cs (Convert): Define a `ConstantEC' which points to a
11526         null.  This is just to prefity some code that uses
11527         ImplicitStandardConversion code and do not have an EmitContext
11528         handy.
11529
11530         The idea is to flag explicitly that at that point in time, it is
11531         known that the conversion will not trigger the delegate checking
11532         code in implicit conversions (which requires a valid
11533         EmitContext). 
11534
11535         Everywhere: pass new EmitContext parameter since
11536         ImplicitStandardConversionExists now requires it to check for
11537         anonymous method conversions. 
11538
11539         (Convert.ImplicitStandardConversionExists): If the type of an
11540         expression is the anonymous_method_type, and the type is a
11541         delegate, we invoke the AnonymousMethod.Compatible method to check
11542         whether an implicit conversion is possible. 
11543
11544         (Convert.ImplicitConversionStandard): Only do implicit method
11545         group conversions if the language level is not ISO_1.
11546
11547         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
11548         MethodInfo for the Invoke method.  used by Delegate and
11549         AnonymousDelegate.
11550
11551         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
11552         method conversions if the target type is a delegate.
11553
11554         Removed extra debugging nops.
11555
11556         (LocalVariableReference): Turn the `local_info' into a public
11557         field. 
11558
11559         Add `prepared' field, the same hack used for FieldExprs to cope
11560         with composed assignments, as Local variables do not necessarily
11561         operate purely on the stack as they used to: they can be captured
11562         fields. 
11563
11564         Add `temp' for a temporary result, like fields.
11565
11566         Refactor DoResolve and DoResolveLValue into DoResolveBase.
11567
11568         It now copes with Local variables that are captured and emits the
11569         proper instance variable to load it from a field in the captured
11570         case. 
11571
11572         (ParameterReference.DoResolveBase): During the resolve phase,
11573         capture parameters if we are in an anonymous method.
11574
11575         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
11576         anonymous method, use the EmitContext helper routines to emit the
11577         parameter reference.
11578
11579         * iterators.cs: Set RemapToProxy to true/false during the
11580         EmitDispose class.
11581
11582         * parameters.cs (GetParameterByName): New helper method. 
11583
11584         * typemanager.cs (anonymous_method_type) a new type that
11585         represents an anonyous method.  This is always an internal type,
11586         used as a fencepost to test against the anonymous-methodness of an
11587         expression. 
11588         
11589 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
11590
11591         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
11592         561 report.
11593         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
11594
11595 2004-10-18  Martin Baulig  <martin@ximian.com>
11596
11597         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
11598         `Type' directly, but call ResolveType() on it.
11599         (Catch.Resolve): Likewise.
11600         (Foreach.Resolve): Likewise.
11601
11602 2004-10-18  Martin Baulig  <martin@ximian.com>
11603
11604         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
11605         `Type' directly, but call ResolveType() on it.
11606         (Probe.DoResolve): Likewise.
11607         (ArrayCreation.LookupType): Likewise.
11608         (TypeOf.DoResolve): Likewise.
11609         (SizeOf.DoResolve): Likewise.
11610
11611 2004-10-18  Martin Baulig  <martin@ximian.com>
11612
11613         * expression.cs (Invocation.BetterFunction): Put back
11614         TypeManager.TypeToCoreType().
11615
11616 2004-10-18  Raja R Harinath  <rharinath@novell.com>
11617
11618         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
11619         the ResolveType.
11620
11621 2004-10-18  Martin Baulig  <martin@ximian.com>
11622
11623         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
11624         `Type' directly, but call ResolveType() on it.
11625
11626 2004-10-18  Martin Baulig  <martin@ximian.com>
11627
11628         * class.cs (FieldMember.Define): Don't access the TypeExpr's
11629         `Type' directly, but call ResolveType() on it.
11630         (MemberBase.DoDefine): Likewise.
11631
11632         * expression.cs (New.DoResolve): Don't access the TypeExpr's
11633         `Type' directly, but call ResolveType() on it.
11634         (ComposedCast.DoResolveAsTypeStep): Likewise.
11635
11636         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
11637         `Type' directly, but call ResolveType() on it.
11638
11639 2004-10-17  John Luke  <john.luke@gmail.com>
11640
11641         * class.cs (Operator.GetSignatureForError): use CSharpName
11642
11643         * parameter.cs (Parameter.GetSignatureForError): Returns
11644         correct name even if was not defined.
11645
11646 2004-10-13  Raja R Harinath  <rharinath@novell.com>
11647
11648         Fix #65816.
11649         * class.cs (TypeContainer.EmitContext): New property.
11650         (DefineNestedTypes): Create an emitcontext for each part.
11651         (MethodCore.DoDefineParameters): Use container's emitcontext.
11652         Pass type array to InternalParameters.
11653         (MemberBase.DoDefine): Use container's emitcontext.
11654         (FieldMember.Define): Likewise.
11655         (Event.Define): Likewise.
11656         (SetMethod.GetParameterInfo): Change argument to EmitContext.
11657         Pass type array to InternalParameters.
11658         (SetIndexerMethod.GetParameterInfo): Likewise.
11659         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
11660         * delegate.cs (Define): Pass emitcontext to
11661         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
11662         array to InternalParameters.
11663         * expression.cs (ParameterReference.DoResolveBase): Pass
11664         emitcontext to GetParameterInfo.
11665         (ComposedCast.DoResolveAsTypeStep): Remove check on
11666         ec.ResolvingTypeTree.
11667         * parameter.cs (Parameter.Resolve): Change argument to
11668         EmitContext.  Use ResolveAsTypeTerminal.
11669         (Parameter.GetSignature): Change argument to EmitContext.
11670         (Parameters.ComputeSignature): Likewise.
11671         (Parameters.ComputeParameterTypes): Likewise.
11672         (Parameters.GetParameterInfo): Likewise.
11673         (Parameters.ComputeAndDefineParameterTypes): Likewise.
11674         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
11675         * support.cs (InternalParameters..ctor): Remove variant that takes
11676         a DeclSpace.
11677         * typemanager.cs (system_intptr_expr): New.
11678         (InitExpressionTypes): Initialize it.
11679
11680 2004-10-12  Chris Toshok  <toshok@ximian.com>
11681
11682         * cs-parser.jay: fix location for try_statement and catch_clause.
11683
11684 2004-10-11  Martin Baulig  <martin@ximian.com>
11685
11686         * report.cs: Don't make --fatal abort on warnings, we have
11687         -warnaserror for that.
11688
11689 2004-10-07  Raja R Harinath  <rharinath@novell.com>
11690
11691         More DeclSpace.ResolveType avoidance.
11692         * decl.cs (MemberCore.InUnsafe): New property.
11693         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
11694         with newly created EmitContext.
11695         (FieldMember.Define): Likewise.
11696         * delegate.cs (Delegate.Define): Likewise.
11697         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
11698         only if normal name-lookup fails.
11699         (TypeExpr.DoResolve): Enable error-checking.
11700         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
11701         (SizeOf.DoResolve): Likewise.
11702         (ComposedCast.DoResolveAsTypeStep): Likewise.
11703         (StackAlloc.DoResolve): Likewise.
11704         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
11705         (Block.Unsafe): New property.
11706         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
11707         (Unsafe): Set 'unsafe' flag of contained block.
11708         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
11709         (Fixed.Resolve): Likewise.
11710         (Catch.Resolve): Likewise.
11711         (Using.ResolveLocalVariableDecls): Likewise.
11712         (Foreach.Resolve): Likewise.
11713
11714 2004-10-05  John Luke <john.luke@gmail.com>
11715
11716         * cs-parser.jay: add location to error CS0175
11717
11718 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
11719
11720         * ecore.cs (Expression.Constantity): Add support for turning null
11721         into a constant.
11722
11723         * const.cs (Const.Define): Allow constants to be reference types
11724         as long as the value is Null.
11725
11726 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
11727
11728         * namespace.cs (NamespaceEntry.Using): No matter which warning
11729         level is set, check if this namespace name has already been added.
11730
11731 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
11732
11733         * expression.cs: reftype [!=]= null should always use br[true,false].
11734         # 67410
11735
11736 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
11737
11738         Fix #67108
11739         * attribute.cs: Enum conversion moved to 
11740         GetAttributeArgumentExpression to be applied to the all
11741         expressions.
11742
11743 2004-10-01  Raja R Harinath  <rharinath@novell.com>
11744
11745         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
11746         * class.c (TypeContainer.DefineType): Flag error if
11747         base types aren't accessible due to access permissions.
11748         * decl.cs (DeclSpace.ResolveType): Move logic to
11749         Expression.ResolveAsTypeTerminal.
11750         (DeclSpace.ResolveTypeExpr): Thin layer over
11751         Expression.ResolveAsTypeTerminal.
11752         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
11753         Refactor code into NestedAccess.  Use it.
11754         (DeclSpace.NestedAccess): New.
11755         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
11756         argument to silence errors.  Check access permissions.
11757         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
11758         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
11759         (Cast.DoResolve): Likewise.
11760         (New.DoResolve): Likewise.
11761         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
11762         (TypeOf.DoResolve): Likewise.
11763
11764         * expression.cs (Invocation.BetterConversion): Return the Type of
11765         the better conversion.  Implement section 14.4.2.3 more faithfully.
11766         (Invocation.BetterFunction): Make boolean.  Make correspondence to
11767         section 14.4.2.2 explicit.
11768         (Invocation.OverloadResolve): Update.
11769         (Invocation): Remove is_base field.
11770         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
11771         (Invocation.Emit): Likewise.
11772
11773 2004-09-27  Raja R Harinath  <rharinath@novell.com>
11774
11775         * README: Update to changes.
11776
11777 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
11778
11779         * cs-parser.jay: Reverted 642 warning fix.
11780
11781 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11782
11783         Fix bug #66615
11784         * decl.cs (FindMemberWithSameName): Indexer can have more than
11785         1 argument.
11786
11787 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11788
11789         * expression.cs (LocalVariableReference.DoResolveLValue):
11790         Do not report warning 219 for out values.
11791         (EmptyExpression.Null): New member to avoid extra allocations.
11792
11793 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11794
11795         * cs-parser.jay: Fix wrong warning 642 report.
11796
11797         * cs-tokenizer.cs (CheckNextToken): New helper;
11798         Inspect next character if is same as expected.
11799
11800 2004-09-23  Martin Baulig  <martin@ximian.com>
11801
11802         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
11803         (Convert.ImplicitReferenceConversionExists): Likewise.
11804
11805 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11806
11807         * class.cs (Operator.Define): Add error 448 and 559 report.
11808
11809 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11810
11811         * class.cs (MemberBase.IsTypePermitted): New protected
11812         method for checking error CS0610.
11813
11814 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11815
11816         * class.cs (TypeContainer.HasExplicitLayout): New property
11817         Returns whether container has StructLayout attribute set Explicit.
11818         (FieldMember): New abstract class for consts and fields.
11819         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
11820         (Field): Reuse FieldMember.
11821
11822         * const.cs (Const): Reuse FieldMember.
11823
11824         * rootcontext.cs: EmitConstants call moved to class.
11825
11826 2004-09-22  Martin Baulig  <martin@ximian.com>
11827
11828         Thanks to Peter Sestoft for this bug report.
11829
11830         * expression.cs (Conditional): If both the `trueExpr' and the
11831         `falseExpr' is a NullLiteral, return a NullLiteral.
11832
11833 2004-09-22  Martin Baulig  <martin@ximian.com>
11834
11835         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
11836         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
11837         for the "get_Current" call.
11838
11839 2004-09-22  Martin Baulig  <martin@ximian.com>
11840
11841         Marek and me just fixed one of our oldest bugs: #28562 :-)
11842
11843         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
11844
11845         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
11846         we're an EnumConstant, just return that.
11847         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
11848         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
11849         to get the value which'll actually be written into the attribute.
11850         However, we have to use GetValue() to access the attribute's value
11851         in the compiler.        
11852
11853 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11854
11855         * constant.cs (Constant.IsNegative): New abstract property
11856         IsNegative.
11857
11858         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
11859         (StackAlloc.DoResolve): Reused IsNegative.
11860
11861 2004-09-21  Martin Baulig  <martin@ximian.com>
11862
11863         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
11864         if we're used in an iterator, we may be called from different
11865         methods.
11866
11867         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
11868         we actually have an exception block.
11869
11870 2004-09-20  John Luke <jluke@cfl.rr.com>
11871
11872         * class.cs, cs-parser.jay: Improve the error report for 1520:
11873         report the actual line where the error happens, not where the
11874         class was declared.
11875
11876         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
11877         Pass location information that was available elsewhere.
11878
11879 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
11880
11881         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
11882         runtime to delay sign assemblies.
11883
11884 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11885
11886         * cs-parser.jay: Do not report the stack trace, this is barely
11887         used nowadays.
11888
11889 2004-08-22  John Luke  <john.luke@gmail.com>
11890  
11891         * driver.cs : check that a resource id is not already used
11892         before adding it, report CS1508 if it is, bug #63637
11893
11894 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11895
11896         * ecore.cs: Removed dead code.
11897
11898 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
11899
11900         * class.cs: Do not report warning CS0067 on the interfaces.
11901
11902 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11903
11904         * cs-parser.jay: Add error 504 report.
11905
11906 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11907
11908         * rootcontext.cs: WarningLevel is 4 by default now.
11909
11910         * statement.cs (Fixed.Resolve): Do not null
11911         VariableInfo.
11912
11913 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11914
11915         Fixed bug #55780
11916         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
11917         deep search when property is not virtual.
11918         (PropertyExpr.ResolveAccessors): Make one call for both
11919         accessors.
11920
11921 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11922
11923         Fixed bug #65766
11924         * statement.cs: Error 152 report constains also location.
11925
11926 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11927
11928         Fixed bug #65766
11929         * const.cs: Explicitly set constant as static.
11930
11931 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11932
11933         Fixed bug #64226
11934         * cs-parser.jay: Add error 1017 report.
11935
11936 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11937
11938         Fixed bug #59980, #64224
11939         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
11940
11941         * typemanager.cs (IsSpecialMethod): Simplified
11942
11943 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11944
11945         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
11946         condition with better params.
11947
11948 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11949
11950         Fixed bug #65238
11951         * attribute.cs (Resolve): Property has to have both
11952         accessors.
11953
11954 2004-09-14  Martin Baulig  <martin@ximian.com>
11955
11956         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
11957
11958 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11959
11960         Fixed bug #61902
11961         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
11962         called and is obsolete then this member suppress message
11963         when call is inside next [Obsolete] method or type.
11964
11965         * expression.cs: Use TestObsoleteMethodUsage member.
11966
11967 2004-09-14  Martin Baulig  <martin@ximian.com>
11968
11969         * cs-parser.jay: Sync a bit with the GMCS version.
11970
11971 2004-09-14  Martin Baulig  <martin@ximian.com>
11972
11973         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
11974         (CSharpParser.yacc_verbose_flag): New public field.
11975
11976         * genericparser.cs: Removed.
11977
11978 2004-09-14  Raja R Harinath  <rharinath@novell.com>
11979
11980         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
11981
11982 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
11983
11984         * class.cs (MethodCore.CheckBase): Fix bug #65757.
11985
11986 2004-09-10  Martin Baulig  <martin@ximian.com>
11987
11988         Backported my MemberName changes from GMCS into MCS.
11989
11990         - we are now using a special `MemberName' class instead of using
11991         strings; in GMCS, the `MemberName' also contains the type
11992         arguments.
11993
11994         - changed the grammar rules a bit:
11995           * the old `member_name' is now a `namespace_or_type_name':
11996             The rule is that we use `namespace_or_type_name' everywhere
11997             where we expect either a "member name" (GetEnumerator) or a
11998             "member name" with an explicit interface name
11999             (IEnumerable.GetEnumerator).
12000             In GMCS, the explicit interface name may include type arguments
12001             (IEnumerable<T>.GetEnumerator).
12002           * we use `member_name' instead of just `IDENTIFIER' for
12003             "member names":
12004             The rule is that we use `member_name' wherever a member may
12005             have type parameters in GMCS.       
12006
12007         * decl.cs (MemberName): New public class.
12008         (MemberCore.MemberName): New public readonly field.
12009         (MemberCore.ctor): Take a `MemberName' argument, not a string.
12010         (DeclSpace): Likewise.
12011
12012         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
12013         * enum.cs (Enum.ctor): Likewise.
12014
12015         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
12016         MemberName.     
12017         (AliasEntry.ctor): Take a MemberName, not an Expression.
12018         (AliasEntry.UsingAlias): Likewise.
12019
12020         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
12021         (IMethodData.MemberName): Changed type from string to MemberName.
12022         (MemberBase.ExplicitInterfaceName): Likewise.
12023         (AbstractPropertyEventMethod.SetupName): Make this private.
12024         (AbstractPropertyEventMethod.ctor): Added `string prefix'
12025         argument; compute the member name here.
12026         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
12027         on the `member.MemberName' and the `prefix'.
12028
12029         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
12030         not `type_name'.
12031         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
12032         thus, we get a `MemberName' instead of a `string'.  These
12033         declarations may have type parameters in GMCS.
12034         (interface_method_declaration, delegate_declaration): Likewise.
12035         (class_declaration, interface_declaration): Likewise.
12036         (method_header): Use `namespace_or_type_name' instead of
12037         `member_name'.  We may be an explicit interface implementation.
12038         (property_declaration, event_declaration): Likewise.
12039         (member_name): This is now just an `IDENTIFIER', not a
12040         `namespace_or_type_name'.
12041         (type_name, interface_type): Removed.
12042         (namespace_or_type_name): Return a MemberName, not an Expression.
12043         (primary_expression): Use `member_name' instead of `IDENTIFIER';
12044         call GetTypeExpression() on the MemberName to get an expression.
12045         (IndexerDeclaration.interface_type): Changed type from string to
12046         MemberName.
12047         (MakeName): Operate on MemberName's instead of string's.
12048
12049 2004-09-13  Raja R Harinath  <rharinath@novell.com>
12050
12051         Fix bug #55770.
12052         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
12053         (NamespaceEntry.Lookup): Add new argument to flag if we want the
12054         lookup to avoid symbols introduced by 'using'.
12055         * rootcontext.cs (NamespaceLookup): Update.
12056
12057 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12058
12059         * class.cs (TypeContainer.DoDefineMembers): Do not call
12060         DefineDefaultConstructor for static classes.
12061
12062 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12063
12064         * attribute.cs (Attribute.Resolve): Add error 653 report.
12065
12066         * class.cs (Class.ApplyAttributeBuilder): Add error 641
12067         report.
12068         (Method.ApplyAttributeBuilder): Add error 685 report.
12069         (Operator.Define): Add error 564 report.
12070
12071         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
12072
12073         * expression.cs (Invocation.DoResolve): Add error
12074         245 and 250 report.
12075
12076         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
12077         error 674 report.
12078
12079 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12080
12081         * class.cs (ConstructorInitializer.Resolve):
12082         Wrong error number (515->516).
12083
12084 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12085
12086         * class.cs (Indexer.Define): Add error 631 report.
12087
12088 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12089
12090         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
12091
12092 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12093
12094         * expression.cs (Probe.DoResolve): Add error CS0241 report.
12095
12096 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
12097
12098         * cs-parser.jay: Added error CS0241 report.
12099
12100 2004-09-10  Raja R Harinath  <rharinath@novell.com>
12101
12102         * cs-parser.jay (fixed_statement): Introduce a scope for the
12103         declaration in the 'fixed' statement.
12104
12105 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12106
12107         * cs-parser.jay: Added CS0230 error report.
12108
12109 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12110
12111         * cs-parser.jay: Added errors CS0231 and CS0257 report.
12112
12113 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12114
12115         * expression.cs (Argument.Resolve): Added error CS0192 and
12116         CS0199 report.
12117
12118 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12119
12120         C# 2.0 #pragma warning feature
12121
12122         * cs-tokenizer.cs (PreProcessPragma): New method; 
12123         Handles #pragma directive.
12124
12125         * report.cs (WarningRegions): New class; Support
12126         class for #pragma warning directive. It tests whether
12127         warning is enabled for a given line.
12128
12129 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
12130
12131         * const.cs: Add more descriptive error report, tahnks to
12132         Sebastien. 
12133
12134 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
12135
12136         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
12137
12138 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
12139
12140         * expression.cs: Apply patch from Ben: Remove dead code from
12141         ArrayCreation, and remove the TurnintoConstant call in const.cs,
12142         as that code just threw an exception anwyays.
12143
12144         * const.cs: Remove the call to the turnintoconstant, for details
12145         see bug: #63144
12146         
12147         * literal.cs: The type of the null-literal is the null type;  So
12148         we use a placeholder type (literal.cs:System.Null, defined here)
12149         for it.
12150
12151         * expression.cs (Conditional.DoResolve): Remove some old code that
12152         is no longer needed, conversions have been fixed.
12153
12154         (ArrayCreationExpression.DoResolve): Return false if we fail to
12155         resolve the inner expression.
12156
12157 2004-09-07  Raja R Harinath  <rharinath@novell.com>
12158
12159         Fix test-290.cs.
12160         * cs-parser.jay (delegate_declaration): Record a delegate
12161         declaration as a type declaration.
12162         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
12163
12164 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
12165
12166         * parameter.cs: Do not crash if the type can not be resolved. 
12167
12168         * expression.cs: Report errors with unsafe pointers, fixes #64896
12169
12170 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
12171
12172         * expression.cs: Pointer arith always needs to do a conv.i
12173         if the operand is a long. fix 65320
12174
12175 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
12176
12177         Fixed cs0619-37.cs, cs0619-38.cs
12178
12179         * enum.cs (GetObsoleteAttribute): Removed.
12180
12181         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
12182         on Enum member is double staged. The first is tested member
12183         and then enum.
12184
12185 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
12186
12187         Fixed #56986, #63631, #65231
12188
12189         * class.cs: (TypeContainer.AddToMemberContainer): New method,
12190         adds member to name container.
12191         (TypeContainer.AddToTypeContainer): New method, adds type to
12192         name container.
12193         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
12194         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
12195         AddOperator): Simplified by reusing AddToMemberContainer.
12196         (TypeContainer.UserDefinedStaticConstructor): Changed to property
12197         instead of field.
12198         (Method.CheckForDuplications): Fixed implementation to test all
12199         possibilities.
12200         (MemberBase): Detection whether member is explicit interface
12201         implementation is now in constructor.
12202         (MemberBase.UpdateMemberName): Handles IndexerName.
12203         (Accessor): Changed to keep also location information.
12204         (AbstractPropertyEventMethod): Is derived from MemberCore.
12205         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
12206         will be emited or not.
12207         (PropertyBase.AreAccessorsDuplicateImplementation):
12208         Tests whether accessors are not in collision with some method.
12209         (Operator): Is derived from MethodCore to simplify common
12210         operations.
12211
12212         * decl.cs (Flags.TestMethodDuplication): Test for duplication
12213         must be performed.
12214         (DeclSpace.AddToContainer): Adds the member to defined_names
12215         table. It tests for duplications and enclosing name conflicts.
12216
12217         * enum.cs (EnumMember): Clean up to reuse the base structures
12218
12219 2004-09-03  Martin Baulig  <martin@ximian.com>
12220
12221         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
12222         into TypeContainer, to make partial classes work again.
12223
12224 2004-09-03  Martin Baulig  <martin@ximian.com>
12225
12226         * rootcontext.cs (RootContext.V2): Removed.
12227
12228 2004-03-23  Martin Baulig  <martin@ximian.com>
12229
12230         * expression.cs (Invocation.OverloadResolve): Added `bool
12231         may_fail' argument and use it instead of the Location.IsNull() hack.
12232
12233 2004-09-03  Martin Baulig  <martin@ximian.com>
12234
12235         Merged latest changes into gmcs.  Please keep this comment in
12236         here, it makes it easier for me to see what changed in MCS since
12237         the last time I merged.
12238
12239 2004-09-03  Raja R Harinath  <rharinath@novell.com>
12240
12241         Fix #61128.
12242         * expression.cs (BetterConversion): Don't allow either conversion 
12243         to be null.  Remove redundant implicit conversion test when 'q ==
12244         null' -- when this function is invoked, we already know that the
12245         implicit conversion exists.
12246         (BetterFunction): Assume that 'best' is non-null.  Remove
12247         redundant reimplementation of IsApplicable when 'best' is null.
12248         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
12249         number of arguments.
12250         (IsAncestralType): Extract from OverloadResolve.
12251         (OverloadResolve): Make robust to the MethodGroupExpr being
12252         unsorted.  Implement all the logic of Section 14.5.5.1, and
12253         support overloading of methods from multiple applicable types.
12254         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
12255
12256         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
12257         (RealError, Warning): Append type of report to related symbol.
12258
12259 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
12260
12261         * enum.cs: Fixed CLS-Compliance checks for enum members.
12262         Error tests cs3008-8.cs, cs3014-8.cs
12263
12264 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12265
12266         Fixed bug #62342, #63102
12267         * class.cs: ImplementIndexer uses member.IsExplicitImpl
12268         like ImplementMethod.
12269
12270 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12271
12272         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12273         Fixed bug #65170.
12274
12275 2004-09-02  Martin Baulig  <martin@ximian.com>
12276
12277         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
12278         TypeManager.GetArgumentTypes() rather than calling GetParameters()
12279         on the MethodBase.
12280
12281 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
12282
12283         C# 2.0 Static classes implemented
12284
12285         * class.cs (TypeContainer): instance_constructors,
12286         initialized_fields, initialized_static_fields,
12287         default_constructor, base_inteface_types are protected to be
12288         accessible from StaticClass.
12289         (TypeContainer.DefineDefaultConstructor): New virtual method
12290         for custom default constructor generating
12291         (StaticClass): New class to handle "Static classes" feature.
12292
12293         * cs-parser.jay: Handle static keyword on class like instance
12294         of StaticClass.
12295
12296         * driver.cs: Added "/langversion" command line switch with two
12297         options (iso-1, default).
12298
12299 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
12300
12301         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
12302
12303 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
12304
12305         * delegate.cs: Style.
12306
12307 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12308
12309         * delegate.cs: Add seperate instance expr field for miguel.
12310
12311 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12312
12313         * PointerArithmetic (Resolve): make sure we are not doing
12314         pointer arith on void*. Also, make sure we are resolved
12315         by not setting eclass until resolve.
12316
12317         All callers: Make sure that PointerArithmetic gets resolved.
12318
12319 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12320
12321         * ArrayCreation (LookupType): If the type does not resolve 
12322         to an array, give an error.
12323
12324 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
12325
12326         * statement.cs (Try.Resolve): Fixed bug #64222
12327
12328 2004-08-27  Martin Baulig  <martin@ximian.com>
12329
12330         * class.cs
12331         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
12332         crash here.     
12333
12334 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12335
12336         * ecore.cs (Constantify): Get underlying type via
12337         System.Enum.GetUnderlyingType to avoid StackOverflow on the
12338         Windows in special cases.
12339
12340 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12341
12342         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
12343         for obtaining also private methods.
12344         (GetRemoveMethod): Used GetRemoveMethod (true)
12345         for obtaining also private methods.
12346
12347 2004-08-24  Martin Baulig  <martin@ximian.com>
12348
12349         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
12350         MethodAttributes.HideBySig for operators.
12351
12352 2004-08-23  Martin Baulig  <martin@ximian.com>
12353
12354         Back to the old error reporting system :-)
12355
12356         * report.cs (Message): Removed.
12357         (Report.MessageData, ErrorData, WarningData): Removed.
12358         (Report.Error, Warning): Back to the old system.
12359
12360 2004-08-23  Martin Baulig  <martin@ximian.com>
12361
12362         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
12363
12364         * class.cs (TypeContainer.ParentContainer): New public virtual
12365         method; replaces the explicit interface implementation.
12366         (ClassPart.ParentContainer): Override.
12367
12368 2004-08-23  Martin Baulig  <martin@ximian.com>
12369
12370         * statement.cs (Switch): Added support for constant switches; see
12371         #59428 or test-285.cs.
12372
12373 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12374
12375         Fixed bug #62740.
12376         * statement.cs (GetEnumeratorFilter): Removed useless
12377         logic because C# specs is strict. GetEnumerator must be
12378         public.
12379
12380 2004-08-22  Martin Baulig  <martin@ximian.com>
12381
12382         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12383         a switch and may break, reset the barrier.  Fixes #59867.
12384
12385 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12386
12387         CLS-Compliance speed up (~5% for corlib)
12388
12389         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
12390         New method. Tests container for CLS-Compliant names
12391
12392         * class.cs (TypeContainer.VerifyClsName): New method.
12393         Checks whether container name is CLS Compliant.
12394         (Constructor): Implements IMethodData.
12395
12396         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
12397         low-case table for CLS Compliance test.
12398         (MemberCache.VerifyClsParameterConflict): New method.
12399         Checks method parameters for CS3006 error.
12400
12401         * enum.cs (EnumMember): Is derived from MemberCore.
12402         (Enum.VerifyClsName): Optimized for better performance.
12403
12404 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12405
12406         * report.cs: Renamed Error_T to Error and changed all
12407         references.
12408
12409 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12410
12411         * class.cs (TypeContainer.IndexerArrayList): New inner class
12412         container for indexers.
12413         (TypeContainer.DefaultIndexerName): New constant for default
12414         indexer name. Replaced all "Item" with this constant.
12415         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
12416
12417         * typemanager.cs (TypeManager.default_member_ctor): Cache here
12418         DefaultMemberAttribute constructor.
12419
12420 2004-08-05  Martin Baulig  <martin@ximian.com>
12421
12422         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12423         Fix bug #59429.
12424
12425 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
12426
12427         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
12428         multi platforms problem.
12429
12430         * compiler.csproj: Included shared files.
12431
12432 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12433
12434         Fix bug 60333, 55971 in the more general way
12435         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12436         Added arg_type argument for constant conversion.
12437         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
12438
12439 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12440
12441         Fix bug #59760
12442         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
12443         OperatorArrayList, MethodCoreArrayList for typecontainer
12444         containers. Changed class member types to these new types.
12445         (MethodArrayList.DefineMembers): Added test for CS0659.
12446
12447 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
12448
12449         * cfold.cs: Synchronize the folding with the code in expression.cs
12450         Binary.DoNumericPromotions for uint operands.
12451
12452         * attribute.cs: Revert patch from Raja, it introduced a regression
12453         while building Blam-1.2.1 (hard to isolate a test case).
12454
12455 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12456
12457         Fix for #55382
12458         * class.cs:
12459         (TypeContainer.Define): Renamed to DefineContainerMembers because of
12460         name collision.
12461         (MethodCore.parent_method): New member. The method we're overriding
12462         if this is an override method.
12463         (MethodCore.CheckBase): Moved from Method class and made common.
12464         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
12465         private.
12466         (MethodCore.CheckForDuplications): New abstract method. For custom
12467         member duplication search in a container
12468         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
12469         method and its return type.
12470         (Event.conflict_symbol): New member. Symbol with same name in the
12471         parent class.
12472
12473         * decl.cs:
12474         (MemberCache.FindMemberWithSameName): New method. The method
12475         is looking for conflict with inherited symbols.
12476
12477 2004-08-04  Martin Baulig  <martin@ximian.com>
12478
12479         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
12480
12481         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
12482
12483 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12484
12485         * report.cs (Message): New enum for better error, warning reference in
12486         the code.
12487         (MessageData): New inner abstract class. It generally handles printing of
12488         error and warning messages.
12489         Removed unused Error, Warning, Message methods.
12490
12491 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12492
12493         Fix for cs0592-8.cs test
12494         * attribute.cs
12495         (Attributable.ValidAttributeTargets): Made public.
12496         (Attribute.ExplicitTarget): New member for explicit target value.
12497         (Attribute.CheckTargets): Now we translate explicit attribute
12498         target to Target here.
12499
12500 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
12501
12502         * ecore.cs (MethodGroupExpr): new IsBase property.
12503
12504         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
12505
12506         * delegate.cs (DelegateCreation): store a MethodGroupExpr
12507         rather than an instance expr.
12508
12509         (DelegateCreation.Emit): Use the method group rather than
12510         the instance expression. Also, if you have base.Foo as the
12511         method for a delegate, make sure to emit ldftn, not ldftnvirt.
12512
12513         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
12514
12515         (NewDelegate.DoResolve): Only check for the existance of Invoke
12516         if the method is going to be needed. Use MethodGroupExpr.
12517
12518         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
12519
12520         * expression.cs: For pointer arith., make sure to use
12521         the size of the type, not the size of the pointer to
12522         the type.
12523
12524 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12525
12526         Fix for #60722
12527         * class.cs (Class): Added error CS0502 test.
12528
12529 2004-08-03  John Luke  <jluke@cfl.rr.com>
12530             Raja R Harinath  <rharinath@novell.com>
12531
12532         Fix for #60997.
12533         * attribute.cs (Attribute.complained_before): New flag.
12534         (Attribute.ResolveType, Attribute.Resolve),
12535         (Attribute.DefinePInvokeMethod): Set it.
12536         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
12537         
12538 2004-08-03  Martin Baulig  <martin@ximian.com>
12539
12540         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
12541         use a user-defined operator; we still need to do numeric
12542         promotions in case one argument is a builtin type and the other
12543         one has an implicit conversion to that type.  Fixes #62322.
12544
12545 2004-08-02  Martin Baulig  <martin@ximian.com>
12546
12547         * statement.cs (LocalInfo.Flags): Added `IsThis'.
12548         (LocalInfo.IsThis): New public property.
12549         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
12550
12551 2004-08-01  Martin Baulig  <martin@ximian.com>
12552
12553         * class.cs (TypeContainer.GetClassBases): Don't set the default
12554         here since we may get called from GetPartialBases().
12555         (TypeContainer.DefineType): If GetClassBases() didn't return a
12556         parent, use the default one.
12557
12558 2004-07-30  Duncan Mak  <duncan@ximian.com>
12559
12560         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
12561
12562 2004-07-30  Martin Baulig  <martin@ximian.com>
12563
12564         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
12565
12566         * class.cs (SourceMethod): New public class, derive from the
12567         symbol writer's ISourceMethod.
12568         (Method): Use the new symbol writer API.
12569
12570         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
12571         as argument and use the new symbol writer.
12572
12573         * location.cs
12574         (SourceFile): Implement the symbol writer's ISourceFile.
12575         (Location.SymbolDocument): Removed.
12576         (Location.SourceFile): New public property.
12577
12578         * symbolwriter.cs: Use the new symbol writer API.
12579
12580 2004-07-30  Raja R Harinath  <rharinath@novell.com>
12581
12582         * Makefile (install-local): Remove.  Functionality moved to
12583         executable.make.
12584
12585 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
12586
12587         * Makefile: Install mcs.exe.config file together with mcs.exe.
12588         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
12589         correct runtime version.
12590         
12591 2004-07-25  Martin Baulig  <martin@ximian.com>
12592
12593         * class.cs
12594         (TypeContainer.RegisterOrder): Removed, this was unused.
12595         (TypeContainer, interface_order): Removed.
12596         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
12597         TypeContainer as argument since we can also be called with a
12598         `PartialContainer' for a partial class/struct/interface.
12599         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
12600         of checking whether we're an `Interface' - we could be a
12601         `PartialContainer'.
12602         (PartialContainer.Register): Override; call
12603         AddClass()/AddStruct()/AddInterface() on our parent.
12604
12605         * cs-parser.jay (interface_member_declaration): Add things to the
12606         `current_container', not the `current_class'.
12607
12608         * rootcontext.cs (RegisterOrder): The overloaded version which
12609         takes an `Interface' was unused, removed.
12610
12611         * typemanager.cs (TypeManager.LookupInterface): Return a
12612         `TypeContainer', not an `Interface'.
12613         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
12614         contain a `PartialContainer' for an interface, so check it's
12615         `Kind' to figure out what it is.
12616
12617 2004-07-25  Martin Baulig  <martin@ximian.com>
12618
12619         * class.cs (Class.DefaultTypeAttributes): New public constant.
12620         (Struct.DefaultTypeAttributes): Likewise.
12621         (Interface.DefaultTypeAttributes): Likewise.
12622         (PartialContainer.TypeAttr): Override this and add the
12623         DefaultTypeAttributes.
12624
12625 2004-07-25  Martin Baulig  <martin@ximian.com>
12626
12627         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
12628         we can just use the `Parent' field instead.
12629
12630 2004-07-25  Martin Baulig  <martin@ximian.com>
12631
12632         * class.cs (TypeContainer.Emit): Renamed to EmitType().
12633
12634 2004-07-25  Martin Baulig  <martin@ximian.com>
12635
12636         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
12637         our parts before defining any methods.
12638         (TypeContainer.VerifyImplements): Make this virtual.
12639         (ClassPart.VerifyImplements): Override and call VerifyImplements()
12640         on our PartialContainer.
12641
12642 2004-07-25  Martin Baulig  <martin@ximian.com>
12643
12644         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
12645
12646         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
12647         argument, we can just use the `Parent' field instead.
12648
12649         * class.cs
12650         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
12651         (MemberBase.DoDefine): Likewise.
12652
12653 2004-07-24  Martin Baulig  <martin@ximian.com>
12654
12655         * decl.cs (MemberCore.Parent): New public field.
12656         (DeclSpace.Parent): Moved to MemberCore.
12657
12658         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
12659         (MemberBase.ctor): Added TypeContainer argument, pass it to our
12660         parent's .ctor.
12661         (FieldBase, Field, Operator): Likewise.
12662         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
12663         (EventField, Event): Likewise.
12664
12665 2004-07-23  Martin Baulig  <martin@ximian.com>
12666
12667         * class.cs (PartialContainer): New public class.
12668         (ClassPart): New public class.
12669         (TypeContainer): Added support for partial classes.
12670         (TypeContainer.GetClassBases): Splitted some of the functionality
12671         out into GetNormalBases() and GetPartialBases().
12672
12673         * cs-tokenizer.cs (Token.PARTIAL): New token.
12674         (Tokenizer.consume_identifier): Added some hacks to recognize
12675         `partial', but only if it's immediately followed by `class',
12676         `struct' or `interface'.
12677
12678         * cs-parser.jay: Added support for partial clases.
12679
12680 2004-07-23  Martin Baulig  <martin@ximian.com>
12681
12682         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
12683         a `DeclSpace' and also made it readonly.
12684         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
12685         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
12686         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
12687
12688         * cs-parser.jay: Pass the `current_class', not the
12689         `current_container' (at the moment, this is still the same thing)
12690         to a new Method, Property, Event, Indexer or Constructor.
12691
12692 2004-07-23  Martin Baulig  <martin@ximian.com>
12693
12694         * cs-parser.jay (CSharpParser): Added a new `current_class' field
12695         and removed the `current_interface' one.
12696         (struct_declaration, class_declaration, interface_declaration):
12697         Set `current_class' to the newly created class/struct/interface;
12698         set their `Bases' and call Register() before parsing their body.
12699
12700 2004-07-23  Martin Baulig  <martin@ximian.com>
12701
12702         * class.cs (Kind): New public enum.
12703         (TypeContainer): Made this class abstract.
12704         (TypeContainer.Kind): New public readonly field.
12705         (TypeContainer.CheckDef): New public method; moved here from
12706         cs-parser.jay.
12707         (TypeContainer.Register): New public abstract method.
12708         (TypeContainer.GetPendingImplementations): New public abstract
12709         method.
12710         (TypeContainer.GetClassBases): Removed the `is_class' and
12711         `is_iface' parameters.
12712         (TypeContainer.DefineNestedTypes): Formerly known as
12713         DoDefineType().
12714         (ClassOrStruct): Made this class abstract.
12715
12716         * tree.cs (RootTypes): New public type. 
12717
12718 2004-07-20  Martin Baulig  <martin@ximian.com>
12719
12720         * tree.cs (Tree.RecordNamespace): Removed.
12721         (Tree.Namespaces): Removed.
12722
12723         * rootcontext.cs (RootContext.IsNamespace): Removed.
12724
12725         * cs-parser.jay (namespace_declaration): Just create a new
12726         NamespaceEntry here.
12727
12728 2004-07-20  Martin Baulig  <martin@ximian.com>
12729
12730         * statement.cs (ExceptionStatement): New abstract class.  This is
12731         now used as a base class for everyone who's using `finally'.
12732         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
12733         our local variables before using them.
12734
12735         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
12736         virtual method.  This is used by Yield.Resolve() to "steal" an
12737         outer block's `finally' clauses.
12738         (FlowBranchingException): The .ctor now takes an ExceptionStatement
12739         argument.
12740
12741         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
12742         version which takes an ExceptionStatement.  This version must be
12743         used to create exception branchings.
12744
12745         * iterator.cs
12746         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
12747         (Iterator.EmitMoveNext): Added exception support; protect the
12748         block with a `fault' clause, properly handle 'finally' clauses.
12749         (Iterator.EmitDispose): Run all the `finally' clauses here.
12750
12751 2004-07-20  Martin Baulig  <martin@ximian.com>
12752
12753         * iterator.cs: This is the first of a set of changes in the
12754         iterator code.  Match the spec more closely: if we're an
12755         IEnumerable, then GetEnumerator() must be called.  The first time
12756         GetEnumerator() is called, it returns the current instance; all
12757         subsequent invocations (if any) must create a copy.
12758
12759 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
12760
12761         * expression.cs: Resolve the constant expression before returning
12762         it. 
12763
12764 2004-07-19  Martin Baulig  <martin@ximian.com>
12765
12766         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
12767         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
12768         the return type of the new EmitContext.
12769
12770 2004-07-18  Martin Baulig  <martin@ximian.com>
12771
12772         * class.cs (Property.Define): Fix iterators.
12773
12774         * iterators.cs (Iterator.Define): Moved the
12775         `container.AddInterator (this)' call here from the .ctor; only do
12776         it if we resolved successfully.
12777
12778 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
12779
12780         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
12781         `true' for preprocessing directives that we parse.  The return
12782         value indicates whether we should return to regular tokenizing or
12783         not, not whether it was parsed successfully.
12784
12785         In the past if we were in: #if false ... #line #endif, we would
12786         resume parsing after `#line'.  See bug 61604.
12787
12788         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
12789         building: IsEnumType should return true only for enums, not for
12790         enums or System.Enum itself.  This fixes #61593.
12791
12792         Likely what happened is that corlib was wrong: mcs depended on
12793         this bug in some places.  The bug got fixed, we had to add the
12794         hack, which caused bug 61593.
12795
12796         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
12797         that was a workaround for the older conditions.
12798
12799 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
12800
12801         * assign.cs: IAssignMethod has a new interface, as documented
12802         inline. All assignment code now uses this new api.
12803
12804         * ecore.cs, expression.cs: All classes which implement
12805         IAssignMethod now use the new interface.
12806
12807         * expression.cs (Invocation): add a hack to EmitCall so that
12808         IndexerAccess can be the target of a compound assignment without
12809         evaluating its arguments twice.
12810
12811         * statement.cs: Handle changes in Invocation api.
12812
12813 2004-07-16  Martin Baulig  <martin@ximian.com>
12814
12815         * iterators.cs: Rewrote this.  We're now using one single Proxy
12816         class for both the IEnumerable and the IEnumerator interface and
12817         `Iterator' derives from Class so we can use the high-level API.
12818
12819         * class.cs (TypeContainer.AddIterator): New method.
12820         (TypeContainer.DoDefineType): New protected virtual method, which
12821         is called from DefineType().
12822         (TypeContainer.DoDefineMembers): Call DefineType() and
12823         DefineMembers() on all our iterators.
12824         (TypeContainer.Emit): Call Emit() on all our iterators.
12825         (TypeContainer.CloseType): Call CloseType() on all our iterators.
12826
12827         * codegen.cs (EmitContext.CurrentIterator): New public field.
12828
12829 2004-07-15  Martin Baulig  <martin@ximian.com>
12830
12831         * typemanager.cs
12832         (TypeManager.not_supported_exception_type): New type.   
12833
12834 2004-07-14  Martin Baulig  <martin@ximian.com>
12835
12836         * iterators.cs: Use real error numbers.
12837
12838 2004-07-14  Martin Baulig  <martin@ximian.com>
12839
12840         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
12841         requires this to be a System.Collection.IEnumerable and not a
12842         class implementing that interface.
12843         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
12844
12845 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
12846
12847         * class.cs: Fixed previous fix, it broke some error tests.
12848
12849 2004-07-12  Martin Baulig  <martin@ximian.com>
12850
12851         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
12852         Fixes #61293.
12853
12854 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
12855
12856         * assign.cs (LocalTemporary): Add new argument: is_address,If
12857         `is_address' is true, then the value that we store is the address
12858         to the real value, and not the value itself.
12859         
12860         * ecore.cs (PropertyExpr): use the new local temporary
12861         stuff to allow us to handle X.Y += z (where X is a struct)
12862
12863 2004-07-08  Martin Baulig  <martin@ximian.com>
12864
12865         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
12866         not always return, just like we're doing in Using.Resolve().
12867
12868 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
12869
12870         * cs-parser.jay (fixed_statement): flag this as Pinned.
12871
12872 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
12873
12874         * typemanager.cs (TypeManager): Removed MakePinned method, this
12875         mechanism is replaced with the .NET 2.x compatible mechanism of
12876         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
12877
12878         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
12879         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
12880         `IsFixed' property which has a different meaning.
12881
12882 2004-07-02  Raja R Harinath  <rharinath@novell.com>
12883
12884         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
12885         visible from inside a nested class, not just the names of the
12886         immediately enclosing class.
12887         Fix for bug #60730.
12888
12889 2004-06-24  Raja R Harinath  <rharinath@novell.com>
12890
12891         * expression.cs (BetterConversion): Remove buggy special-case
12892         handling of "implicit constant expression conversions".  At this
12893         point, we already know that the conversion is possible -- we're
12894         only checking to see which is better.
12895
12896 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12897
12898         * cs-parser.jay: Added error CS0210 test.
12899
12900 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12901
12902         * cs-parser.jay: Added error CS0134 test.
12903
12904 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12905
12906         Fix bug #52507
12907         * cs-parser.jay: Added error CS0145 test.
12908
12909 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12910
12911         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
12912
12913 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
12914         
12915         * expression.cs (StackAlloc.Resolve): The argument may not
12916         be a constant; deal with this case.
12917         
12918 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
12919
12920         * attribute.cs (IndexerName_GetIndexerName): Renamed to
12921         GetIndexerAttributeValue.
12922         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
12923
12924         * class.cs (Indexer.Define): Added error tests for CS0415,
12925         CS0609.
12926
12927 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
12928
12929         * attribute.cs (Attribute.Resolve): Keep field code in sync with
12930         property code.
12931
12932 2004-06-23  Martin Baulig  <martin@ximian.com>
12933
12934         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
12935         neither return nor throw, reset the barrier as well.  Fixes #60457.
12936
12937 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
12938
12939         * class.cs : EventAttributes is now set to None by default.
12940           This fixes bug #60459.
12941
12942 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12943
12944         Fix bug #60219
12945         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12946         Don't throw exception but return null (it's sufficient now).
12947
12948 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12949
12950         * typemanager.cs (GetArgumentTypes): Faster implementation.
12951
12952 2004-06-18  Martin Baulig  <martin@ximian.com>
12953
12954         * attribute.cs (Attribute.Resolve): Check whether we're an
12955         EmptyCast which a Constant child.  Fixes #60333.
12956
12957 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
12958
12959         * statement.cs (EmitCollectionForeach): Account for the fact that
12960         not all valuetypes are in areas which we can take the address of.
12961         For these variables, we store to a temporary variable. Also, make
12962         sure that we dont emit a `callvirt' on a valuetype method.
12963
12964 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12965
12966         * expression.cs (StackAlloc.DoReSolve): Added test for
12967         negative parameter (CS0247).
12968
12969 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12970
12971         Fix bug #59792
12972         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
12973
12974 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12975
12976         Fix bug #59781
12977         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
12978         ulong.
12979
12980 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12981
12982         Fix bug #58254 & cs1555.cs, cs1556.cs
12983         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
12984
12985 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12986
12987         * cs-parser.jay: Added error CS1669 test for indexers.
12988
12989 2004-06-11  Martin Baulig  <martin@ximian.com>
12990
12991         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
12992         call this twice: for params and varargs methods.
12993
12994 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12995
12996         * class.cs:
12997         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
12998
12999 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13000
13001         * attribute.cs (Attribute.GetValidTargets): Made public.
13002
13003         * class.cs: 
13004         (AbstractPropertyEventMethod): New class for better code sharing.
13005         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
13006         CS1667 report.
13007         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
13008
13009 2004-06-11  Raja R Harinath  <rharinath@novell.com>
13010
13011         Fix bug #59477.
13012         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
13013         that the call to Resolve is part of a MemberAccess.
13014         (Expression.Resolve): Use it for SimpleName resolution.
13015         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
13016         Add 'intermediate' boolean argument.
13017         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
13018         error message when the SimpleName can be resolved ambiguously
13019         between an expression and a type.
13020         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
13021         public.
13022         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
13023         call on the left-side.
13024
13025 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13026
13027         * class.cs:
13028         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
13029
13030 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13031
13032         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
13033
13034 2004-06-11  Martin Baulig  <martin@ximian.com>
13035
13036         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
13037         varargs methods if applicable.
13038
13039 2004-06-11  Martin Baulig  <martin@ximian.com>
13040
13041         * expression.cs (Invocation.EmitCall): Don't use
13042         `method.CallingConvention == CallingConventions.VarArgs' since the
13043         method could also have `CallingConventions.HasThis'.
13044
13045 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13046
13047         * class.cs (Event.GetSignatureForError): Implemented.
13048         Fixed crash in error test cs3010.cs
13049
13050 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
13051
13052         * cs-tokenizer.cs: Change the way we track __arglist to be
13053         consistent with the other keywords.
13054
13055 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
13056
13057         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
13058         tomorrow.
13059
13060 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
13061
13062         * codegen.cs: Check that all referenced assemblies have a strongname
13063         before strongnaming the compiled assembly. If not report error CS1577.
13064         Fix bug #56563. Patch by Jackson Harper.
13065         * typemanager.cs: Added a method to return all referenced assemblies.
13066         Fix bug #56563. Patch by Jackson Harper.
13067
13068 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13069
13070         * class.cs:
13071         (Method.ApplyAttributeBuilder): Moved and added conditional
13072         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
13073
13074         * delegate.cs:
13075         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
13076
13077 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13078
13079         Fixed #59640
13080         * class.cs: (EventField.attribute_targets): Changed default target.
13081
13082 2004-06-08  Martin Baulig  <martin@ximian.com>
13083
13084         * expression.cs (Invocation.EmitCall): Enable varargs methods.
13085
13086 2004-06-08  Martin Baulig  <martin@ximian.com>
13087
13088         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
13089
13090 2004-06-07  Martin Baulig  <martin@ximian.com>
13091
13092         Added support for varargs methods.
13093
13094         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
13095         keyword.
13096
13097         * cs-parser.jay: Added support for `__arglist'.
13098
13099         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
13100
13101         * expression.cs (Argument.AType): Added `ArgList'.
13102         (Invocation): Added support for varargs methods.
13103         (ArglistAccess): New public class.
13104         (Arglist): New public class.
13105
13106         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
13107
13108         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
13109         a method's top-level block if the method has varargs.
13110
13111         * support.cs (ReflectionParameters, InternalParameters): Added
13112         support for varargs methods.    
13113
13114 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
13115
13116         * class.cs: Provide location in indexer error report.
13117
13118         * driver.cs: Use standard names.
13119
13120         * namespace.cs: Catch the use of using after a namespace has been
13121         declared also on using aliases.
13122
13123 2004-06-03  Raja R Harinath  <rharinath@novell.com>
13124
13125         Bug #50820.
13126         * typemanager.cs (closure_private_ok, closure_invocation_type)
13127         (closure_qualifier_type, closure_invocation_assembly)
13128         (FilterWithClosure): Move to ...
13129         (Closure): New internal nested class.
13130         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
13131         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
13132         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
13133         (MemberLookup, MemberLookupFailed): Use it.
13134         * expression.cs (New.DoResolve): Treat the lookup for the
13135         constructor as being qualified by the 'new'ed type.
13136         (Indexers.GetIndexersForTypeOrInterface): Update.
13137
13138 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
13139
13140         * attribute.cs
13141         (GetConditionalAttributeValue): New method. Returns
13142         condition of ConditionalAttribute.
13143         (SearchMulti): New method.  Returns all attributes of type 't'.
13144         Use it when attribute is AllowMultiple = true.
13145         (IsConditionalMethodExcluded): New method.
13146
13147         * class.cs
13148         (Method.IsExcluded): Implemented. Returns true if method has conditional
13149         attribute and the conditions is not defined (method is excluded).
13150         (IMethodData): Extended interface for ConditionalAttribute support.
13151         (PropertyMethod.IsExcluded): Implemented.
13152
13153         * decl.cs
13154         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
13155
13156         * expression.cs
13157         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
13158         on the method.
13159
13160 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13161
13162         * expression.cs (ArrayCreationExpression): Make this just an
13163         `expression'. It can't be a statement, so the code here was
13164         dead.
13165
13166 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
13167
13168         Fixed #59072
13169         * typemanager.cs (GetFullNameSignature): New method for
13170         MethodBase types.
13171
13172 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
13173
13174         Fixed #56452
13175         * class.cs (MemberBase.GetSignatureForError): New virtual method.
13176         Use this method when MethodBuilder is null.
13177         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
13178         Added test for error CS0626 (MONO reports error for this situation).
13179         (IMethodData.GetSignatureForError): Extended interface.
13180
13181 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
13182
13183         * attribute.cs
13184         (AttributeTester.GetObsoleteAttribute): Returns instance of
13185         ObsoleteAttribute when type is obsolete.
13186
13187         * class.cs
13188         (TypeContainer.VerifyObsoleteAttribute): Override.
13189         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
13190         (MethodCode.VerifyObsoleteAttribute): Override.
13191         (MemberBase.VerifyObsoleteAttribute): Override.
13192
13193         * decl.cs
13194         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
13195         and report proper error.
13196
13197         *delegate.cs
13198         Delegate.VerifyObsoleteAttribute): Override.
13199
13200         * ecore.cs
13201         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
13202         and report proper error.
13203         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
13204
13205         * enum.cs
13206         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
13207         and enum member.
13208
13209         * expression.cs
13210         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
13211         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
13212         Added test for ObsoleteAttribute.
13213
13214         * statement.cs
13215         (Catch): Derived from Statement.
13216
13217 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
13218  
13219         Fixed bug #59071 & cs0160.cs
13220  
13221         * statement.cs (Try.Resolve): Check here whether order of catch
13222         clauses matches their dependencies.
13223
13224 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
13225
13226         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
13227         caused a regression: #59343.  Referencing nested classes from an
13228         assembly stopped working.
13229
13230 2004-05-31  Martin Baulig  <martin@ximian.com>
13231
13232         MCS is now frozen for beta 2.
13233
13234 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13235
13236         * convert.cs: add a trivial cache for overload operator resolution.
13237
13238 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13239
13240         * decl.cs: If possible, use lookuptypedirect here. We can only do
13241         this if there is no `.' after the namespace. Avoids using
13242         LookupType, which does lots of slow processing.
13243         (FindNestedType) New method, does what it says :-).
13244         * namespace.cs: use LookupTypeDirect.
13245         * rootcontext.cs: use membercache, if possible.
13246         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
13247
13248 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13249
13250         * expression.cs:
13251         According to the spec, 
13252
13253         In a member access of the form E.I, if E is a single identifier,
13254         and if the meaning of E as a simple-name (§7.5.2) is a constant,
13255         field, property, localvariable, or parameter with the same type as
13256         the meaning of E as a type-name (§3.8), then both possible
13257         meanings of E are permitted.
13258
13259         We did not check that E as a simple-name had the same type as E as
13260         a type name.
13261
13262         This trivial check gives us 5-7% on bootstrap time.
13263
13264 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13265
13266         * expression.cs (Invocation.OverloadResolve): Avoid the
13267         use of hashtables and boxing here by allocating on demand.
13268
13269 2004-05-30  Martin Baulig  <martin@ximian.com>
13270
13271         * rootcontext.cs (RootContext.LookupType): Don't cache things if
13272         we're doing a silent lookup.  Don't try to lookup nested types in
13273         TypeManager.object_type (thanks to Ben Maurer).
13274
13275 2004-05-30  Martin Baulig  <martin@ximian.com>
13276
13277         Committing a patch from Ben Maurer.
13278
13279         * rootcontext.cs (RootContext.LookupType): Cache negative results.
13280
13281 2004-05-29  Martin Baulig  <martin@ximian.com>
13282
13283         * class.cs (IMethodData.ShouldIgnore): New method.
13284
13285         * typemanager.cs (TypeManager.MethodFlags): Don't take a
13286         `Location' argument, we don't need it anywhere.  Use
13287         `IMethodData.ShouldIgnore ()' instead of
13288         `MethodData.GetMethodFlags ()'.
13289         (TypeManager.AddMethod): Removed.
13290         (TypeManager.AddMethod2): Renamed to AddMethod.
13291
13292 2004-05-29  Martin Baulig  <martin@ximian.com>
13293
13294         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
13295
13296         * convert.cs (Convert.ImplicitReferenceConversion): If we're
13297         converting from a class type S to an interface type and we already
13298         have an object on the stack, don't box it again.  Fixes #52578.
13299
13300 2004-05-29  Martin Baulig  <martin@ximian.com>
13301
13302         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
13303         Added support for `params' parameters.  Fixes #59267.
13304
13305 2004-05-29  Martin Baulig  <martin@ximian.com>
13306
13307         * literal.cs (NullPointer): Provide a private .ctor which sets
13308         `type' to TypeManager.object_type.  Fixes #59048.
13309
13310 2004-05-29  Martin Baulig  <martin@ximian.com>
13311
13312         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
13313         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
13314
13315         * ecore.cs (EventExpr.instance_expr): Make the field private.
13316
13317 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
13318
13319         Fixed bug #50080 & cs0214-2.cs
13320         * expression.cs (Cast.DoResolve): Check unsafe context here.
13321         
13322         * statement.cs (Resolve.DoResolve): Likewise.
13323
13324 2004-05-26  Martin Baulig  <martin@ximian.com>
13325
13326         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
13327
13328         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
13329         (RootContext.LookupType): Pass down the `silent' flag.
13330
13331 2004-05-25  Martin Baulig  <martin@ximian.com>
13332
13333         * expression.cs
13334         (MethodGroupExpr.IdenticalTypeName): New public property.
13335         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
13336         expression actually refers to a type.
13337
13338 2004-05-25  Martin Baulig  <martin@ximian.com>
13339
13340         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
13341         for #56176 and made it actually work.
13342
13343 2004-05-25  Martin Baulig  <martin@ximian.com>
13344
13345         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
13346         (FieldExpr, PropertyExpr): Override and implement
13347         CacheTemporaries.  Fixes #52279.
13348
13349 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
13350
13351         * location.cs: In the new compiler listing a file twice is a
13352         warning, not an error.
13353
13354 2004-05-24  Martin Baulig  <martin@ximian.com>
13355
13356         * enum.cs (Enum.DefineType): For the `BaseType' to be a
13357         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
13358
13359 2004-05-24  Martin Baulig  <martin@ximian.com>
13360
13361         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
13362         walking the `using' list.  Fixes #53921.
13363
13364 2004-05-24  Martin Baulig  <martin@ximian.com>
13365
13366         * const.cs (Const.LookupConstantValue): Added support for
13367         EmptyCast's; fixes #55251.
13368
13369 2004-05-24  Martin Baulig  <martin@ximian.com>
13370
13371         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
13372         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
13373         which does the CS0135 check.  The reason is that we first need to
13374         check whether the variable actually exists.
13375
13376 2004-05-24  Martin Baulig  <martin@ximian.com>
13377
13378         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
13379         than RootContext.LookupType() to find the explicit interface
13380         type.  Fixes #58584.
13381
13382 2004-05-24  Raja R Harinath  <rharinath@novell.com>
13383
13384         * Makefile: Simplify.  Use executable.make.
13385         * mcs.exe.sources: New file.  List of sources of mcs.exe.
13386
13387 2004-05-24  Anders Carlsson  <andersca@gnome.org>
13388
13389         * decl.cs:
13390         * enum.cs:
13391         Use the invariant culture when doing String.Compare for CLS case
13392         sensitivity.
13393         
13394 2004-05-23  Martin Baulig  <martin@ximian.com>
13395
13396         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
13397         don't have any dots.  Fixes #52622, added cs0246-8.cs.
13398
13399         * namespace.cs (NamespaceEntry.Lookup): Likewise.
13400         
13401 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13402
13403         * class.cs (MemberBase.Define): Reuse MemberType member for 
13404         resolved type. Other methods can use it too.
13405
13406 2004-05-23  Martin Baulig  <martin@ximian.com>
13407
13408         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
13409         the variable also exists in the current block (otherwise, we need
13410         to report a CS0103).  Fixes #58670.
13411
13412 2004-05-23  Martin Baulig  <martin@ximian.com>
13413
13414         * flowanalysis.cs (Reachability.Reachable): Compute this
13415         on-the-fly rather than storing it as a field.
13416
13417 2004-05-23  Martin Baulig  <martin@ximian.com>
13418
13419         * flowanalysis.cs (Reachability.And): Manually compute the
13420         resulting `barrier' from the reachability.      
13421        
13422 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13423
13424         Fix bug #57835
13425         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
13426         instance of ObsoleteAttribute when symbol is obsolete.
13427
13428         * class.cs
13429         (IMethodData): Extended interface for ObsoleteAttribute support.
13430
13431 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13432
13433         * attribute.cs: Fix bug #55970
13434
13435 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13436
13437         Fix bug #52705
13438         * attribute.cs
13439         (GetObsoleteAttribute): New method. Creates the instance of
13440         ObsoleteAttribute.
13441         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
13442         ObsoleteAttribute when member is obsolete.
13443         (AttributeTester.Report_ObsoleteMessage): Common method for
13444         Obsolete error/warning reporting.
13445
13446         * class.cs
13447         (TypeContainer.base_classs_type): New member for storing parent type.
13448
13449         * decl.cs
13450         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
13451         for this MemberCore.
13452
13453 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13454
13455         * attribute.cs, const.cs: Fix bug #58590
13456
13457 2004-05-21  Martin Baulig  <martin@ximian.com>
13458
13459         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
13460         out parameters if the end of the method is unreachable.  Fixes
13461         #58098. 
13462
13463 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13464
13465         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
13466         Hari was right, why extra method.
13467
13468 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13469
13470         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
13471
13472 2004-05-20  Martin Baulig  <martin@ximian.com>
13473
13474         Merged this back from gmcs to keep the differences to a minumum.
13475
13476         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
13477         instead of a Declspace.
13478         (Attribute.ResolveType): Likewise.
13479         (Attributes.Search): Likewise.
13480         (Attributes.Contains): Likewise.
13481         (Attributes.GetClsCompliantAttribute): Likewise.
13482
13483         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
13484         argument.
13485         (MethodData.ApplyAttributes): Take an EmitContext instead of a
13486         DeclSpace.
13487
13488 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
13489
13490         Fix bug #58688 (MCS does not report error when the same attribute
13491         is assigned twice)
13492
13493         * attribute.cs (Attribute.Emit): Distinction between null and default.
13494
13495 2004-05-19  Raja R Harinath  <rharinath@novell.com>
13496
13497         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
13498         of a top-level attribute without an attribute target.
13499         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
13500         Make non-static.
13501         (Attribute.Conditional_GetConditionName), 
13502         (Attribute.Obsolete_GetObsoleteMessage): Update.
13503         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
13504         part of ScanForIndexerName.
13505         (Attribute.CanIgnoreInvalidAttribute): New function.
13506         (Attribute.ScanForIndexerName): Move to ...
13507         (Attributes.ScanForIndexerName): ... here.
13508         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
13509         (Attributes.Search): New internal variant that can choose not to
13510         complain if types aren't resolved.  The original signature now
13511         complains.
13512         (Attributes.GetClsCompliantAttribute): Use internal variant, with
13513         complaints suppressed.
13514         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
13515         only if it not useful.
13516         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
13517         top-level for attributes that are shared between the assembly
13518         and a top-level class.
13519         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
13520         * class.cs: Update to reflect changes.
13521         (DefineIndexers): Fuse loops.
13522         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
13523         a couple more variants of attribute names.
13524
13525 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
13526
13527         Fix bug #52585 (Implemented explicit attribute declaration)
13528
13529         * attribute.cs:
13530         (Attributable.ValidAttributeTargets): New abstract method. It gets
13531         list of valid attribute targets for explicit target declaration.
13532         (Attribute.Target): It holds target itself.
13533         (AttributeSection): Removed.
13534         (Attribute.CheckTargets): New method. It checks whether attribute
13535         target is valid for the current element.
13536
13537         * class.cs:
13538         (EventProperty): New class. For events that are declared like
13539         property (with add and remove accessors).
13540         (EventField): New class. For events that are declared like field.
13541         class.cs
13542
13543         * cs-parser.jay: Implemented explicit attribute target declaration.
13544
13545         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
13546         Override ValidAttributeTargets.
13547
13548         * parameter.cs:
13549         (ReturnParameter): Class for applying custom attributes on 
13550         the return type.
13551         (ParameterAtribute): New class. Class for applying custom
13552         attributes on the parameter type.
13553
13554 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
13555
13556         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
13557         definitions. 
13558
13559         (Method): Allow UNSAFE here.
13560
13561         * modifiers.cs: Support unsafe reporting.
13562
13563 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
13564
13565         * decl.cs: Fix bug #58478.
13566
13567 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13568
13569         * statement.cs: When checking for unreachable code on an EmptyStatement,
13570         set the location. Fixes bug #58488.
13571
13572 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
13573
13574         * driver.cs: Add -pkg handling.
13575
13576         From Gonzalo: UseShelLExecute=false
13577
13578 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
13579
13580         * attribute.cs:
13581         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
13582         for attribute.
13583         (Attribute.IsClsCompliaceRequired): Moved to base for better
13584         accesibility.
13585         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
13586         when attribute is AttributeUsageAttribute.
13587         (Attribute.GetValidTargets): Simplified.
13588         (Attribute.GetAttributeUsage): New method returns AttributeUsage
13589         attribute for this type.
13590         (Attribute.ApplyAttributes): Method renamed to Emit and make
13591         non-static.
13592         (GlobalAttributeSection): New class for special handling of global
13593         attributes (assembly, module).
13594         (AttributeSection.Emit): New method.
13595
13596         * class.cs: Implemented Attributable abstract methods.
13597         (MethodCore.LabelParameters): Moved to Parameter class.
13598         (Accessor): Is back simple class.
13599         (PropertyMethod): Implemented Attributable abstract class.
13600         (DelegateMethod): Implemented Attributable abstract class.
13601         (Event): New constructor for disctintion between normal Event
13602         and Event with accessors.
13603
13604         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
13605
13606         * codegen.cs, const.cs, decl.cs, delegate.cs:
13607         (CommonAssemblyModulClass): Implemented Attributable abstract class
13608         and simplified.
13609
13610         * enum.cs: Implement IAttributeSupport interface.
13611         (EnumMember): New class for emum members. Implemented Attributable
13612         abstract class
13613
13614         * parameter.cs:
13615         (ParameterBase): Is abstract.
13616         (ReturnParameter): New class for easier [return:] attribute handling.
13617
13618         * typemanager.cs: Removed builder_to_attr.
13619
13620 2004-05-11  Raja R Harinath  <rharinath@novell.com>
13621
13622         Fix bug #57151.
13623         * attribute.cs (Attribute.GetPositionalValue): New function.
13624         * class.cs (TypeContainer.VerifyMembers): New function.
13625         (TypeContainer.Emit): Use it.
13626         (ClassOrStruct): New base class for Class and Struct.
13627         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
13628         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
13629         class.
13630         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
13631         then each non-static field should have a FieldOffset attribute.
13632         Otherwise, none of the fields should have a FieldOffset attribute.
13633         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
13634         and FieldOffset attributes.
13635         * typemanager.cs (TypeManager.struct_layout_attribute_type)
13636         (TypeManager.field_offset_attribute_type): New core types.
13637         (TypeManager.InitCoreTypes): Initialize them.
13638
13639 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
13640
13641         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
13642         Return correct type.
13643         From bug #58270.
13644
13645 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
13646
13647         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
13648         be implicitly converted to ulong.
13649         
13650         * expression.cs: The logic for allowing operator &, | and ^ worked
13651         was wrong, it worked before because we did not report an error in
13652         an else branch.  Fixes 57895.
13653
13654         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
13655         allow volatile fields to be reference types.
13656
13657 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
13658
13659         * driver.cs: Add support for /debug-
13660
13661 2004-05-07  Raja R Harinath  <rharinath@novell.com>
13662
13663         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
13664         Add a 'complain' parameter to silence errors.
13665         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
13666         silently overlooked type-resolutions.
13667         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
13668         to reflect changes.
13669         (Attributes.Search): New function.
13670         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
13671         (Attributes.GetAttributeFullName): Remove hack.
13672         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
13673         Update to reflect changes.
13674         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
13675         Use Attributes.Search instead of nested loops.
13676
13677 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
13678
13679         * decl.cs:
13680         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
13681         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
13682         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
13683
13684         * report.cs: (Report.Warning): Renamed to Warning_T because of
13685         parameter collision.
13686
13687 2004-05-05  Raja R Harinath  <rharinath@novell.com>
13688
13689         * expression.cs (MemberAccess.ResolveMemberAccess):
13690         Exit with non-zero status after Report.Error.
13691         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
13692         Likewise.
13693         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
13694
13695 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13696
13697         * support.cs: Don't hang when the file is empty.
13698
13699 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13700
13701         * support.cs: In SeekableStreamReader, compute the preamble size of the
13702           underlying stream. Position changes should take into account that initial
13703           count of bytes.
13704
13705 2004-05-03  Todd Berman  <tberman@sevenl.net>
13706
13707         * driver.cs: remove unused GetSysVersion function.
13708
13709 2004-05-03  Todd Berman  <tberman@sevenl.net>
13710
13711         * driver.cs: Remove the hack from saturday, as well as the hack
13712         from jackson (LoadAssemblyFromGac), also adds the CWD to the
13713         link_paths to get that bit proper.
13714
13715 2004-05-01  Todd Berman  <tberman@sevenl.net>
13716
13717         * driver.cs: Try a LoadFrom before a Load, this checks the current
13718         path. This is currently a bug in mono that is be fixed, however, this
13719         provides a workaround for now. This will be removed when the bug
13720         is fixed.
13721
13722 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
13723
13724         * CryptoConvert.cs: Updated to latest version. Fix issue with 
13725         incomplete key pairs (#57941).
13726
13727 2004-05-01  Todd Berman  <tberman@sevenl.net>
13728
13729         * driver.cs: Remove '.' from path_chars, now System.* loads properly
13730         from the GAC
13731
13732 2004-04-30  Jackson Harper  <jackson@ximian.com>
13733
13734         * codegen.cs: Open keys readonly.
13735         
13736 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13737
13738         * typemanager.cs: don't report cyclic struct layout when a struct
13739         contains 2 or more fields of the same type. Failed for Pango.AttrShape
13740         which has 2 Pango.Rectangle fields.
13741
13742 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13743
13744         * expression.cs: Handle IntPtr comparisons with IL code
13745         rather than a method call.
13746
13747 2004-04-29  Martin Baulig  <martin@ximian.com>
13748
13749         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
13750         the list of PropertyInfo's in class hierarchy and find the
13751         accessor.  Fixes #56013.
13752
13753 2004-04-29  Martin Baulig  <martin@ximian.com>
13754
13755         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
13756
13757 2004-04-29  Martin Baulig  <martin@ximian.com>
13758
13759         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13760
13761         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
13762
13763 2004-04-29  Martin Baulig  <martin@ximian.com>
13764
13765         * class.cs (ConstructorInitializer.Resolve): Check whether the
13766         parent .ctor is accessible.  Fixes #52146.
13767
13768 2004-04-29  Martin Baulig  <martin@ximian.com>
13769
13770         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13771
13772         * statement.cs (Using.EmitLocalVariableDecls): Use
13773         TypeManager.idisposable_type, not typeof (IDisposable).
13774         (Foreach.EmitCollectionForeach): Added support for valuetypes.
13775
13776 2004-04-29  Martin Baulig  <martin@ximian.com>
13777
13778         * class.cs (Event.Define): Don't emit the field and don't set
13779         RTSpecialName and SpecialName for events on interfaces.  Fixes
13780         #57703. 
13781
13782 2004-04-29  Raja R Harinath  <rharinath@novell.com>
13783
13784         Refactor Attribute.ApplyAttributes.
13785         * attribute.cs (Attributable): New base class for objects that can
13786         have Attributes applied on them.
13787         (Attribute): Make AttributeUsage fields public.
13788         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
13789         (Attribute.IsInternalCall): New property.
13790         (Attribute.UsageAttr): Convert to a public read-only property.
13791         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
13792         (Attribute.ResolveType, Attribute.Resolve)
13793         (Attribute.ScanForIndexerName): Update to reflect changes.
13794         (Attribute.CheckAttributeTarget): Re-format.
13795         (Attribute.ApplyAttributes): Refactor, to various
13796         Attributable.ApplyAttributeBuilder methods.
13797         * decl.cs (MemberCore): Make Attributable.
13798         * class.cs (Accessor): Make Attributable.
13799         (MethodData.ApplyAttributes): Use proper attribute types, not
13800         attribute names.
13801         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
13802         (TypeContainer.ApplyAttributeBuilder)
13803         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
13804         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
13805         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
13806         (Operator.ApplyAttributeBuilder): New factored-out methods.
13807         * const.cs (Const.ApplyAttributeBuilder): Likewise.
13808         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
13809         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
13810         * parameter.cs (ParameterBase): New Attributable base class
13811         that can also represent Return types.
13812         (Parameter): Update to the changes.
13813
13814 2004-04-29  Jackson Harper  <jackson@ximian.com>
13815
13816         * driver.cs: Prefer the corlib system version when looking for
13817         assemblies in the GAC. This is still a hack, but its a better hack
13818         now.
13819         
13820 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
13821
13822         * decl.cs, enum.cs: Improved error 3005 reporting.
13823   
13824         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
13825         (related_symbols): New private member for list of symbols
13826         related to reported error/warning.
13827         
13828         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
13829
13830 2004-04-29  Martin Baulig  <martin@ximian.com>
13831
13832         * ecore.cs (Expression.Constantify): If we're an enum and
13833         TypeManager.TypeToCoreType() doesn't give us another type, use
13834         t.UnderlyingSystemType.  Fixes #56178.  
13835
13836 2004-04-29  Martin Baulig  <martin@ximian.com>
13837
13838         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
13839         interfaces and for each interface, only add members directly
13840         declared in that interface.  Fixes #53255.
13841
13842 2004-04-28  Martin Baulig  <martin@ximian.com>
13843
13844         * expression.cs (ConditionalLogicalOperator): Use a temporary
13845         variable for `left' to avoid that we evaluate it more than once;
13846         bug #52588.
13847
13848 2004-04-28  Martin Baulig  <martin@ximian.com>
13849
13850         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
13851         `void[]' (CS1547).
13852
13853 2004-04-28  Martin Baulig  <martin@ximian.com>
13854
13855         * statement.cs (LocalInfo.Resolve): Check whether the type is not
13856         void (CS1547).
13857
13858         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
13859         whether the type is not void (CS1547).
13860
13861 2004-04-28  Martin Baulig  <martin@ximian.com>
13862
13863         * expression.cs (Unary.DoResolveLValue): Override this and report
13864         CS0131 for anything but Operator.Indirection.
13865
13866 2004-04-28  Martin Baulig  <martin@ximian.com>
13867
13868         Committing a patch from Ben Maurer; see bug #50820.
13869
13870         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13871         check for classes.
13872
13873         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13874         classes.        
13875
13876 2004-04-28  Martin Baulig  <martin@ximian.com>
13877
13878         Committing a patch from Ben Maurer; see bug #50820.
13879
13880         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13881         check for classes.
13882
13883         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13884         classes.        
13885
13886 2004-04-28  Martin Baulig  <martin@ximian.com>
13887
13888         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
13889         (Block.AddLabel): Call DoLookupLabel() to only search in the
13890         current block.
13891
13892 2004-04-28  Martin Baulig  <martin@ximian.com>
13893
13894         * cfold.cs (ConstantFold.BinaryFold): Added special support for
13895         comparing StringConstants and NullLiterals in Equality and Inequality.
13896
13897 2004-04-28  Jackson Harper  <jackson@ximian.com>
13898
13899         * driver.cs: Attempt to load referenced assemblies from the
13900         GAC. This is the quick and dirty version of this method that
13901         doesnt take into account versions and just takes the first
13902         canidate found. Will be good enough for now as we will not have more
13903         then one version installed into the GAC until I update this method.
13904
13905 2004-04-28  Martin Baulig  <martin@ximian.com>
13906
13907         * typemanager.cs (TypeManager.CheckStructCycles): New public
13908         static method to check for cycles in the struct layout.
13909
13910         * rootcontext.cs (RootContext.PopulateTypes): Call
13911         TypeManager.CheckStructCycles() for each TypeContainer.
13912         [Note: We only need to visit each type once.]
13913
13914 2004-04-28  Martin Baulig  <martin@ximian.com>
13915
13916         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
13917
13918         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
13919         success and added `out object value'.  Use a `bool resolved' field
13920         to check whether we've already been called rather than
13921         `ConstantValue != null' since this breaks for NullLiterals.
13922
13923 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13924
13925         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
13926         setting of this flag, since the 'set' method may be non-public.
13927
13928 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13929
13930         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
13931         check on current_vector.Block.
13932
13933 2004-04-27  Martin Baulig  <martin@ximian.com>
13934
13935         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
13936         a field initializer.  Fixes #56459.
13937
13938 2004-04-27  Martin Baulig  <martin@ximian.com>
13939
13940         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
13941         we're not attempting to use an indexer.  Fixes #52154.
13942
13943 2004-04-27  Martin Baulig  <martin@ximian.com>
13944
13945         * statement.cs (Return): Don't create a return label if we don't
13946         need it; reverts my change from January 20th.  Thanks to Ben
13947         Maurer for this.
13948
13949 2004-04-27  Martin Baulig  <martin@ximian.com>
13950
13951         According to the spec, `goto' can only leave a nested scope, but
13952         never enter it.
13953
13954         * statement.cs (Block.LookupLabel): Only lookup in the current
13955         block, don't recurse into parent or child blocks.
13956         (Block.AddLabel): Check in parent and child blocks, report
13957         CS0140/CS0158 if we find a duplicate.
13958         (Block): Removed this indexer for label lookups.
13959         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
13960         this already does the error reporting for us.
13961
13962         * flowanalysis.cs
13963         (FlowBranching.UsageVector.Block): New public variable; may be null.
13964         (FlowBranching.CreateSibling): Added `Block' argument.
13965         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
13966         label for the target of a `goto' and check whether we're not
13967         leaving a `finally'.
13968
13969 2004-04-27  Martin Baulig  <martin@ximian.com>
13970
13971         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13972         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
13973         just for returns).
13974
13975 2004-04-27  Martin Baulig  <martin@ximian.com>
13976
13977         * statement.cs (Block.AddLabel): Also check for implicit blocks
13978         and added a CS0158 check.
13979
13980 2004-04-27  Martin Baulig  <martin@ximian.com>
13981
13982         * flowanalysis.cs (FlowBranchingLoop): New class.
13983         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
13984         UsageVector's instead of an ArrayList.
13985         (FlowBranching.Label): Likewise.
13986         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
13987         (FlowBranching.AddBreakVector): New method.
13988
13989 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
13990
13991         * attribute.cs: Small regression fix: only convert the type if we
13992         the type is different, fixes System.Drawing build.
13993
13994 2004-04-27  Martin Baulig  <martin@ximian.com>
13995
13996         * attribute.cs (Attribute.Resolve): If we have a constant value
13997         for a named field or property, implicity convert it to the correct
13998         type.
13999
14000 2004-04-27  Raja R Harinath  <rharinath@novell.com>
14001
14002         * statement.cs (Block.Block): Implicit blocks share
14003         'child_variable_names' fields with parent blocks.
14004         (Block.AddChildVariableNames): Remove.
14005         (Block.AddVariable): Mark variable as "used by a child block" in
14006         every surrounding block.
14007         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
14008         been used in a child block, complain about violation of "Invariant
14009         meaning in blocks" rule.
14010         * cs-parser.jay (declare_local_variables): Don't use
14011         AddChildVariableNames.
14012         (foreach_statement): Don't create an implicit block: 'foreach'
14013         introduces a scope.
14014
14015 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
14016
14017         * convert.cs (ImplicitNumericConversion): 0 is also positive when
14018         converting from 0L to ulong.  Fixes 57522.
14019
14020 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
14021
14022         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
14023         derived class hides via 'new' keyword field from base class (test-242.cs).
14024         TODO: Handle this in the more general way.
14025         
14026         * class.cs (CheckBase): Ditto.
14027
14028 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
14029
14030         * decl.cs (caching_flags): New member for storing cached values
14031         as bit flags.
14032         (MemberCore.Flags): New enum where bit flags for caching_flags
14033         are defined.
14034         (MemberCore.cls_compliance): Moved to caching_flags.
14035         (DeclSpace.Created): Moved to caching_flags.
14036
14037         * class.cs: Use caching_flags instead of DeclSpace.Created
14038         
14039 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
14040
14041         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
14042         if we are only a derived class, not a nested class.
14043
14044         * typemanager.cs: Same as above, but do this at the MemberLookup
14045         level (used by field and methods, properties are handled in
14046         PropertyExpr).   Allow for the qualified access if we are a nested
14047         method. 
14048
14049 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
14050
14051         * class.cs: Refactoring.
14052         (IMethodData): New inteface; Holds links to parent members
14053         to avoid member duplication (reduced memory allocation).
14054         (Method): Implemented IMethodData interface.
14055         (PropertyBase): New inner classes for get/set methods.
14056         (PropertyBase.PropertyMethod): Implemented IMethodData interface
14057         (Event): New inner classes for add/remove methods.
14058         (Event.DelegateMethod): Implemented IMethodData interface.
14059
14060         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
14061         EmitContext (related to class.cs refactoring).
14062
14063 2004-04-21  Raja R Harinath  <rharinath@novell.com>
14064
14065         * delegate.cs (Delegate.VerifyApplicability): If the number of
14066         arguments are the same as the number of parameters, first try to
14067         verify applicability ignoring  any 'params' modifier on the last
14068         parameter.
14069         Fixes #56442.
14070
14071 2004-04-16  Raja R Harinath  <rharinath@novell.com>
14072
14073         * class.cs (TypeContainer.AddIndexer): Use
14074         'ExplicitInterfaceName' to determine if interface name was
14075         explicitly specified.  'InterfaceType' is not initialized at this time.
14076         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
14077         Indexers array is already in the required order.  Initialize
14078         'IndexerName' only if there are normal indexers.
14079         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
14080         (TypeContainer.Emit): Emit DefaultMember attribute only if
14081         IndexerName is initialized.
14082         Fixes #56300.
14083
14084 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
14085
14086         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
14087         Fixes #57007
14088
14089 2004-04-15  Raja R Harinath  <rharinath@novell.com>
14090
14091         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
14092         attributes.
14093         Fix for #56456.
14094
14095         * attribute.cs (Attribute.Resolve): Check for duplicate named
14096         attributes.
14097         Fix for #56463.
14098
14099 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
14100
14101         * iterators.cs (MarkYield): track whether we are in an exception,
14102         and generate code accordingly.  Use a temporary value to store the
14103         result for our state.
14104
14105         I had ignored a bit the interaction of try/catch with iterators
14106         since their behavior was not entirely obvious, but now it is
14107         possible to verify that our behavior is the same as MS .NET 2.0
14108
14109         Fixes 54814
14110
14111 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
14112
14113         * iterators.cs: Avoid creating temporaries if there is no work to
14114         do. 
14115
14116         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
14117         Enumerations, use TypeManager.EnumToUnderlying and call
14118         recursively. 
14119
14120         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
14121         bug #57013
14122
14123         (This.Emit): Use EmitContext.EmitThis to emit our
14124         instance variable.
14125
14126         (This.EmitAssign): Ditto.
14127
14128         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
14129         codepaths, we will move all the functionality into
14130         Mono.CSharp.This 
14131
14132         (FieldExpr.EmitAssign): Ditto.
14133
14134         This fixes several hidden bugs that I uncovered while doing a code
14135         review of this today.
14136
14137         * codegen.cs (EmitThis): reworked so the semantics are more clear
14138         and also support value types "this" instances.
14139
14140         * iterators.cs: Changed so that for iterators in value types, we
14141         do not pass the value type as a parameter.  
14142
14143         Initialization of the enumerator helpers is now done in the caller
14144         instead of passing the parameters to the constructors and having
14145         the constructor set the fields.
14146
14147         The fields have now `assembly' visibility instead of private.
14148
14149 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
14150
14151         * expression.cs (Argument.Resolve): Check if fields passed as ref
14152         or out are contained in a MarshalByRefObject.
14153
14154         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
14155         another compiler type.
14156
14157 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
14158
14159         * class.cs (Indexer.Define): use the new name checking method.
14160         Also, return false on an error.
14161         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
14162         (is_identifier_[start/part]_character): make static.
14163
14164 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
14165
14166         * expression.cs (Binary.ResolveOperator): Do no append strings
14167         twice: since we can be invoked more than once (array evaluation)
14168         on the same concatenation, take care of this here.  Based on a fix
14169         from Ben (bug #56454)
14170
14171 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
14172
14173         * codegen.cs: Fix another case where CS1548 must be reported (when 
14174         delay-sign isn't specified and no private is available #56564). Fix
14175         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
14176         error when MCS is used on the MS runtime and we need to delay-sign 
14177         (which seems unsupported by AssemblyBuilder - see #56621).
14178
14179 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
14180
14181         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
14182         (TypeManager.ComputeNamespaces): Faster implementation for
14183         Microsoft runtime.
14184
14185         * compiler.csproj: Updated AssemblyName to mcs.
14186
14187 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
14188
14189         * rootcontext.cs: Add new types to the boot resolution.
14190
14191         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
14192         MulticastDelegate is not allowed.
14193
14194         * typemanager.cs: Add new types to lookup: System.TypedReference
14195         and ArgIterator.
14196
14197         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
14198         check for TypedReference or ArgIterator, they are not allowed. 
14199
14200         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
14201         makes us properly catch 1510 in some conditions (see bug 56016 for
14202         details). 
14203
14204 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
14205
14206         * CryptoConvert.cs: update from corlib version
14207         with endian fixes.
14208
14209 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
14210
14211         * class.cs (Indexer.Define): Check indexername declaration
14212
14213 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
14214
14215         * attribute.cs (IsClsCompliant): Fixed problem with handling
14216         all three states (compliant, not-compliant, undetected).
14217
14218 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
14219
14220         * attribute.cs (Attribute): Location is now public.
14221         (Resolve): Store resolved arguments (pos_values) in attribute class.
14222         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
14223         (GetClsCompliantAttributeValue): New method that gets
14224         CLSCompliantAttribute value.
14225         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
14226         if exists else null.
14227         (AttributeTester): New class for CLS-Compliant verification routines.
14228
14229         * class.cs (Emit): Add CLS-Compliant verification.
14230         (Method.GetSignatureForError): Implemented.
14231         (Constructor.GetSignatureForError): Implemented
14232         (Constructor.HasCompliantArgs): Returns if constructor has
14233         CLS-Compliant arguments.
14234         (Constructor.Emit): Override.
14235         (Construcor.IsIdentifierClsCompliant): New method; For constructors
14236         is needed to test only parameters.
14237         (FieldBase.GetSignatureForError): Implemented.
14238         (TypeContainer): New member for storing base interfaces.
14239         (TypeContainer.FindMembers): Search in base interfaces too.
14240
14241         * codegen.cs (GetClsComplianceAttribute): New method that gets
14242         assembly or module CLSCompliantAttribute value.
14243         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
14244         for assembly.
14245         (ModuleClass.Emit): Add error 3012 test.
14246
14247         * const.cs (Emit): Override and call base for CLS-Compliant tests.
14248
14249         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
14250         state for all decl types.
14251         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
14252         if CLS-Compliant tests are required.
14253         (IsClsCompliaceRequired): New method. Analyze whether code
14254         must be CLS-Compliant.
14255         (IsExposedFromAssembly): New method. Returns true when MemberCore
14256         is exposed from assembly.
14257         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
14258         value or gets cached value.
14259         (HasClsCompliantAttribute): New method. Returns true if MemberCore
14260         is explicitly marked with CLSCompliantAttribute.
14261         (IsIdentifierClsCompliant): New abstract method. This method is
14262         used to testing error 3005.
14263         (IsIdentifierAndParamClsCompliant): New method. Common helper method
14264         for identifier and parameters CLS-Compliant testing.
14265         (VerifyClsCompliance): New method. The main virtual method for
14266         CLS-Compliant verifications.
14267         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
14268         null. I don't know why is null (too many public members !).
14269         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
14270         and get value of first CLSCompliantAttribute that found.
14271
14272         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
14273         (VerifyClsCompliance): Override and add extra tests.
14274
14275         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
14276         clscheck- disable CLS-Compliant verification event if assembly is has
14277         CLSCompliantAttribute(true).
14278
14279         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
14280         ApllyAttribute is now called in emit section as in the other cases.
14281         Possible future Emit integration.
14282         (IsIdentifierClsCompliant): New override.
14283         (VerifyClsCompliance): New override.
14284         (GetEnumeratorName): Returns full enum name.
14285
14286         * parameter.cs (GetSignatureForError): Implemented.
14287
14288         * report.cs (WarningData): New struct for Warning message information.
14289         (LocationOfPreviousError): New method.
14290         (Warning): New method. Reports warning based on the warning table.
14291         (Error_T): New method. Reports error based on the error table.
14292
14293         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
14294         verifications are done here.
14295
14296         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
14297
14298         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
14299         CLSCompliantAttribute.
14300         (all_imported_types): New member holds all imported types from other
14301         assemblies.
14302         (LoadAllImportedTypes): New method fills static table with exported types
14303         from all referenced assemblies.
14304         (Modules): New property returns all assembly modules.
14305
14306 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
14307
14308         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
14309         throwing a parser error.
14310
14311         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
14312         which removes the hardcoded get_/set_ prefixes for properties, as
14313         IL allows for the properties to be named something else.  
14314
14315         Bug #56013
14316
14317         * expression.cs: Do not override operand before we know if it is
14318         non-null.  Fix 56207
14319
14320 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14321
14322         * typemanager.cs: support for pinned variables.
14323
14324 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14325
14326         * decl.cs, typemanager.cs: Avoid using an arraylist
14327         as a buffer if there is only one result set.
14328
14329 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14330
14331         * expression.cs: Make sure you cant call a static method
14332         with an instance expression, bug #56174.
14333
14334 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
14335
14336         * class.cs (IsDuplicateImplementation): Improve error reporting to
14337         flag 663 (method only differs in parameter modifier).
14338
14339         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
14340         in preprocessor directives.
14341
14342         * location.cs (LookupFile): Allow for the empty path.
14343
14344         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
14345         better approach for some of that patch, but its failing with the
14346         CharSet enumeration.  For now try/catch will do.
14347
14348         * typemanager.cs: Do not crash if a struct does not have fields.
14349         Fixes 56150.
14350
14351 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14352
14353         * expression.cs: cs0213, cant fix a fixed expression.
14354         fixes 50231.
14355
14356 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14357
14358         * cs-parser.jay: detect invalid embeded statements gracefully.
14359         bug #51113.
14360
14361 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14362
14363         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
14364         As a regex:
14365         s/
14366         the invocation type may not be a subclass of the tye of the item/
14367         The type of the item must be a subclass of the invocation item.
14368         /g
14369
14370         Fixes bug #50820.
14371
14372 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
14373
14374         * attribute.cs: Added methods to get a string and a bool from an
14375         attribute. Required to information from AssemblyKeyFileAttribute,
14376         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
14377         * codegen.cs: Modified AssemblyName creation to include support for
14378         strongnames. Catch additional exceptions to report them as CS1548.
14379         * compiler.csproj: Updated include CryptoConvert.cs.
14380         * compiler.csproj.user: Removed file - user specific configuration.
14381         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
14382         Mono.Security assembly. The original class is maintained and tested in
14383         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
14384         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
14385         like CSC 8.0 (C# v2) supports.
14386         * Makefile: Added CryptoConvert.cs to mcs sources.
14387         * rootcontext.cs: Added new options for strongnames.
14388
14389 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
14390
14391         * driver.cs: For --expect-error, report error code `2'
14392         if the program compiled with no errors, error code `1' if
14393         it compiled with an error other than the one expected.
14394
14395 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
14396
14397         * compiler.csproj: Updated for Visual Studio .NET 2003.
14398         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
14399         * compiler.sln: Updated for Visual Studio .NET 2003.
14400
14401 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
14402
14403         * expression.cs: Fix bug #47234. We basically need to apply the
14404         rule that we prefer the conversion of null to a reference type
14405         when faced with a conversion to 'object' (csc behaviour).
14406
14407 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14408
14409         * statement.cs: Shorter form for foreach, eliminates
14410         a local variable. r=Martin.
14411
14412 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14413
14414         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
14415         checks if we can use brtrue/brfalse to test for 0.
14416         * expression.cs: use the above in the test for using brtrue/brfalse.
14417         cleanup code a bit.
14418
14419 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14420
14421         * expression.cs: Rewrite string concat stuff. Benefits:
14422
14423         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
14424         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
14425         rather than a concat chain.
14426
14427         * typemanager.cs: Add lookups for more concat overloads.
14428
14429 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14430
14431         * expression.cs: Emit shorter il code for array init.
14432
14433         newarr
14434         dup
14435         // set 1
14436
14437         // set 2
14438
14439         newarr
14440         stloc.x
14441
14442         ldloc.x
14443         // set 1
14444
14445         ldloc.x
14446         // set 2
14447
14448 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
14449
14450         * statement.cs: Before, two switch blocks would be merged if the
14451         total size of the blocks (end_item - begin_item + 1) was less than
14452         two times the combined sizes of the blocks.
14453
14454         Now, it will only merge if after the merge at least half of the
14455         slots are filled.
14456
14457         fixes 55885.
14458
14459 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
14460
14461         * class.cs : csc build fix for GetMethods(). See bug #52503.
14462
14463 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
14464
14465         * expression.cs: Make sure fp comparisons work with NaN.
14466         This fixes bug #54303. Mig approved this patch a long
14467         time ago, but we were not able to test b/c the runtime
14468         had a related bug.
14469
14470 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
14471
14472         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
14473
14474 2004-03-19  Martin Baulig  <martin@ximian.com>
14475
14476         * class.cs (MemberCore.IsDuplicateImplementation): Report the
14477         error here and not in our caller.
14478
14479 2004-03-19  Martin Baulig  <martin@ximian.com>
14480
14481         * interface.cs: Completely killed this file.
14482         (Interface): We're now a TypeContainer and live in class.cs.
14483
14484         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
14485         argument; we're now also called for interfaces.
14486         (TypeContainer.DefineMembers): Allow this method being called
14487         multiple times.
14488         (TypeContainer.GetMethods): New public method; formerly known as
14489         Interface.GetMethod().  This is used by PendingImplementation.
14490         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
14491         it's now private and non-static.
14492         (Interface): Moved this here; it's now implemented similar to
14493         Class and Struct.
14494         (Method, Property, Event, Indexer): Added `bool is_interface'
14495         argument to their .ctor's.
14496         (MemberBase.IsInterface): New public field.
14497
14498         * cs-parser.jay: Create normal Method, Property, Event, Indexer
14499         instances instead of InterfaceMethod, InterfaceProperty, etc.
14500         (opt_interface_base): Removed; we now use `opt_class_base' instead.
14501         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
14502
14503 2004-03-19  Martin Baulig  <martin@ximian.com>
14504
14505         * class.cs (MethodCore.IsDuplicateImplementation): New private
14506         method which does the CS0111 checking.
14507         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
14508         Use IsDuplicateImplementation().
14509
14510 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
14511
14512         * decl.cs (FindMemberToOverride): New method to find the correct
14513         method or property to override in the base class.
14514         * class.cs
14515             - Make Method/Property use the above method to find the
14516               version in the base class.
14517             - Remove the InheritableMemberSignatureCompare as it is now
14518               dead code.
14519
14520         This patch makes large code bases much faster to compile, as it is
14521         O(n) rather than O(n^2) to do this validation.
14522
14523         Also, it fixes bug 52458 which is that nested classes are not
14524         taken into account when finding the base class member.
14525
14526         Reviewed/Approved by Martin.
14527
14528 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
14529
14530         * interface.cs: In all interface classes removed redundant
14531         member initialization.
14532
14533 2004-03-16  Martin Baulig  <martin@ximian.com>
14534
14535         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
14536
14537 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
14538
14539         * decl.cs (DefineTypeAndParents): New helper method to define a
14540         type's containers before the type itself is defined;  This is a
14541         bug exposed by the recent changes to Windows.Forms when an
14542         implemented interface was defined inside a class that had not been
14543         built yet.   
14544
14545         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
14546
14547         (Check): Loop correctly to report errors modifiers
14548         (UNSAFE was not in the loop, since it was the same as TOP).
14549
14550         * interface.cs: Every interface member now takes a ModFlags,
14551         instead of a "is_new" bool, which we set on the base MemberCore. 
14552
14553         Every place where we called "UnsafeOk" in the interface, now we
14554         call the proper member (InterfaceMethod.UnsafeOK) instead to get
14555         the unsafe settings from the member declaration instead of the
14556         container interface. 
14557
14558         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
14559
14560         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
14561         `set_indexer_name' to the pending bits (one per type).
14562
14563         We fixed a bug today that was picking the wrong method to
14564         override, since for properties the existing InterfaceMethod code
14565         basically ignored the method name.  Now we make sure that the
14566         method name is one of the valid indexer names.
14567
14568 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
14569  
14570         * support.cs (SeekableStreamReader): Keep track of stream byte
14571         positions and don't mix them with character offsets to the buffer.
14572
14573         Patch from Gustavo Giráldez
14574
14575 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
14576
14577         * interface.cs (InterfaceSetGetBase): Removed double member
14578         initialization, base class does it as well.
14579
14580 2004-03-13  Martin Baulig  <martin@ximian.com>
14581
14582         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
14583         when compiling corlib.
14584
14585 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
14586
14587         * convert.cs (ExplicitConversion): We were reporting an error on
14588         certain conversions (object_type source to a value type, when the
14589         expression was `null') before we had a chance to pass it through
14590         the user defined conversions.
14591
14592         * driver.cs: Replace / and \ in resource specifications to dots.
14593         Fixes 50752
14594
14595         * class.cs: Add check for duplicate operators.  Fixes 52477
14596
14597 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
14598
14599         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
14600         that are in the middle of the statements, not only at the end.
14601         Fixes #54987
14602
14603         * class.cs (TypeContainer.AddField): No longer set the
14604         `HaveStaticConstructor' flag, now we call it
14605         `UserDefineStaticConstructor' to diferentiate the slightly
14606         semantic difference.
14607
14608         The situation is that we were not adding BeforeFieldInit (from
14609         Modifiers.TypeAttr) to classes that could have it.
14610         BeforeFieldInit should be set to classes that have no static
14611         constructor. 
14612
14613         See:
14614
14615         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
14616
14617         And most importantly Zoltan's comment:
14618
14619         http://bugzilla.ximian.com/show_bug.cgi?id=44229
14620
14621         "I think beforefieldinit means 'it's ok to initialize the type sometime 
14622          before its static fields are used', i.e. initialization does not need
14623          to be triggered by the first access to the type. Setting this flag
14624          helps the JIT to compile better code, since it can run the static
14625          constructor at JIT time, and does not need to generate code to call it
14626          (possibly lots of times) at runtime. Unfortunately, mcs does not set
14627          this flag for lots of classes like String. 
14628          
14629          csc sets this flag if the type does not have an explicit static 
14630          constructor. The reasoning seems to be that if there are only static
14631          initalizers for a type, and no static constructor, then the programmer
14632          does not care when this initialization happens, so beforefieldinit
14633          can be used.
14634          
14635          This bug prevents the AOT compiler from being usable, since it 
14636          generates so many calls to mono_runtime_class_init that the AOT code
14637          is much slower than the JITted code. The JITted code is faster, 
14638          because it does not generate these calls if the vtable is type is
14639          already initialized, which is true in the majority of cases. But the
14640          AOT compiler can't do this."
14641
14642 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
14643
14644         * class.cs (MethodData.Emit): Refactor the code so symbolic
14645         information is generated for destructors;  For some reasons we
14646         were taking a code path that did not generate symbolic information
14647         before. 
14648
14649 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14650
14651         * class.cs: Create a Constructor.CheckBase method that
14652         takes care of all validation type code. The method
14653         contains some code that was moved from Define.
14654
14655         It also includes new code that checks for duplicate ctors.
14656         This fixes bug #55148.
14657
14658 2004-03-09  Joshua Tauberer <tauberer@for.net>
14659
14660         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
14661         a { ... }-style array creation invokes EmitStaticInitializers
14662         which is not good for reference-type arrays.  String, decimal
14663         and now null constants (NullCast) are not counted toward
14664         static initializers.
14665
14666 2004-03-05  Martin Baulig  <martin@ximian.com>
14667
14668         * location.cs (SourceFile.HasLineDirective): New public field;
14669         specifies whether the file contains or is referenced by a "#line"
14670         directive.
14671         (Location.DefineSymbolDocuments): Ignore source files which
14672         either contain or are referenced by a "#line" directive.        
14673
14674 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
14675
14676         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
14677         direct access to our parent, so check the method inline there.
14678
14679 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14680
14681         * expression.cs (Invocation.EmitCall): Miguel's last commit
14682         caused a regression. If you had:
14683
14684             T t = null;
14685             t.Foo ();
14686
14687         In Foo the implict this would be null.
14688
14689 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
14690
14691         * expression.cs (Invocation.EmitCall): If the method is not
14692         virtual, do not emit a CallVirt to it, use Call.
14693
14694         * typemanager.cs (GetFullNameSignature): Improve the method to
14695         cope with ".ctor" and replace it with the type name.
14696
14697         * class.cs (ConstructorInitializer.Resolve): Now the method takes
14698         as an argument the ConstructorBuilder where it is being defined,
14699         to catch the recursive constructor invocations.
14700
14701 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
14702
14703         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
14704         routines to check if a type is an enumerable/enumerator allow
14705         classes that implement the IEnumerable or IEnumerator interfaces.
14706
14707         * class.cs (Property, Operator): Implement IIteratorContainer, and
14708         implement SetYields.
14709
14710         (Property.Define): Do the block swapping for get_methods in the
14711         context of iterators.   We need to check if Properties also
14712         include indexers or not.
14713
14714         (Operator): Assign the Block before invoking the
14715         OperatorMethod.Define, so we can trigger the Iterator code
14716         replacement. 
14717
14718         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
14719         Property and Operator classes are not created when we parse the
14720         declarator but until we have the block completed, so we use a
14721         singleton SimpleIteratorContainer.Simple to flag whether the
14722         SetYields has been invoked.
14723
14724         We propagate this setting then to the Property or the Operator to
14725         allow the `yield' to function.
14726
14727 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
14728
14729         * codegen.cs: Implemented attribute support for modules.
14730         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
14731         Assembly/Module functionality.
14732
14733         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
14734         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
14735         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
14736
14737 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
14738
14739         * interface.cs (FindMembers): The operation is performed on all base
14740         interfaces and not only on the first. It is required for future CLS Compliance patch.
14741
14742 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14743
14744         * statement.cs, codegen.cs:
14745         This patch deals with patterns such as:
14746
14747         public class List : IEnumerable {
14748
14749                 public MyEnumerator GetEnumerator () {
14750                         return new MyEnumerator(this);
14751                 }
14752
14753                 IEnumerator IEnumerable.GetEnumerator () {
14754                         ...
14755                 }
14756                 
14757                 public struct MyEnumerator : IEnumerator {
14758                         ...
14759                 }
14760         }
14761
14762         Before, there were a few things we did wrong:
14763         1) we would emit callvirt on a struct, which is illegal
14764         2) we emited ldarg when we needed to emit ldarga
14765         3) we would mistakenly call the interface methods on an enumerator
14766         type that derived from IEnumerator and was in another assembly. For example:
14767
14768         public class MyEnumerator : IEnumerator
14769
14770         Would have the interface methods called, even if there were public impls of the
14771         method. In a struct, this lead to invalid IL code.
14772
14773 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
14774
14775         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
14776           renamed to Emit.
14777
14778         * delegate.cs (Define): Fixed crash when delegate type is undefined.
14779
14780 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
14781
14782         * cs-parser.jay: Fix small regression: we were not testing V2
14783         compiler features correctly.
14784
14785         * interface.cs: If the emit context is null, then create one
14786
14787 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
14788
14789         * decl.cs (GetSignatureForError): New virtual method to get full name
14790           for error messages.
14791
14792         * attribute.cs (IAttributeSupport): New interface for attribute setting.
14793           Now it is possible to rewrite ApplyAttributes method to be less if/else.
14794
14795         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
14796           Duplicated members and code in these classes has been removed.
14797           Better encapsulation in these classes.
14798
14799 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
14800
14801         * assign.cs (Assign.DoResolve): When dealing with compound
14802         assignments, there is a new rule in ECMA C# 2.4 (might have been
14803         there before, but it is documented here) that states that in:
14804
14805         a op= b;
14806
14807         If b is of type int, and the `op' is a shift-operator, then the
14808         above is evaluated as:
14809
14810         a = (int) a op b 
14811
14812         * expression.cs (Binary.ResolveOperator): Instead of testing for
14813         int/uint/long/ulong, try to implicitly convert to any of those
14814         types and use that in pointer arithmetic.
14815
14816         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
14817         method to print information for from the type, not from the
14818         null-method we were given.
14819
14820 2004-02-01  Duncan Mak  <duncan@ximian.com>
14821
14822         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
14823         parsing for cmd, fixes bug #53694.
14824
14825 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
14826
14827         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
14828         in the member name duplication tests. Property and operator name duplication
14829         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
14830
14831 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
14832
14833         * interface.cs (PopulateMethod): Fixed crash when interface method
14834         returns not existing type (error test cs0246-3.cs).
14835
14836 2004-02-02  Ravi Pratap M <ravi@ximian.com>
14837
14838         * cs-parser.jay (interface_accessors): Re-write actions to also
14839         store attributes attached to get and set methods. Fix spelling
14840         while at it.
14841
14842         (inteface_property_declaration): Modify accordingly.
14843
14844         (InterfaceAccessorInfo): New helper class to store information to pass
14845         around between rules that use interface_accessors.
14846
14847         * interface.cs (Emit): Apply attributes on the get and set
14848         accessors of properties and indexers too.
14849
14850         * attribute.cs (ApplyAttributes): Modify accordingly to use the
14851         right MethodBuilder when applying attributes to the get and set accessors.
14852
14853 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
14854
14855         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
14856
14857 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
14858
14859         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
14860
14861 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
14862
14863         * cs-parser.jay: Remove YIELD token, instead use the new grammar
14864         changes that treat `yield' specially when present before `break'
14865         or `return' tokens.
14866
14867         * cs-tokenizer.cs: yield is no longer a keyword.
14868
14869 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
14870
14871         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
14872         setting for default constructors.
14873         For default constructors are almost every time set wrong Modifier. The
14874         generated IL code has been alright. But inside mcs this values was
14875         wrong and this was reason why several of my CLS Compliance tests
14876         failed.
14877
14878 2004-01-22  Martin Baulig  <martin@ximian.com>
14879
14880         * cs-parser.jay (namespace_or_type_name): Return an Expression,
14881         not a QualifiedIdentifier.  This is what `type_name_expression'
14882         was previously doing.
14883         (type_name_expression): Removed; the code is now in
14884         `namespace_or_type_name'.
14885         (qualified_identifier): Removed, use `namespace_or_type_name'
14886         instead.
14887         (QualifiedIdentifier): Removed this class.      
14888
14889 2004-01-22  Martin Baulig  <martin@ximian.com>
14890
14891         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
14892         not a string as alias name.
14893
14894 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
14895
14896         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
14897         #52730 bug, and instead compute correctly the need to use a
14898         temporary variable when requesting an address based on the
14899         static/instace modified of the field and the constructor.
14900  
14901 2004-01-21  Martin Baulig  <martin@ximian.com>
14902
14903         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
14904         class and namespace before looking up aliases.  Fixes #52517.
14905
14906 2004-01-21  Martin Baulig  <martin@ximian.com>
14907
14908         * flowanalysis.cs (UsageVector.Merge): Allow variables being
14909         assinged in a 'try'; fixes exception4.cs.
14910
14911 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14912         * class.cs : Implemented parameter-less constructor for TypeContainer
14913
14914         * decl.cs: Attributes are now stored here. New property OptAttributes
14915
14916         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
14917
14918         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
14919
14920 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14921
14922         * typemanager.cs (CSharpSignature): Now reports also inner class name.
14923           (CSharpSignature): New method for indexer and property signature.
14924
14925 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14926
14927         * pending.cs (IsVirtualFilter): Faster implementation.
14928
14929 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14930
14931         * typemanager.cs: Avoid inclusion of same assembly more than once.
14932
14933 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14934
14935         * cs-parser.jay: Fixed problem where the last assembly attribute
14936           has been applied also to following declaration (class, struct, etc.)
14937           
14938 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14939
14940         * class.cs: Added error CS0538, CS0539 reporting.
14941         Fixed crash on Microsoft runtime when field type is void.
14942
14943         * cs-parser.jay: Added error CS0537 reporting.
14944
14945         * pending.cs: Added error CS0535 reporting.
14946         Improved error report for errors CS0536, CS0534.
14947
14948 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
14949
14950         Merge a few bits from the Anonymous Method MCS tree.
14951
14952         * statement.cs (ToplevelBlock): New class for toplevel methods,
14953         will hold anonymous methods, lifted variables.
14954
14955         * cs-parser.jay: Create toplevel blocks for delegates and for
14956         regular blocks of code. 
14957
14958 2004-01-20  Martin Baulig  <martin@ximian.com>
14959
14960         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
14961         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
14962         and `NeedExplicitReturn'; added `IsLastStatement'.
14963         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
14964         have a `ReturnLabel' or we're not unreachable.
14965
14966         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
14967         child's reachability; don't just override ours with it.  Fixes
14968         #58058 (lluis's example).
14969         (FlowBranching): Added public InTryOrCatch(), InCatch(),
14970         InFinally(), InLoop(), InSwitch() and
14971         BreakCrossesTryCatchBoundary() methods.
14972
14973         * statement.cs (Return): Do all error checking in Resolve().
14974         Unless we are the last statement in a top-level block, always
14975         create a return label and jump to it.
14976         (Break, Continue): Do all error checking in Resolve(); also make
14977         sure we aren't leaving a `finally'.
14978         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
14979         statement in a top-level block.
14980         (Block.Flags): Added `IsDestructor'.
14981         (Block.IsDestructor): New public property.
14982
14983 2004-01-20  Martin Baulig  <martin@ximian.com>
14984
14985         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
14986
14987 2004-01-20  Martin Baulig  <martin@ximian.com>
14988
14989         * statement.cs (Statement.ResolveUnreachable): New public method.
14990         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
14991         (Block.Resolve): Resolve unreachable statements.
14992
14993 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14994
14995         * expression.cs: We need to fix the case where we do
14996         not have a temp variable here.
14997
14998         * assign.cs: Only expression compound assignments need
14999         temporary variables.
15000
15001 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
15002
15003         * flowanalysis.cs: Reduce memory allocation in a few ways:
15004           - A block with no variables should not allocate a bit
15005             vector for itself.
15006           - A method with no out parameters does not need any tracking
15007             for assignment of the parameters, so we need not allocate
15008             any data for it.
15009           - The arrays:
15010                 public readonly Type[] VariableTypes;
15011                 public readonly string[] VariableNames;
15012             Are redundant. The data is already stored in the variable
15013             map, so we need not allocate another array for it.
15014           - We need to add alot of checks for if (params | locals) == null
15015             due to the first two changes.
15016
15017 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
15018
15019         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
15020         implement IMemoryLocation, we store a copy on a local variable and
15021         take the address of it.  Patch from Benjamin Jemlich
15022
15023         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
15024         to use a special "type_name_expression" rule which reduces the
15025         number of "QualifiedIdentifier" classes created, and instead
15026         directly creates MemberAccess expressions.
15027
15028 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
15029
15030         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
15031         that fixes #52853.  Null literal assignment to ValueType
15032
15033         * class.cs (MethodData.Emit): Instead of checking the name of the
15034         method to determine if its a destructor, create a new derived
15035         class from Method called Destructor, and test for that.  
15036
15037         * cs-parser.jay: Create a Destructor object instead of a Method.  
15038
15039         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
15040
15041         Fixes: 52933
15042
15043 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
15044
15045         * expression.cs (Binary.ResolveOperator): Perform an implicit
15046         conversion from MethodGroups to their delegate types on the
15047         Addition operation.
15048
15049         * delegate.cs: Introduce a new class DelegateCreation that is the
15050         base class for `NewDelegate' and `ImplicitDelegateCreation',
15051         factor some code in here.
15052
15053         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
15054         conversion from MethodGroups to compatible delegate types. 
15055
15056         * ecore.cs (Expression.Resolve): Do not flag error 654
15057         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
15058         we allow conversions from MethodGroups to delegate types now.
15059
15060         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
15061         assignments in v2 either.
15062
15063 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
15064
15065         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
15066         static read-only fields in ctors.
15067
15068         Applied patch from Benjamin Jemlich 
15069
15070         * expression.cs (UnaryMutator): Avoid leaking local variables. 
15071
15072 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
15073
15074         * cs-tokenizer.cs (IsCastToken): Allow the various native types
15075         here to return true, as they can be used like this:
15076
15077                 (XXX) int.MEMBER ()
15078
15079         Fixed 49836 and all the other dups
15080
15081 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
15082
15083         * driver.cs: Implement /win32res and /win32icon.
15084
15085 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
15086
15087         * cs-parser.jay: Add a rule to improve error handling for the
15088         common mistake of placing modifiers after the type.
15089
15090 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
15091
15092         * cs-parser.jay (interface_event_declaration): Catch
15093         initialization of events on interfaces, and report cs0068
15094
15095         * cs-parser.jay (interface_event_declaration): Catch
15096         initialization of events. 
15097
15098         * ecore.cs: Better report missing constructors.
15099
15100         * expression.cs (Binary.ResolveOperator): My previous bug fix had
15101         the error reporting done in the wrong place.  Fix.
15102
15103         * expression.cs (Binary.ResolveOperator): Catch the 
15104         operator + (E x, E y) error earlier, and later allow for implicit
15105         conversions in operator +/- (E e, U x) from U to the underlying
15106         type of E.
15107
15108         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
15109         52596, if the container class is abstract, the default constructor
15110         is protected otherwise its public (before, we were always public).
15111
15112         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
15113         fixed statement.
15114
15115         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
15116         Jemlich that fixes bug #52597, MCS was generating invalid code for
15117         idisposable structs.   Thanks to Ben for following up with this
15118         bug as well.
15119
15120 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
15121
15122         * driver.cs: Allow assemblies without code to be generated, fixes
15123         52230.
15124
15125 2004-01-07  Nick Drochak <ndrochak@gol.com>
15126
15127         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
15128
15129 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
15130
15131         * cs-parser.jay: Add rules to improve error reporting if fields or
15132         methods are declared at the namespace level (error 116)
15133
15134         * Add rules to catch event add/remove
15135
15136 2004-01-04  David Sheldon <dave-mono@earth.li>
15137
15138   * expression.cs: Added matching ")" to error message for 
15139   CS0077
15140
15141 2004-01-03 Todd Berman <tberman@gentoo.org>
15142
15143         * ecore.cs, attribute.cs:
15144         Applying fix from #52429.
15145
15146 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15147
15148         * ecore.cs, expression.cs, statement.cs:
15149         Total rewrite of how we handle branching. We
15150         now handle complex boolean expressions with fewer
15151         jumps. As well if (x == 0) no longer emits a ceq.
15152
15153         if (x is Foo) is much faster now, because we generate
15154         better code.
15155
15156         Overall, we get a pretty big improvement on our benchmark
15157         tests. The code we generate is smaller and more readable.
15158
15159         I did a full two-stage bootstrap. The patch was reviewed
15160         by Martin and Miguel.
15161
15162 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15163
15164         * cs-parser.jay: Make primary_expression not take a QI.
15165         we dont need this because the member_access rule covers
15166         us here. So we replace the rule with just IDENTIFIER.
15167
15168         This has two good effects. First, we remove a s/r conflict.
15169         Second, we allocate many fewer QualifiedIdentifier objects.
15170
15171 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15172
15173         * attribute.cs: Handle MarshalAs attributes as pseudo, and
15174         set the correct information via SRE. This prevents
15175         hanging on the MS runtime. Fixes #29374.
15176
15177 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15178
15179         * convert.cs: correctly handle conversions to value types
15180         from Enum and ValueType as unboxing conversions.
15181
15182         Fixes bug #52569. Patch by Benjamin Jemlich.
15183
15184 2004-01-02  Ravi Pratap  <ravi@ximian.com>
15185
15186         * expression.cs (BetterConversion): Prefer int -> uint
15187         over int -> ulong (csc's behaviour). This fixed bug #52046.
15188
15189 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15190
15191         * decl.cs (MemberCache.FindMembers): now returns a
15192         MemberInfo [].
15193
15194         * typemanager.cs: In general, go with with ^^.
15195         (CopyNewMethods): take an IList.
15196         (RealMemberLookup): Only allocate an arraylist
15197         if we copy from two sets of methods.
15198
15199         This change basically does two things:
15200         1) Fewer array lists allocated due to CopyNewMethods.
15201         2) the explicit cast in MemberList costed ALOT.
15202
15203 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
15204
15205         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
15206         a hashtable to avoid needless string allocations when an identifier is
15207         used more than once (the common case).
15208
15209 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
15210
15211         * pending.cs: MS's TypeBuilder.GetInterfaces ()
15212         is broken, it will not return anything. So, we
15213         have to use the information we have in mcs to
15214         do the task.
15215
15216         * typemanager.cs: Add a cache for GetInterfaces,
15217         since this will now be used more often (due to ^^)
15218
15219         (GetExplicitInterfaces) New method that gets the
15220         declared, not effective, interfaces on a type
15221         builder (eg, if you have interface IFoo, interface
15222         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
15223         { IBar }.
15224
15225         This patch makes MCS able to bootstrap itself on
15226         Windows again.
15227
15228 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
15229
15230         * expression.cs: Remove the Nop's that Miguel put
15231         in by mistake.
15232
15233 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15234
15235         * report.cs, codegen.cs: Give the real stack trace to
15236         the error when an exception is thrown.
15237
15238 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15239
15240         * decl.cs: only allocate hashtables for ifaces if 
15241         it is an iface!
15242
15243 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15244
15245         * expression.cs: fix the error from cs0121-2.cs
15246         (a parent interface has two child interfaces that
15247         have a function with the same name and 0 params
15248         and the function is called through the parent).
15249
15250 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
15251
15252         * class.cs, rootcontext.cs, typmanager.cs: do not
15253         leak pointers.
15254
15255 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
15256
15257         * codegen.cs: remove stack for the ec flow branching.
15258         It is already a linked list, so no need.
15259
15260 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
15261
15262         * Makefile: Allow custom profiler here.
15263
15264 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15265
15266         * typemanager.cs (LookupType):
15267           - Use a static char [], because split takes
15268             a param array for args, so it was allocating
15269             every time.
15270           - Do not store true in a hashtable, it boxes.
15271
15272 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15273
15274         * flowanalysis.cs: bytify common enums.
15275
15276 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15277
15278         * modifiers.cs: Add a new set of flags for the
15279         flags allowed on explicit interface impls.
15280         * cs-parser.jay: catch the use of modifiers in
15281         interfaces correctly.
15282         * class.cs: catch private void IFoo.Blah ().
15283
15284         All related to bug #50572.
15285
15286 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15287
15288         * decl.cs: Rewrite the consistant accessability checking.
15289         Accessability is not linear, it must be implemented in
15290         a tableish way. Fixes #49704.
15291
15292 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15293
15294         * expression.cs: Handle negation in a checked context.
15295         We must use subtraction from zero. Fixes #38674.
15296
15297 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15298
15299         * class.cs: Ignore static void main in DLLs.
15300         * rootcontext.cs: Handle the target type here,
15301         since we are have to access it from class.cs
15302         * driver.cs: account for the above.
15303
15304 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15305
15306         * report.cs: Give line numbers and files if available.
15307
15308 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
15309
15310         * driver.cs: Implement /addmodule.
15311
15312         * typemanager.cs:  Change 'modules' field so it now contains Modules not
15313         ModuleBuilders.
15314
15315 2003-12-20  Martin Baulig  <martin@ximian.com>
15316
15317         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
15318         (FieldBase.IsAssigned): Removed this field.
15319         (FieldBase.SetAssigned): New public method.
15320         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
15321
15322 2003-12-20  Martin Baulig  <martin@ximian.com>
15323
15324         * expression.cs (LocalVariableReference.DoResolve): Don't set
15325         `vi.Used' if we're called from DoResolveLValue().
15326
15327         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
15328         returns the usage vector it just merged into the current one -
15329         pass this one to UsageWarning().
15330         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
15331         of the `EmitContext', don't call this recursively on our children.
15332
15333 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
15334
15335         * driver.cs: Implement /target:module.
15336
15337 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
15338
15339         * support.cs (CharArrayHashtable): New helper class.
15340
15341         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
15342         char arrays, not strings, so we can avoid creating a string in
15343         consume_identifier if the identifier is a keyword.
15344
15345 2003-12-16  Martin Baulig  <martin@ximian.com>
15346
15347         * statement.cs (LocalInfo.Assigned): Removed this property.
15348         (LocalInfo.Flags): Removed `Assigned'.
15349         (LocalInfo.IsAssigned): New public method; takes the EmitContext
15350         and uses flow analysis.
15351         (Block.UsageWarning): Made this method private.
15352         (Block.Resolve): Call UsageWarning() if appropriate.
15353
15354         * expression.cs (LocalVariableReference.DoResolve): Always set
15355         LocalInfo.Used here.
15356
15357 2003-12-13  Martin Baulig  <martin@ximian.com>
15358
15359         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
15360         any value here; we're now using flow analysis to figure out
15361         whether a statement/block returns a value.
15362
15363 2003-12-13  Martin Baulig  <martin@ximian.com>
15364
15365         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
15366         working again.
15367         (FlowBranching.MergeFinally): Don't call
15368         `branching.CheckOutParameters()' here, this is called in
15369         MergeTopBlock().
15370         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
15371         when adding the `finally' vector.       
15372
15373 2003-12-13  Martin Baulig  <martin@ximian.com>
15374
15375         * flowanalysis.cs
15376         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
15377         actually work and also fix #48962.
15378
15379 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
15380
15381         * decl.cs: Do not check System.Object for nested types,
15382         since we know it does not have any. Big bang for buck:
15383
15384         BEFORE:
15385            Run 1:   8.35 seconds
15386            Run 2:   8.32 seconds
15387            corlib:  17.99 seconds
15388         AFTER:
15389            Run 1:   8.17 seconds
15390            Run 2:   8.17 seconds
15391            corlib:  17.39 seconds
15392
15393 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
15394
15395         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
15396         time we are returning 0 members, so we save alot here.
15397
15398 2003-12-11  Martin Baulig  <martin@ximian.com>
15399
15400         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
15401         `MergeChild()', also just take the `FlowBranching' as argument;
15402         call Merge() on it and return the result.
15403         (FlowBranching.Merge): We don't need to do anything if we just
15404         have one sibling.
15405
15406 2003-12-11  Martin Baulig  <martin@ximian.com>
15407
15408         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
15409         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
15410         Maurer for this idea.
15411
15412 2003-12-11  Martin Baulig  <martin@ximian.com>
15413
15414         * flowanalysis.cs (MergeResult): This class is now gone; we now
15415         use the `UsageVector' for this.  The reason for this is that if a
15416         branching just has one sibling, we don't need to "merge" them at
15417         all - that's the next step to do.
15418         (FlowBranching.Merge): We now return a `UsageVector' instead of a
15419         `MergeResult'.
15420
15421 2003-12-11  Martin Baulig  <martin@ximian.com>
15422
15423         Reworked flow analyis and made it more precise and bug-free.  The
15424         most important change is that we're now using a special `Reachability'
15425         class instead of having "magic" meanings of `FlowReturns'.  I'll
15426         do some more cleanups and optimizations and also add some more
15427         documentation this week.
15428
15429         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
15430         largely reworked this class.
15431         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
15432         the new `Reachability' class instead of having "magic" values here.
15433         (FlowBranching): We're now using an instance of `Reachability'
15434         instead of having separate `Returns', `Breaks' etc. fields.
15435
15436         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
15437         based on flow analysis; ignore the return value of block.Emit ().
15438
15439 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
15440
15441         * driver.cs typemanager.cs: Find the mono extensions to corlib even
15442         if they are private.
15443
15444 2003-12-09  Martin Baulig  <martin@ximian.com>
15445
15446         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
15447         call them directly on the UsageVector.
15448
15449 2003-12-09  Martin Baulig  <martin@ximian.com>
15450
15451         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
15452         Changed return type from `FlowReturns' to `Reachability'.
15453
15454 2003-12-09  Martin Baulig  <martin@ximian.com>
15455
15456         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
15457         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
15458         `Reachable' fields with a single `Reachability' one.
15459
15460 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15461
15462         * class.cs (FindMembers): Remove foreach's.
15463
15464         Bootstrap times:
15465
15466         BEFORE
15467                 Run 1:   8.74 seconds
15468                 Run 2:   8.71 seconds
15469
15470         AFTER
15471                 Run 1:   8.64 seconds
15472                 Run 2:   8.58 seconds
15473
15474
15475 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15476
15477         * cs-parser.jay:
15478         * gen-treedump.cs:
15479         * statement.cs:
15480         This patch does a few things:
15481                 1. EmptyStatement is now a singleton, so it is never reallocated.
15482                 2. All blah is EmptyStatement constructs have been changed to
15483                    blah == EmptyStatement.Value, which is much faster and valid
15484                    now that EmptyStatement is a singleton.
15485                 3. When resolving a block, rather than allocating a new array for
15486                    the non-empty statements, empty statements are replaced with
15487                    EmptyStatement.Value
15488                 4. Some recursive functions have been made non-recursive.
15489         Mainly the performance impact is from (3), however (1) and (2) are needed for
15490         this to work. (4) does not make a big difference in normal situations, however
15491         it makes the profile look saner.
15492
15493         Bootstrap times:
15494
15495         BEFORE
15496         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15497         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15498         Total memory allocated: 56397 KB
15499
15500         AFTER
15501         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
15502         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
15503         Total memory allocated: 55666 KB
15504
15505 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15506
15507         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
15508         than the hashtable in a hashtable version
15509
15510         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
15511         we always end up concating a string. This results in a huge perf
15512         loss, because many strings have to be tracked by the GC. In this
15513         patch, we first use a hashtable that works with two keys, so that
15514         the strings do not need to be concat'ed.
15515
15516         Bootstrap times:
15517         BEFORE
15518                 Run 1:   8.74 seconds
15519                 Run 2:   8.71 seconds
15520
15521         AFTER
15522                 Run 1:   8.65 seconds
15523                 Run 2:   8.56 seconds
15524
15525 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15526
15527         * Makefile: Add a new target `do-time' that does a quick and simple
15528         profile, leaving easy to parse output.
15529
15530 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
15531
15532         * codegen.cs (Init): Create the dynamic assembly with 
15533         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
15534
15535 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15536
15537         * support.cs: Make the PtrHashtable use only one
15538         instance of its comparer.
15539
15540 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
15541
15542         * typemanager.cs: Fix lookup of GetNamespaces.
15543
15544 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
15545
15546         * expression.cs: Removed redundant line.
15547
15548         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
15549         ArrayLists, use for loops with bounds.  
15550
15551         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
15552         arraylist.
15553
15554         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
15555         arraylists, use for loop with bounds.
15556
15557         The above three changes give us a 0.071 second performance
15558         improvement out of 3.294 seconds down to 3.223.  On my machine
15559         the above changes reduced the memory usage by 1,387 KB during
15560         compiler bootstrap.
15561
15562         * cs-parser.jay (QualifiedIdentifier): New class used to represent
15563         QualifiedIdentifiers.  Before we created a new string through
15564         concatenation, and mostly later on, the result would be
15565         manipulated by DecomposeQI through string manipulation.
15566
15567         This reduced the compiler memory usage for bootstrapping from
15568         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
15569         compile times in 0.05 seconds.
15570
15571 2003-11-28  Dick Porter  <dick@ximian.com>
15572
15573         * support.cs: Do string compares with the Invariant culture.
15574
15575         * rootcontext.cs: 
15576         * gen-treedump.cs: 
15577         * expression.cs: 
15578         * driver.cs: 
15579         * decl.cs: 
15580         * codegen.cs: 
15581         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
15582         the comparison is done with the Invariant culture.
15583
15584 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
15585
15586         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
15587         GetEnumerator method.
15588
15589         (ProbeCollectionType): Iterate starting at the most specific type
15590         upwards looking for a GetEnumerator
15591
15592         * expression.cs: Shift count can be up to 31 for int/uint and 63
15593         for long/ulong.
15594
15595 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
15596
15597         * statement.cs (Block.LookupLabel): Also look for the label on the
15598         children blocks.  Use a hash table to keep track of visited
15599         nodes. 
15600
15601         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
15602         we actually did transform the other operand, otherwise fall back
15603         to the common codepath that casts to long.
15604
15605         * cs-tokenizer.cs: Use the same code pattern as the int case.
15606         Maybe I should do the parsing myself, and avoid depending on the
15607         Parse routines to get this done.
15608
15609 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
15610
15611         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15612         which fixes bug 51347.  This time test it.
15613
15614         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
15615         attributes for example can not tell the difference between these.
15616         The difference was only a syntax feature of the language. 
15617
15618         * attribute.cs: Apply attributes to delegates.
15619
15620         * delegate.cs: Call the apply attributes method.
15621
15622 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
15623
15624         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
15625         comparing 0 vs Byte.MinValue, not the value
15626
15627         (ImplicitConversionRequired): When reporting a conversion error,
15628         use error 31 to print out the constant error instead of the
15629         simpler 29.
15630
15631         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15632         which fixes bug 51347.
15633
15634 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
15635
15636         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
15637         which fixes the -warnaserror command line option.
15638
15639 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
15640
15641         * cfold.cs (DoNumericPromotions): During constant folding of
15642         additions on UIntConstant, special case intconstants with
15643         IntConstants like we do on the expression binary operator. 
15644
15645 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
15646
15647         * convert.cs (ImplicitReferenceConversion): We were missing a case
15648         (System.Enum are not value types or class types, so we need to
15649         classify them separatedly).
15650
15651         * driver.cs: We do not support error 2007.
15652
15653 2003-11-12 Jackson Harper <jackson@ximian.com>
15654
15655         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
15656         system directory. Also use the full file name so users can
15657         libraries names mscorlib-o-tron.dll in a non system dir.
15658
15659 2003-11-10  Martin Baulig  <martin@ximian.com>
15660
15661         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
15662         (TypeManager.InitCoreTypes): Initialize them here, but instead of
15663         calling `ResolveType()' on them, directly assign their `Type'.
15664
15665 2003-11-08  Martin Baulig  <martin@ximian.com>
15666
15667         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
15668         return value and the `out parent' parameter.
15669         (TypeContainer.DefineType): Moved the CS0644 check into
15670         GetClassBases().  Don't pass the interface types to the
15671         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
15672         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
15673
15674         * ecore.cs (TypeExpr.IsAttribute): New property.
15675         (TypeExpr.GetInterfaces): New method.
15676
15677         * interface.cs (Interface.GetInterfaceTypeByName): Return a
15678         TypeExpr instead of a Type.
15679         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
15680         (Interface.DefineType): Don't pass the interface types to the
15681         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
15682         them later and then call `TypeBulider.AddInterfaceImplementation()'.
15683
15684         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
15685         instead of a `Type[]'.
15686         (TypeManager.RegisterBuilder): Likewise.
15687         (TypeManager.AddUserInterface): Likewise.
15688         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
15689         `Type[]' and also return a `TypeExpr[]'.
15690         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
15691
15692 2003-11-08  Martin Baulig  <martin@ximian.com>
15693
15694         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
15695         Expression.     
15696
15697 2003-11-08  Martin Baulig  <martin@ximian.com>
15698
15699         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
15700         TypeManager.ResolveExpressionTypes().
15701
15702         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
15703         instead of an Expression.
15704         (TypeExpr): This is now an abstract base class for `TypeExpression'.
15705         (TypeExpression): New public class; formerly known as `TypeExpr'.
15706
15707         * expression.cs (ComposedCast): Derive from TypeExpr.
15708
15709         * typemanager.cs (TypeManager.system_*_expr): These are now
15710         TypExpr's instead of Expression's.
15711         (TypeManager.ResolveExpressionTypes): New public static function;
15712         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
15713         of them.        
15714
15715 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
15716
15717         * expression.cs (New.DoResolve): Do not dereference value that
15718         might be a null return.
15719
15720         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
15721         sure that the constant value has the right type.  Fixes an
15722         unreported bug, similar to 50425.
15723
15724         * const.cs (Const.LookupConstantValue): Call
15725         ImplicitStandardConversionExists before doing a conversion to
15726         avoid havng the TypeManager.ChangeType do conversions.
15727
15728         Reduced the number of casts used
15729
15730         (Const.ChangeType): New routine to enable reuse of the constant
15731         type changing code from statement.
15732
15733         * typemanager.cs (ChangeType): Move common initialization to
15734         static global variables.
15735
15736         Fixes #50425.
15737
15738         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
15739         every value type to go through, even if it was void.  Fix that. 
15740
15741         * cs-tokenizer.cs: Use is_identifier_start_character on the start
15742         character of the define, and the is_identifier_part_character for
15743         the rest of the string.
15744
15745 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
15746
15747         * expression.cs (UnaryMutator.EmitCode): When I updated
15748         LocalVariableReference.DoResolve, I overdid it, and dropped an
15749         optimization done on local variable references.
15750
15751 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
15752
15753         * ecore.cs: Convert the return from Ldlen into an int.
15754
15755 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
15756
15757         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
15758         the accessibility, this is a special case for toplevel non-public
15759         classes (internal for instance).
15760
15761 2003-10-20  Nick Drochak <ndrochak@gol.com>
15762
15763         * ecore.cs: Fix typo and build.  Needed another right paren.
15764
15765 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
15766
15767         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
15768         `internal' case regular and protected, but not allowing protected
15769         to be evaluated later.  Bug 49840
15770
15771 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
15772
15773         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
15774         to kb.Nlast, and not the kb.nFirst to isolate the switch
15775         statement.
15776
15777         Extract the underlying type, so enumerations of long/ulong are
15778         treated like long/ulong.
15779
15780 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
15781
15782         * expression.cs (New): Overload the meaning of RequestedType to
15783         track the possible creation of the NewDelegate type, since
15784         DoResolve is invoked more than once for new constructors on field
15785         initialization.
15786
15787         See bugs: #48800 and #37014
15788
15789         * cs-parser.jay (declare_local_constants): Take an arraylist
15790         instead of a single constant.
15791
15792         (local_constant_declaration): It should take a
15793         constant_declarators, not a constant_declarator.  Fixes 49487
15794
15795         * convert.cs: Fix error report.
15796
15797 2003-10-13 Jackson Harper <jackson@ximian.com>
15798
15799         * typemanager.cs (TypeToCoreType): Add float and double this fixes
15800         bug #49611
15801
15802 2003-10-09  Martin Baulig  <martin@ximian.com>
15803
15804         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
15805         to the .ctor.
15806         (MethodCore.DoDefineParameters): Removed the TypeContainer
15807         argument; use the DeclSpace which was passed to the .ctor instead.
15808         (MethodCore.CheckParameter): Take a DeclSpace instead of a
15809         TypeContainer; we only need a DeclSpace here.
15810
15811 2003-10-09  Martin Baulig  <martin@ximian.com>
15812
15813         * class.cs (MethodData): Added additional `DeclSpace ds' argument
15814         to the .ctor.
15815         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
15816         EmitContext's .ctor.    
15817
15818 2003-10-09  Martin Baulig  <martin@ximian.com>
15819
15820         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
15821         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
15822         AsAccessible(), moved them as well.
15823
15824         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
15825
15826 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
15827
15828         * cs-parser.jay : Renamed yyName to yyNames related to jay.
15829
15830 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
15831
15832         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
15833         generation for >=, as spotted by Paolo, bug 48679.  
15834         Patch from David Waite.
15835
15836         * cs-tokenizer.cs: Add handling for #pragma.
15837
15838         * cs-parser.jay: Allow for both yield and yield return in the
15839         syntax.  The anti-cobolization of C# fight will go on!
15840
15841         * class.cs (TypeBuilder.DefineType): Catch error condition here
15842         (Parent.DefineType erroring out and returning null).
15843
15844         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15845         coping with enumerations variables, we were mistakenly processing
15846         them as a regular value type instead of built-in types.  Fixes the
15847         bug #48063
15848
15849         * typemanager.cs (IsBuiltinOrEnum): New method.
15850
15851 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
15852
15853         * cs-parser.jay: Upgrade: yield now needs the return clause.
15854
15855 2003-09-19  Martin Baulig  <martin@ximian.com>
15856
15857         * decl.cs (MemberCache.SetupCacheForInterface): Take a
15858         `MemberCache parent' argument.  Normally, an interface doesn't
15859         have a parent type except System.Object, but we use this in gmcs
15860         for generic type parameters.
15861
15862 2003-09-18  Martin Baulig  <martin@ximian.com>
15863
15864         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
15865         on `type.IsInterface'; don't check whether the type has a parent
15866         to determine whether it's an interface.
15867
15868 2003-09-15  Martin Baulig  <martin@ximian.com>
15869
15870         * class.cs (TypeContainer.DefineType): Added an error flag to
15871         avoid reporting duplicate CS0146's ("class definition is
15872         circular.").
15873
15874         * driver.cs (Driver.MainDriver): Abort if
15875         RootContext.ResolveTree() reported any errors.
15876
15877 2003-09-07  Martin Baulig  <martin@ximian.com>
15878
15879         * report.cs (Error, Warning): Added overloaded versions which take
15880         a `params object[] args' and call String.Format().
15881
15882 2003-09-07  Martin Baulig  <martin@ximian.com>
15883
15884         * decl.cs (DeclSpace..ctor): Don't call
15885         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
15886         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
15887         (DeclSpace.RecordDecl): New method.
15888
15889         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
15890
15891 2003-09-02  Ravi Pratap  <ravi@ximian.com>
15892
15893         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
15894         value attributes to be applied to ParameterBuilders.
15895
15896         * class.cs (MethodCore.LabelParameters): Make static and more
15897         generic so that it can be used from other places - like interface
15898         methods, for instance.
15899
15900         * interface.cs (Interface.Emit): Call LabelParameters before
15901         emitting attributes on the InterfaceMethod.
15902
15903 2003-08-26  Martin Baulig  <martin@ximian.com>
15904
15905         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
15906         resolving aliases; fixes #47927.
15907
15908 2003-08-26  Martin Baulig  <martin@ximian.com>
15909
15910         * statement.cs (Using.DoResolve): This is internally emitting a
15911         try/finally clause, so we need to set ec.NeedExplicitReturn if we
15912         do not always return.  Fixes #47681.
15913
15914 2003-08-26  Martin Baulig  <martin@ximian.com>
15915
15916         * decl.cs (MemberCore): Moved WarningNotHiding(),
15917         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
15918         into MemberBase.
15919         (AdditionResult): Make this nested in DeclSpace.
15920         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
15921         argument; call NamespaceEntry.Define() unless we're nested in a
15922         class or struct.
15923
15924         * namespace.cs (Namespace.DefineName): New public function.  This
15925         is called from DeclSpace's .ctor to add 
15926         (Namespace.Lookup): Include DeclSpaces in the lookup.
15927
15928         * class.cs (Operator): Derive from MemberBase, not MemberCore.
15929
15930         * const.cs (Const): Derive from MemberBase, not MemberCore.     
15931
15932 2003-08-25  Martin Baulig  <martin@ximian.com>
15933
15934         * convert.cs (Convert.ExplicitReferenceConversion): When
15935         converting from an interface type to a class, unbox if the target
15936         type is a struct type.  Fixes #47822.
15937
15938 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15939
15940         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
15941         #47854.
15942
15943 2003-08-22  Martin Baulig  <martin@ximian.com>
15944
15945         * class.cs (TypeManager.DefineType): When defining a nested type,
15946         call DefineType() on our parent; fixes #47801.
15947
15948 2003-08-22  Martin Baulig  <martin@ximian.com>
15949
15950         * class.cs (MethodData.Define): While checking if a method is an
15951         interface implementation, improve the test a bit more to fix #47654.
15952
15953 2003-08-22  Martin Baulig  <martin@ximian.com>
15954
15955         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
15956         correctly; fixes #47722.
15957
15958 2003-08-22  Martin Baulig  <martin@ximian.com>
15959
15960         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
15961         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
15962
15963         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
15964
15965 2003-08-22  Martin Baulig  <martin@ximian.com>
15966
15967         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
15968         can only be assigned in static constructors.  Fixes #47161.
15969
15970 2003-08-22  Martin Baulig  <martin@ximian.com>
15971
15972         Rewrote and improved the flow analysis code.
15973
15974         * flowbranching.cs (FlowBranching): Make this class abstract.
15975         (FlowBranching.CreateBranching): New static function to create a
15976         new flow branching.
15977         (FlowBranchingBlock, FlowBranchingException): New classes.
15978         (FlowBranching.UsageVector.Type): New public readonly field.
15979         (FlowBranching.UsageVector.Breaks): Removed the setter.
15980         (FlowBranching.UsageVector.Returns): Removed the setter.
15981         (FlowBranching.UsageVector): Added Break(), Return(),
15982         NeverReachable() and Throw() methods to modify the reachability.
15983         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
15984         done by FlowBranching.Merge().
15985         (FlowBranching.UsageVector.MergeChild): New method; merges the
15986         merge result into the current vector.
15987         (FlowBranching.Merge): New abstract method to merge a branching.
15988
15989 2003-08-12  Martin Baulig  <martin@ximian.com>
15990
15991         * expression.cs (Indirection.CacheTemporaries): Create the
15992         LocalTemporary with the pointer type, not its element type.
15993
15994 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
15995
15996         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
15997         token was a keyword or not.
15998
15999         Add `error' options where an IDENTIFIER was expected;  Provide
16000         CheckToken and CheckIdentifierToken convenience error reporting
16001         functions. 
16002
16003         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
16004
16005         * decl.cs: Rename `NamespaceEntry Namespace' public field into
16006         NameSpaceEntry NameSpaceEntry.
16007
16008         (LookupInterfaceOrClass): Avoid creating a full qualified name
16009         from namespace and name: avoid doing lookups when we know the
16010         namespace is non-existant.   Use new Tree.LookupByNamespace which
16011         looks up DeclSpaces based on their namespace, name pair.
16012
16013         * driver.cs: Provide a new `parser verbose' to display the
16014         exception thrown during parsing.  This is turned off by default
16015         now, so the output of a failure from mcs is more graceful.
16016
16017         * namespace.cs: Track all the namespaces defined in a hashtable
16018         for quick lookup.
16019
16020         (IsNamespace): New method
16021
16022 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
16023
16024         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
16025         we know that we need to concatenate (full typename can never be
16026         null). 
16027
16028         * class.cs: ditto.
16029
16030         * statement.cs: Use a bitfield;  Do not initialize to null things
16031         which are done by the constructor by default.
16032
16033         * cs-parser.jay: bug fix, parameter was 4, not 3.
16034
16035         * expression.cs: Just use the property;
16036
16037         * statement.cs: No need for GetVariableInfo method.
16038
16039 2003-08-08  Martin Baulig  <martin@ximian.com>
16040
16041         * flowanalysis.cs (FlowReturns): This is now nested in the
16042         `FlowBranching' class.
16043         (MyBitVector): Moved this here from statement.cs.
16044         (FlowBranching.SiblingType): New enum type.
16045         (FlowBranching.CreateSibling): Added `SiblingType' argument.
16046
16047 2003-08-07  Martin Baulig  <martin@ximian.com>
16048
16049         * flowanalysis.cs (FlowBranchingType): This is now nested in the
16050         `FlowBranching' class and called `BranchingType'.
16051
16052 2003-08-07  Martin Baulig  <martin@ximian.com>
16053
16054         * flowanalysis.cs: Moved all the control flow analysis code into
16055         its own file.
16056
16057 2003-08-07  Martin Baulig  <martin@ximian.com>
16058
16059         * assign.cs (Assign.DoResolve): `target' must either be an
16060         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
16061         #37319.
16062
16063 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
16064
16065         * expression.cs (BinaryMethod): This kind of expression is created by the
16066         Binary class if it determines that the operator has to be handled
16067         by a method.
16068
16069         (BinaryDelegate): This kind of expression is created if we are
16070         dealing with a + or - operator on delegates.
16071
16072         (Binary): remove method, argumetns, and DelegateOperator: when
16073         dealing with methods, 
16074
16075         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
16076
16077         * statement.cs (Block): use bitfields for the three extra booleans
16078         we had in use.   Remove unused topblock parameter.
16079
16080         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
16081
16082         * assign.cs: Drop extra unneeded tests.
16083
16084 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
16085
16086         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
16087
16088         * statement.cs (Foreach): Use VariableStorage instead of
16089         LocalBuilders.   
16090
16091         * codegen.cs (VariableStorage): New class used by clients that
16092         require a variable stored: locals or fields for variables that
16093         need to live across yield.
16094
16095         Maybe provide a convenience api for EmitThis+EmitLoad?
16096
16097         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
16098         these bad boys.
16099
16100 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
16101
16102         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
16103         RemapParameterLValue): New methods that are used to turn a
16104         precomputed FieldInfo into an expression like this:
16105
16106                 instance.FieldInfo
16107
16108         The idea is to use this instead of making LocalVariableReference
16109         have more than one meaning.
16110
16111         * cs-parser.jay: Add error production to BASE.
16112
16113         * ecore.cs: Deal with TypeManager.GetField returning null, which
16114         is now a valid return value.
16115
16116         (FieldExprNoAddress): New expression for Fields whose address can
16117         not be taken.
16118
16119         * expression.cs (LocalVariableReference): During the resolve
16120         phases, create new expressions if we are in a remapping context.
16121         Remove code that dealt with remapping here.
16122
16123         (ParameterReference): same.
16124
16125         (ProxyInstance): New expression, like the `This' expression, but
16126         it is born fully resolved.  We know what we are doing, so remove
16127         the errors that are targeted to user-provided uses of `this'.
16128
16129         * statement.cs (Foreach): our variable is now stored as an
16130         Expression;  During resolution, follow the protocol, dont just
16131         assume it will return this.
16132
16133 2003-08-06  Martin Baulig  <martin@ximian.com>
16134
16135         * support.cs (SeekableStreamReader.cs): New public class.
16136
16137         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
16138         SeekableStreamReader instead of the normal StreamReader.
16139
16140 2003-08-04  Martin Baulig  <martin@ximian.com>
16141
16142         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
16143         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
16144         deambiguate casts and delegate invocations.
16145         (parenthesized_expression): Use the new tokens to ensure this is
16146         not a cast of method invocation.
16147
16148         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
16149         when reading a `)' and Deambiguate_CloseParens () was previously
16150         called.
16151
16152         * expression.cs (ParenthesizedExpression): New class.  This is
16153         just used for the CS0075 test.
16154         (Binary.DoResolve): Check for CS0075.   
16155
16156 2003-07-29  Ravi Pratap  <ravi@ximian.com>
16157
16158         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
16159         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
16160         reference comparison.
16161
16162         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
16163         examine the ReturnType for equality - this is necessary in the
16164         cases of implicit and explicit operators whose signature also
16165         includes the return type.
16166
16167 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
16168
16169         * namespace.cs: Cache the result of the namespace computation,
16170         instead of computing it every time.
16171
16172 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
16173
16174         * decl.cs: Use a global arraylist that we reuse over invocations
16175         to avoid excesive memory consumption.  Reduces memory usage on an
16176         mcs compile by one meg (45 average).
16177
16178         * typemanager.cs (LookupTypeReflection): In .NET pointers are
16179         private, work around that.
16180
16181 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
16182
16183         * literal.cs (IntLiteral): Define Zero and One static literals. 
16184
16185         * cs-parser.jay (integer_literal): use static literals to reduce
16186         memory usage for the most used literals (0, 1 and -1).  211kb
16187         reduced in memory usage.
16188
16189         Replace all calls to `new ArrayList' with `new
16190         ArrayList(4)' which is a good average number for most allocations,
16191         and also requires only 16 bytes of memory for its buffer by
16192         default. 
16193
16194         This reduced MCS memory usage in seven megabytes for the RSS after
16195         bootstrapping.
16196
16197 2003-07-28  Ravi Pratap  <ravi@ximian.com>
16198
16199         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
16200         handle params methods the correct way by forming only one
16201         applicable set with params and normal methods in them. Earlier we
16202         were looking at params methods only if we found no normal methods
16203         which was not the correct thing to do.
16204
16205         (Invocation.BetterFunction): Take separate arguments indicating
16206         when candidate and the best method are params methods in their
16207         expanded form.
16208
16209         This fixes bugs #43367 and #46199.
16210
16211         * attribute.cs: Documentation updates.
16212
16213         (CheckAttribute): Rename to CheckAttributeTarget.
16214         (GetValidPlaces): Rename to GetValidTargets.
16215
16216         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
16217         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
16218
16219         Fixes bug #44468.
16220
16221 2003-07-28  Martin Baulig  <martin@ximian.com>
16222
16223         * class.cs (TypeContainer.DefineMembers): Use the base type's full
16224         name when looking up the base class of a nested class.  Fixes #46977.
16225
16226 2003-07-26  Martin Baulig  <martin@ximian.com>
16227
16228         * expression.cs (Indexers.Indexer): New nested struct; contains
16229         getter, setter and the indexer's type.
16230         (Indexers.Properties): This is now an ArrayList of
16231         Indexers.Indexer's.
16232         (IndexerAccess.DoResolveLValue): Correctly set the type if the
16233         indexer doesn't have any getters.
16234
16235         * assign.cs (Assign.DoResolve): Also do the implicit conversions
16236         for embedded property and indexer assignments.
16237
16238 2003-07-26  Martin Baulig  <martin@ximian.com>
16239
16240         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
16241         preprocessor directive is not the first non-whitespace character
16242         on a line.
16243
16244 2003-07-26  Martin Baulig  <martin@ximian.com>
16245
16246         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
16247         namespace parsing, follow the spec more closely.
16248
16249         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
16250         NamespaceEntry.Lookup().
16251
16252 2003-07-25  Martin Baulig  <martin@ximian.com>
16253
16254         * MethodCore.cs (OverridesSomething): New public field; it's set
16255         from TypeContainer.DefineMembers if this method overrides
16256         something (which doesn't need to be a method).  Fix #39462.
16257
16258 2003-07-25  Ravi Pratap  <ravi@ximian.com>
16259
16260         * typemanager.cs (GetMembers): Ensure that the list of members is
16261         reversed. This keeps things in sync.
16262
16263         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
16264         find an AttributeUsage attribute.
16265
16266         * expression.cs (Invocation.OverloadResolve): Perform the check
16267         which disallows Invoke to be directly called on a Delegate.
16268
16269         (Error_InvokeOnDelegate): Report error cs1533.
16270
16271 2003-07-25  Martin Baulig  <martin@ximian.com>
16272
16273         * expression.cs (Indexers.GetIndexersForType): Only look in the
16274         interface hierarchy if the requested type is already an
16275         interface.  Fixes #46788 while keeping #46502 fixed.
16276
16277 2003-07-25  Martin Baulig  <martin@ximian.com>
16278
16279         * class.cs (TypeContainer.DefineMembers): Check whether all
16280         readonly fields have been assigned and report warning CS0649 if
16281         not.
16282
16283         * statement.cs (LocalInfo.IsFixed): Always return true if this is
16284         a valuetype.
16285
16286 2003-07-24  Ravi Pratap  <ravi@ximian.com>
16287
16288         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
16289         returned from GetMethods to make things consistent with the
16290         assumptions MCS makes about ordering of methods.
16291
16292         This should comprehensively fix bug #45127 and it does :-)
16293
16294         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
16295         ordering is actually reverse.
16296
16297         * Clean up some debug messages I left lying around.
16298
16299         * interface.cs (Populate*): Get rid of code which emits attributes
16300         since the stage in which we emit attributes is the 'Emit' stage,
16301         not the define stage.
16302
16303         (Emit): Move attribute emission for interface members here.
16304
16305 2003-07-22  Ravi Pratap  <ravi@ximian.com>
16306
16307         * expression.cs (Invocation.OverloadResolve): Follow the spec more
16308         closely: we eliminate methods in base types when we have an
16309         applicable method in a top-level type.
16310
16311         Please see section 14.5.5.1 for an exact description of what goes
16312         on. 
16313
16314         This fixes bug #45127 and a host of other related to corlib compilation.
16315
16316         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
16317         array is the method corresponding to the top-level type (this is
16318         because of the changes made to icall.c) so we change this
16319         accordingly.
16320
16321         (MethodGroupExpr.Name): This too.
16322
16323         * typemanager.cs (GetElementType): New method which does the right
16324         thing when compiling corlib. 
16325
16326         * everywhere: Make use of the above in the relevant places.
16327
16328 2003-07-22  Martin Baulig  <martin@ximian.com>
16329
16330         * cs-parser.jay (invocation_expression): Moved
16331         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
16332         `cast_expression', but create a InvocationOrCast which later
16333         resolves to either an Invocation or a Cast.
16334
16335         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
16336         method; call this before EmitStatement() to make sure that this
16337         expression can be used as a statement.
16338
16339         * expression.cs (InvocationOrCast): New class; resolves to either
16340         an Invocation or a Cast.
16341
16342         * statement.cs (StatementExpression): Call ResolveStatement() on
16343         the ExpressionStatement before emitting it.
16344
16345 2003-07-21  Martin Baulig  <martin@ximian.com>
16346
16347         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
16348         `ref' and `out' attributes match; fixes #46220.
16349         (MemberAccess.ResolveMemberAccess): You can't reference a type
16350         through an expression; fixes #33180.
16351         (Indexers.GetIndexersForType): Don't return the indexers from
16352         interfaces the class implements; fixes #46502.
16353
16354 2003-07-21  Martin Baulig  <martin@ximian.com>
16355
16356         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
16357         CS0661 checks; fixes bug #30442.
16358
16359 2003-07-21  Martin Baulig  <martin@ximian.com>
16360
16361         * decl.cs (AdditionResult): Added `Error'.
16362
16363         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
16364
16365         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
16366         makes cs0031.cs actually work.
16367
16368 2003-07-20  Martin Baulig  <martin@ximian.com>
16369
16370         * namespace.cs: Fixed that bug which caused a crash when compiling
16371         the debugger's GUI.
16372
16373 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
16374
16375         * typemanager.cs (LookupTypeReflection): Never expose types which
16376         are NotPublic, NestedPrivate, NestedAssembly, or
16377         NestedFamANDAssem.  We used to return these, and later do a check
16378         that would report a meaningful error, but the problem is that we
16379         would not get the real match, if there was a name override.
16380
16381 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
16382
16383         * namespace.cs (Namespace, Name): Do not compute the namespace
16384         name dynamically, compute it in the constructor.  This reduced
16385         memory usage by 1697 KB.
16386
16387         * driver.cs: Use --pause to pause at the end.
16388
16389 2003-07-17  Peter Williams  <peter@newton.cx>
16390
16391         * Makefile: Change the name of the test target so that it doesn't
16392         conflict with the recursive test target.
16393
16394 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
16395
16396         * expression.cs (LocalVariableReference.Emit, EmitAssign,
16397         AddressOf): Do not use EmitThis, that was wrong, use the actual
16398         this pointer.
16399
16400 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
16401
16402         * class.cs (MethodData.Define): While checking if a method is an
16403         interface implementation, improve the test: If we are not public
16404         (use new test here: use the computed MethodAttributes directly,
16405         instead of the parsed modifier flags) check if the `implementing'
16406         method comes from an interface or not.
16407
16408         * pending.cs (VerifyPendingMethods): Slightly better error
16409         message.
16410
16411         * makefile: add test target that does the mcs bootstrap.
16412
16413 2003-07-16  Ravi Pratap  <ravi@ximian.com>
16414
16415         * interface.cs (Define): Do nothing here since there are no
16416         members to populate etc. Move the attribute emission out of here
16417         since this was just totally the wrong place to put it. Attribute
16418         application happens during the 'Emit' phase, not in the 'Define'
16419         phase.
16420
16421         (Emit): Add this method and move the attribute emission here
16422
16423         * rootcontext.cs (EmitCode): Call the Emit method on interface
16424         types too.
16425
16426 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16427
16428         * expression.cs (OverloadResolve): Report error only if Location
16429         is not 'Null' which means that there was a probe going on.
16430
16431 2003-07-14  Martin Baulig  <martin@ximian.com>
16432
16433         * expression.cs (ConditionalLogicalOperator): New public class to
16434         implement user defined conditional logical operators.
16435         This is section 14.11.2 in the spec and bug #40505.
16436
16437 2003-07-14  Martin Baulig  <martin@ximian.com>
16438
16439         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
16440
16441 2003-07-14  Martin Baulig  <martin@ximian.com>
16442
16443         * codegen.cs (EmitContext.InFixedInitializer): New public field.
16444
16445         * ecore.cs (IVariable.VerifyFixed): New interface method.
16446
16447         * expression.cs (Unary.ResolveOperator): When resolving the `&'
16448         operator, check whether the variable is actually fixed.  Fixes bug
16449         #36055.  Set a variable definitely assigned when taking its
16450         address as required by the spec.
16451
16452         * statement.cs (LocalInfo.IsFixed): New field.
16453         (LocalInfo.MakePinned): Set `IsFixed' to true.
16454
16455 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16456
16457         * attribute.cs (Attribute.Resolve): While doing a Member lookup
16458         for .ctors, ensure that we only ask for members declared in the
16459         attribute type (BindingFlags.DeclaredOnly).
16460
16461         Fixes bug #43632.
16462
16463         * expression.cs (Error_WrongNumArguments): Report error 1501
16464         correctly the way CSC does.
16465
16466 2003-07-13  Martin Baulig  <martin@ximian.com>
16467
16468         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
16469         lookup on the fully qualified name, to make things like "X.X" work
16470         where "X.X" is a fully qualified type name, but we also have a
16471         namespace "X" in the using list.  Fixes #41975.
16472
16473 2003-07-13  Martin Baulig  <martin@ximian.com>
16474
16475         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
16476         function. If we're a CompoundAssign, we need to create an embedded
16477         CompoundAssign, not an embedded Assign.
16478         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
16479         Fixes #45854.
16480
16481 2003-07-13  Martin Baulig  <martin@ximian.com>
16482
16483         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
16484         work to fix bug #46088.
16485
16486 2003-07-13  Ravi Pratap <ravi@ximian.com>
16487
16488         * class.cs (Operator.Emit): Do not emit attributes here - it is
16489         taken care of by the Method class that we delegate too. This takes
16490         care of bug #45876.
16491
16492 2003-07-10  Martin Baulig  <martin@ximian.com>
16493
16494         * expression.cs (TypeOfVoid): New class.
16495         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
16496
16497 2003-07-10  Martin Baulig  <martin@ximian.com>
16498
16499         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
16500         bug #35957.
16501
16502 2003-07-10  Martin Baulig  <martin@ximian.com>
16503
16504         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
16505         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
16506
16507         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
16508
16509         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
16510
16511 2003-07-10  Martin Baulig  <martin@ximian.com>
16512
16513         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
16514         of decimal.  Fixes #42850.
16515
16516         NOTE: I also fixed the created byte blob, but this doesn't work on
16517         the MS runtime and csc never produces any byte blobs for decimal
16518         arrays.
16519
16520 2003-07-10  Martin Baulig  <martin@ximian.com>
16521
16522         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
16523         structs; fixes #32068.
16524         (Block.AddChildVariableNames): Fixed #44302.
16525
16526 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16527
16528         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
16529
16530 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16531
16532         * attribute.cs: And this test is onger needed.
16533
16534 2003-07-08  Martin Baulig  <martin@ximian.com>
16535
16536         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
16537         inaccessible types.  Fixes #36313.
16538
16539         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
16540
16541         * namespace.cs (NamespaceEntry): Create implicit entries for all
16542         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
16543         implicit entries for N1.N2 and N1.
16544
16545 2003-07-08  Martin Baulig  <martin@ximian.com>
16546
16547         Rewrote the handling of namespaces to fix a lot of the issues
16548         wrt. `using' aliases etc.
16549
16550         * namespace.cs (Namespace): Splitted this class into a
16551         per-assembly `Namespace' and a per-file `NamespaceEntry'.
16552
16553         * typemanager.cs (TypeManager.IsNamespace): Removed.
16554         (TypeManager.ComputeNamespaces): Only compute namespaces from
16555         loaded assemblies here, not the namespaces from the assembly we're
16556         currently compiling.
16557
16558 2003-07-08  Martin Baulig  <martin@ximian.com>
16559
16560         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
16561
16562 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16563
16564         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
16565         already fixed it.  
16566
16567         I thought about the memory savings here, but LookupTypeReflection
16568         is used under already very constrained scenarios.  Compiling
16569         corlib or mcs only exposes one hit, so it would not really reduce
16570         any memory consumption.
16571
16572 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16573
16574         * typemanager.cs: fixes bug #45889 by only adding public types from
16575         other assemblies to the list of known types.
16576
16577 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16578
16579         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
16580         on the type we resolved.
16581
16582 2003-07-05  Martin Baulig  <martin@ximian.com>
16583
16584         * pending.cs (PendingImplementation.ParentImplements): Don't
16585         create the proxy if the parent is abstract.
16586
16587         * class.cs (TypeContainer.DefineIndexers): Process explicit
16588         interface implementations first.  Fixes #37714.
16589
16590 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
16591
16592         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
16593         defined recursively;  but since we modify the input parameters
16594         (left is set to `this' temporarily), we reset this value if the
16595         left_is_explicit is false, which gives the original semantics to
16596         the code.  
16597
16598         * literal.cs (NullPointer): new class used to represent a null
16599         literal in a pointer context.
16600
16601         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
16602         type is a pointer, use a NullPointer object instead of a
16603         NullLiteral.   Closes 43687
16604
16605         (ExplicitConversion): Convert pointer values using
16606         the conv opcode to the proper type.
16607
16608         * ecore.cs (New): change ValueTypeVariable property into a method,
16609         that returns whether the valuetype is suitable for being used.
16610
16611         * expression.cs (Binary.DoNumericPromotions): Only return if we
16612         the int constant was a valid uint, and we can return both left and
16613         right as uints.  If not, we continue processing, to trigger the
16614         type conversion.  This fixes 39018.
16615
16616         * statement.cs (Block.EmitMeta): During constant resolution, set
16617         the CurrentBlock property on the emitcontext, so that we resolve
16618         constants propertly.
16619
16620 2003-07-02  Martin Baulig  <martin@ximian.com>
16621
16622         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
16623         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
16624
16625         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
16626         than emitting it here.
16627
16628         * statement.cs: Fixed some more flow analysis bugs.
16629
16630 2003-07-02  Martin Baulig  <martin@ximian.com>
16631
16632         * class.cs (MethodData.Define): When implementing interface
16633         methods, set Final unless we're Virtual.
16634
16635         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
16636         check work for interface methods.
16637
16638 2003-07-01  Martin Baulig  <martin@ximian.com>
16639
16640         * ecore.cs (EmitContext.This): Replaced this property with a
16641         GetThis() method which takes a Location argument.  This ensures
16642         that we get the correct error location for a CS0188.
16643
16644 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
16645
16646         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
16647         ImplicitStandardConversion.
16648
16649         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
16650
16651 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
16652
16653         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
16654         optimization.
16655
16656 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
16657
16658         * class.cs (Constructor.Define): Turn off initlocals for unsafe
16659         constructors.
16660
16661         (MethodData.Define): Turn off initlocals for unsafe methods.
16662
16663 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
16664
16665         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
16666         complete;  Fixes #37521.
16667
16668         * delegate.cs: Use Modifiers.TypeAttr to compute the
16669         TypeAttributes, instead of rolling our own.  This makes the flags
16670         correct for the delegates.
16671
16672 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
16673
16674         * class.cs (Constructor.Define): Set the private flag for static
16675         constructors as well.
16676
16677         * cs-parser.jay (statement_expression): Set the return value to
16678         null, to avoid a crash when we catch an error.
16679
16680 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
16681
16682         * cs-parser.jay: Applied patch from Jackson that adds support for
16683         extern and unsafe modifiers to destructor declarations.
16684
16685         * expression.cs: Report error 21 if the user is trying to index a
16686         System.Array.
16687
16688         * driver.cs: Add an error message, suggested by the bug report.
16689
16690         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
16691         if we do not have a ": this ()" constructor initializer.  Fixes 45149
16692
16693 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
16694
16695         * namespace.cs: Add some information to reduce FAQs.
16696
16697 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
16698
16699         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
16700         underlying enumeration types.  Fixes #43915.
16701
16702         * expression.cs: Treat ushort/short as legal values to be used in
16703         bitwise operations.
16704
16705 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
16706
16707         * delegate.cs: transfer custom attributes for paramenters from
16708         the delegate declaration to Invoke and BeginInvoke.
16709
16710 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
16711
16712         * attribute.cs: handle custom marshalers and emit marshal info
16713         for fields, too.
16714
16715 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
16716
16717         * makefile.gnu: Added anonymous.cs to the compiler sources.
16718
16719 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
16720
16721         * iterators.cs: Change the name of the proxy class to include two
16722         underscores.
16723
16724         * cs-parser.jay: Update grammar to include anonymous methods.
16725
16726         * anonymous.cs: new file.
16727
16728 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
16729
16730         * class.cs (Field.Define): Add missing test for pointers and
16731         safety. 
16732
16733 2003-05-27  Ravi Pratap  <ravi@ximian.com>
16734
16735         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
16736         we use the stobj opcode.
16737
16738         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
16739         since it wasn't the correct fix. 
16740
16741         It still is puzzling that we are required to use stobj for IntPtr
16742         which seems to be a ValueType.
16743
16744 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
16745
16746         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
16747         during regular simple name resolution.   Now, the trick is that
16748         instead of returning for processing the simplename, we do a
16749         TypeManager.LookupType (ie, a rooted lookup as opposed to a
16750         contextual lookup type).   If a match is found, return that, if
16751         not, return for further composition.
16752
16753         This fixes long-standing 30485.
16754
16755         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16756         using the address to initialize an object, do an Stobj instead of
16757         using the regular Stelem.
16758
16759         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
16760         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
16761         Because if we are a BaseIndexerAccess that value will be true.
16762         Fixes 43643.
16763
16764         * statement.cs (GotoCase.Resolve): Return after reporting an
16765         error, do not attempt to continue. 
16766
16767         * expression.cs (PointerArithmetic.Emit): If our operand is a
16768         long, convert our constants to match the operand before
16769         multiplying.  Convert to I type before adding.   Fixes 43670.
16770
16771 2003-05-14  Ravi Pratap  <ravi@ximian.com>
16772
16773         * enum.cs (ImplicitConversionExists) : Rename to
16774         ImplicitEnumConversionExists to remove ambiguity. 
16775
16776         * ecore.cs (NullCast): New type of cast expression class which
16777         basically is very similar to EmptyCast with the difference being
16778         it still is a constant since it is used only to cast a null to
16779         something else
16780         (eg. (string) null)
16781
16782         * convert.cs (ImplicitReferenceConversion): When casting a null
16783         literal, we return a NullCast.
16784
16785         * literal.cs (NullLiteralTyped): Remove - I don't see why this
16786         should be around anymore.
16787
16788         The renaming (reported was slightly wrong). Corrections:
16789
16790         ConvertImplicitStandard -> ImplicitConversionStandard
16791         ConvertExplicitStandard -> ExplicitConversionStandard
16792
16793         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
16794         before passing them in !
16795
16796         * convert.cs (ImplicitConversionStandard): When comparing for
16797         equal expr and target types, ensure that expr is not a
16798         NullLiteral.
16799
16800         In general, we must not be checking (expr_type ==
16801         target_type) in the top level conversion methods
16802         (ImplicitConversion, ExplicitConversion etc). This checking is
16803         done in the methods that they delegate to.
16804
16805 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
16806
16807         * convert.cs: Move Error_CannotConvertType,
16808         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
16809         ImplicitNumericConversion, ImplicitConversionExists,
16810         ImplicitUserConversionExists, StandardConversionExists,
16811         FindMostEncompassedType, FindMostSpecificSource,
16812         FindMostSpecificTarget, ImplicitUserConversion,
16813         ExplicitUserConversion, GetConversionOperators,
16814         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
16815         TryImplicitIntConversion, Error_CannotConvertImplicit,
16816         ConvertImplicitRequired, ConvertNumericExplicit,
16817         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
16818         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
16819         its own file.
16820
16821         Perform the following renames:
16822
16823         StandardConversionExists -> ImplicitStandardConversionExists
16824         ConvertImplicit -> ImplicitConversion
16825         ConvertImplicitStandard -> ImplicitStandardConversion
16826         TryImplicitIntConversion -> ImplicitIntConversion
16827         ConvertImplicitRequired -> ImplicitConversionRequired
16828         ConvertNumericExplicit -> ExplicitNumericConversion
16829         ConvertReferenceExplicit -> ExplicitReferenceConversion
16830         ConvertExplicit -> ExplicitConversion
16831         ConvertExplicitStandard -> ExplicitStandardConversion
16832
16833 2003-05-19  Martin Baulig  <martin@ximian.com>
16834
16835         * statement.cs (TypeInfo.StructInfo): Made this type protected.
16836         (TypeInfo): Added support for structs having structs as fields.
16837
16838         * ecore.cs (FieldExpr): Implement IVariable.
16839         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
16840         VariableInfo for the field.
16841
16842 2003-05-18  Martin Baulig  <martin@ximian.com>
16843
16844         * expression.cs (This.DoResolve): Report a CS0027 if we're
16845         emitting a field initializer.
16846
16847 2003-05-18  Martin Baulig  <martin@ximian.com>
16848
16849         * expression.cs (This.ResolveBase): New public function.
16850         (This.DoResolve): Check for CS0188.
16851
16852         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
16853         This.Resolve().
16854
16855         * ecore.cs (MethodGroupExpr.DoResolve): Set the
16856         `instance_expression' to null if we don't have any non-static
16857         methods.
16858
16859 2003-05-18  Martin Baulig  <martin@ximian.com>
16860
16861         Reworked the way how local variables and parameters are handled by
16862         the flow analysis code.
16863
16864         * statement.cs (TypeInfo, VariableMap): New public classes.
16865         (VariableInfo): New public class.  This is now responsible for
16866         checking whether a variable has been assigned.  It is used for
16867         parameters and local variables.
16868         (Block.EmitMeta): Take the InternalParameters as argument; compute
16869         the layout of the flow vectors here.
16870         (Block.LocalMap, Block.ParameterMap): New public properties.
16871         (FlowBranching): The .ctor doesn't get the InternalParameters
16872         anymore since Block.EmitMeta() now computes the layout of the flow
16873         vector.
16874         (MyStructInfo): This class is now known as `StructInfo' and nested
16875         in `TypeInfo'; we don't access this directly anymore.
16876
16877         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
16878         property and removed IsAssigned(), IsFieldAssigned(),
16879         SetAssigned() and SetFieldAssigned(); we now call them on the
16880         VariableInfo so we don't need to duplicate this code everywhere.
16881
16882         * expression.cs (ParameterReference): Added `Block block' argument
16883         to the .ctor.
16884         (LocalVariableReference, ParameterReference, This): The new
16885         VariableInfo class is now responsible for all the definite
16886         assignment stuff.
16887
16888         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
16889         IsParameterAssigned, SetParameterAssigned): Removed.
16890
16891 2003-05-18  Martin Baulig  <martin@ximian.com>
16892
16893         * typemanager.cs (InitCoreTypes): Try calling
16894         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
16895         the 3-args-version.  Corlib now also needs our `void_type'.
16896         (GetMethod): Added overloaded version which takes an optional
16897         `bool report_errors' to allow lookups of optional methods.
16898
16899 2003-05-12  Martin Baulig  <martin@ximian.com>
16900
16901         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
16902         only used for locals and not for parameters.
16903
16904 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
16905
16906         * support.cs (InternalParameters.ParameterType): Return the
16907         ExternalType of the parameter.
16908
16909         * parameter.cs (Parameter.ExternalType): drop the two arguments,
16910         they were unused.
16911
16912 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
16913
16914         * class.cs (MethodData.Define): Do not set the `newslot' on
16915         interface members, if they are also flagged as "override".
16916
16917         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
16918         better code for ++i and i++.  This only works for static fields
16919         and local variables.
16920
16921         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
16922         want to pull the DeclSpace out of the builder_to_declspace instead
16923         of the TypeBuilder (like in TypeContainer.FindMembers).
16924
16925         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
16926         instead of LookupTypeContainer.  Fixes the crash on .NET for
16927         looking up interface members.
16928
16929         * const.cs: Create our own emit context during the Definition
16930         stage, so that constants are evaluated in the proper context, when
16931         a recursive definition happens.
16932
16933 2003-05-11  Martin Baulig  <martin@ximian.com>
16934
16935         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
16936         new block for a switch section.
16937         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
16938         the adding/lookup in the switch block.  Fixes #39828.
16939
16940 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
16941
16942         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
16943         functionality: I needed to convert the data after I had performed
16944         the add/sub operation into the operands type size.
16945
16946         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
16947         pass the type for the box operation, otherwise the resulting
16948         object would have been of type object.
16949
16950         (BoxedCast): Add constructor to specify the type to box as.
16951
16952 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
16953
16954         * iterators.cs: I was reusing the `count' variable inadvertently,
16955         take steps to not allow this to happen.
16956
16957 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
16958
16959         * attribute.cs (Attribute.Resolve): Params attributes are encoded
16960         by creating an array at the point where the params starts and
16961         putting all those arguments there, then adjusting the size of the
16962         array.
16963
16964 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
16965
16966         * expression.cs (New.AddressOf): Implement interface
16967         IMemoryLocation.  This is used when the `new' operator is used in
16968         the context of an invocation to a method on a value type.
16969
16970         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
16971         example. 
16972
16973         * namespace.cs: Also check the using aliases here.
16974
16975         * driver.cs: Move the test for using validity after the types have
16976         been entered, so we do a single pass that also includes the using
16977         aliases. 
16978
16979         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
16980         in the regular case.   CreateSiblingForFinally is doing extra
16981         error checking.
16982
16983         * attribute.cs (GetAttributeArgumentExpression): Store the result
16984         on an out value, and use the return value to indicate failure
16985         instead of using null (which is a valid return for Constant.GetValue).
16986
16987         * statement.cs: Perform the analysis flow for the increment
16988         portion after the statement, because this will be the real flow of
16989         execution.  Fixes #42385
16990
16991         * codegen.cs (EmitContext.EmitArgument,
16992         EmitContext.EmitStoreArgument): New helper functions when the
16993         RemapToProxy flag is set.
16994
16995         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
16996         function.
16997
16998         Add support for remapping parameters. 
16999
17000         * iterators.cs: Propagate parameter values;  Store parameter
17001         values in the proxy classes.
17002
17003 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
17004
17005         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
17006         need a proxy reference;  I do not know what I was thinking
17007
17008         * cs-parser.jay (constructor_initializer): catch another error,
17009         and display nice message.
17010
17011         (field_declaration): catch void field declaration
17012         to flag a better error. 
17013
17014         * class.cs (MemberBase.CheckBase): Report an error instead of a
17015         warning if a new protected member is declared in a struct. 
17016         (Field.Define): catch the error of readonly/volatile.
17017
17018         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
17019
17020         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
17021         volatile variable is taken
17022
17023 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
17024
17025         * statement.cs (Fixed.Resolve): Report an error if we are not in
17026         an unsafe context.
17027
17028 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
17029
17030         * typemanager.cs: reuse the code that handles type clashes for
17031         delegates and enumerations.
17032
17033         * class.cs (Report28): Always report.
17034
17035         * expression.cs (EncodeAsAttribute): Allow nulls here.
17036
17037 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
17038
17039         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
17040         the functionality for testing whether an expression is valid for
17041         an attribute here.  Also handle the case of arrays of elements
17042         being stored. 
17043
17044         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
17045         encoding a linear array into an array of objects that are suitable
17046         to be passed to an CustomAttributeBuilder.
17047
17048         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
17049
17050         * ecore.cs: (FieldExpr): Handle field remapping here.
17051
17052         * iteratators.cs: Pass the instance variable (if the method is an
17053         instance method) to the constructors, so we can access the field
17054         variables on the class.
17055
17056         TODO: Test this with structs.  I think the THIS variable on
17057         structs might have to be a pointer, and not a refenrece
17058
17059 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
17060
17061         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
17062         local variables to fields in a proxy class.
17063
17064         * iterators.cs (PopulateProxy): Rename our internal fields to
17065         <XXX>.  
17066         Create a <THIS> field if we are an instance method, so we can
17067         reference our parent container variables.
17068         (MapVariable): Called back from the EmitContext code to enter a
17069         new variable to field mapping into the proxy class (we just create
17070         a FieldBuilder).
17071
17072         * expression.cs
17073         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
17074         for using the remapped locals to fields.
17075
17076         I placed the code here, because that gives the same semantics to
17077         local variables, and only changes the Emit code.
17078
17079         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
17080         statements inside iterators.
17081         (VariableInfo): Add a FieldBuilder for the cases when we are
17082         remapping local variables to fields in a proxy class
17083
17084         * ecore.cs (SimpleNameResolve): Avoid testing two times for
17085         current_block != null.
17086
17087         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
17088         not cope with strings, as it has been moved to the
17089         TableSwitchEmit.  Fixed bug in switch generation.
17090
17091         * expression.cs (New.DoResolve): Provide more context for the user
17092         when reporting an error.
17093
17094         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
17095         pointers. 
17096
17097         * expression.cs (MemberAccess.DoResolve): When we get a type back,
17098         check the permissions for it.  Note than in a type-resolution
17099         context the check was already present in DeclSpace.ResolveType,
17100         but was missing from the MemberAccess.
17101
17102         (ArrayCreation.CheckIndices): warn if the user has
17103         more nested levels of expressions, but there are no more
17104         dimensions specified.  Avoids crash on bug 41906.
17105
17106 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
17107
17108         * statement.cs (Block): replace Implicit bool, for a generic
17109         flags.   
17110         New flag: `Unchecked'.  This is used during the EmitMeta phase
17111         (which is out-of-line with the regular Resolve/Emit process for a
17112         statement, as this is done ahead of time, but still gets a chance
17113         to call constant resolve).
17114
17115         (Block.Flags): new enum for adding a new flag.
17116
17117         (Block.EmitMeta): track the state of unchecked.
17118
17119         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
17120         to enable constant resolution to work there as well.
17121
17122 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
17123
17124         * typemanager.cs (ienumerable_type): Also look up
17125         System.Collections.IEnumerable. 
17126
17127 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
17128
17129         TODO: Test more than one conditional per method.
17130
17131         * class.cs (Indexer.Define): Report the location where the user is
17132         referencing the unsupported feature.
17133
17134         (MethodData): Overload the use of `conditionals' to
17135         minimize the creation of needless ArrayLists.   This saves roughly
17136         212kb on my machine.
17137
17138         (Method): Implement the new IIteratorContainer interface.
17139         (Method.SetYields): Implement the method by setting the ModFlags
17140         to contain METHOD_YIELDS.
17141
17142         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
17143         which just got set to null.
17144
17145         * iterators.cs: New file.
17146
17147         (Yield, YieldBreak): New statements.
17148
17149         * statement.cs (Return.Resolve): Flag an error if we are used in
17150         an iterator method.
17151
17152         * codegen.cs (InIterator): New flag set if the code is being
17153         compiled in an iterator method.
17154
17155         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
17156         internal modifier, and we just use it to avoid adding extra
17157         fields, as this is seldom used.  
17158
17159         * cs-parser.jay: Add yield_statement (yield and yield break).
17160
17161         * driver.cs: New flag -v2 to turn on version 2 features. 
17162
17163         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
17164         hashtable when v2 is enabled.
17165
17166 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
17167
17168         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
17169         there is already a namespace defined with this name.
17170
17171         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
17172         people upgraded their corlibs.
17173
17174         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
17175         always use fully qualified types, no need to use the compiler
17176         front end.
17177
17178         (TypeManager.IsNamespace): Use binarysearch.
17179
17180         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
17181         AddDelegate): I did not quite use the new IsValid API properly: I
17182         have to pass the short-name and the fullname.  I was passing only
17183         the basename instead of the fullname sometimes. 
17184
17185         (TypeContainer.DefineType): call NamespaceClash.
17186
17187         * interface.cs (Interface.DefineType): use NamespaceClash before
17188         defining the type.
17189
17190         * delegate.cs (Delegate.DefineType): use NamespaceClash before
17191         defining the type.
17192
17193         * enum.cs: (Enum.DefineType): use NamespaceClash before
17194         defining the type.
17195
17196         * typemanager.cs (: 3-line patch that gives us some tasty 11%
17197         speed increase.  First, use the negative_hits cache when we get a
17198         negative.  Second, add the type with its full original name
17199         instead of the new . and + encoded name (reflection uses + to
17200         separate type from a nested type).  Use LookupTypeReflection
17201         directly which bypasses the type->name hashtable (that we already
17202         know does not contain the type.
17203
17204         * decl.cs (DeclSpace.ResolveTypeExpr): track the
17205         location/container type. 
17206
17207         * driver.cs: When passing utf8, use directly the UTF8Encoding.
17208
17209 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
17210
17211         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
17212
17213         * delegate.cs (NewDelegate.Resolve): Test whether an instance
17214         method is being referenced in the method group from a static
17215         context, and report error 120 if so.
17216
17217         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
17218         Error118. 
17219
17220         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
17221         is created, we create the A namespace).
17222
17223         * cs-parser.jay: A namespace also introduces a DeclarationFound.
17224         Fixes #41591
17225
17226 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
17227
17228         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
17229         invocation to ModuleBuilder.GetType with the same values will
17230         return a new type instance, so we need to cache its return
17231         values. 
17232
17233         * expression.cs (Binary.ResolveOperator): Only allow the compare
17234         operators on enums if they are of the same type.
17235
17236         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
17237         types of ValueType on their own case.  Before we were giving them
17238         the same treatment as objects.
17239
17240         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
17241         fullname.  Short name is used to compare against container name.
17242         Fullname is used to check against defined namespace names.
17243
17244         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
17245         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
17246
17247         (Method.CheckBase): Call parent.
17248         (MemberBase.CheckBase): Check for protected members on sealed
17249         classes.
17250         (PropertyBase.CheckBase): Call parent.
17251         (Field.Define): Call parent.
17252
17253         * report.cs: Negative error codes are now mapped to 8000 - code,
17254         so that the display is render more nicely.
17255
17256         * typemanager.cs: Do not use try/catch, instead report a regular
17257         error. 
17258
17259         (GetPointerType, GetReferenceType): These methods provide
17260         mechanisms to obtain the T* and T& from a T.  We had the code
17261         previously scattered around the code base, and it also used
17262         TypeManager.LookupType that would go through plenty of caches.
17263         This one goes directly to the type source.
17264
17265         In some places we did the Type.GetType followed by
17266         ModuleBuilder.GetType, but not in others, so this unifies the
17267         processing as well.
17268
17269         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
17270         statements now that we have namespace information.
17271
17272         * typemanager.cs (IsNamespace): New method, returns whether the
17273         string presented is a namespace or not.
17274
17275         (ComputeNamespaces): New public entry point, computes the list of
17276         available namespaces, using the GetNamespaces API call in Mono, or
17277         the slower version in MS.NET.   
17278
17279         Now before we start the semantic analysis phase, we have a
17280         complete list of namespaces including everything that the user has
17281         provided.
17282
17283         Deleted old code to cache namespaces in .nsc files.
17284
17285 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
17286
17287         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
17288         class/struct location definition Location for the implicit
17289         constructor location.
17290
17291         (Operator.Define): Use the location of the operator for the
17292         implicit Method definition.
17293
17294         (Constructor.Emit): use the constructor location for the implicit
17295         base initializer constructor.
17296
17297         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
17298         and the Expression class now contains two new methods:
17299
17300         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
17301         isolate type lookup from the rest of the resolution process.
17302
17303         Since we use Expressions to hold type definitions due to the way
17304         we parse the input we have historically overloaded Resolve to
17305         perform the Type lookups if a special flag is passed.  Now this is
17306         eliminated and two methods take their place. 
17307
17308         The differences in the two methods between xStep and xTerminal is
17309         that xStep is involved in our current lookup system that uses
17310         SimpleNames to compose a name, while xTerminal is used just to
17311         catch the case where the simplename lookup failed.
17312
17313 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
17314
17315         * expression.cs (ResolveMemberAccess): Remove redundant code.
17316         TypeExpr expressions are always born fully resolved.
17317
17318         * interface.cs (PopulateMethod): Do not lookup the types twice.
17319         We were doing it once during SemanticAnalysis and once during
17320         PopulateMethod.
17321
17322         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
17323         in local variable type definitions, were being returned as a
17324         SimpleName (we decomposed everything into a string), that is
17325         because primary_expression was being used instead of a type in the
17326         grammar (reduce/reduce conflicts).
17327
17328         The part that was wrong is that we converted the expression into a
17329         string (an oversimplification in one hand, compounded with primary
17330         expressions doing string concatenation).
17331
17332         So things like:
17333
17334         A.B.C [] x;
17335
17336         Would return "A.B.C[]" as a SimpleName.  This stopped things like
17337         using clauses from working on this particular context.  And a type
17338         was being matched directly against "A.B.C[]".
17339
17340         We now use the correct approach, and allow for ComposedCast to be
17341         part of the unary expression.  So the "A.B.C []" become a composed
17342         cast of "A.B.C" (as a nested group of MemberAccess with a
17343         SimpleName at the end) plus the rank composition "[]". 
17344
17345         Also fixes 35567
17346
17347 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
17348
17349         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
17350         for the access level checking.
17351
17352         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
17353         `TypeContainer container', because I kept getting confused when I
17354         was debugging this code.
17355
17356         * expression.cs (Indexers): Instead of tracking getters/setters,
17357         we now track them in parallel.  We create one arraylist less, but
17358         most importantly it is possible now for the LValue code to find a
17359         matching get for a set.
17360
17361         (IndexerAccess.DoResolveLValue): Update the code.
17362         GetIndexersForType has been modified already to extract all the
17363         indexers from a type.  The code assumed it did not.
17364
17365         Also make the code set the correct return type for the indexer.
17366         This was fixed a long time ago for properties, but was missing for
17367         indexers.  It used to be void_type.
17368
17369         (Binary.Emit): Test first for doubles instead of
17370         floats, as they are more common.
17371
17372         (Binary.EmitBranchable): Use the .un version of the branch opcodes
17373         when dealing with floats and the <=, >= operators.  This fixes bug
17374         #39314 
17375
17376         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
17377         to load the array value by emitting a load on the foreach variable
17378         type.  This was incorrect.  
17379
17380         We now emit the code to load an element using the the array
17381         variable type, and then we emit the conversion operator.
17382
17383         Fixed #40176
17384
17385 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
17386
17387         * attribute.cs: Avoid allocation of ArrayLists in the common case.
17388
17389 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
17390
17391         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
17392         test for protection before we test for signatures. 
17393
17394         (MethodSignature.ToString): implement.
17395
17396         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
17397         to the case where we reduced into a LongConstant.
17398
17399         * decl.cs (CheckAccessLevel): If the type is an array, we can not
17400         depend on whether the information is acurrate, because the
17401         Microsoft runtime will always claim that the array type is public,
17402         regardless of the real state.
17403
17404         If the type is a pointer, another problem happens: the type is
17405         reported as non-public in Microsoft.  
17406
17407         In both cases we have to call CheckAccessLevel recursively with
17408         the underlying type as the argument to be tested.
17409
17410 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
17411
17412         * assign.cs (Assign.Emit): If we are dealing with a compound
17413         assignment expression, we should use the code path that stores the
17414         intermediate result in a temporary value.  This fixes #40903.
17415
17416         *expression.cs (Indirection.ToString): Provide ToString method for
17417         debugging. 
17418
17419 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
17420
17421         * class.cs: Null out fields holding references to Block objects so
17422         they can be garbage collected.
17423
17424         * expression.cs (OverloadResolve): Remove unused local.
17425
17426 2003-04-07  Martin Baulig  <martin@ximian.com>
17427
17428         * codegen.cs (EmitContext.CurrentFile): New public field.
17429         (EmitContext.Mark): Use the CurrentFile to check whether the
17430         location is in the correct file.
17431         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
17432
17433 2003-04-07  Martin Baulig  <martin@ximian.com>
17434
17435         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
17436
17437         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
17438         location.  [FIXME: The location argument which gets passed to this
17439         method is sometimes wrong!]
17440
17441 2003-04-07  Nick Drochak <ndrochak@gol.com>
17442
17443         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
17444
17445 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
17446
17447         * expression.cs (Indirection.EmitAssign): We were using the
17448         temporary, but returning immediately instead of continuing the
17449         EmitAssing flow.
17450
17451 2003-04-06  Martin Baulig  <martin@ximian.com>
17452
17453         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
17454         if it's a nested child, but also deriving from the outer class.
17455         See test 190.cs.
17456
17457         * typemanager.cs (IsNestedChildOf): Make this work if it's a
17458         nested child, but also deriving from the outer class.  See
17459         test-190.cs.
17460         (FilterWithClosure): We may access private members of the outer
17461         class if we're a nested child and deriving from the outer class.
17462         (RealMemberLookup): Only set `closure_private_ok' if the
17463         `original_bf' contained BindingFlags.NonPublic.
17464
17465 2003-04-05  Martin Baulig  <martin@ximian.com>
17466
17467         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
17468
17469 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
17470
17471         * class.cs (Event.Define): Do not allow abstract events to have
17472         initializers. 
17473
17474 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
17475
17476         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
17477         block in event declarations.
17478
17479         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
17480         value type, get its address.
17481
17482         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
17483         leaving a class on the stack instead of a boolean value (int
17484         0/1).  Change the code so we compare against null, and then the
17485         result against zero.
17486
17487         * class.cs (TypeContainer.GetClassBases): We were checking for the
17488         parent class being sealed too late.
17489
17490         * expression.cs (Binary.Emit): For <= and >= when dealing with
17491         floating point values, use cgt.un and clt.un instead of cgt and
17492         clt alone.
17493
17494 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
17495
17496         * statement.cs: Apply the same optimization as MS: skip the 
17497         GetEnumerator returning an IEnumerator, and use the one returning a 
17498         CharEnumerator instead. This allows us to avoid the try-finally block 
17499         and the boxing.
17500
17501 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
17502
17503         * cs-parser.jay: Attributes cannot be applied to
17504                          namespaces. Fixes #40473
17505
17506 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17507
17508         * class.cs:
17509         (Add*): check if the name is valid using the full name for constants,
17510         fields, properties and events.
17511
17512 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
17513
17514         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
17515         char constants to be part of the enumeration.
17516
17517         * expression.cs (Conditional.DoResolve): Add support for operator
17518         true. Implements the missing functionality from 14.12
17519
17520         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
17521         operator true/false as required by the spec.
17522
17523         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
17524         implicit conversion to boolean.
17525
17526         * statement.cs (Statement.ResolveBoolean): A boolean expression is
17527         also one where the type implements `operator true'. 
17528
17529         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
17530         get an expression that will invoke operator true based on an
17531         expression.  
17532
17533         (GetConversionOperators): Removed the hack that called op_True
17534         here.  
17535
17536         (Expression.ResolveBoolean): Move this from Statement.
17537
17538 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
17539
17540         * ecore.cs (FieldExpr): do not allow initialization of initonly
17541         fields on derived classes
17542
17543 2003-03-13  Martin Baulig  <martin@ximian.com>
17544
17545         * statement.cs (Block.Emit): Call ig.BeginScope() and
17546         ig.EndScope() when compiling with debugging info; call
17547         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
17548
17549 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
17550
17551         * expression.cs (Indexers): Do not construct immediately, allow
17552         for new members to be appended as we go.  Fixes 38143
17553
17554 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17555
17556         * expression.cs: save/restore context when resolving an unchecked
17557         expression.
17558
17559 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
17560
17561         * cfold.cs: Catch division by zero in modulus operator during
17562         constant folding.
17563
17564 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
17565
17566         * interface.cs (Interface.DefineMembers): Avoid defining members
17567         twice. 
17568
17569 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
17570
17571         * driver.cs: handle the +/- options for -noconfig
17572
17573         * statement.cs (Unckeched.Resolve): Also track the state of
17574         unchecked in the Resolve phase.
17575
17576 2003-02-27  Martin Baulig  <martin@ximian.com>
17577
17578         * ecore.cs (Expression.MemberLookup): Don't create a
17579         MethodGroupExpr for something which is not a method.  Fixes #38291.
17580
17581 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
17582
17583         * class.cs (MemberBase.CheckParameters): Also check that the type
17584         is unmanaged if it is a pointer.
17585
17586         * expression.cs (SizeOf.Resolve): Add location information.
17587
17588         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
17589         a managed type is declared.
17590
17591         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
17592         parameter modifiers as well.  Fixes bug 38606
17593
17594         * class.cs: Very sad.  Am backing out the speed up changes
17595         introduced by the ArrayList -> Array in the TypeContainer, as they
17596         were not actually that much faster, and introduced a bug (no error
17597         reports on duplicated methods).
17598
17599         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
17600         source first, this will guarantee that we have a valid expression
17601         before calling in lower levels functions that will require a
17602         resolved object.  Then use this original_source in the
17603         target.ResolveLValue instead of the original source that was
17604         passed to us.
17605
17606         Another change.  Use target.Resolve instead of LValueResolve.
17607         Although we are resolving for LValues, we will let the Assign code
17608         take care of that (it will be called again from Resolve).  This
17609         basically allows code like this:
17610
17611         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
17612         class Y { void A (X x) { x [0] += o; }
17613
17614         The problem was that the indexer was trying to resolve for
17615         set_Item (idx, object o) and never finding one.  The real set_Item
17616         was set_Item (idx, X).  By delaying the process we get the right
17617         semantics. 
17618
17619         Fixes bug 36505
17620
17621 2003-02-23  Martin Baulig  <martin@ximian.com>
17622
17623         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
17624         while calling DoEmit ().
17625
17626         * codegen.cs (EmitContext.Mark): Don't mark locations in other
17627         source files; if you use the #line directive inside a method, the
17628         compiler stops emitting line numbers for the debugger until it
17629         reaches the end of the method or another #line directive which
17630         restores the original file.
17631
17632 2003-02-23  Martin Baulig  <martin@ximian.com>
17633
17634         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
17635
17636 2003-02-23  Martin Baulig  <martin@ximian.com>
17637
17638         * statement.cs (Block.AddChildVariableNames): We need to call this
17639         recursively, not just for our immediate children.
17640
17641 2003-02-23  Martin Baulig  <martin@ximian.com>
17642
17643         * class.cs (Event.Define): Always make the field private, like csc does.
17644
17645         * typemanager.cs (TypeManager.RealMemberLookup): Make events
17646         actually work, fixes bug #37521.
17647
17648 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
17649
17650         * delegate.cs: When creating the various temporary "Parameters"
17651         classes, make sure that we call the ComputeAndDefineParameterTypes
17652         on those new parameters (just like we do with the formal ones), to
17653         allow them to be resolved in the context of the DeclSpace.
17654
17655         This fixes the bug that Dick observed in Bugzilla #38530.
17656
17657 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
17658
17659         * expression.cs (ResolveMemberAccess): When resolving a constant,
17660         do not attempt to pull a constant if the value was not able to
17661         generate a valid constant.
17662
17663         * const.cs (LookupConstantValue): Do not report more errors than required.
17664
17665 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17666
17667         * expression.cs: fixes bug #38328.
17668
17669 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17670
17671         * class.cs: Changed all the various members that can be part of a
17672         class from being an ArrayList to be an Array of the right type.
17673         During the DefineType type_list, interface_list, delegate_list and
17674         enum_list are turned into types, interfaces, delegates and enums
17675         arrays.  
17676
17677         And during the member population, indexer_list, event_list,
17678         constant_list, field_list, instance_constructor_list, method_list,
17679         operator_list and property_list are turned into their real arrays.
17680
17681         Although we could probably perform this operation earlier, for
17682         good error reporting we need to keep the lists and remove the
17683         lists for longer than required.
17684
17685         This optimization was triggered by Paolo profiling the compiler
17686         speed on the output of `gen-sample-program.pl' perl script. 
17687
17688         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
17689         not crash in methods like MemberLookupFailed that use this field.  
17690
17691         This problem arises when the compiler fails to resolve a type
17692         during interface type definition for example.
17693
17694 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17695
17696         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
17697         inherit from System.Object, so we have to stop at null, not only
17698         when reaching System.Object.
17699
17700 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
17701
17702         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
17703         DeclaredOnly because the parent indexer might have had a different
17704         name, but did not loop until the top of the hierarchy was reached.
17705
17706         The problem this one fixes is 35492: when a class implemented an
17707         indexer from an interface, we were getting the interface method
17708         (which was abstract) and we were flagging an error (can not invoke
17709         abstract method).
17710
17711         This also keeps bug 33089 functioning, and test-148 functioning.
17712
17713         * typemanager.cs (IsSpecialMethod): The correct way of figuring
17714         out if a method is special is to see if it is declared in a
17715         property or event, or whether it is one of the predefined operator
17716         names.   This should fix correctly #36804.
17717
17718 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
17719
17720         The goal here is to remove the dependency on EmptyCast.Peel ().
17721         Killing it completely.
17722
17723         The problem is that currently in a number of places where
17724         constants are expected, we have to "probe" for an EmptyCast, and
17725         Peel, which is not the correct thing to do, as this will be
17726         repetitive and will likely lead to errors. 
17727
17728         The idea is to remove any EmptyCasts that are used in casts that
17729         can be reduced to constants, so we only have to cope with
17730         constants. 
17731
17732         This bug hunt was triggered by Bug 37363 and the desire to remove
17733         the duplicate pattern where we were "peeling" emptycasts to check
17734         whether they were constants.  Now constants will always be
17735         constants.
17736
17737         * ecore.cs: Use an enumconstant here instead of wrapping with
17738         EmptyCast.  
17739
17740         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
17741         throwing me off.  By handling this we can get rid of a few hacks.
17742
17743         * statement.cs (Switch): Removed Peel() code.
17744
17745 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
17746
17747         * class.cs: Location information for error 508
17748
17749         * expression.cs (New.DoResolve): Add a guard against double
17750         resolution of an expression.  
17751
17752         The New DoResolve might be called twice when initializing field
17753         expressions (see EmitFieldInitializers, the call to
17754         GetInitializerExpression will perform a resolve on the expression,
17755         and later the assign will trigger another resolution
17756
17757         This leads to bugs (#37014)
17758
17759         * delegate.cs: The signature for EndInvoke should contain any ref
17760         or out parameters as well.  We were not doing this in the past. 
17761
17762         * class.cs (Field.Define): Do not overwrite the type definition
17763         inside the `volatile' group.  Turns out that volatile enumerations
17764         were changing the type here to perform a validity test, which
17765         broke conversions. 
17766
17767 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
17768
17769         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
17770         and structs, we do not want to load the instance variable
17771
17772         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
17773         enum_type has to be handled like an object reference (implicit
17774         conversions exists from this to object), but the regular IsClass
17775         and IsValueType tests will never return true for this one.
17776
17777         Also we use TypeManager.IsValueType instead of type.IsValueType,
17778         just for consistency with the rest of the code (this is only
17779         needed if we ever use the construct exposed by test-180.cs inside
17780         corlib, which we dont today).
17781
17782 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
17783
17784         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
17785         just InternalCall.
17786
17787 2003-02-09  Martin Baulig  <martin@ximian.com>
17788
17789         * namespace.cs (Namespace..ctor): Added SourceFile argument.
17790         (Namespace.DefineNamespaces): New static public method; this is
17791         called when we're compiling with debugging to add all namespaces
17792         to the symbol file.
17793
17794         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
17795         pass it to the Namespace's .ctor.
17796
17797         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
17798         and MethodBase arguments; pass the namespace ID to the symwriter;
17799         pass the MethodBase instead of the token to the symwriter.
17800         (SymbolWriter.DefineNamespace): New method to add a namespace to
17801         the symbol file.
17802
17803 2003-02-09  Martin Baulig  <martin@ximian.com>
17804
17805         * symbolwriter.cs: New file.  This is a wrapper around
17806         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
17807         methods here in near future.
17808
17809 2003-02-09  Martin Baulig  <martin@ximian.com>
17810
17811         * codegen.cs (EmitContext.Mark): Just pass the arguments to
17812         ILGenerator.MarkSequencePoint() which are actually used by the
17813         symbol writer.
17814
17815 2003-02-09  Martin Baulig  <martin@ximian.com>
17816
17817         * location.cs (SourceFile): New public sealed class.  This
17818         contains the name and an index which is used in the location's token.
17819         (Location): Reserve an appropriate number of bits in the token for
17820         the source file instead of walking over that list, this gives us a
17821         really huge performance improvement when compiling with debugging.
17822
17823         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
17824         `SourceFile' argument instead of a string.
17825         (Driver.ProcessFile): Add all the files via Location.AddFile(),
17826         but don't parse/tokenize here, we need to generate the list of all
17827         source files before we do that.
17828         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
17829         the files.
17830
17831         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
17832         instead of a string.
17833
17834         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
17835         of a string.
17836
17837 2003-02-09  Martin Baulig  <martin@ximian.com>
17838
17839         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
17840         filename on `#line default'.
17841
17842 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
17843
17844         * statement.cs: don't clear the pinned var when the fixed statement
17845         returns from the method (fixes bug#37752).
17846
17847 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
17848
17849         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
17850         to IsValueType.
17851
17852 2003-02-07  Martin Baulig  <martin@ximian.com>
17853
17854         * driver.cs: Removed the `--debug-args' command line argument.
17855
17856         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
17857         automatically by the AsssemblyBuilder.
17858         (CodeGen.InitializeSymbolWriter): We don't need to call any
17859         initialization function on the symbol writer anymore.  This method
17860         doesn't take any arguments.
17861
17862 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
17863
17864         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
17865         from referenced assemblies as well.
17866
17867 2003-02-02  Martin Baulig  <martin@ximian.com>
17868
17869         * class.cs (MethodData.Emit): Generate debugging info for external methods.
17870
17871 2003-02-02  Martin Baulig  <martin@ximian.com>
17872
17873         * class.cs (Constructor.Emit): Open the symbol writer before
17874         emitting the constructor initializer.
17875         (ConstructorInitializer.Emit): Call ec.Mark() to allow
17876         single-stepping through constructor initializers.
17877
17878 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
17879
17880         * class.cs: Handle error 549: do not allow virtual methods in
17881         sealed classes. 
17882
17883 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
17884
17885         * decl.cs: Check access levels when resolving types
17886
17887 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
17888
17889         * statement.cs: Add parameters and locals set in catch blocks that might 
17890         return to set vector
17891
17892 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
17893
17894         * class.cs (Operator): Set the SpecialName flags for operators.
17895
17896         * expression.cs (Invocation.DoResolve): Only block calls to
17897         accessors and operators on SpecialName methods.
17898
17899         (Cast.TryReduce): Handle conversions from char constants.
17900
17901
17902 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
17903
17904         * statement.cs: small memory and time optimization in FlowBranching.
17905
17906 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
17907
17908         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
17909         problem that the last fix but in the other sid (Set).
17910
17911         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
17912         access when there is no indexer in the hierarchy.
17913
17914 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
17915
17916         * class.cs: Combine some if statements.
17917
17918 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17919
17920         * driver.cs: fixed bug #37187.
17921
17922 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
17923
17924         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
17925         any indexer, it's needed to build a list with all the indexers in the
17926         hierarchy (AllGetters), else we have problems. Fixes #35653.
17927
17928 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
17929
17930         * class.cs (MethodData.Define): It is wrong for an interface
17931         implementation to be static in both cases: explicit and implicit.
17932         We were only handling this in one case.
17933
17934         Improve the if situation there to not have negations.
17935
17936         * class.cs (Field.Define): Turns out that we do not need to check
17937         the unsafe bit on field definition, only on usage.  Remove the test.
17938
17939 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17940
17941         * driver.cs: use assembly.Location instead of Codebase (the latest
17942         patch made mcs fail when using MS assemblies).
17943
17944 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
17945
17946         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
17947         get the path to *corlib.dll.
17948
17949 2003-01-21  Nick Drochak <ndrochak@gol.com>
17950
17951         * cs-tokenizer.cs:
17952         * pending.cs:
17953         * typemanager.cs: Remove compiler warnings
17954
17955 2003-01-20  Duncan Mak  <duncan@ximian.com>
17956
17957         * AssemblyInfo.cs: Bump the version number to 0.19.
17958
17959 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17960
17961         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
17962
17963 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
17964
17965         * class.cs (Constructor::Emit): Emit debugging info for constructors.
17966
17967 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
17968
17969         * cs-parser.jay: Small fix: we were not comparing the constructor
17970         name correctly.   Thanks to Zoltan for the initial pointer.
17971
17972 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
17973
17974         * cs-tokenizer.cs: Set file name when specified with #line
17975
17976 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
17977
17978         * cs-parser.jay: Only perform the constructor checks here if we
17979         are named like the class;  This will help provider a better
17980         error.  The constructor path is taken when a type definition is
17981         not found, but most likely the user forgot to add the type, so
17982         report that rather than the constructor error.
17983
17984 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
17985
17986         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
17987         allocations.
17988
17989 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17990
17991         * cs-parser.jay: Add cleanup call.
17992
17993 2003-01-13  Duncan Mak  <duncan@ximian.com>
17994
17995         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
17996         consistent with other methods.
17997
17998 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17999
18000         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
18001
18002 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
18003
18004         * attribute.cs: only set GuidAttr to true when we have a
18005         GuidAttribute.
18006
18007 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18008
18009         * ecore.cs:
18010         * expression.cs:
18011         * typemanager.cs: fixes to allow mcs compile corlib with the new
18012         Type.IsSubclassOf fix.
18013
18014 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
18015
18016         * expression.cs (LocalVariableReference.DoResolve): Classify a
18017         constant as a value, not as a variable.   Also, set the type for
18018         the variable.
18019
18020         * cs-parser.jay (fixed_statement): take a type instead of a
18021         pointer_type, so we can produce a better error message later.
18022
18023         * statement.cs (Fixed.Resolve): Flag types that are not pointers
18024         as an error.  
18025
18026         (For.DoEmit): Make inifinite loops have a
18027         non-conditional branch back.
18028
18029         (Fixed.DoEmit): First populate the pinned variables, then emit the
18030         statement, then clear the variables.  Before I was emitting the
18031         code once for each fixed piece.
18032
18033
18034 2003-01-08  Martin Baulig  <martin@ximian.com>
18035
18036         * statement.cs (FlowBranching.MergeChild): A break in a
18037         SWITCH_SECTION does not leave a loop.  Fixes #36155.
18038
18039 2003-01-08  Martin Baulig  <martin@ximian.com>
18040
18041         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
18042         lives in the same number space than `param_map'.  Fixes #36154.
18043
18044 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
18045
18046         * cs-parser.jay (constructor_declaration): Set the
18047         Constructor.ModFlags before probing for it.  This makes the
18048         compiler report 514, 515 and 132 (the code was there, but got
18049         broken). 
18050
18051         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
18052         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
18053         (GotoCase.Resolve): Set `Returns' to ALWAYS.
18054
18055 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
18056
18057         * enum.cs: create the enum static fields using the enum type.
18058
18059 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
18060
18061         * class.cs: don't try to create the ParamBuilder for the return
18062         type if it's not needed (and handle it breaking for the ms runtime
18063         anyway).
18064
18065 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
18066
18067         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
18068
18069 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
18070
18071         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
18072         the command.   This showed up while compiling the JANET source
18073         code, which used \r as its only newline separator.
18074
18075 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
18076
18077         * class.cs (Method.Define): If we are an operator (because it
18078         reuses our code), then set the SpecialName and HideBySig.  #36128
18079
18080 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
18081
18082         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
18083         exception, report error 120 `object reference required'.
18084
18085         * driver.cs: Add --pause option, used during to measure the size
18086         of the process as it goes with --timestamp.
18087
18088         * expression.cs (Invocation.DoResolve): Do not allow methods with
18089         SpecialName to be invoked.
18090
18091 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
18092
18093         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
18094         number before adding it.
18095
18096 2002-12-21  Ravi Pratap  <ravi@ximian.com>
18097
18098         * ecore.cs (StandardImplicitConversion): When in an unsafe
18099         context, we allow conversion between void * to any other pointer
18100         type. This fixes bug #35973.
18101
18102 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
18103
18104         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
18105         is not thrown when extensionless outputs are used 
18106
18107 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18108
18109         * rootcontext.cs: fixed compilation of corlib.
18110
18111 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
18112
18113         * attribute.cs (Attributes.Contains): Add new method.
18114
18115         * class.cs (MethodCore.LabelParameters): if the parameter is an
18116         `out' parameter, check that no attribute `[In]' has been passed.
18117
18118         * enum.cs: Handle the `value__' name in an enumeration.
18119
18120 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
18121
18122         * decl.cs: Added special case to allow overrides on "protected
18123         internal" methods
18124
18125 2002-12-18  Ravi Pratap  <ravi@ximian.com>
18126
18127         * attribute.cs (Attributes.AddAttributeSection): Rename to this
18128         since it makes much more sense.
18129
18130         (Attributes.ctor): Don't require a Location parameter.
18131
18132         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
18133
18134         * attribute.cs (ApplyAttributes): Remove extra Location parameters
18135         since we already have that information per attribute.
18136
18137         * everywhere : make appropriate changes.
18138
18139         * class.cs (LabelParameters): Write the code which actually
18140         applies attributes to the return type. We can't do this on the MS
18141         .NET runtime so we flag a warning in the case an exception is
18142         thrown.
18143
18144 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
18145
18146         * const.cs: Handle implicit null conversions here too.
18147
18148 2002-12-17  Ravi Pratap  <ravi@ximian.com>
18149
18150         * class.cs (MethodCore.LabelParameters): Remove the extra
18151         Type [] parameter since it is completely unnecessary. Instead
18152         pass in the method's attributes so that we can extract
18153         the "return" attribute.
18154
18155 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
18156
18157         * cs-parser.jay (parse): Use Report.Error to flag errors instead
18158         of ignoring it and letting the compile continue.
18159
18160         * typemanager.cs (ChangeType): use an extra argument to return an
18161         error condition instead of throwing an exception.
18162
18163 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
18164
18165         * expression.cs (Unary.TryReduce): mimic the code for the regular
18166         code path.  Perform an implicit cast in the cases where we can
18167         implicitly convert to one of the integral types, and then reduce
18168         based on that constant.   This fixes bug #35483.
18169
18170 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18171
18172         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
18173
18174 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18175
18176         * namespace.cs: fixed bug #35489.
18177
18178 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
18179
18180         * class.cs: Remove some dead code.
18181
18182         * cs-parser.jay: Estimate the number of methods needed
18183         (RootContext.MethodCount);
18184
18185         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
18186         numbers instead of StringBuilders.
18187
18188         * support.cs (PtrHashtable): Add constructor with initial size;
18189         We can now reduce reallocations of the method table.
18190
18191 2002-12-10  Ravi Pratap  <ravi@ximian.com>
18192
18193         * attribute.cs (ApplyAttributes): Keep track of the emitted
18194         attributes on a per-target basis. This fixes bug #35413.
18195
18196 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
18197
18198         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
18199         default to the Windows 1252 encoding.
18200
18201         (UnixParseOption): Support version, thanks to Alp for the missing
18202         pointer. 
18203
18204         * AssemblyInfo.cs: Add nice assembly information.
18205
18206         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
18207         (bug 35169).
18208
18209         * cs-parser.jay: Allow a trailing comma before the close bracked
18210         in the attribute_section production.
18211
18212         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
18213         address of the instance was being taken, I will take this out,
18214         because we take the address of the object immediately here.
18215
18216 2002-12-09  Ravi Pratap  <ravi@ximian.com>
18217
18218         * typemanager.cs (AreMultipleAllowed): Take care of the most
18219         obvious case where attribute type is not in the current assembly -
18220         stupid me ;-)
18221
18222 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
18223
18224         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
18225         definitions, instead of doing that afterwards.  
18226
18227         Also we use a nice little hack, depending on the constructor, we
18228         know if we are a "composed" name or a simple name.  Hence, we
18229         avoid the IndexOf test, and we avoid 
18230
18231         * codegen.cs: Add code to assist in a bug reporter to track down
18232         the source of a compiler crash. 
18233
18234 2002-12-07  Ravi Pratap  <ravi@ximian.com>
18235
18236         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
18237         types have been emitted for a given element and flag an error
18238         if something which does not have AllowMultiple set is used more
18239         than once.
18240
18241         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
18242         attribute types and their corresponding AllowMultiple properties
18243
18244         (AreMultipleAllowed): Check the property for a given type.
18245
18246         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
18247         property in the case we have a TypeContainer.
18248
18249         (Attributes.AddAttribute): Detect duplicates and just skip on
18250         adding them. This trivial fix catches a pretty gross error in our
18251         attribute emission - global attributes were being emitted twice!
18252
18253         Bugzilla bug #33187 is now fixed.
18254
18255 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
18256
18257         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
18258         instead of pp_and).
18259
18260         * expression.cs (Binary.ResolveOperator): I can only use the
18261         Concat (string, string, string) and Concat (string, string,
18262         string, string) if the child is actually a concatenation of
18263         strings. 
18264
18265 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
18266
18267         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
18268         context where we need a 2-character lookahead.
18269
18270         * pending.cs (PendingImplementation): Rework so we can keep track
18271         of interface types all the time, and flag those which were
18272         implemented by parents as optional.
18273
18274 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
18275
18276         * expression.cs (Binary.ResolveOperator): Use
18277         String.Concat(string,string,string) or
18278         String.Concat(string,string,string,string) when possible. 
18279
18280         * typemanager: More helper methods.
18281
18282
18283 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
18284
18285         * pending.cs: remove the bogus return from GetMissingInterfaces()
18286         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
18287
18288 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18289
18290         * namespace.cs: avoid duplicated 'using xxx' being added to
18291         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
18292         when we get more than one 'using' statement for the same namespace.
18293         Report a CS0105 warning for it.
18294
18295 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
18296
18297         * cs-tokenizer.cs (consume_identifier): use read directly, instead
18298         of calling getChar/putback, uses internal knowledge of it.    
18299
18300         (xtoken): Reorder tokenizer so most common patterns are checked
18301         first.  This reduces the compilation time in another 5% (from 8.11s
18302         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
18303
18304         The parsing time is 22% of the compilation in mcs, and from that
18305         64% is spent on the tokenization process.  
18306
18307         I tried using a binary search for keywords, but this is slower
18308         than the hashtable.  Another option would be to do a couple of
18309         things:
18310
18311                 * Not use a StringBuilder, instead use an array of chars,
18312                   with a set value.  Notice that this way we could catch
18313                   the 645 error without having to do it *afterwards*.
18314
18315                 * We could write a hand-parser to avoid the hashtable
18316                   compares altogether.
18317
18318         The identifier consumption process takes 37% of the tokenization
18319         time.  Another 15% is spent on is_number.  56% of the time spent
18320         on is_number is spent on Int64.Parse:
18321
18322                 * We could probably choose based on the string length to
18323                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
18324                   computations. 
18325
18326         Another 3% is spend on wrapping `xtoken' in the `token' function.
18327
18328         Handle 0xa0 as whitespace (#34752)
18329
18330 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
18331
18332         * typemanager.cs (IsCLRType): New routine to tell whether a type
18333         is one of the builtin types.  
18334
18335         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
18336         typecode in more places instead of doing pointer comparissions.
18337         We could leverage some knowledge about the way the typecodes are
18338         laid out.
18339
18340         New code to cache namespaces in assemblies, it is currently not
18341         invoked, to be used soon.
18342
18343         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
18344
18345         * expression.cs (Binary.ResolveOperator): specially handle
18346         strings, and do not perform user-defined operator overloading for
18347         built-in types.
18348
18349 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
18350
18351         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
18352         internalcall as it is a pretty simple operation;  Avoid whenever
18353         possible to call Char.IsLetter.
18354
18355         (consume_identifier): Cut by half the number of
18356         hashtable calls by merging the is_keyword and GetKeyword behavior.
18357
18358         Do not short-circuit, because if we do, we
18359         report errors (ie, #if false && true would produce an invalid
18360         directive error);
18361
18362
18363 2002-11-24  Martin Baulig  <martin@ximian.com>
18364
18365         * expression.cs (Cast.TryReduce): If we're in checked syntax,
18366         check constant ranges and report a CS0221.  Fixes #33186.
18367
18368 2002-11-24  Martin Baulig  <martin@ximian.com>
18369
18370         * cs-parser.jay: Make this work for uninitialized variable
18371         declarations in the `for' initializer.  Fixes #32416.
18372
18373 2002-11-24  Martin Baulig  <martin@ximian.com>
18374
18375         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
18376         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
18377
18378 2002-11-24  Martin Baulig  <martin@ximian.com>
18379
18380         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
18381         argument; if true, we also check for user-defined conversions.
18382         This is only needed if both arguments are of a user-defined type.
18383         Fixes #30443, added test-175.cs.
18384         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
18385
18386         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
18387
18388 2002-11-24  Martin Baulig  <martin@ximian.com>
18389
18390         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
18391         function to get the store opcode.
18392         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
18393         only emit the Ldelema if the store opcode is Stobj.  You must run
18394         both test-34 and test-167 to test this.  Fixes #34529.
18395
18396 2002-11-23  Martin Baulig  <martin@ximian.com>
18397
18398         * ecore.cs (Expression.MemberLookup): Added additional
18399         `qualifier_type' argument which is used when we're being called
18400         from MemberAccess.DoResolve() and null if we're called from a
18401         SimpleName lookup.
18402         (Expression.MemberLookupFailed): New method to report errors; this
18403         does the CS1540 check and reports the correct error message.
18404
18405         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
18406         argument for the CS1540 check and redone the way how we're dealing
18407         with private members.  See the comment in the source code for details.
18408         (FilterWithClosure): Reverted this back to revision 1.197; renamed
18409         `closure_start_type' to `closure_qualifier_type' and check whether
18410         it's not null.  It was not this filter being broken, it was just
18411         being called with the wrong arguments.
18412
18413         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
18414         and pass it the correct `qualifier_type'; this also does the error
18415         handling for us.
18416
18417 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
18418
18419         * expression.cs (Invocation.EmitParams): If the we are dealing
18420         with a non-built-in value type, load its address as well.
18421
18422         (ArrayCreation): Use a a pretty constant instead
18423         of the hardcoded value 2.   Use 6 instead of 2 for the number of
18424         static initializers.  
18425
18426         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
18427         because they are not really value types, just glorified integers. 
18428
18429         * driver.cs: Do not append .exe, the CSC compiler does not do it.
18430
18431         * ecore.cs: Remove redundant code for enumerations, make them use
18432         the same code path as everything else, fixes the casting issue
18433         with enumerations in Windows.Forms.
18434
18435         * attribute.cs: Do only cast to string if it is a string, the
18436         validation happens later.
18437
18438         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
18439         people upgrade their corlibs.
18440
18441         * ecore.cs: Oops, enumerations were not following the entire code path
18442
18443 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
18444
18445         * typemanager.cs (FilterWithClosure): Commented out the test for
18446         1540 in typemanager.cs, as it has problems when accessing
18447         protected methods from a parent class (see test-174.cs). 
18448
18449         * attribute.cs (Attribute.ValidateGuid): new method.
18450         (Attribute.Resolve): Use above.
18451
18452 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
18453
18454         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
18455
18456         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
18457         handling for enumerations, as we only needed the TypeContainer
18458         functionality to begin with (this is required for the fix below to
18459         work for enums that reference constants in a container class for
18460         example). 
18461
18462         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
18463
18464         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
18465         a valid TypeBuilder to perform lookups on.o
18466
18467         * class.cs (InheritableMemberSignatureCompare): Use true in the
18468         call to GetGetMethod and GetSetMethod, because we are comparing
18469         the signature, and we need to get the methods *even* if they are
18470         private. 
18471
18472         (PropertyBase.CheckBase): ditto.
18473
18474         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
18475         GotoCase.Resolve): Use Peel on EmpytCasts.
18476
18477         * ecore.cs (EmptyCast): drop child, add Peel method.
18478
18479 2002-11-17  Martin Baulig  <martin@ximian.com>
18480
18481         * ecore.cs (EmptyCast.Child): New public property.
18482
18483         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
18484         label resolved to an EmptyCast.  Fixes #34162.
18485         (GotoCase.Resolve): Likewise.
18486         (Block.EmitMeta): Likewise.
18487
18488 2002-11-17  Martin Baulig  <martin@ximian.com>
18489
18490         * expression.cs (Invocation.BetterConversion): Prefer int over
18491         uint; short over ushort; long over ulong for integer literals.
18492         Use ImplicitConversionExists instead of StandardConversionExists
18493         since we also need to check for user-defined implicit conversions.
18494         Fixes #34165.  Added test-173.cs.
18495
18496 2002-11-16  Martin Baulig  <martin@ximian.com>
18497
18498         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
18499         with the `true' and `false' literals.  Fixes #33151.
18500
18501 2002-11-16  Martin Baulig  <martin@ximian.com>
18502
18503         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
18504         October 22nd; don't do the cs1540 check for static members.
18505
18506         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
18507         now using our own filter here and doing the cs1540 check again.
18508
18509 2002-11-16  Martin Baulig  <martin@ximian.com>
18510
18511         * support.cs (InternalParameters): Don't crash if we don't have
18512         any fixed parameters.  Fixes #33532.
18513
18514 2002-11-16  Martin Baulig  <martin@ximian.com>
18515
18516         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
18517         when looking up static methods to make this work on Windows.
18518         Fixes #33773.
18519
18520 2002-11-16  Martin Baulig  <martin@ximian.com>
18521
18522         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
18523         a setter rather than using PropertyInfo.CanWrite.
18524
18525 2002-11-15  Nick Drochak  <ndrochak@gol.com>
18526
18527         * class.cs: Allow acces to block member by subclasses. Fixes build
18528         breaker.
18529
18530 2002-11-14  Martin Baulig  <martin@ximian.com>
18531
18532         * class.cs (Constructor.Emit): Added the extern/block check.
18533         Fixes bug #33678.
18534
18535 2002-11-14  Martin Baulig  <martin@ximian.com>
18536
18537         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
18538         iteration while looking for indexers, this is needed because the
18539         indexer may have a different name in our base classes.  Fixed the
18540         error reporting (no indexers at all, not get accessor, no
18541         overloaded match).  Fixes bug #33089.
18542         (IndexerAccess.DoResolveLValue): Likewise.
18543
18544 2002-11-14  Martin Baulig  <martin@ximian.com>
18545
18546         * class.cs (PropertyBase.CheckBase): Make this work for multiple
18547         indexers.  Fixes the first part of bug #33089.
18548         (MethodSignature.InheritableMemberSignatureCompare): Added support
18549         for properties.
18550
18551 2002-11-13  Ravi Pratap  <ravi@ximian.com>
18552
18553         * attribute.cs (Attribute.Resolve): Catch the
18554         NullReferenceException and report it since it isn't supposed to
18555         happen. 
18556
18557 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
18558
18559         * expression.cs (Binary.EmitBranchable): Also handle the cases for
18560         LogicalOr and LogicalAnd that can benefit from recursively
18561         handling EmitBranchable.  The code now should be nice for Paolo.
18562
18563 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
18564
18565         * typemanager.cs (LookupType): Added a negative-hit hashtable for
18566         the Type lookups, as we perform quite a number of lookups on
18567         non-Types.  This can be removed once we can deterministically tell
18568         whether we have a type or a namespace in advance.
18569
18570         But this might require special hacks from our corlib.
18571
18572         * TODO: updated.
18573
18574         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
18575         and double which avoids a conversion from an integer to a double.
18576
18577         * expression.cs: tiny optimization, avoid calling IsConstant,
18578         because it effectively performs the lookup twice.
18579
18580 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
18581
18582         But a bogus return here to keep the semantics of the old code
18583         until the Mono runtime is fixed.
18584
18585         * pending.cs (GetMissingInterfaces): New method used to remove all
18586         the interfaces that are already implemented by our parent
18587         classes from the list of pending methods. 
18588
18589         * interface.cs: Add checks for calls after ResolveTypeExpr.
18590
18591 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
18592
18593         * class.cs (Class.Emit): Report warning 67: event not used if the
18594         warning level is beyond 3.
18595
18596         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
18597         being a NullLiteral.
18598
18599         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
18600         specifiers. 
18601
18602         * class.cs (TypeContainer.GetClassBases): Cover a missing code
18603         path that might fail if a type can not be resolved.
18604
18605         * expression.cs (Binary.Emit): Emit unsigned versions of the
18606         operators. 
18607
18608         * driver.cs: use error 5.
18609
18610 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
18611
18612         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
18613
18614 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
18615
18616         * cs-parser.jay (switch_section): A beautiful patch from Martin
18617         Baulig that fixed 33094.
18618
18619 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
18620
18621         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
18622         Check whether the base is abstract and report an error if so.
18623
18624         * expression.cs (IndexerAccess.DoResolveLValue,
18625         IndexerAccess.DoResolve): ditto. 
18626
18627         (Invocation.DoResolve): ditto.
18628
18629         (Invocation.FullMethodDesc): Improve the report string.
18630
18631         * statement.cs (Block): Eliminate IsVariableDefined as it is
18632         basically just a wrapper for GetVariableInfo.
18633
18634         * ecore.cs (SimpleName): Use new 
18635
18636         * support.cs (ReflectionParamter.ParameterType): We unwrap the
18637         type, as we return the actual parameter ref/unref state on a
18638         different call.
18639
18640 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
18641
18642         * support.cs: Return proper flags REF/OUT fixing the previous
18643         commit.  
18644
18645         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
18646         not used to mean `ref' but `ref or out' in ParameterReference
18647
18648         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
18649         full type signature instead of calling TypeManger.CSharpName
18650         ourselves. 
18651
18652         * support.cs (InternalParameters.ParameterDesc): Do not compare
18653         directly to the modflags, because REF/OUT will actually be bitsets
18654         if set. 
18655
18656         * delegate.cs (VerifyMethod): Check also the modifiers.
18657
18658         * cs-tokenizer.cs: Fix bug where floating point values with an
18659         exponent where a sign was missing was ignored.
18660
18661         * driver.cs: Allow multiple assemblies to be specified in a single
18662         /r: argument
18663
18664 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
18665
18666         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
18667         because identifiers after a parenthesis would end up in this kind
18668         of production, and we needed to desamiguate it for having casts
18669         like:
18670
18671                 (UserDefinedType *) xxx
18672
18673 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
18674
18675         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
18676         we should set on the Bindingflags.NonPublic, but not turn on
18677         private_ok.  private_ok controls whether a Private member is
18678         returned (this is chekced on the filter routine), while the
18679         BindingFlags.NonPublic just controls whether private/protected
18680         will be allowed.   This fixes the problem part of the problem of
18681         private properties being allowed to be used in derived classes.
18682
18683         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
18684         so we can call the children DoResolveLValue method (this will
18685         properly signal errors on lvalue assignments to base properties)
18686
18687         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
18688         getter are null, and we have a property info, we know that this
18689         happened because the lookup failed, so we report an error 122 for
18690         protection level violation.
18691
18692         We also silently return if setter and getter are null in the
18693         resolve functions, this condition only happens if we have flagged
18694         the error before.  This is the other half of the problem. 
18695
18696         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
18697         not have accessibility information, that is why we were returning
18698         true in the filter function in typemanager.cs.
18699
18700         To properly report 122 (property is inaccessible because of its
18701         protection level) correctly, we report this error in ResolveAccess
18702         by failing if both the setter and the getter are lacking (ie, the
18703         lookup failed). 
18704
18705         DoResolve and DoLResolve have been modified to check for both
18706         setter/getter being null and returning silently, the reason being
18707         that I did not want to put the knowledge about this error in upper
18708         layers, like:
18709
18710         int old = Report.Errors;
18711         x = new PropertyExpr (...);
18712         if (old != Report.Errors)
18713                 return null;
18714         else
18715                 return x;
18716
18717         So the property expr is returned, but it is invalid, so the error
18718         will be flagged during the resolve process. 
18719
18720         * class.cs: Remove InheritablePropertySignatureCompare from the
18721         class, as we no longer depend on the property signature to compute
18722         whether it is possible to implement a method or not.
18723
18724         The reason is that calling PropertyInfo.GetGetMethod will return
18725         null (in .NET, in Mono it works, and we should change this), in
18726         cases where the Get Method does not exist in that particular
18727         class.
18728
18729         So this code:
18730
18731         class X { public virtual int A { get { return 1; } } }
18732         class Y : X { }
18733         class Z : Y { public override int A { get { return 2; } } }
18734
18735         Would fail in Z because the parent (Y) would not have the property
18736         defined.  So we avoid this completely now (because the alternative
18737         fix was ugly and slow), and we now depend exclusively on the
18738         method names.
18739
18740         (PropertyBase.CheckBase): Use a method-base mechanism to find our
18741         reference method, instead of using the property.
18742
18743         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
18744         routines are gone now.
18745
18746         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
18747         names, they were incorrectly named.
18748
18749         * cs-tokenizer.cs: Return are more gentle token on failure. 
18750
18751         * pending.cs (PendingImplementation.InterfaceMethod): This routine
18752         had an out-of-sync index variable, which caused it to remove from
18753         the list of pending methods the wrong method sometimes.
18754
18755 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
18756
18757         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
18758         CanWrite, because those refer to this particular instance of the
18759         property, and do not take into account the fact that we can
18760         override single members of a property.
18761
18762         Constructor requires an EmitContext.  The resolution process does
18763         not happen here, but we need to compute the accessors before,
18764         because the resolution does not always happen for properties.
18765
18766         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
18767         subclass, before we did not update this flag, but we did update
18768         bindingflags. 
18769
18770         (GetAccessors): Drop this routine, as it did not work in the
18771         presence of partially overwritten set/get methods. 
18772
18773         Notice that this broke the cs1540 detection, but that will require
18774         more thinking. 
18775
18776 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18777
18778         * class.cs:
18779         * codegen.cs:
18780         * driver.cs: issue a warning instead of an error if we don't support
18781         debugging for the platform. Also ignore a couple of errors that may
18782         arise when trying to write the symbols. Undo my previous patch.
18783
18784 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18785
18786         * driver.cs: ignore /debug switch except for Unix platforms.
18787
18788 2002-10-23  Nick Drochak  <ndrochak@gol.com>
18789
18790         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
18791
18792 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
18793
18794         * driver.cs: Do not make mcs-debug conditional, so we do not break
18795         builds that use it.
18796
18797         * statement.cs (UsageVector.MergeChildren): I would like Martin to
18798         review this patch.  But basically after all the children variables
18799         have been merged, the value of "Breaks" was not being set to
18800         new_breaks for Switch blocks.  I think that it should be set after
18801         it has executed.  Currently I set this to the value of new_breaks,
18802         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
18803         conservative, but I do not understand this code very well.
18804
18805         I did not break anything in the build, so that is good ;-)
18806
18807         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
18808
18809 2002-10-20  Mark Crichton  <crichton@gimp.org>
18810
18811         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
18812
18813 2002-10-20  Nick Drochak  <ndrochak@gol.com>
18814
18815         * cfold.cs: Fixed compile blocker.
18816
18817 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
18818
18819         * driver.cs: I was chekcing the key, not the file.
18820
18821 2002-10-19  Ravi Pratap  <ravi@ximian.com>
18822
18823         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
18824         message that we were generating - we just need to silently return
18825         a null.
18826
18827 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
18828
18829         * class.cs (Event.Define): Change my previous commit, as this
18830         breaks the debugger.  This is a temporary hack, as it seems like
18831         the compiler is generating events incorrectly to begin with.
18832
18833         * expression.cs (Binary.ResolveOperator): Added support for 
18834         "U operator - (E x, E y)"
18835
18836         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
18837         y)".
18838
18839         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
18840         init-only variables, but this path did not take into account that
18841         there might be also instance readonly variables.  Correct this
18842         problem. 
18843
18844         This fixes bug 32253
18845
18846         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
18847         delegates as well.
18848
18849         * driver.cs: Change the extension for modules to `netmodule'
18850
18851         * cs-parser.jay: Improved slightly the location tracking for
18852         the debugger symbols.
18853
18854         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
18855         modifiers that were specified instead of the hardcoded value
18856         (FamAndAssem).  This was basically ignoring the static modifier,
18857         and others.  Fixes 32429.
18858
18859         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
18860         fixed a bug in the process (32476)
18861
18862         * expression.cs (ArrayAccess.EmitAssign): Patch from
18863         hwang_rob@yahoo.ca that fixes bug 31834.3
18864
18865 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
18866
18867         * driver.cs: Make the module extension .netmodule.
18868
18869 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
18870
18871         * driver.cs: Report an error if the resource file is not found
18872         instead of crashing.
18873
18874         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
18875         false, like Emit does.
18876
18877 2002-10-16  Nick Drochak  <ndrochak@gol.com>
18878
18879         * typemanager.cs: Remove unused private member.  Also reported mcs
18880         bug to report this as a warning like csc.
18881
18882 2002-10-15  Martin Baulig  <martin@gnome.org>
18883
18884         * statement.cs (Statement.Emit): Made this a virtual method; emits
18885         the line number info and calls DoEmit().
18886         (Statement.DoEmit): New protected abstract method, formerly knows
18887         as Statement.Emit().
18888
18889         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
18890
18891 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
18892
18893         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
18894         have fixed a remaining problem: not every AddXXXX was adding a
18895         fully qualified name.  
18896
18897         Now everyone registers a fully qualified name in the DeclSpace as
18898         being defined instead of the partial name.  
18899
18900         Downsides: we are slower than we need to be due to the excess
18901         copies and the names being registered this way.  
18902
18903         The reason for this is that we currently depend (on the corlib
18904         bootstrap for instance) that types are fully qualified, because
18905         we dump all the types in the namespace, and we should really have
18906         types inserted into the proper namespace, so we can only store the
18907         basenames in the defined_names array.
18908
18909 2002-10-10  Martin Baulig  <martin@gnome.org>
18910
18911         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
18912         from bug #31834, see the bug report for a testcase which is
18913         miscompiled.
18914
18915 2002-10-10  Martin Baulig  <martin@gnome.org>
18916
18917         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
18918         flow analysis code for this.
18919
18920         * statement.cs (Do, While, For): Tell the flow analysis code about
18921         infinite loops.
18922         (FlowBranching.UsageVector): Added support for infinite loops.
18923         (Block.Resolve): Moved the dead code elimination here and use flow
18924         analysis to do it.
18925
18926 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
18927
18928         * class.cs (Field.Define): Catch cycles on struct type
18929         definitions. 
18930
18931         * typemanager.cs (IsUnmanagedtype): Do not recursively check
18932         fields if the fields are static.  We only need to check instance
18933         fields. 
18934
18935         * expression.cs (As.DoResolve): Test for reference type.
18936
18937         * statement.cs (Using.ResolveExpression): Use
18938         ConvertImplicitRequired, not ConvertImplicit which reports an
18939         error on failture
18940         (Using.ResolveLocalVariableDecls): ditto.
18941
18942         * expression.cs (Binary.ResolveOperator): Report errors in a few
18943         places where we had to.
18944
18945         * typemanager.cs (IsUnmanagedtype): Finish implementation.
18946
18947 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
18948
18949         * expression.cs: Use StoreFromPtr instead of extracting the type
18950         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
18951
18952         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
18953         an enumeration value to a System.Enum, but System.Enum is not a
18954         value type, but an class type, so we need to box.
18955
18956         (Expression.ConvertExplicit): One codepath could return
18957         errors but not flag them.  Fix this.  Fixes #31853
18958
18959         * parameter.cs (Resolve): Do not allow void as a parameter type.
18960
18961 2002-10-06  Martin Baulig  <martin@gnome.org>
18962
18963         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
18964         if it's a class type and not a struct.  Fixes #31815.
18965
18966 2002-10-06  Martin Baulig  <martin@gnome.org>
18967
18968         * statement.cs: Reworked the flow analysis code a bit to make it
18969         usable for dead code elimination.
18970
18971 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18972
18973         * cs-parser.jay: allow empty source files. Fixes bug #31781.
18974
18975 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18976
18977         * expression.cs (ComposedCast.DoResolveType): A quick workaround
18978         to fix the test 165, will investigate deeper.
18979
18980 2002-10-04  Martin Baulig  <martin@gnome.org>
18981
18982         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
18983         finally blocks actually work.
18984         (Try.Resolve): We don't need to create a sibling for `finally' if
18985         there is no finally block.
18986
18987 2002-10-04  Martin Baulig  <martin@gnome.org>
18988
18989         * class.cs (Constructor.Define): The default accessibility for a
18990         non-default constructor is private, not public.
18991
18992 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18993
18994         * class.cs (Constructor): Make AllowedModifiers public, add
18995         EXTERN.
18996
18997         * cs-parser.jay: Perform the modifiers test here, as the
18998         constructor for the Constructor class usually receives a zero
18999         because of the way we create it (first we create, later we
19000         customize, and we were never checking the modifiers).
19001
19002         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
19003         is a version of LookupTypeReflection that includes the type-name
19004         cache.  This can be used as a fast path for functions that know
19005         the fully qualified name and are only calling into *.GetType() to
19006         obtain a composed type.
19007
19008         This is also used by TypeManager.LookupType during its type
19009         composition.
19010
19011         (LookupType): We now also track the real type name, as sometimes
19012         we can get a quey for the real type name from things like
19013         ComposedCast.  This fixes bug 31422.
19014
19015         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
19016         complete type fullname, it does not have to go through the type
19017         resolution system to obtain the composed version of the type (for
19018         obtaining arrays or pointers).
19019
19020         (Conditional.Emit): Use the EmitBoolExpression to
19021         generate nicer code, as requested by Paolo.
19022
19023         (ArrayCreation.CheckIndices): Use the patch from
19024         hwang_rob@yahoo.ca to validate the array initializers. 
19025
19026 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
19027
19028         * class.cs (ConstructorInitializer.Emit): simplify code by using
19029         Invocation.EmitCall, and at the same time, fix the bugs in calling
19030         parent constructors that took variable arguments. 
19031
19032         * ecore.cs (Expression.ConvertNumericExplicit,
19033         Expression.ImplicitNumericConversion): Remove the code that
19034         manually wrapped decimal (InternalTypeConstructor call is now gone
19035         as well).
19036
19037         * expression.cs (Cast.TryReduce): Also handle decimal types when
19038         trying to perform a constant fold on the type.
19039
19040         * typemanager.cs (IsUnmanagedtype): Partially implemented.
19041
19042         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
19043         that only turned off an error report, and did nothing else. 
19044
19045 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
19046
19047         * driver.cs: Handle and ignore /fullpaths
19048
19049 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
19050
19051         * expression.cs (Binary.ResolveOperator): Catch the case where
19052         DoNumericPromotions returns true, 
19053
19054         (Binary.DoNumericPromotions): Simplify the code, and the tests.
19055
19056 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
19057
19058         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
19059         report error 70.
19060
19061 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
19062
19063         * ecore.cs (ConvertNumericExplicit): It is not enough that the
19064         conversion exists, but it is also required that the conversion be
19065         performed.  This manifested in "(Type64Enum) 2".  
19066
19067         * class.cs (TypeManager.AddMethod): The fix is not to change
19068         AddEnum, because that one was using a fully qualified name (every
19069         DeclSpace derivative does), but to change the AddMethod routine
19070         that was using an un-namespaced name.  This now correctly reports
19071         the duplicated name.
19072
19073         Revert patch until I can properly fix it.  The issue
19074         is that we have a shared Type space across all namespaces
19075         currently, which is wrong.
19076
19077         Options include making the Namespace a DeclSpace, and merge
19078         current_namespace/current_container in the parser.
19079
19080 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
19081
19082         * cs-parser.jay: Improve error reporting when we get a different
19083         kind of expression in local_variable_type and
19084         local_variable_pointer_type. 
19085
19086         Propagate this to avoid missleading errors being reported.
19087
19088         * ecore.cs (ImplicitReferenceConversion): treat
19089         TypeManager.value_type as a target just like object_type.   As
19090         code like this:
19091
19092         ValueType v = 1;
19093
19094         Is valid, and needs to result in the int 1 being boxed before it
19095         is assigned to the value type v.
19096
19097         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
19098         to validate the enumeration name.
19099
19100         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
19101         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
19102         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
19103
19104         * ecore.cs (TryImplicitIntConversion): When doing an
19105         implicit-enumeration-conversion, check if the type is 64-bits and
19106         perform a conversion before passing to EnumConstant.
19107
19108 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
19109
19110         * decl.cs (Error_AmbiguousTypeReference); New routine used to
19111         report ambiguous type references.  Unlike the MS version, we
19112         report what the ambiguity is.   Innovation at work ;-)
19113
19114         (DeclSpace.FindType): Require a location argument to
19115         display when we display an ambiguous error.
19116
19117         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
19118
19119         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
19120
19121         * expression.cs (EmitDynamicInitializers): Apply patch from
19122         hwang_rob@yahoo.ca that fixes the order in which we emit our
19123         initializers. 
19124
19125 2002-09-21  Martin Baulig  <martin@gnome.org>
19126
19127         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
19128         delegate takes no arguments.
19129
19130 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
19131
19132         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
19133         from integers.
19134
19135         * expression.cs: Extract the underlying type.
19136
19137         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
19138
19139         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
19140
19141 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
19142
19143         * class.cs (TypeContainer.DefineType): We can not use the nice
19144         PackingSize with the size set to 1 DefineType method, because it
19145         will not allow us to define the interfaces that the struct
19146         implements.
19147
19148         This completes the fixing of bug 27287
19149
19150         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
19151         means also structs.  This fixes part of the problem. 
19152         (Expresion.ImplicitReferenceConversionExists): ditto.
19153
19154         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
19155         error if there were no errors reported during the type lookup
19156         process, to avoid duplicates or redundant errors.  Without this
19157         you would get an ambiguous errors plus a type not found.  We have
19158         beaten the user enough with the first error.  
19159
19160         (DeclSparce.FindType): Emit a warning if we have an ambiguous
19161         reference. 
19162
19163         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
19164         during the resolution process, stop the lookup, this avoids
19165         repeated error reports (same error twice).
19166
19167         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
19168
19169         * typemanager.cs (LookupType): Redo the type lookup code to match
19170         the needs of System.Reflection.  
19171
19172         The issue is that System.Reflection requires references to nested
19173         types to begin with a "+" sign instead of a dot.  So toplevel
19174         types look like: "NameSpace.TopLevelClass", and nested ones look
19175         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
19176         levels. 
19177
19178 2002-09-19  Martin Baulig  <martin@gnome.org>
19179
19180         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
19181         says that a method always returns or always throws an exception,
19182         don't report the CS0161.
19183
19184         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
19185         set `Returns = new_returns'.
19186
19187 2002-09-19  Martin Baulig  <martin@gnome.org>
19188
19189         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
19190         to an enum constant, check for a CS0176.
19191
19192 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
19193
19194         * class.cs (TypeContainer.CheckPairedOperators): Now we check
19195         for operators that must be in pairs and report errors.
19196
19197         * ecore.cs (SimpleName.DoResolveType): During the initial type
19198         resolution process, when we define types recursively, we must
19199         check first for types in our current scope before we perform
19200         lookups in the enclosing scopes.
19201
19202         * expression.cs (MakeByteBlob): Handle Decimal blobs.
19203
19204         (Invocation.VerifyArgumentsCompat): Call
19205         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
19206         I thought we were supposed to always call this, but there are a
19207         few places in the code where we dont do it.
19208
19209 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
19210
19211         * driver.cs: Add support in -linkres and -resource to specify the
19212         name of the identifier.
19213
19214 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
19215
19216         * ecore.cs (StandardConversionExists): Sync with the conversion
19217         code: allow anything-* to void* conversions.
19218
19219         (FindMostSpecificSource): Use an Expression argument
19220         instead of a Type, because we might be handed over a Literal which
19221         gets a few more implicit conversions that plain types do not.  So
19222         this information was being lost.
19223
19224         Also, we drop the temporary type-holder expression when not
19225         required.
19226
19227 2002-09-17  Martin Baulig  <martin@gnome.org>
19228
19229         * class.cs (PropertyBase.CheckBase): Don't check the base class if
19230         this is an explicit interface implementation.
19231
19232 2002-09-17  Martin Baulig  <martin@gnome.org>
19233
19234         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
19235         different `IndexerName' attributes.
19236
19237         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
19238         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
19239         virtual CommonResolve().
19240
19241 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
19242
19243         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
19244         and convert that to the UnderlyingType.
19245
19246         * statement.cs (Foreach.Resolve): Indexers are just like variables
19247         or PropertyAccesses.
19248
19249         * cs-tokenizer.cs (consume_string): Track line numbers and columns
19250         inside quoted strings, we were not doing this before.
19251
19252 2002-09-16  Martin Baulig  <martin@gnome.org>
19253
19254         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
19255         resolve it.  This is needed for the definite assignment check of the
19256         instance expression, fixes bug #29846.
19257         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
19258
19259 2002-09-16  Nick Drochak  <ndrochak@gol.com>
19260
19261         * parameter.cs: Fix compile error.  Cannot reference static member
19262         from an instance object.  Is this an mcs bug?
19263
19264 2002-09-14  Martin Baulig  <martin@gnome.org>
19265
19266         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
19267         multiple times.  Fixes bug #30295, added test-166.cs.
19268
19269 2002-09-14  Martin Baulig  <martin@gnome.org>
19270
19271         * statement.cs (Block.Emit): Don't emit unreachable code.
19272         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
19273         `break' statements.
19274         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
19275
19276 2002-09-14  Martin Baulig  <martin@gnome.org>
19277
19278         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
19279         is set.
19280
19281 2002-09-14  Martin Baulig  <martin@gnome.org>
19282
19283         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
19284         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
19285         be false on the ms runtime.
19286
19287 2002-09-13  Martin Baulig  <martin@gnome.org>
19288
19289         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
19290         the CS0038 error message.
19291
19292 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
19293
19294         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
19295         constant inside, return it.
19296
19297 2002-09-12  Martin Baulig  <martin@gnome.org>
19298
19299         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
19300         implicit conversion can be done between enum types.
19301
19302         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
19303         check whether an implicit conversion to the current enum's UnderlyingType
19304         exists and report an error if not.
19305
19306         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
19307         without debugging support.
19308
19309         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
19310         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
19311
19312 2002-09-12  Martin Baulig  <martin@gnome.org>
19313
19314         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
19315
19316         * ecore.cs (IMemberExpr.DeclaringType): New property.
19317         (SimpleName.SimpleNameResolve): Check whether we're accessing a
19318         nonstatic member of an outer type (CS0038).
19319
19320 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
19321
19322         * driver.cs: Activate the using-error detector at warning level
19323         4 (at least for MS-compatible APIs).
19324
19325         * namespace.cs (VerifyUsing): Small buglett fix.
19326
19327         * pending.cs (PendingImplementation): pass the container pointer. 
19328
19329         * interface.cs (GetMethods): Allow for recursive definition.  Long
19330         term, I would like to move every type to support recursive
19331         definitions, not the current ordering mechanism that we have right
19332         now.
19333
19334         The situation is this: Attributes are handled before interfaces,
19335         so we can apply attributes to interfaces.  But some attributes
19336         implement interfaces, we will now handle the simple cases
19337         (recursive definitions will just get an error).  
19338
19339         * parameter.cs: Only invalidate types at the end if we fail to
19340         lookup all types.  
19341
19342 2002-09-09  Martin Baulig  <martin@gnome.org>
19343
19344         * ecore.cs (PropertyExpr.Emit): Also check for
19345         TypeManager.system_int_array_get_length so this'll also work when
19346         compiling corlib.  Fixes #30003.
19347
19348 2002-09-09  Martin Baulig  <martin@gnome.org>
19349
19350         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
19351         and throw an exception if we can't get the type's size.  Fixed #30040,
19352         added test-165.cs.
19353
19354 2002-09-09  Martin Baulig  <martin@gnome.org>
19355
19356         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
19357
19358         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
19359         context.  Fixes bug #30027.
19360
19361         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
19362         virtual functions.  Fixes bug #30043, added test-164.cs.
19363
19364 2002-09-08  Ravi Pratap  <ravi@ximian.com>
19365
19366         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
19367
19368 2002-09-08  Nick Drochak  <ndrochak@gol.com>
19369
19370         * driver.cs: Use an object to get the windows codepage since it's not a
19371         static property.
19372
19373 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
19374
19375         * statement.cs (For.Emit): for infinite loops (test == null)
19376         return whether there is a break inside, not always "true".
19377
19378         * namespace.cs (UsingEntry): New struct to hold the name of the
19379         using definition, the location where it is defined, and whether it
19380         has been used in a successful type lookup.
19381
19382         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
19383         strings.
19384
19385         * decl.cs: ditto.
19386
19387 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19388
19389         * attribute.cs : Fix incorrect code which relied on catching
19390         a NullReferenceException to detect a null being passed in
19391         where an object was expected.
19392
19393 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
19394
19395         * statement.cs (Try): flag the catch variable as assigned
19396
19397         * expression.cs (Cast): Simplified by using ResolveType instead of
19398         manually resolving.
19399
19400         * statement.cs (Catch): Fix bug by using ResolveType.
19401
19402 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19403
19404         * expression.cs (BetterConversion): Special case for when we have
19405         a NullLiteral as the argument and we have to choose between string
19406         and object types - we choose string the way csc does.
19407
19408         * attribute.cs (Attribute.Resolve): Catch the
19409         NullReferenceException and report error #182 since the Mono
19410         runtime no more has the bug and having this exception raised means
19411         we tried to select a constructor which takes an object and is
19412         passed a null.
19413
19414 2002-09-05  Ravi Pratap  <ravi@ximian.com>
19415
19416         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
19417         message (1502, 1503) when we can't locate a method after overload
19418         resolution. This is much more informative and closes the bug
19419         Miguel reported.
19420
19421         * interface.cs (PopulateMethod): Return if there are no argument
19422         types. Fixes a NullReferenceException bug.
19423
19424         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
19425         expressions too. Previously we were checking only in one place for
19426         positional arguments leaving out named arguments.
19427
19428         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
19429         type to the enum type is not allowed. Remove code corresponding to
19430         that.
19431
19432         (ConvertNumericExplicit): Allow explicit conversions from
19433         the underlying type to enum type. This precisely follows the spec
19434         and closes a bug filed by Gonzalo.
19435
19436 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19437
19438         * compiler.csproj:
19439         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
19440
19441 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
19442
19443         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
19444         it was important that we stored the right value after the
19445         reduction in `converted'.
19446
19447 2002-09-04  Martin Baulig  <martin@gnome.org>
19448
19449         * location.cs (Location.SymbolDocument): Use full pathnames for the
19450         source files.
19451
19452 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
19453
19454         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
19455         of the expression resolve mechanism, because that will catch the
19456         SimpleName error failures.
19457
19458         (Conditional): If we can not resolve the
19459         expression, return, do not crash.
19460
19461 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19462
19463         * cs-tokenizer.cs:
19464         (location): display token name instead of its number.
19465
19466 2002-08-28  Martin Baulig  <martin@gnome.org>
19467
19468         * expression.cs (Binary.ResolveOperator): Don't silently return
19469         but return an error if an operator cannot be applied between two
19470         enum types.
19471
19472 2002-08-28  Martin Baulig  <martin@gnome.org>
19473
19474         * class.cs (Constructor.Define): Set the permission attributes
19475         correctly instead of making all constructors public.
19476
19477 2002-08-28  Martin Baulig  <martin@gnome.org>
19478
19479         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
19480         for private members before reporting a CS0103; if we find anything,
19481         it's a CS0122.
19482
19483 2002-08-28  Martin Baulig  <martin@gnome.org>
19484
19485         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
19486         to check whether `closure_start_type == closure_invocation_type',
19487         we also need to check whether `m.DeclaringType == closure_invocation_type'
19488         before bypassing the permission checks.  We might be accessing
19489         protected/private members from the base class.
19490         (TypeManager.RealMemberLookup): Only set private_ok if private
19491         members were requested via BindingFlags.NonPublic.
19492
19493         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
19494
19495         * expression.cs (MemberAccess.ResolveMemberAccess): Set
19496         MethodGroupExpr.IsExplicitImpl if appropriate.
19497         (Invocation.DoResolve): Don't report the CS0120 for explicit
19498         interface implementations.
19499
19500 2002-08-27  Martin Baulig  <martin@gnome.org>
19501
19502         * expression.cs (Invocation.DoResolve): If this is a static
19503         method and we don't have an InstanceExpression, we must report
19504         a CS0120.
19505
19506 2002-08-25  Martin Baulig  <martin@gnome.org>
19507
19508         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
19509         `==' between a valuetype and an object.
19510
19511 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
19512
19513         * ecore.cs (TypeExpr): Provide a ToString method.
19514
19515 2002-08-24  Martin Baulig  <martin@gnome.org>
19516
19517         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
19518         now called proggie.dbg and it's a binary file.
19519
19520 2002-08-23  Martin Baulig  <martin@gnome.org>
19521
19522         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
19523
19524 2002-08-23  Martin Baulig  <martin@gnome.org>
19525
19526         * struct.cs (MyStructInfo.ctor): Make this work with empty
19527         structs; it's not allowed to use foreach() on null.
19528
19529 2002-08-23  Martin Baulig  <martin@gnome.org>
19530
19531         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
19532         writer the full pathname of the generated assembly.
19533
19534 2002-08-23  Martin Baulig  <martin@gnome.org>
19535
19536         * statements.cs (FlowBranching.UsageVector.MergeChildren):
19537         A `finally' block never returns or breaks; improved handling of
19538         unreachable code.
19539
19540 2002-08-23  Martin Baulig  <martin@gnome.org>
19541
19542         * statement.cs (Throw.Resolve): Allow `throw null'.
19543
19544 2002-08-23  Martin Baulig  <martin@gnome.org>
19545
19546         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
19547         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
19548         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
19549         MemberLookup would return a wrong event if this is an explicit
19550         interface implementation and the class has an event with the same
19551         name.
19552
19553 2002-08-23  Martin Baulig  <martin@gnome.org>
19554
19555         * statement.cs (Block.AddChildVariableNames): New public method.
19556         (Block.AddChildVariableName): Likewise.
19557         (Block.IsVariableNameUsedInChildBlock): Likewise.
19558         (Block.AddVariable): Check whether a variable name has already
19559         been used in a child block.
19560
19561         * cs-parser.jay (declare_local_variables): Mark all variable names
19562         from the current block as being used in a child block in the
19563         implicit block.
19564
19565 2002-08-23  Martin Baulig  <martin@gnome.org>
19566
19567         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
19568         find the symbol writer.
19569
19570         * driver.cs: csc also allows the arguments to /define being
19571         separated by commas, not only by semicolons.
19572
19573 2002-08-23  Martin Baulig  <martin@gnome.org>
19574
19575         * interface.cs (Interface.GetMembers): Added static check for events.
19576
19577 2002-08-15  Martin Baulig  <martin@gnome.org>
19578
19579         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
19580         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
19581
19582         * ecore.cs (Expression.MemberLookup): Added documentation and explained
19583         why the MethodData.EmitDestructor() change was necessary.
19584
19585 2002-08-20  Martin Baulig  <martin@gnome.org>
19586
19587         * class.cs (TypeContainer.FindMembers): Added static check for events.
19588
19589         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
19590
19591         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
19592         use Type.GetEvents(), not Type.FindMembers().
19593
19594 2002-08-20  Martin Baulig  <martin@gnome.org>
19595
19596         * decl.cs (MemberCache): Added a special method cache which will
19597         be used for method-only searched.  This ensures that a method
19598         search will return a MethodInfo with the correct ReflectedType for
19599         inherited methods.      
19600
19601 2002-08-20  Martin Baulig  <martin@gnome.org>
19602
19603         * decl.cs (DeclSpace.FindMembers): Made this public.
19604
19605 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19606
19607         * delegate.cs: fixed build on windows.
19608         [FIXME:  Filed as bug #29150: MCS must report these errors.]
19609
19610 2002-08-19  Ravi Pratap  <ravi@ximian.com>
19611
19612         * ecore.cs (StandardConversionExists): Return a false
19613         if we are trying to convert the void type to anything else
19614         since that is not allowed.
19615
19616         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
19617         we flag error 70 in the event an event is trying to be accessed
19618         directly from outside the declaring type.
19619
19620 2002-08-20  Martin Baulig  <martin@gnome.org>
19621
19622         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
19623         MemberCache from typemanager.cs to decl.cs.
19624
19625 2002-08-19  Martin Baulig  <martin@gnome.org>
19626
19627         * class.cs (TypeContainer): Implement IMemberContainer.
19628         (TypeContainer.DefineMembers): Create the MemberCache.
19629         (TypeContainer.FindMembers): Do better BindingFlags checking; only
19630         return public members if BindingFlags.Public was given, check
19631         whether members are static.
19632
19633 2002-08-16  Martin Baulig  <martin@gnome.org>
19634
19635         * decl.cs (DeclSpace.Define): Splitted this in Define and
19636         DefineMembers.  DefineMembers is called first and initializes the
19637         MemberCache.
19638
19639         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
19640         DefineMembers() on all our DeclSpaces.
19641
19642         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
19643         but call DefineMembers() on all nested interfaces.  We call their
19644         Define() in our new Define() function.
19645
19646         * interface.cs (Interface): Implement IMemberContainer.
19647         (Interface.Define): Moved all code except the attribute stuf to
19648         DefineMembers().
19649         (Interface.DefineMembers): Initialize the member cache.
19650
19651         * typemanager.cs (IMemberFinder): Removed this interface, we don't
19652         need this anymore since we can use MemberCache.FindMembers directly.
19653
19654 2002-08-19  Martin Baulig  <martin@gnome.org>
19655
19656         * typemanager.cs (MemberCache): When creating the cache for an
19657         interface type, add all inherited members.
19658         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
19659         to `out bool used_cache' and documented it.
19660         (TypeManager.MemberLookup): If we already used the cache in the first
19661         iteration, we don't need to do the interfaces check.
19662
19663 2002-08-19  Martin Baulig  <martin@gnome.org>
19664
19665         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
19666         here from IMemberFinder and don't implement this interface anymore.
19667         (DeclSpace.MemberCache): Moved here from IMemberFinder.
19668
19669         * typemanager.cs (IMemberFinder): This interface is now only used by
19670         classes which actually support the member cache.
19671         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
19672         since we only put DeclSpaces into this Hashtable.
19673         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
19674         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
19675
19676 2002-08-16  Martin Baulig  <martin@gnome.org>
19677
19678         * typemanager.cs (ICachingMemberFinder): Removed.
19679         (IMemberFinder.MemberCache): New property.
19680         (TypeManager.FindMembers): Merged this with RealFindMembers().
19681         This function will never be called from TypeManager.MemberLookup()
19682         so we can't use the cache here, just the IMemberFinder.
19683         (TypeManager.MemberLookup_FindMembers): Check whether the
19684         IMemberFinder has a MemberCache and call the cache's FindMembers
19685         function.
19686         (MemberCache): Rewrote larger parts of this yet another time and
19687         cleaned it up a bit.
19688
19689 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
19690
19691         * driver.cs (LoadArgs): Support quoting.
19692
19693         (Usage): Show the CSC-like command line arguments.
19694
19695         Improved a few error messages.
19696
19697 2002-08-15  Martin Baulig  <martin@gnome.org>
19698
19699         * typemanager.cs (IMemberContainer.Type): New property.
19700         (IMemberContainer.IsInterface): New property.
19701
19702         The following changes are conditional to BROKEN_RUNTIME, which is
19703         defined at the top of the file.
19704
19705         * typemanager.cs (MemberCache.MemberCache): Don't add the base
19706         class'es members, but add all members from TypeHandle.ObjectType
19707         if we're an interface.
19708         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
19709         is the current type.
19710         (MemberCache.CacheEntry.Container): Removed this field.
19711         (TypeHandle.GetMembers): Include inherited members.
19712
19713 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19714
19715         * typemanager.cs: fixed compilation and added a comment on a field that
19716         is never used.
19717
19718 2002-08-15  Martin Baulig  <martin@gnome.org>
19719
19720         * class.cs (ConstructorInitializer.Resolve): In the
19721         Expression.MemberLookup call, use the queried_type as
19722         invocation_type.
19723
19724         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
19725         declared' attribute, it's always true.
19726         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
19727         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
19728         temporary wrapper for FindMembers which tells MemberLookup whether
19729         members from the base classes are included in the return value.
19730         This will go away soon.
19731         (TypeManager.MemberLookup): Use this temporary hack here; once the
19732         new MemberCache is completed, we don't need to do the DeclaredOnly
19733         looping here anymore since the MemberCache will take care of this.
19734         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
19735         (MemberCache): When creating the MemberCache for a class, get
19736         members from the current class and all its base classes.
19737         (MemberCache.CacheEntry.Container): New field.  This is a
19738         temporary hack until the Mono runtime is fixed to distinguish
19739         between ReflectedType and DeclaringType.  It allows us to use MCS
19740         with both the MS runtime and the unfixed Mono runtime without
19741         problems and without accecting performance.
19742         (MemberCache.SearchMembers): The DeclaredOnly looping from
19743         TypeManager.MemberLookup is now done here.      
19744
19745 2002-08-14  Martin Baulig  <martin@gnome.org>
19746
19747         * statement.cs (MyStructInfo.MyStructInfo): Don't call
19748         Type.GetFields on dynamic types but get the fields from the
19749         corresponding TypeContainer.
19750         (MyStructInfo.GetStructInfo): Added check for enum types.
19751
19752         * typemanager.cs (MemberList.IsSynchronized): Implemented.
19753         (MemberList.SyncRoot): Implemented.
19754         (TypeManager.FilterWithClosure): No need to check permissions if
19755         closure_start_type == closure_invocation_type, don't crash if
19756         closure_invocation_type is null.
19757
19758 2002-08-13  Martin Baulig  <martin@gnome.org>
19759
19760         Rewrote TypeContainer.FindMembers to use a member cache.  This
19761         gives us a speed increase of about 35% for the self-hosting MCS
19762         build and of about 15-20% for the class libs (both on GNU/Linux).
19763
19764         * report.cs (Timer): New class to get enhanced profiling.  This
19765         whole class is "TIMER" conditional since it remarkably slows down
19766         compilation speed.
19767
19768         * class.cs (MemberList): New class.  This is an IList wrapper
19769         which we're now using instead of passing MemberInfo[]'s around to
19770         avoid copying this array unnecessarily.
19771         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
19772         (ICachingMemberFinder, IMemberContainer): New interface.
19773         (TypeManager.FilterWithClosure): If `criteria' is null, the name
19774         has already been checked, otherwise use it for the name comparision.
19775         (TypeManager.FindMembers): Renamed to RealMemberFinder and
19776         provided wrapper which tries to use ICachingMemberFinder.FindMembers
19777         if possible.  Returns a MemberList, not a MemberInfo [].
19778         (TypeHandle): New class, implements IMemberContainer.  We create
19779         one instance of this class per type, it contains a MemberCache
19780         which is used to do the member lookups.
19781         (MemberCache): New class.  Each instance of this class contains
19782         all members of a type and a name-based hash table.
19783         (MemberCache.FindMembers): This is our new member lookup
19784         function.  First, it looks up all members of the requested name in
19785         the hash table.  Then, it walks this list and sorts out all
19786         applicable members and returns them.
19787
19788 2002-08-13  Martin Baulig  <martin@gnome.org>
19789
19790         In addition to a nice code cleanup, this gives us a performance
19791         increase of about 1.4% on GNU/Linux - not much, but it's already
19792         half a second for the self-hosting MCS compilation.
19793
19794         * typemanager.cs (IMemberFinder): New interface.  It is used by
19795         TypeManager.FindMembers to call FindMembers on a TypeContainer,
19796         Enum, Delegate or Interface.
19797         (TypeManager.finder_to_member_finder): New PtrHashtable.
19798         (TypeManager.finder_to_container): Removed.
19799         (TypeManager.finder_to_delegate): Removed.
19800         (TypeManager.finder_to_interface): Removed.
19801         (TypeManager.finder_to_enum): Removed.
19802
19803         * interface.cs (Interface): Implement IMemberFinder.
19804
19805         * delegate.cs (Delegate): Implement IMemberFinder.
19806
19807         * enum.cs (Enum): Implement IMemberFinder.
19808
19809         * class.cs (TypeContainer): Implement IMemberFinder.
19810
19811 2002-08-12  Martin Baulig  <martin@gnome.org>
19812
19813         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
19814
19815 2002-08-12  Martin Baulig  <martin@gnome.org>
19816
19817         * ecore.cs (ITypeExpression): New interface for expressions which
19818         resolve to a type.
19819         (TypeExpression): Renamed to TypeLookupExpression.
19820         (Expression.DoResolve): If we're doing a types-only lookup, the
19821         expression must implement the ITypeExpression interface and we
19822         call DoResolveType() on it.
19823         (SimpleName): Implement the new ITypeExpression interface.
19824         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
19825         hack, the situation that we're only looking up types can't happen
19826         anymore when this method is called.  Moved the type lookup code to
19827         DoResolveType() and call it.
19828         (SimpleName.DoResolveType): This ITypeExpression interface method
19829         is now doing the types-only lookup.
19830         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
19831         (ResolveFlags): Added MaskExprClass.
19832
19833         * expression.cs (MemberAccess): Implement the ITypeExpression
19834         interface.
19835         (MemberAccess.DoResolve): Added support for a types-only lookup
19836         when we're called via ITypeExpression.DoResolveType().
19837         (ComposedCast): Implement the ITypeExpression interface.
19838
19839         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
19840         Expression.Resolve() with ResolveFlags.Type instead.
19841
19842 2002-08-12  Martin Baulig  <martin@gnome.org>
19843
19844         * interface.cs (Interface.Define): Apply attributes.
19845
19846         * attribute.cs (Attribute.ApplyAttributes): Added support for
19847         interface attributes.
19848
19849 2002-08-11  Martin Baulig  <martin@gnome.org>
19850
19851         * statement.cs (Block.Emit): Only check the "this" variable if we
19852         do not always throw an exception.
19853
19854         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
19855         whether the property has a set accessor.
19856
19857 2002-08-11  Martin Baulig  <martin@gnome.org>
19858
19859         Added control flow analysis support for structs.
19860
19861         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
19862         with control flow analysis turned off.
19863         (IVariable): New interface.
19864         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
19865         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
19866         (FieldExpr.DoResolve): Resolve the instance expression with flow
19867         analysis turned off and do the definite assignment check after the
19868         resolving when we know what the expression will resolve to.
19869
19870         * expression.cs (LocalVariableReference, ParameterReference):
19871         Implement the new IVariable interface, only call the flow analysis
19872         code if ec.DoFlowAnalysis is true.
19873         (This): Added constructor which takes a Block argument.  Implement
19874         the new IVariable interface.
19875         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
19876         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
19877         This does the definite assignment checks for struct members.
19878
19879         * class.cs (Constructor.Emit): If this is a non-static `struct'
19880         constructor which doesn't have any initializer, call
19881         Block.AddThisVariable() to tell the flow analysis code that all
19882         struct elements must be initialized before control returns from
19883         the constructor.
19884
19885         * statement.cs (MyStructInfo): New public class.
19886         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
19887         argument to this indexer.  If non-zero, check an individual struct
19888         member, not the whole struct.
19889         (FlowBranching.CheckOutParameters): Check struct members.
19890         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
19891         overloaded versions of these methods which take an additional
19892         `int field_idx' argument to check struct members.
19893         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
19894         overloaded versions of these methods which take an additional
19895         `string field_name' argument to check struct member.s
19896         (VariableInfo): Implement the IVariable interface.
19897         (VariableInfo.StructInfo): New public property.  Returns the
19898         MyStructInfo instance of the variable if it's a struct or null.
19899         (Block.AddThisVariable): New public method.  This is called from
19900         Constructor.Emit() for non-static `struct' constructor which do
19901         not have any initializer.  It creates a special variable for the
19902         "this" instance variable which will be checked by the flow
19903         analysis code to ensure that all of the struct's fields are
19904         initialized before control returns from the constructor.
19905         (UsageVector): Added support for struct members.  If a
19906         variable/parameter is a struct with N members, we reserve a slot
19907         in the usage vector for each member.  A struct is considered fully
19908         initialized if either the struct itself (slot 0) or all its
19909         members are initialized.
19910
19911 2002-08-08  Martin Baulig  <martin@gnome.org>
19912
19913         * driver.cs (Driver.MainDriver): Only report an error CS5001
19914         if there were no compilation errors.
19915
19916         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
19917         `UnsafeContext' property to determine whether the parent is in
19918         unsafe context rather than checking the parent's ModFlags:
19919         classes nested in an unsafe class are unsafe as well.
19920
19921 2002-08-08  Martin Baulig  <martin@gnome.org>
19922
19923         * statement.cs (UsageVector.MergeChildren): Distinguish between
19924         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
19925         we return.  Added test17() and test18() to test-154.cs.
19926
19927 2002-08-08  Martin Baulig  <martin@gnome.org>
19928
19929         * typemanager.cs (TypeManager.FilterWithClosure): If we have
19930         Family access, make sure the invoking type isn't a subclass of the
19931         queried type (that'd be a CS1540).
19932
19933         * ecore.cs (Expression.MemberLookup): Added overloaded version of
19934         this method which takes an additional `Type invocation_type'.
19935
19936         * expression.cs (BaseAccess.DoResolve): Use the base type as
19937         invocation and query type.
19938         (MemberAccess.DoResolve): If the lookup failed and we're about to
19939         report a CS0122, try a lookup with the ec.ContainerType - if this
19940         succeeds, we must report a CS1540.
19941
19942 2002-08-08  Martin Baulig  <martin@gnome.org>
19943
19944         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
19945         (MethodGroupExpr): Implement the IMemberExpr interface.
19946
19947         * expression (MemberAccess.ResolveMemberAccess): No need to have
19948         any special code for MethodGroupExprs anymore, they're now
19949         IMemberExprs.   
19950
19951 2002-08-08  Martin Baulig  <martin@gnome.org>
19952
19953         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
19954         Family, FamANDAssem and FamORAssem permissions.
19955         (TypeManager.IsSubclassOrNestedChildOf): New public method.
19956
19957 2002-08-08  Martin Baulig  <martin@gnome.org>
19958
19959         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
19960         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
19961         or loop block.
19962
19963 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
19964
19965         * driver.cs: implemented /resource option to embed managed resources.
19966
19967 2002-08-07  Martin Baulig  <martin@gnome.org>
19968
19969         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
19970         (FieldBase.HasFieldInitializer): New public property.
19971         (FieldBase.GetInitializerExpression): New public method.  Resolves and
19972         returns the field initializer and makes sure it is only resolved once.
19973         (TypeContainer.EmitFieldInitializers): Call
19974         FieldBase.GetInitializerExpression to get the initializer, this ensures
19975         that it isn't resolved multiple times.
19976
19977         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
19978         the resolving process (SimpleName/MemberLookup) that we're currently
19979         emitting a field initializer (which must not access any instance members,
19980         this is an error CS0236).
19981
19982         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
19983         argument, if the `IsFieldInitializer' flag is set, we must report and
19984         error CS0236 and not an error CS0120.   
19985
19986 2002-08-07  Martin Baulig  <martin@gnome.org>
19987
19988         * ecore.cs (IMemberExpr): New public interface.
19989         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
19990         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
19991         if the expression is an IMemberExpr.
19992
19993         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
19994         to be null, implicitly default to `this' if we're non-static in
19995         this case.  Simplified the code a lot by using the new IMemberExpr
19996         interface.  Also fixed bug #28176 here.
19997
19998 2002-08-06  Martin Baulig  <martin@gnome.org>
19999
20000         * cs-parser.jay (SimpleLookup): Removed.  We need to create
20001         ParameterReferences during semantic analysis so that we can do a
20002         type-only search when resolving Cast, TypeOf and SizeOf.
20003         (block): Pass the `current_local_parameters' to the Block's
20004         constructor.
20005
20006         * class.cs (ConstructorInitializer): Added `Parameters parameters'
20007         argument to the constructor.
20008         (ConstructorInitializer.Resolve): Create a temporary implicit
20009         block with the parameters.
20010
20011         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
20012         references here if we aren't doing a type-only search.
20013
20014         * statement.cs (Block): Added constructor which takes a
20015         `Parameters parameters' argument.
20016         (Block.Parameters): New public property.
20017
20018         * support.cs (InternalParameters.Parameters): Renamed `parameters'
20019         to `Parameters' and made it public readonly.
20020
20021 2002-08-06  Martin Baulig  <martin@gnome.org>
20022
20023         * ecore.cs (Expression.Warning): Made this public as well.
20024
20025         * report.cs (Report.Debug): Print the contents of collections.
20026
20027 2002-08-06  Martin Baulig  <martin@gnome.org>
20028
20029         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
20030         used to tell Resolve() which kinds of expressions it may return.
20031         (Expression.Resolve): Added overloaded version of this method which
20032         takes a `ResolveFlags flags' argument.  This can be used to tell
20033         Resolve() which kinds of expressions it may return.  Reports a
20034         CS0118 on error.
20035         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
20036         ResolveFlags.SimpleName.
20037         (Expression.Error118): Added overloaded version of this method which
20038         takes a `ResolveFlags flags' argument.  It uses the flags to determine
20039         which kinds of expressions are allowed.
20040
20041         * expression.cs (Argument.ResolveMethodGroup): New public method.
20042         Resolves an argument, but allows a MethodGroup to be returned.
20043         This is used when invoking a delegate.
20044
20045         * TODO: Updated a bit.
20046
20047 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20048
20049         Fixed compilation with csc.
20050
20051         * ecore.cs: Expression.Error made public. Is this correct? Should
20052         Warning be made public too?
20053
20054         * expression.cs: use ea.Location instead of ea.loc.
20055         [FIXME:  Filed as bug #28607: MCS must report these errors.]
20056
20057 2002-08-06  Martin Baulig  <martin@gnome.org>
20058
20059         * ecore.cs (Expression.loc): Moved the location here instead of
20060         duplicating it in all derived classes.
20061         (Expression.Location): New public property.
20062         (Expression.Error, Expression.Warning): Made them non-static and
20063         removed the location argument.
20064         (Expression.Warning): Added overloaded version which takes an
20065         `int level' argument.
20066         (Expression.Error118): Make this non-static and removed the
20067         expression and location arguments.
20068         (TypeExpr): Added location argument to the constructor.
20069
20070         * expression.cs (StaticCallExpr): Added location argument to
20071         the constructor.
20072         (Indirection, PointerArithmetic): Likewise.
20073         (CheckedExpr, UnCheckedExpr): Likewise.
20074         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
20075         (StringPtr): Likewise.
20076
20077
20078 2002-08-05  Martin Baulig  <martin@gnome.org>
20079
20080         * expression.cs (BaseAccess.DoResolve): Actually report errors.
20081
20082         * assign.cs (Assign.DoResolve): Check whether the source
20083         expression is a value or variable.
20084
20085         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
20086         while resolving the corresponding blocks.
20087
20088         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
20089         an error, don't silently return null.
20090
20091         * statement.cs (Block.AddVariable): Do the error reporting here
20092         and distinguish between CS0128 and CS0136.
20093         (Block.DoResolve): Report all unused labels (warning CS0164).
20094         (LabeledStatement): Pass the location to the constructor.
20095         (LabeledStatement.HasBeenReferenced): New property.
20096         (LabeledStatement.Resolve): Set it to true here.
20097
20098         * statement.cs (Return.Emit): Return success even after reporting
20099         a type mismatch error (CS0126 or CS0127), this is what csc does and
20100         it avoids confusing the users with any consecutive errors.
20101
20102 2002-08-05  Martin Baulig  <martin@gnome.org>
20103
20104         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
20105
20106         * const.cs (Const.LookupConstantValue): Catch circular definitions.
20107
20108         * expression.cs (MemberAccess.DoResolve): Silently return if an
20109         error has already been reported.
20110
20111         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
20112         error has already been reported.
20113
20114 2002-08-05  Martin Baulig  <martin@gnome.org>
20115
20116         * statement.cs (UsageVector): Only initialize the `parameters'
20117         vector if we actually have any "out" parameters.
20118
20119 2002-08-05  Martin Baulig  <martin@gnome.org>
20120
20121         * expression.cs (Binary.ResolveOperator): When combining delegates,
20122         they must have the same type.
20123
20124 2002-08-05  Martin Baulig  <martin@gnome.org>
20125
20126         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
20127         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
20128         work with the ms runtime and we also don't need it: if we're a
20129         PropertyBuilder and not in the `indexer_arguments' hash, then we
20130         are a property and not an indexer.
20131
20132         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
20133         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
20134         since the latter one doesn't work with the ms runtime.
20135
20136 2002-08-03  Martin Baulig  <martin@gnome.org>
20137
20138         Fixed bugs #27998 and #22735.
20139
20140         * class.cs (Method.IsOperator): New public field.
20141         (Method.CheckBase): Report CS0111 if there's already a method
20142         with the same parameters in the current class.  Report CS0508 when
20143         attempting to change the return type of an inherited method.
20144         (MethodData.Emit): Report CS0179 if a method doesn't have a body
20145         and it's not marked abstract or extern.
20146         (PropertyBase): New abstract base class for Property and Indexer.
20147         (PropertyBase.CheckBase): Moved here from Property and made it work
20148         for indexers.
20149         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
20150         the same so we can reuse it there.
20151         (Property, Indexer): Derive from PropertyBase.
20152         (MethodSignature.inheritable_property_signature_filter): New delegate
20153         to find properties and indexers.
20154
20155         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
20156         argument and improved error reporting.
20157
20158         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
20159         EmptyReadOnlyParameters and made it a property.
20160
20161         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
20162         version of this method which takes a `PropertyInfo indexer'.
20163         (TypeManager.RegisterIndexer): New method.
20164
20165         * class.cs: Added myself as author of this file :-)
20166
20167 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20168
20169         * class.cs: fixed compilation on windoze.
20170
20171 2002-08-03  Martin Baulig  <martin@gnome.org>
20172
20173         * interface.cs (Interface.GetInterfaceBases): Check whether all
20174         base interfaces are at least as accessible than the current one.
20175
20176         * class.cs (TypeContainer.GetClassBases): Check whether base types
20177         are at least as accessible than the current type.
20178         (TypeContainer.AsAccessible): Implemented and made non-static.
20179         (MemberBase.CheckParameters): Report errors if the accessibility
20180         checks fail.
20181
20182         * delegate.cs (Delegate.Delegate): The default visibility is
20183         internal for top-level types and private for nested types.
20184         (Delegate.Define): Report errors if the accessibility checks fail.
20185
20186         * enum.cs (Enum.Enum): The default visibility is internal for
20187         top-level types and private for nested types.
20188         (Enum.DefineType): Compute the correct visibility.
20189
20190         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
20191         function which takes a `bool is_toplevel' instead of a TypeContainer.
20192
20193         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
20194         builtin type.
20195
20196 2002-08-02  Martin Baulig  <martin@gnome.org>
20197
20198         * expression.cs (LocalVariableReferenc): Added constructor which
20199         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
20200         (LocalVariableReference.IsReadOnly): New property.
20201         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
20202         variable is readonly, use our own readonly flag to do this; you can
20203         use the new constructor to get a writable reference to a read-only
20204         variable.
20205
20206         * cs-parser.jay (foreach_statement, using_statement): Get a writable
20207         reference to the local variable.
20208
20209 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
20210
20211         * rootcontext.cs (ResolveCore): Also include System.Exception
20212
20213         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
20214         we reach an EmptyStatement.
20215
20216         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
20217         is also fine.
20218
20219         * expression.cs (Binary.ResolveOperator): Check error result in
20220         two places.
20221
20222         use brtrue/brfalse directly and avoid compares to null.
20223
20224 2002-08-02  Martin Baulig  <martin@gnome.org>
20225
20226         * class.cs (TypeContainer.Define): Define all nested interfaces here.
20227         Fixes bug #28407, added test-155.cs.
20228
20229 2002-08-01  Martin Baulig  <martin@gnome.org>
20230
20231         * class.cs (Event.EmitDefaultMethod): Make this work with static
20232         events.  Fixes #28311, added verify-3.cs.
20233
20234 2002-08-01  Martin Baulig  <martin@gnome.org>
20235
20236         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
20237         `is_disposable' fields.
20238         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
20239         `hm.is_disposable' if we're using the collection pattern.
20240         (Foreach.EmitCollectionForeach): Use the correct type for the
20241         enumerator's local variable, only emit the try/finally block if
20242         necessary (fixes #27713).
20243
20244 2002-08-01  Martin Baulig  <martin@gnome.org>
20245
20246         * ecore.cs (Expression.report118): Renamed to Error118 and made
20247         it public static.
20248
20249         * statement.cs (Throw.Resolve): Check whether the expression is of
20250         the correct type (CS0118) and whether the type derives from
20251         System.Exception (CS0155).
20252         (Catch.Resolve): New method.  Do the type lookup here and check
20253         whether it derives from System.Exception (CS0155).
20254         (Catch.CatchType, Catch.IsGeneral): New public properties.
20255
20256         * typemanager.cs (TypeManager.exception_type): Added.
20257
20258 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
20259
20260         * driver.cs: Updated About function.
20261
20262 2002-07-31  Martin Baulig  <martin@gnome.org>
20263
20264         Implemented Control Flow Analysis.
20265
20266         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
20267         (EmitContext.CurrentBranching): Added.
20268         (EmitContext.StartFlowBranching): Added.
20269         (EmitContext.EndFlowBranching): Added.
20270         (EmitContext.KillFlowBranching): Added.
20271         (EmitContext.IsVariableAssigned): Added.
20272         (EmitContext.SetVariableAssigned): Added.
20273         (EmitContext.IsParameterAssigned): Added.
20274         (EmitContext.SetParameterAssigned): Added.
20275         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
20276         Added control flow analysis stuff here.
20277
20278         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
20279         resolve the expression as lvalue.
20280         (LocalVariableReference.DoResolve): Check whether the variable has
20281         already been assigned.
20282         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
20283         the parameter as assigned here.
20284         (ParameterReference.DoResolve): Check whether the parameter has already
20285         been assigned.
20286         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
20287         expression as lvalue.
20288
20289         * statement.cs (FlowBranching): New class for the flow analysis code.
20290         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
20291         (LabeledStatement.IsDefined): New public property.
20292         (LabeledStatement.AddUsageVector): New public method to tell flow
20293         analyis that the label may be reached via a forward jump.
20294         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
20295         flow analysis.
20296         (VariableInfo.Number): New public field.  This is used by flow analysis
20297         to number all locals of a block.
20298         (Block.CountVariables): New public property.  This is the number of
20299         local variables in this block (including the locals from all parent
20300         blocks).
20301         (Block.EmitMeta): Number all the variables.
20302
20303         * statement.cs: Added flow analysis support to all classes.
20304
20305 2002-07-31  Martin Baulig  <martin@gnome.org>
20306
20307         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
20308         To get debugging messages, compile mcs with /define:MCS_DEBUG and
20309         then use this argument.
20310
20311         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
20312
20313         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
20314         use this to specify /define options.
20315
20316 2002-07-29  Martin Baulig  <martin@gnome.org>
20317
20318         * statement.cs (Fixed): Moved all code that does variable lookups
20319         and resolvings from Emit to Resolve.
20320
20321         * statement.cs (For): Moved all code that does variable lookups
20322         and resolvings from Emit to Resolve.
20323
20324         * statement.cs (Using): Moved all code that does variable lookups
20325         and resolvings from Emit to Resolve.
20326
20327 2002-07-29  Martin Baulig  <martin@gnome.org>
20328
20329         * attribute.cs (Attribute.Resolve): Explicitly catch a
20330         System.NullReferenceException when creating the
20331         CustromAttributeBuilder and report a different warning message.
20332
20333 2002-07-29  Martin Baulig  <martin@gnome.org>
20334
20335         * support.cs (ParameterData.ParameterName): Added method to
20336         get the name of a parameter.
20337
20338         * typemanager.cs (TypeManager.IsValueType): New public method.
20339
20340 2002-07-29  Martin Baulig  <martin@gnome.org>
20341
20342         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
20343         is a flag which specifies that it's either ref or out.
20344         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
20345         the out parameter to `out Parameter.Modifier mod', also set the
20346         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
20347
20348         * support.cs (InternalParameters.ParameterModifier): Distinguish
20349         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20350         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20351
20352         * expression.cs (Argument.GetParameterModifier): Distinguish
20353         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20354         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20355
20356 2002-07-29  Martin Baulig  <martin@gnome.org>
20357
20358         * expression.cs (ParameterReference.ParameterReference): Added
20359         `Location loc' argument to the constructor.
20360
20361         * cs-parser.jay: Pass location to ParameterReference.
20362
20363 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
20364
20365         * statement.cs (Try): Initialize the location.
20366
20367         * cs-parser.jay: pass location to Try.
20368
20369         * expression.cs (Unary.Reduce): Change the prototype to return
20370         whether a constant fold could be performed or not.  The result is
20371         returned in an out parameters.  In the case of Indirection and
20372         AddressOf, we want to perform the full tests.
20373
20374 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
20375
20376         * statement.cs (Statement.Emit): Flag dead code.
20377
20378 2002-07-27  Andrew Birkett  <andy@nobugs.org>
20379
20380         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
20381
20382 2002-07-27  Martin Baulig  <martin@gnome.org>
20383
20384         * class.cs (MethodData.Define): Put back call to
20385         TypeManager.AddMethod(), accidentally commented this out.
20386
20387         * report.cs (Debug): New public method to print debugging information,
20388         this is `[Conditional ("DEBUG")]'.
20389
20390 2002-07-26  Martin Baulig  <martin@gnome.org>
20391
20392         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
20393         (switch_statement): Push the current_block to the switch_stack and
20394         pop it again when we're done with the switch.
20395         (switch_section): The new block is a child of the current_block.
20396         Fixes bug #24007, added test-152.cs.
20397
20398 2002-07-27  Martin Baulig  <martin@gnome.org>
20399
20400         * expression.cs (Invocation.EmitArguments): When calling a varargs
20401         function with only its fixed arguments, we need to pass an empty
20402         array.
20403
20404 2002-07-27  Martin Baulig  <martin@gnome.org>
20405
20406         Mono 0.13 has been released.
20407
20408 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
20409
20410         * driver.cs: Rename --resource to --linkres, because that is what
20411         we do currently, we dont support --resource yet.
20412
20413         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
20414
20415 2002-07-25  Martin Baulig  <martin@gnome.org>
20416
20417         * class.cs (MethodData): New public class.  This is a `method builder'
20418         class for a method or one accessor of a Property/Indexer/Event.
20419         (MethodData.GetMethodFlags): Moved here from MemberBase.
20420         (MethodData.ApplyAttributes): Likewise.
20421         (MethodData.ApplyObsoleteAttribute): Likewise.
20422         (MethodData.ApplyConditionalAttribute): Likewise.
20423         (MethodData.ApplyDllImportAttribute): Likewise.
20424         (MethodData.CheckAbstractAndExternal): Likewise.
20425         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
20426         (MethodData.Emit): Formerly known as Method.Emit().
20427         (MemberBase): Moved everything which was specific to a single
20428         accessor/method to MethodData.
20429         (Method): Create a new MethodData and call Define() and Emit() on it.
20430         (Property, Indexer, Event): Create a new MethodData objects for each
20431         accessor and call Define() and Emit() on them.
20432
20433 2002-07-25  Martin Baulig  <martin@gnome.org>
20434
20435         Made MethodCore derive from MemberBase to reuse the code from there.
20436         MemberBase now also checks for attributes.
20437
20438         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
20439         (MemberBase.GetMethodFlags): Moved here from class Method and marked
20440         as virtual.
20441         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
20442         `CallingConventions cc' and `Attributes opt_attrs' arguments.
20443         (MemberBase.ApplyAttributes): New virtual method; applies the
20444         attributes to a method or accessor.
20445         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
20446         (MemberBase.ApplyConditionalAttribute): Likewise.
20447         (MemberBase.ApplyDllImportAttribute): Likewise.
20448         (MemberBase.CheckAbstractAndExternal): Likewise.
20449         (MethodCore.ParameterTypes): This is now a property instead of a
20450         method, it's initialized from DoDefineParameters().
20451         (MethodCore.ParameterInfo): Removed the set accessor.
20452         (MethodCore.DoDefineParameters): New protected virtual method to
20453         initialize ParameterTypes and ParameterInfo.
20454         (Method.GetReturnType): We can now simply return the MemberType.
20455         (Method.GetMethodFlags): Override the MemberBase version and add
20456         the conditional flags.
20457         (Method.CheckBase): Moved some code from Define() here, call
20458         DoDefineParameters() here.
20459         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
20460         here to avoid some larger code duplication.
20461         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
20462         ensure that abstract and external accessors don't declare a body.
20463
20464         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
20465         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
20466         lookup in the attribute's parent classes, so we need to abort as soon
20467         as we found the first match.
20468         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
20469         the attribute has no arguments.
20470
20471         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
20472         of a Method.
20473
20474 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20475
20476         * cs-parser.jay: reverted previous patch.
20477
20478 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20479
20480         * cs-parser.jay: fixed bug #22119.
20481
20482 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20483
20484         * attribute.cs: fixed compilation. The error was:
20485         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
20486         be assigned to before control leaves the current method."
20487         [FIXME:  Filed as bug #28186: MCS must report this error.]
20488
20489 2002-07-25  Martin Baulig  <martin@gnome.org>
20490
20491         * attribute.cs (Attribute.Conditional_GetConditionName): New static
20492         method to pull the condition name ouf of a Conditional attribute.
20493         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
20494         the obsolete message and error flag out of an Obsolete attribute.
20495
20496         * class.cs (Method.GetMethodFlags): New public method to get the
20497         TypeManager.MethodFlags for this method.
20498         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
20499         private methods.
20500         (Method.Define): Get and apply the Obsolete and Conditional attributes;
20501         if we're overriding a virtual function, set the new private variable
20502         `parent_method'; call the new TypeManager.AddMethod().
20503
20504         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
20505         the MethodBuilder and the Method in a PtrHashtable.
20506         (TypeManager.builder_to_method): Added for this purpose.
20507         (TypeManager.MethodFlags): Added IsObsoleteError.
20508         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
20509         Obsolete and Conditional arguments in MethodBuilders.  If we discover
20510         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
20511         the message from the attribute.
20512
20513 2002-07-24  Martin Baulig  <martin@gnome.org>
20514
20515         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
20516         preprocessor directives, ensure that the argument to #define/#undef is
20517         exactly one identifier and that it's actually an identifier.
20518
20519         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
20520         did not work ....
20521
20522 2002-07-24  Martin Baulig  <martin@gnome.org>
20523
20524         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
20525         initialize it to TypeManager.object_type in the constructor.
20526         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
20527         of the `hm.get_current' method if we're using the collection pattern.
20528         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
20529         for the explicit conversion to make it work when we're using the collection
20530         pattern and the `Current' property has a different return type than `object'.
20531         Fixes #27713.
20532
20533 2002-07-24  Martin Baulig  <martin@gnome.org>
20534
20535         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
20536         does not match, but don't report any errors.  This method is called in
20537         order for all methods in a MethodGroupExpr until a matching method is
20538         found, so we don't want to bail out if the first method doesn't match.
20539         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
20540         matches, report the 123.  Fixes #28070.
20541
20542 2002-07-24  Martin Baulig  <martin@gnome.org>
20543
20544         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
20545         TypeManager.TypeToCoreType() to the top of the method so the
20546         following equality checks will work.  Fixes #28107.
20547
20548 2002-07-24  Martin Baulig  <martin@gnome.org>
20549
20550         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
20551         operand is of type uint, and the other operand is of type sbyte,
20552         short or int, the operands are converted to type long." -
20553         Actually do what this comment already told us.  Fixes bug #28106,
20554         added test-150.cs.
20555
20556 2002-07-24  Martin Baulig  <martin@gnome.org>
20557
20558         * class.cs (MethodBase): New abstract class.  This is now a base
20559         class for Property, Indexer and Event to avoid some code duplication
20560         in their Define() and DefineMethods() methods.
20561         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
20562         generic methods for Define() and DefineMethods().
20563         (FieldBase): Derive from MemberBase, not MemberCore.
20564         (Property): Derive from MemberBase, not MemberCore.
20565         (Property.DefineMethod): Moved all the code from this method to the
20566         new MethodBase.DefineAccessor(), just call it with appropriate
20567         argumetnts.
20568         (Property.Define): Call the new Property.DoDefine(), this does some
20569         sanity checks and we don't need to duplicate the code everywhere.
20570         (Event): Derive from MemberBase, not MemberCore.
20571         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
20572         accessors, this will also make them work with interface events.
20573         (Indexer): Derive from MemberBase, not MemberCore.
20574         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
20575         (Indexer.Define): Use the new MethodBase functions.
20576
20577         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
20578         argument to the constructor.
20579         (Interface.FindMembers): Added support for interface events.
20580         (Interface.PopluateEvent): Implemented.
20581
20582         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
20583
20584 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
20585
20586         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
20587         but this is required to check for a method name being the same as
20588         the containing class.  
20589
20590         Handle this now.
20591
20592 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20593
20594         * interface.cs: initialize variable.
20595
20596 2002-07-23  Martin Baulig  <martin@gnome.org>
20597
20598         Implemented the IndexerName attribute in interfaces.
20599
20600         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
20601         name if this is an explicit interface implementation.
20602         (Indexer.InterfaceIndexerName): New public variable.  If we're
20603         implementing an interface indexer, this is the IndexerName in that
20604         interface.  Otherwise, it's the IndexerName.
20605         (Indexer.DefineMethod): If we're implementing interface indexer,
20606         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
20607         and Pending.ImplementIndexer methods.
20608         (Indexer.Define): Also define the PropertyBuilder if we're
20609         implementing an interface indexer and this is neither an explicit
20610         interface implementation nor do the IndexerName match the one in
20611         the interface.
20612
20613         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
20614         If a method is defined here, then we always need to create a proxy
20615         for it.  This is used when implementing interface indexers.
20616         (Pending.IsInterfaceIndexer): New public method.
20617         (Pending.ImplementIndexer): New public method.
20618         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
20619         This is used when implementing interface indexers to define a proxy
20620         if necessary.
20621         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
20622         define a proxy if necessary.
20623
20624         * interface.cs (Interface.IndexerName): New public variable.
20625         (Interface.PopulateIndexer): Set the IndexerName.
20626         (Interface.DefineIndexers): New private method.  Populate all the
20627         indexers and make sure their IndexerNames match.
20628
20629         * typemanager.cs (IndexerPropertyName): Added support for interface
20630         indexers.
20631
20632 2002-07-22  Martin Baulig  <martin@gnome.org>
20633
20634         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
20635         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
20636         ret if HasReturnLabel.
20637         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
20638         variables.
20639
20640         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
20641         and set the ec.LoopBeginTryCatchLevel.
20642         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
20643         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
20644         the current ec.TryCatchLevel, the branch goes out of an exception
20645         block.  In this case, we need to use Leave and not Br.
20646
20647 2002-07-22  Martin Baulig  <martin@gnome.org>
20648
20649         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
20650         block unless the block does not always return or it is contained in
20651         another try { ... } catch { ... } block.  Fixes bug #26506.
20652         Added verify-1.cs to the test suite.
20653
20654 2002-07-22  Martin Baulig  <martin@gnome.org>
20655
20656         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
20657         then we do not always return.  Fixes bug #24985.
20658
20659 2002-07-22  Martin Baulig  <martin@gnome.org>
20660
20661         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
20662         lookup on a per-class level; ie. walk up the class hierarchy until we
20663         found at least one applicable method, then choose the best among them.
20664         Fixes bug #24463 and test-29.cs.
20665
20666 2002-07-22  Martin Baulig  <martin@gnome.org>
20667
20668         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
20669         return types of the methods.  The return type is not part of the
20670         signature and we must not check it to make the `new' modifier work.
20671         Fixes bug #27999, also added test-147.cs.
20672         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
20673
20674         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
20675         on the method's return type.
20676
20677 2002-07-21  Martin Baulig  <martin@gnome.org>
20678
20679         * assign.cs: Make this work if the rightmost source is a constant and
20680         we need to do an implicit type conversion.  Also adding a few more tests
20681         to test-38.cs which should have caught this.
20682
20683         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
20684         target in the makefile for this.  The makefile.gnu is primarily intended
20685         for end-users who don't want to debug the compiler.
20686
20687 2002-07-21  Martin Baulig  <martin@gnome.org>
20688
20689         * assign.cs: Improved the Assign class so it can now handle embedded
20690         assignments (X = Y = Z = something).  As a side-effect this'll now also
20691         consume less local variables.  test-38.cs now passes with MCS, added
20692         a few new test cases to that test.
20693
20694 2002-07-20  Martin Baulig  <martin@gnome.org>
20695
20696         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
20697         instructions.  Fixes bug #27977, also added test-146.cs.
20698
20699 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20700
20701         * cs-tokenizer.cs: fixed getHex ().
20702
20703 2002-07-19  Martin Baulig  <martin@gnome.org>
20704
20705         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
20706         not Type.GetType() to lookup the array type.  This is needed when
20707         we're constructing an array of a user-defined type.
20708         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
20709         single-dimensional arrays, but also for single-dimensial arrays of
20710         type decimal.
20711
20712 2002-07-19  Martin Baulig  <martin@gnome.org>
20713
20714         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
20715         this function is called, it's not allowed to share LocalBuilders
20716         among ILGenerators.
20717
20718 2002-07-19  Martin Baulig  <martin@gnome.org>
20719
20720         * expression.cs (Argument.Resolve): Report an error 118 when trying
20721         to pass a type as argument.
20722
20723 2002-07-18  Martin Baulig  <martin@gnome.org>
20724
20725         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
20726         Conv_R_Un for the signed `long' type.
20727
20728 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
20729
20730         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
20731         `expr' for the temporary result, as that will fail if we do
20732         multiple resolves on the same expression.
20733
20734 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
20735
20736         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
20737         ec.TypeContainer for looking up aliases. 
20738
20739         * class.cs (TypeContainer): Remove LookupAlias from here.
20740
20741         * decl.cs (DeclSpace); Move here.
20742
20743 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
20744
20745         * class.cs (FindMembers): Only call filter if the constructor
20746         bulider is not null.
20747
20748         Also handle delegates in `NestedTypes' now.  Now we will perform
20749         type lookups using the standard resolution process.  This also
20750         fixes a bug.
20751
20752         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
20753         This uses Expressions (the limited kind that can be parsed by the
20754         tree) instead of strings.
20755
20756         * expression.cs (ComposedCast.ToString): Implement, used to flag
20757         errors since now we have to render expressions.
20758
20759         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
20760         FormArrayType. 
20761
20762         * ecore.cs (SimpleName.ToString): ditto.
20763
20764         * cs-parser.jay: Instead of using strings to assemble types, use
20765         Expressions to assemble the type (using SimpleName, ComposedCast,
20766         MemberAccess).  This should fix the type lookups in declarations,
20767         because we were using a different code path for this.
20768
20769         * statement.cs (Block.Resolve): Continue processing statements
20770         even when there is an error.
20771
20772 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
20773
20774         * class.cs (Event.Define): Also remove the `remove' method from
20775         the list of pending items.
20776
20777         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
20778         generate more compact code. 
20779
20780 2002-07-17  Martin Baulig  <martin@gnome.org>
20781
20782         * const.cs (Const.LookupConstantValue): Add support for constant
20783         `unchecked' and `checked' expressions.
20784         Also adding test case test-140.cs for this.
20785
20786 2002-07-17  Martin Baulig  <martin@gnome.org>
20787
20788         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
20789         check whether mi.ReturnType implements the IEnumerator interface; the
20790         `==' and the IsAssignableFrom() will fail in this situation.
20791
20792 2002-07-16  Ravi Pratap  <ravi@ximian.com>
20793
20794         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
20795         here too.
20796
20797 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20798
20799         * expression.cs: fixed bug #27811.
20800
20801 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
20802
20803         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
20804         Molaro: when we are a ref, the value already contains a pointer
20805         value, do not take the address of it.
20806
20807 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
20808         * removed mb-parser.jay and mb-tokenizer.cs
20809
20810 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20811
20812         * expression.cs: check against the building corlib void type.
20813
20814 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
20815
20816         * ecore.cs: fix for valuetype static readonly fields: when 
20817         initializing them, we need their address, not the address of a copy.
20818
20819 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
20820
20821         * typemanager.cs: register also enum_type in corlib.
20822
20823 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20824
20825         * class.cs: allow calling this (but not base) initializers in structs.
20826
20827 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
20828
20829         * ecore.cs: make sure we compare against the building base types
20830         in GetTypeSize ().
20831
20832 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
20833
20834         * typemanager.cs: fix TypeToCoreType() to handle void and object
20835         (corlib gets no more typerefs after this change).
20836
20837 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
20838
20839         * expression.cs (ArrayCreation.EmitArrayArguments): use
20840         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
20841
20842         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
20843         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
20844         array indexes, the runtime actually forbids them.
20845
20846         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
20847         for array arguments here.
20848
20849         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
20850         instead of the default for ValueTypes.
20851
20852         (New.DoEmit): Use IsValueType instead of
20853         IsSubclassOf (value_type)
20854         (New.DoResolve): ditto.
20855         (Invocation.EmitCall): ditto.
20856
20857         * assign.cs (Assign): ditto.
20858
20859         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
20860         Statements *are* currently doing part of their resolution during
20861         Emit.  
20862
20863         Expressions do always resolve during resolve, but statements are
20864         only required to propagate resolution to their children.
20865
20866 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
20867
20868         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
20869
20870         (LoadAssembly): Do not add the dll if it is already specified
20871
20872         (MainDriver): Add the System directory to the link path at the end,
20873         after all the other -L arguments. 
20874
20875         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
20876         wrong opcode for loading bytes and bools (ldelem.i1 instead of
20877         ldelem.u1) and using the opposite for sbytes.
20878
20879         This fixes Digger, and we can finally run it.
20880
20881         * driver.cs (UnixParseOption): Move the option parsing here.  
20882         (CSCParseOption): Implement CSC-like parsing of options.
20883
20884         We now support both modes of operation, the old Unix way, and the
20885         new CSC-like way.  This should help those who wanted to make cross
20886         platform makefiles.
20887
20888         The only thing broken is that /r:, /reference: and /lib: are not
20889         implemented, because I want to make those have the same semantics
20890         as the CSC compiler has, and kill once and for all the confussion
20891         around this.   Will be doing this tomorrow.
20892
20893         * statement.cs (Unsafe.Resolve): The state is checked during
20894         resolve, not emit, so we have to set the flags for IsUnsfe here.
20895
20896 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20897
20898         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
20899         not catch the Error_ObjectRefRequired in SimpleName (as it is
20900         possible to have a class/instance variable name that later gets
20901         deambiguated), we have to check this here.      
20902
20903 2002-07-10  Ravi Pratap  <ravi@ximian.com>
20904
20905         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
20906         make static and put into Expression.
20907
20908         (Event.Define): Register the private field of the event with the 
20909         TypeManager so that GetFieldFromEvent can get at it.
20910
20911         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
20912         keep track of the private field associated with an event which
20913         has no accessors.
20914
20915         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
20916         private field.
20917
20918         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
20919
20920 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20921
20922         * expression.cs (Binary.EmitBranchable): this routine emits the
20923         Binary expression in a branchable context.  This basically means:
20924         we need to branch somewhere, not just get the value on the stack.
20925
20926         This works together with Statement.EmitBoolExpression.
20927
20928         * statement.cs (Statement.EmitBoolExpression): Use
20929         EmitBranchable. 
20930
20931 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
20932
20933         * statement.cs (For): Reduce the number of jumps in loops.
20934
20935         (For): Implement loop inversion for the For statement.
20936
20937         (Break): We can be breaking out of a Try/Catch controlled section
20938         (foreach might have an implicit try/catch clause), so we need to
20939         use Leave instead of Br.
20940
20941         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
20942         now).  If the instace expression supports IMemoryLocation, we use
20943         the AddressOf method from the IMemoryLocation to extract the
20944         address instead of emitting the instance.
20945
20946         This showed up with `This', as we were emitting the instance
20947         always (Emit) instead of the Address of This.  Particularly
20948         interesting when This is a value type, as we dont want the Emit
20949         effect (which was to load the object).
20950
20951 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
20952
20953         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
20954
20955         * statement.cs (Checked): Set the CheckedState during the resolve
20956         process too, as the ConvCast operations track the checked state on
20957         the resolve process, and not emit.
20958
20959         * cs-parser.jay (namespace_member_declaration): Flag that we have
20960         found a declaration when we do.  This is used to flag error 1529
20961
20962         * driver.cs: Report ok when we display the help only.
20963
20964 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
20965
20966         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
20967
20968 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
20969
20970         * cs-tokenizer.cs (define): We also have to track locally the
20971         defines.  AllDefines is just used for the Conditional Attribute,
20972         but we also need the local defines for the current source code. 
20973
20974 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
20975
20976         * statement.cs (While, For, Do): These loops can exit through a
20977         Break statement, use this information to tell whether the
20978         statement is the last piece of code.
20979
20980         (Break): Flag that we break.
20981
20982         * codegen.cs (EmitContexts): New `Breaks' state variable.
20983
20984 2002-07-03  Martin Baulig  <martin@gnome.org>
20985
20986         * class.cs (TypeContainer.MethodModifiersValid): Allow override
20987         modifiers in method declarations in structs.  Otherwise, you won't
20988         be able to override things like Object.Equals().
20989
20990 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20991
20992         * class.cs (Method, Property, Indexer): Do not allow the public
20993         modifier to be used in explicit interface implementations.
20994
20995         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
20996         override modifiers in method declarations in structs
20997
20998 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
20999
21000         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
21001         integer or real overflow, report an error
21002
21003 2002-07-02  Martin Baulig  <martin@gnome.org>
21004
21005         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
21006         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
21007         to tell the runtime about our newly created System.Object and
21008         System.ValueType types.
21009
21010 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
21011
21012         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
21013         struct instead of Ldarg/Starg.
21014
21015 2002-07-02  Martin Baulig  <martin@gnome.org>
21016
21017         * expression.cs (Indirection.Indirection): Call
21018         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
21019
21020 2002-07-02  Martin Baulig  <martin@gnome.org>
21021
21022         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
21023         ValueType, call TypeManager.TypeToCoreType() on it.
21024         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
21025         the OpCodes.Newarr argument.
21026
21027 2002-07-02  Martin Baulig  <martin@gnome.org>
21028
21029         * expression.cs (Invocation.EmitCall): When compiling corlib,
21030         replace all calls to the system's System.Array type to calls to
21031         the newly created one.
21032
21033         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
21034         System.Array methods.
21035         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
21036         from the system's System.Array type which must be replaced.
21037
21038 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
21039
21040         * typemanager.cs: load unverifiable_code_ctor so we can build
21041         corlib using the correct type. Avoid using GetTypeCode() with
21042         TypeBuilders.
21043         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
21044         TypeManager.object_type to allow building corlib.
21045
21046 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
21047
21048         * ecore.cs: handle System.Enum separately in LoadFromPtr().
21049
21050 2002-07-01  Martin Baulig  <martin@gnome.org>
21051
21052         * class.cs: Make the last change actually work, we need to check
21053         whether `ifaces != null' to avoid a crash.
21054
21055 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
21056
21057         * class.cs: when we build structs without fields that implement
21058         interfaces, we need to add the interfaces separately, since there is
21059         no API to both set the size and add the interfaces at type creation
21060         time.
21061
21062 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
21063
21064         * expression.cs: the dimension arguments to the array constructors
21065         need to be converted if they are a long.
21066
21067 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
21068
21069         * class.cs: don't emit ldarg.0 if there is no parent constructor
21070         (fixes showstopper for corlib).
21071
21072 2002-06-29  Martin Baulig  <martin@gnome.org>
21073
21074         MCS now compiles corlib on GNU/Linux :-)
21075
21076         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
21077         ie. check for MethodImplOptions.InternalCall.
21078
21079         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
21080         and TypeManager.attribute_type are null, so we must explicitly check
21081         whether parent is not null to find out whether it's an attribute type.
21082         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
21083         and SetBuilder, not only if the property is neither abstract nor external.
21084         This is necessary to set the MethodImplOptions on the accessor methods.
21085         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
21086         SetBuilder, see Property.Emit().
21087
21088         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
21089         populate "System.Object", "System.ValueType" and "System.Attribute" since
21090         they've already been populated from BootCorlib_PopulateCoreTypes().
21091
21092 2002-06-29  Martin Baulig  <martin@gnome.org>
21093
21094         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
21095         is the NullLiteral, we also need to make sure that target_type is not
21096         an enum type.   
21097
21098 2002-06-29  Martin Baulig  <martin@gnome.org>
21099
21100         * rootcontext.cs (RootContext.ResolveCore): We must initialize
21101         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
21102         before calling BootstrapCorlib_ResolveDelegate ().
21103
21104 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21105
21106         * statement.cs: fixed build-breaker. All tests passed ok.
21107
21108 2002-06-27  Martin Baulig  <martin@gnome.org>
21109
21110         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
21111         for System.Decimal when compiling corlib.
21112
21113 2002-06-27  Martin Baulig  <martin@gnome.org>
21114
21115         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
21116         switch blocks which contain nothing but a default clause.
21117
21118 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
21119
21120        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
21121
21122 2002-06-27  Martin Baulig  <martin@gnome.org>
21123
21124         * ecore.cs (PropertyExpr.PropertyExpr): Call
21125         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
21126
21127         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
21128         is already a TypeBuilder.
21129
21130 2002-06-27  Martin Baulig  <martin@gnome.org>
21131
21132         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
21133         `target_type == TypeManager.array_type', not IsAssignableFrom() in
21134         the "from an array-type to System.Array" case.  This makes it work
21135         when compiling corlib.
21136
21137 2002-06-27  Martin Baulig  <martin@gnome.org>
21138
21139         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
21140         non-static PropertyExpr, set its InstanceExpression.  This makes
21141         the `ICollection.Count' property work in System/Array.cs.
21142
21143 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
21144
21145         * driver.cs: Made error handling more consistent.  Errors now
21146         tracked by Report class, so many methods which used to return int
21147         now return void.  Main() now prints success/failure and 
21148         errors/warnings message.
21149
21150         Renamed '--probe' compiler argument to '--expect-error'.  Removed
21151         the magic number return values (123 and 124).  Now, if the
21152         expected error occurs, the compiler exits with success (exit value
21153         0).  If the compilation completes without seeing that particular
21154         error, the compiler exits with failure (exit value 1).  The
21155         makefile in mcs/errors has been changed to handle the new behaviour.
21156
21157         * report.cs: Made 'expected error' number a property and renamed
21158         it from 'Probe' to 'ExpectedError'.
21159
21160         * genericparser.cs: Removed error handling support, since it is
21161         now all done by Report class.
21162
21163         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
21164         class, so parse() no longer returns an int.
21165
21166         * namespace.cs: Use Report.Error instead of GenericParser.error
21167
21168 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
21169
21170         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
21171         TypeContainer.AddOperator): At the front of the list put the
21172         explicit implementations, so they get resolved/defined first. 
21173
21174 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
21175
21176         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
21177         interface type is implemented by this TypeContainer.  Used during
21178         explicit interface implementation.
21179
21180         (Property.Define, Indexer.Define, Method.Define): Validate that
21181         the given interface in the explicit implementation is one of the
21182         base classes for the containing type.
21183
21184         Also if we are explicitly implementing an interface, but there is
21185         no match in the pending implementation table, report an error.
21186
21187         (Property.Define): Only define the property if we are
21188         not explicitly implementing a property from an interface.  Use the
21189         correct name also for those properties (the same CSC uses,
21190         although that is really not needed).
21191
21192         (Property.Emit): Do not emit attributes for explicitly implemented
21193         properties, as there is no TypeBuilder.
21194
21195         (Indexer.Emit): ditto.
21196
21197         Hiding then means that we do not really *implement* a pending
21198         implementation, which makes code fail.
21199
21200 2002-06-22  Martin Baulig  <martin@gnome.org>
21201
21202         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
21203         the return value of Object.GetType().  [FIXME: we need to do this whenever
21204         we get a type back from the reflection library].
21205
21206 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
21207
21208         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
21209
21210 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
21211
21212         * attribute.cs: Return null if we can not look up the type.
21213
21214         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
21215         the interface types found.
21216
21217         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
21218         interface types found.
21219
21220         * typemanager.cs (GetInterfaces): Make this routine returns alll
21221         the interfaces and work around the lame differences between
21222         System.Type and System.Reflection.Emit.TypeBuilder in the results
21223         result for GetInterfaces.
21224
21225         (ExpandInterfaces): Given an array of interface types, expand and
21226         eliminate repeated ocurrences of an interface.  This expands in
21227         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
21228         be IA, IB, IC.
21229
21230 2002-06-21  Martin Baulig  <martin@gnome.org>
21231
21232         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
21233         on System.Enum.
21234
21235 2002-06-21  Martin Baulig  <martin@gnome.org>
21236
21237         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
21238         and called with one of the core types, return the corresponding typebuilder for
21239         that type.
21240
21241         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
21242         element type.
21243
21244 2002-06-21  Martin Baulig  <martin@gnome.org>
21245
21246         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
21247         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
21248         (Expression.ConvertReferenceExplicit): Likewise.
21249
21250         * expression.cs (ElementAccess.DoResolve): Likewise.
21251         (ElementAccess.DoResolveLValue): Likewise.
21252
21253 2002-06-10  Martin Baulig  <martin@gnome.org>
21254
21255         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
21256         add the "value" parameter to the parameter list.
21257
21258         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
21259         to our caller.
21260
21261 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
21262
21263         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
21264         the argument to an int, uint, long or ulong, per the spec.  Also
21265         catch negative constants in array creation.
21266
21267 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
21268
21269         * class.cs: do not allow the same interface to appear twice in
21270         the definition list.
21271
21272 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
21273
21274         * ecore.cs: don't use ldlen with System.Array.
21275
21276 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
21277
21278         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
21279
21280 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
21281
21282         * modifiers.cs: produce correct field attributes for protected
21283         internal. Easy fix so miguel can work on ther harder stuff:-)
21284
21285 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
21286
21287         * pending.cs: New file.  Move the code from class.cs here.
21288         Support clearning the pending flag for all methods (when not doing
21289         explicit interface implementation).
21290
21291 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
21292
21293         * rootcontext.cs: added a couple more types needed to bootstrap.
21294
21295 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
21296
21297         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
21298         constructor in the type, instead of any constructor in the type
21299         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
21300         a bug in the Mono runtime when applying the params attribute). 
21301
21302 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
21303         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
21304
21305 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
21306
21307         * expression.cs (Unary.ResolveOperator): Use TypeManager
21308         to resolve the type.
21309
21310 2002-06-13  Ravi Pratap  <ravi@ximian.com>
21311
21312         * cs-parser.jay (enum_member_declaration): Pass in the attributes
21313         attached.
21314
21315         * enum.cs (AddEnumMember): Add support to store the attributes associated 
21316         with each member too.
21317
21318         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
21319         field builders too - this takes care of the enum member case.
21320
21321 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
21322
21323         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
21324         address-of operator on both value types and pointers.
21325
21326 2002-06-10  Martin Baulig  <martin@gnome.org>
21327
21328         * interface.cs (Interface.PopulateIndexer): Add the indexer's
21329         PropertyBuilder to the `property_builders' list.
21330
21331         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
21332         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
21333         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
21334         find any indexers which are inherited from an interface.
21335
21336 2002-06-09  Martin Baulig  <martin@gnome.org>
21337
21338         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
21339         the same type as the constant if necessary.  There's also a test-130.cs
21340         for this.
21341
21342         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
21343
21344         * typemanager.cs (TypeManager.ChangeType): Previously known as
21345         Enum.ChangeEnumType().
21346
21347 2002-06-09  Martin Baulig  <martin@gnome.org>
21348
21349         * expression.cs (Cast.TryReduce): Added support for consts.
21350
21351 2002-06-08  Ravi Pratap  <ravi@ximian.com>
21352
21353         * class.cs (Accessor): Hold attributes information so we can pass
21354         it along.
21355
21356         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
21357         Modify to pass in attributes attached to the methods.
21358
21359         (add_accessor_declaration, remove_accessor_declaration): Ditto.
21360
21361         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
21362         to handle the Accessor kind :-)
21363
21364         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
21365
21366 2002-06-08  Martin Baulig  <martin@gnome.org>
21367
21368         * expression.cs (Unary.TryReduceNegative): Added support for
21369         ULongConstants.
21370
21371 2002-06-08  Martin Baulig  <martin@gnome.org>
21372
21373         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
21374         name can't be found in the `defined_names' - the caller will do a
21375         MemberLookup in this case and thus find methods in System.Enum
21376         such as Enum.IsDefined().
21377
21378 2002-06-08  Martin Baulig  <martin@gnome.org>
21379
21380         * enum.cs (Enum.ChangeEnumType): This is a custom version of
21381         Convert.ChangeType() which works with TypeBuilder created types.
21382         (Enum.LookupEnumValue, Enum.Define): Use it here.
21383
21384         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
21385         `TypeBuilder.BaseType != null' check.
21386         (TypeContainer.FindMembers): Only lookup parent members if we
21387         actually have a parent.
21388         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
21389         (ConstructorInitializer.Resolve): Likewise.
21390
21391         * interface.cs (Interface.FindMembers): Added
21392         `TypeBuilder.BaseType != null' check.
21393
21394         * rootcontext.cs (RootContext.ResolveCore): Added
21395         "System.Runtime.CompilerServices.IndexerNameAttribute" to
21396         classes_second_stage.
21397
21398         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
21399         debug_type and trace_type when compiling with --nostdlib.       
21400
21401 2002-06-07  Martin Baulig  <martin@gnome.org>
21402
21403         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
21404         (AddField): Set it to true when adding a non-static field.
21405         (DefineType): Use `have_nonstatic_fields' to find out whether we
21406         have non-static fields, not `Fields != null'.
21407
21408 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
21409
21410         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
21411         dereferencing a null on the static-field code path)
21412
21413 2002-05-30  Martin Baulig  <martin@gnome.org>
21414
21415         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
21416         to take command line arguments.  Use reflection to call the new
21417         custom `Initialize' function on the symbol writer and pass it the
21418         command line arguments.
21419
21420         * driver.cs (--debug-args): New command line argument to pass command
21421         line arguments to the symbol writer.
21422
21423 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
21424
21425         * assign.cs (DoResolve): Forgot to do the implicit conversion to
21426         the target type for indexers and properties.  Thanks to Joe for
21427         catching this.
21428
21429 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
21430
21431         * typemanager.cs (MethodFlags): returns the method flags
21432         (Obsolete/ShouldIgnore) that control warning emission and whether
21433         the invocation should be made, or ignored. 
21434
21435         * expression.cs (Invocation.Emit): Remove previous hack, we should
21436         not do this on matching a base type, we should do this based on an attribute
21437
21438         Only emit calls to System.Diagnostics.Debug and
21439         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
21440         on the command line.
21441
21442         * rootcontext.cs: Global settings for tracing and debugging.
21443
21444         * cs-tokenizer.cs (define): New utility function to track
21445         defines.   Set the global settings for TRACE and DEBUG if found.
21446
21447 2002-05-25  Ravi Pratap  <ravi@ximian.com>
21448
21449         * interface.cs (Populate*): Pass in the TypeContainer as well as
21450         the DeclSpace as parameters so that we can create EmitContexts and
21451         then use that to apply attributes etc.
21452
21453         (PopulateMethod, PopulateEvent, PopulateProperty)
21454         (PopulateIndexer): Apply attributes everywhere.
21455
21456         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
21457         etc.
21458
21459         (ApplyAttributes): Update accordingly.
21460
21461         We now apply interface attributes for all members too.
21462
21463 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
21464
21465         * class.cs (Indexer.Define); Correctly check if we are explicit
21466         implementation (instead of checking the Name for a ".", we
21467         directly look up if the InterfaceType was specified).
21468
21469         Delay the creation of the PropertyBuilder.
21470
21471         Only create the PropertyBuilder if we are not an explicit
21472         interface implementation.   This means that explicit interface
21473         implementation members do not participate in regular function
21474         lookups, and hence fixes another major ambiguity problem in
21475         overload resolution (that was the visible effect).
21476
21477         (DefineMethod): Return whether we are doing an interface
21478         implementation. 
21479
21480         * typemanager.cs: Temporary hack until we get attributes in
21481         interfaces (Ravi is working on that) and we get IndexerName
21482         support in interfaces.
21483
21484         * interface.cs: Register the indexers as properties.
21485
21486         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
21487         warning, I have verified that this is a bug in the .NET runtime
21488         (JavaScript suffers of the same problem).
21489
21490         * typemanager.cs (MemberLookup): When looking up members for
21491         interfaces, the parent of an interface is the implicit
21492         System.Object (so we succeed in searches of Object methods in an
21493         interface method invocation.  Example:  IEnumerable x;  x.ToString
21494         ()) 
21495
21496 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
21497
21498         * class.cs (Event): Events should also register if they do
21499         implement the methods that an interface requires.
21500
21501         * typemanager.cs (MemberLookup); use the new GetInterfaces
21502         method. 
21503
21504         (GetInterfaces): The code used to lookup interfaces for a type is
21505         used in more than one place, factor it here. 
21506
21507         * driver.cs: Track the errors at the bottom of the file, we kept
21508         on going.
21509
21510         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
21511         instance if the method we are calling is static!
21512
21513 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
21514
21515         * attribute.cs (ApplyAttributes): Make this function filter out
21516         the IndexerName attribute (as that attribute in reality is never
21517         applied) and return the string constant for the IndexerName
21518         attribute. 
21519
21520         * class.cs (TypeContainer.Emit): Validate that all the indexers
21521         have the same IndexerName attribute, and if so, set the
21522         DefaultName attribute on the class. 
21523
21524         * typemanager.cs: The return value might contain other stuff (not
21525         only methods).  For instance, consider a method with an "Item"
21526         property and an Item method.
21527
21528         * class.cs: If there is a problem with the parameter types,
21529         return. 
21530
21531 2002-05-24  Ravi Pratap  <ravi@ximian.com>
21532
21533         * ecore.cs (ImplicitConversionExists): Wrapper function which also
21534         looks at user defined conversion after making a call to 
21535         StandardConversionExists - we need this for overload resolution.
21536
21537         * expression.cs : Update accordingly the various method calls.
21538
21539         This fixes 2 bugs filed against implicit user defined conversions 
21540
21541 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
21542
21543         * statement.cs: Track the result of the assignment.
21544
21545 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
21546
21547         * expression.cs (MemberAccess): Improved error reporting for
21548         inaccessible members.
21549
21550 2002-05-22  Martin Baulig  <martin@gnome.org>
21551
21552         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
21553         itself with debugging support.
21554
21555 2002-05-22  Martin Baulig  <martin@gnome.org>
21556
21557         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
21558         Removed, this isn't needed anymore.
21559
21560 2002-05-20  Martin Baulig  <martin@gnome.org>
21561
21562         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
21563         be underlying type for an enum.
21564
21565 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
21566
21567         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
21568         that splits out the loading of just the core types.
21569
21570         * rootcontext.cs (ResolveCore): Split the struct resolution in
21571         two, so we can load the enumeration underlying types before any
21572         enums are used.
21573
21574         * expression.cs (Is): Bandaid until we fix properly Switch (see
21575         bug #24985 for details).
21576
21577         * typemanager.cs (ImplementsInterface): The hashtable will contain
21578         a null if there are no interfaces implemented.
21579
21580 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
21581
21582         * cs-parser.jay (indexer_declarator): It is fine to have array
21583         parameters
21584
21585 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21586
21587         * typemanager.cs: (RegisterBuilder): New function used to register
21588         TypeBuilders that implement interfaces.  Since
21589         TypeBuilder.GetInterfaces (as usual) does not work with lame
21590         Reflection.Emit. 
21591         (AddUserType): register interfaces.
21592
21593         (ImplementsInterface): Use the builder_to_ifaces hash if we are
21594         dealing with TypeBuilder.  Also, arrays are showing up as
21595         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
21596         methods can not be invoked on them!
21597
21598         * ecore.cs (ExplicitReferenceConversionExists): Made public.
21599         (ImplicitReferenceConversionExists): Split out from
21600         StandardConversionExists. 
21601
21602         * expression.cs (As): We were only implementing one of the three
21603         cases for the as operator.  We now implement them all.
21604         (Is): Implement the various other cases for Is as well.
21605
21606         * typemanager.cs (CACHE): New define used to control if we want or
21607         not the FindMembers cache.  Seems to have a negative impact on
21608         performance currently
21609
21610         (MemberLookup): Nested types have full acess to
21611         enclosing type members
21612
21613         Remove code that coped with instance/static returns for events, we
21614         now catch this in RealFindMembers.
21615
21616         (RealFindMembers): only perform static lookup if the instance
21617         lookup did not return a type or an event.  
21618
21619 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21620
21621         * assign.cs (CompoundAssign): We pass more semantic information
21622         now to Compound Assignments than we did before: now we have all
21623         the information at hand, and now we resolve the target *before* we
21624         do the expression expansion, which allows the "CacheValue" method
21625         to have the effect we intended (before, a [x] += 1 would generate
21626         two differen ArrayAccess expressions from the ElementAccess,
21627         during the resolution process).
21628
21629         (CompoundAssign.DoResolve): Resolve target and original_source here.
21630
21631 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
21632
21633         * expression.cs (ArrayAccess): dropped debugging information. 
21634
21635         * typemanager.cs: Small bug fix: I was always returning i_members,
21636         instead of one of i_members or s_members (depending on which had
21637         the content).
21638
21639         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
21640         method is invoked before any code generation takes place, and it
21641         is a mechanism to inform that the expression will be invoked more
21642         than once, and that the method should use temporary values to
21643         avoid having side effects
21644
21645         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
21646
21647         * ecore.cs (Expression.CacheTemporaries): Provide empty default
21648         implementation.
21649
21650         * expression.cs (Indirection, ArrayAccess): Add support for
21651         CacheTemporaries in these two bad boys. 
21652
21653         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
21654         ldobj or ldind_ref.  
21655         (StoreFromPtr): Handle stobj as well.
21656
21657         * expression.cs (UnaryMutator): Share more code.
21658
21659         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
21660         down: I was not tracking the Filter function as well, which
21661         was affecting the results of the cache.
21662
21663 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
21664
21665         * attribute.cs: Remove the hack to handle the CharSet property on
21666         StructLayouts. 
21667
21668 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
21669
21670         * attribute.cs (DoResolve): More uglyness, we now only try to
21671         resolve the attribute partially, to extract the CharSet
21672         information (only if we are a StructLayout attribute).  Otherwise 
21673
21674         (GetExtraTypeInfo): Add some code to conditionally kill in the
21675         future this.   I am more and more convinced that the .NET
21676         framework has special code to handle the attribute setting on
21677         certain elements.
21678
21679         * expression.cs (IsParamsMethodApplicable): Revert my previous
21680         foreach change here, it was wrong.
21681
21682 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
21683
21684         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
21685         (pp_expr): do not abort on unknown input, just return.
21686         (eval): abort if there are pending chars.
21687
21688         * attribute.cs (Attribute.Resolve): Positional parameters are
21689         optional.  Deal with that case.
21690
21691         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
21692         the Ansi/Unicode/Auto information for the type.
21693
21694         (TypeContainer.DefineType): instantiate the EmitContext here, as
21695         we will be using it during the type definition (to resolve
21696         attributes) and during the emit phase.
21697
21698         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
21699         to pull type information out of the attributes
21700
21701         (Attribute.Resolve): track the constructor builder, and allow for
21702         multiple invocations (structs and classes will use this).
21703
21704         * ecore.cs (MemberLookupFinal): new version with all the
21705         parameters customizable.
21706
21707         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
21708         constructors.  Return if the result value is null (as the error
21709         would have been flagged already by MemberLookupFinal)
21710
21711         Do not allow instances of abstract classes or interfaces to be
21712         created.
21713
21714         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
21715         We have to compare the assembly property here when dealing with
21716         FamANDAssem and Assembly access modifiers, because we might be
21717         creating an assembly from *modules* (that means that we are not
21718         getting TypeBuilders for types defined in other modules that are
21719         part of this assembly).
21720
21721         (Method.Emit): If the method is marked abstract and has a body,
21722         emit an error. 
21723
21724         (TypeContainer.DefineMembers): If both the defined member and the
21725         parent name match are methods, then do not emit any warnings: let
21726         the Method.Define routine take care of flagging warnings.  But if
21727         there is a mismatch (method overrides something else, or method is
21728         overriwritten by something, then emit warning).
21729
21730         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
21731         set to null, this means `do not check for the return type on the
21732         signature'. 
21733
21734         (Method.Define): set the return type for the method signature to
21735         null, so that we get methods with the same name and parameters and
21736         different return types.  This is used to flag warning 114 (you are
21737         hiding a method, and you probably want to use the new/override
21738         keywords instead).
21739
21740         * typemanager.cs (MemberLookup): Implemented proper access
21741         control, closing a long standing set of bug reports.  The problem
21742         was that the Framework only has two bits: Public and NonPublic,
21743         and NonPublic includes private and protected methods, but we need
21744         to enforce the FamANDAssem, FamOrAssem and Family. 
21745
21746 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
21747
21748         * statement.cs (GotoCase): Return true: Ammounts to giving up
21749         knowledge on whether we return or not, and letting the other case
21750         be responsible for it.
21751
21752 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
21753
21754         * driver.cs: Do not load directories for each file processed, only
21755         do it if there is a pattern.
21756
21757         * ecore.cs: Report readonly assigns here as well, as we might have
21758         been resolved only by MemberAccess.
21759
21760         (SimpleName.SimpleNameResolve): Also be useful for LValue
21761         resolution.   We need this to propagate assign to local readonly variables
21762
21763         * typemanager.cs: Use a ptrhashtable for the criteria, because we
21764         do not want to reuse potential criteria memory.
21765
21766         * class.cs (MyEventBuilder): Set reflected_type;
21767
21768         * ecore.cs (Constantify): Added support for constifying bools.
21769
21770         (RootContext.LookupType): Added a cache for values looked up in
21771         the declaration space.
21772
21773         * typemanager.cs (FindMembers): Now is a front-end to
21774         RealFindMembers, and provides a two-level hashtable-based cache to
21775         the request.  
21776
21777         15% performance improvement: from 22.5 to 19.2 seconds.
21778
21779         * expression.cs (IsParamsMethodApplicable): use foreach.
21780         (Invocation.DoResolve): ditto.
21781         (New.DoResolve): ditto.
21782         (ArrayCreation.DoResolve): ditto.
21783
21784         * ecore.cs (FindMostEncompassingType): use foreach.
21785
21786         * delegate.cs (NewDelegate.DoResolve): Use foreach
21787
21788         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
21789         (RemoveMethods): use foreach.
21790
21791         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
21792         nested foreach statements instead of for, and also break out of
21793         the inner loop once a match is found.
21794
21795         (Invocation.OverloadResolve): Use foreach, simplify the code. 
21796
21797 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
21798
21799         * cfold.cs (BinaryFold): During an enumeration evaluation context,
21800         we actually unwrap the expression to allow for extra information
21801         to be extracted. 
21802
21803         * expression.cs: Use Shr_Un on unsigned operations. 
21804
21805 2002-05-08  Ravi Pratap  <ravi@ximian.com>
21806
21807         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
21808         applicable operators was not being considered correctly. This closes
21809         the bug Miguel reported.
21810
21811 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
21812
21813         * attribute.cs: check that the type derives from System.Attribute
21814         and report the correct error in that case (moved the duplicate code to
21815         its own method, too).
21816
21817 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
21818
21819         * attribute.cs: lookup attribute type name as the spec says: first the
21820         bare attribute name and then name + "Attribute" (nant compiles with
21821         mcs after this fix).
21822
21823 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
21824
21825         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
21826         Because of the way we parse things, we should try to see if a
21827         UIntConstant can fit in an integer.
21828
21829 2002-05-07  Ravi Pratap  <ravi@ximian.com>
21830
21831         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
21832         when we are in an explicit context.
21833
21834         (ConvertReferenceExplicit): When converting from Iface type S to Class
21835         T make sure the rules are implemented as an OR.
21836
21837         * parameter.cs (ParameterType): Make it a property for now although the
21838         purpose really isn't anything immediate.
21839
21840         * expression.cs (Is*Applicable): Do better checking on the parameter type
21841         of a ref/out parameter. The ones from the system assemblies are already 
21842         marked with the correct type so we don't need to do any correction.
21843
21844         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
21845         the object type is standard too so include that.
21846
21847 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21848
21849         * ecore.cs (StandardConversionExists): Augment with missing code:
21850         deal with IntConstant, LongConstants and Enumerations.
21851
21852         * assign.cs: Report the error, instead of failing silently
21853
21854         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
21855         typecontainer that they are declared, because the
21856         typecontainer/namespace will have the list of using clauses that
21857         need to be applied.
21858
21859         Assembly Attributes were escaping the normal registration
21860         mechanism. 
21861
21862         (EmitCode): Apply attributes within an EmitContext that represents
21863         the container they were declared on.
21864
21865         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
21866
21867 2002-05-06  Ravi Pratap  <ravi@ximian.com>
21868
21869         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
21870         Revamp completely - make much cleaner as we now operate only
21871         on a set of Types.
21872
21873         (FindMostSpecificSource, FindMostSpecificTarget): New methods
21874         to implement the logic detailed in the spec more correctly.
21875
21876         (UserDefinedConversion): Update accordingly.
21877
21878 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21879
21880         * statement.cs: Return flow analysis information up.
21881
21882         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
21883         and the default.
21884
21885         (token): Do not consume an extra character before calling
21886         decimal_digits.
21887
21888 2002-05-06  Piers Haken <piersh@friskit.com>
21889
21890         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
21891
21892 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21893
21894         * class.cs (Constructor.Emit): Set the IsStatic flag in the
21895         EmitContext during the instance constructor initializer
21896         resolution, to stop access to instance variables.
21897
21898         This is mandated by the spec, last paragraph of the `constructor
21899         initializers' section. 
21900
21901 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
21902
21903         * cs-parser.jay, class.cs (Accessor): new class used to represent
21904         an accessor (get or set).  In the past we used `null' to represent
21905         a missing accessor.  But this is ambiguous because there was no
21906         way to tell in abstract indexers/properties if one of them was
21907         specified.
21908
21909         Now there is a way of addressing that.
21910
21911         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
21912         instead of FindMembers.
21913
21914         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
21915         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
21916
21917         * attribute.cs: Treat indexers and properties as the same in terms
21918         of applying attributes
21919
21920         * ecore.cs (FindMostEncompassedType): Use statically initialized
21921         EmptyExpressions()s like we do elsewhere to avoid creating useless
21922         objects (and we take this out of the tight loop).
21923
21924         (GetConversionOperators): Move the code to extract the actual
21925         operators to a separate routine to clean things up.
21926
21927 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
21928
21929         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
21930         events are always registered FieldBuilders.
21931
21932         * class.cs (FieldBase): New class shared by Fields 
21933
21934         * delegate.cs: If we are a toplevel delegate, use our full name.
21935         If we are a nested delegate, then only use our tail name.
21936
21937 2002-05-02  Ravi Pratap  <ravi@ximian.com>
21938
21939         * expression.cs (IsApplicable): Ensure that we add the "&" to
21940         ref/out types before comparing it with the type of the argument.
21941
21942         (IsParamsMethodApplicable): Ditto.
21943
21944         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
21945         silly me ;-)
21946
21947         * delegate.cs : Handle the case when we have more than one applicable
21948         method. Flag an error only when we finish checking all.
21949
21950 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
21951
21952         * expression.cs: Add support for boolean static initializers.
21953
21954 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
21955
21956         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
21957
21958         * parameter.cs (ComputeParameterTypes,
21959         ComputeAndDefineParameterTypes): Better error handling: now we
21960         clear the `types' cache if we fail during any of the type lookups.
21961         We also return the status code correctly to our caller
21962
21963         * delegate.cs: If we fail to define a delegate, abort the extra
21964         steps. 
21965
21966         * expression.cs (Binary.ResolveOperator): for
21967         operator==(object,object) and operator !=(object, object) we also
21968         have to verify that there is an implicit conversion from one to
21969         the other.
21970
21971         (ArrayAccess.DoResolve): Array Access can operate on
21972         non-variables. 
21973
21974 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
21975
21976         * assign.cs (CompoundAssign): A new class used as a "flag" that
21977         the assignment actually is happening as part of a compound
21978         assignment operator.
21979
21980         During compound assignment, a few new rules exist to enable things
21981         like:
21982
21983         byte b |= 1 + 2
21984
21985         From the spec:
21986
21987         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
21988         to the type of x) if y is implicitly convertible to the type of x,
21989         and the operator is a builtin operator and the return type of the
21990         operator is explicitly convertible to the type of x. 
21991
21992         * rootcontext.cs: Reset warning level to 2.  4 catches various
21993         "interesting" features in mcs, we must clean this up at some
21994         point, but currently am trying to kill other bugs ;-)
21995
21996         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
21997         in container classes as well.  
21998
21999         * expression.cs (Binary.ResolveOperator): Handle string case
22000         before anything else (as operator overloading does emit an error
22001         before doing anything else).
22002
22003         This code could go away when we move to a table driven model, but
22004         i could not come up with a good plan last night.
22005
22006 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
22007
22008         * typemanager.cs (CSharpName): reimplementation using regex.
22009         * class.cs: added null check for fields in Emit
22010         * rootcontext.cs: set warninglevel to 4
22011
22012 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
22013
22014         * typemanager.cs (CSharpName): reimplemented with Lupus
22015         suggestion.
22016
22017 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
22018
22019         * statement.cs (If): correclty implement Resolve, because we were
22020         not catching sem errors in there.  The same process is needed
22021         everywhere else. 
22022         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
22023
22024
22025         (Statement.Warning_DeadCodeFound): Factorize code.
22026         (While): Report dead code here too.
22027
22028         (Statement): Added Resolve virtual method to allow
22029         for resolution split from the emit code.
22030
22031 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
22032
22033         * statement.cs (EmitBoolExpression): No longer try to resolve the
22034         expression here.    
22035         (MakeBoolean): New utility function that resolve, implicitly
22036         converts to boolean and tags the expression. 
22037
22038
22039         (If, Do): Implement dead code elimination.
22040         (While): Implement loop inversion
22041
22042         (Do, While, For, If): Resolve the expression prior to calling our
22043         code generation.
22044
22045 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
22046
22047         * class.cs:
22048           - added method Report28 (warning: program has more than one entry point)
22049           - added method IsEntryPoint, implements paragraph 10.1 of the spec
22050           - modified method Method.Define, the part at the end of the method
22051
22052         * rootcontext.cs: added static public Location EntryPointLocation;
22053           
22054         * ../errors/cs0028.cs : Add test case for the above warning.              
22055
22056         * typemanager.cs:
22057           - modified method CSharpName to allow arrays of primitive type to
22058             be printed nicely (e.g. instead of System.Int32[][] it now prints
22059             int[][])
22060           - added method CSharpSignature: returns the signature of a method
22061             in string format to be used in reporting errors, warnings, etc.
22062
22063         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
22064         with String.Empty.
22065
22066 2002-04-26  Ravi Pratap  <ravi@ximian.com>
22067
22068         * delegate.cs (Define): Fix extremely silly bug where I was
22069         setting the type of the 'object' parameter of the BeginInvoke
22070         method to System.IAsyncResult instead of System.Object ;-)
22071
22072 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
22073
22074         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
22075         here. 
22076
22077         (Constructor.Emit): return if we fail to initialize the
22078         constructor.  Another door closed!  
22079
22080         * expression.cs (New.DoResolve): Improve error message (from -6 to
22081         1501).  Use DeclaredOnly lookup to find the exact constructor.
22082
22083         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
22084         loop.  This is useful.
22085
22086         * cs-parser.jay: Adjust the default parameters so that destructors
22087         have the proper signature.
22088
22089 2002-04-26  Martin Baulig  <martin@gnome.org>
22090
22091         * driver.cs (LoadAssembly): If `assembly' contains any characters
22092         which are only valid in path names and not in assembly names
22093         (currently slash, backslash and point), use Assembly.LoadFrom ()
22094         instead of Assembly.Load () on the `assembly' (before iteration
22095         over the link_paths).
22096
22097 2002-04-26  Martin Baulig  <martin@gnome.org>
22098
22099         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
22100
22101 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
22102
22103         * class.cs (Property): use the new typemanager.MemberLookup
22104
22105         (TypeContainer.MemberLookup): Implement using the
22106         TypeManager.MemberLookup now. 
22107
22108         * typemanager.cs: Make MemberLookup a function of the TypeManager,
22109         and return MemberInfos, so that these can be used without an
22110         EmitContext (what we had before).
22111
22112 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
22113
22114         * expression.cs: Fix the case where the argument to params if the
22115         type of the params.  I omitted handling this before.   Fixed
22116
22117 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
22118
22119         * driver.cs: Call BootCorlib_PopulateCoreType
22120
22121         * class.cs (Property.CheckBase): Check for properties only, not
22122         for all members. 
22123
22124         * interface.cs: Temporary hack: try/catch around the
22125         CustomAttributeBuilder, because I am getting an exception that I
22126         do not understand.
22127
22128         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
22129         types whose definitions are required to be there (attributes are
22130         defined before standard types).
22131
22132         Compute definitions as we boot the various types, as they are used
22133         immediately (value_type class will need object_type, but if we do
22134         not initialize object_type, we will pass a null, which will let
22135         the runtime pick the System.Object from the existing corlib, which
22136         is not what we want).
22137
22138 2002-04-22  Patrik Torstensson <totte@labs2.com>
22139
22140         * cs-tokenizer.cs: fixed a number of trim() issues.
22141
22142 2002-04-22  Ravi Pratap  <ravi@ximian.com>
22143
22144         * expression.cs (Argument.Type): Ensure that we return the correct
22145         type when we have out or ref parameters [in which case we 
22146         append a "&"].
22147
22148 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
22149
22150         * class.cs (Property, Indexer): Allow extern modifier in there. 
22151
22152         * typemanager.cs (InitBaseTypes): Initializes object_type and
22153         value_type, since those will be used early on during the bootstrap
22154         process to compile corlib.
22155
22156         (InitCoreTypes): Move code from here to InitBaseTypes.
22157
22158 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
22159
22160         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
22161         single-dimension arrays as using the ldlen opcode.  
22162
22163         Daniel Lewis discovered this optimization.  
22164
22165         * typemanager.cs: Add signature for System.Array::get_Length
22166
22167 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22168
22169         * statement.cs: report the error when the foreach does not apply to an
22170         array nor a collection.
22171
22172 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
22173
22174         * expression.cs: Add implicit conversions to the operator ~.
22175
22176         * constant.cs (DecimalConstant.Emit): Emit decimal value.
22177
22178         * typemanager.cs: Locate the decimal constructor.
22179
22180 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22181
22182         * attribute.cs: use the new property of TypeOf.
22183         * expression.cs: added 'get' property around typearg.
22184
22185         These changes fix a build breaker reported by NickD. Is this the
22186         correct way to fix?  If not, please, revert my changes and make it
22187         work :-).
22188
22189 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
22190
22191         * attribute.cs: Add support for typeof in attribute invocations.
22192         I am not sure that this is right though.
22193
22194 2002-04-14  Duncan Mak  <duncan@ximian.com>
22195
22196         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
22197         Binary.Operator.Division case.
22198
22199 2002-04-13  Ravi Pratap  <ravi@ximian.com>
22200
22201         * class.cs (DefineType): Ensure that we do a proper check on
22202         attribute types and also register it with the TypeManager.
22203
22204         (TypeContainer.Targets): The default for attribute types is
22205         AttributeTargets.All.
22206
22207         * attribute.cs (ApplyAttributes): Registering the attribute type
22208         is done elsewhere, not when we discover we have a Usage attribute.
22209
22210 2002-04-12  Ravi Pratap  <ravi@ximian.com>
22211
22212         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
22213         and get rid of is_delegate parameter.
22214
22215         * everywhere : update.
22216
22217 2002-04-12  Ravi Pratap  <ravi@ximian.com>
22218
22219         * cs-parser.jay (compilation_unit): Revamp completely to use
22220         some new ideas that I got from Rhys' grammar to solve the problems
22221         with assembly level attributes.
22222
22223         (outer_declaration): New grammar production.
22224
22225         (attribute_sections): Add.
22226
22227         (opt_attributes): Base on attribute_sections
22228
22229         (namespace_declaration): Allow opt_attributes to tackle the case
22230         when we have assembly level attributes - we are clever in this
22231         regard now ;-)
22232
22233         * attribute.cs (ApplyAttributes): Do not worry about assembly 
22234         attributes in the non-global context.
22235
22236         * rootcontext.cs (AddGlobalAttributes): Go back to using this
22237         instead of SetGlobalAttributes.
22238
22239         * class.cs, rootcontext.cs : Ensure we define and generate 
22240         attribute types before anything else.
22241
22242         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
22243         and flag the new error -20 for the case when the attribute type
22244         does not have valid targets specified. csc does not catch this.
22245
22246         * ../errors/errors.txt : update for error # -20
22247
22248 2002-04-11  Ravi Pratap  <ravi@ximian.com>
22249
22250         * support.cs (InternalParameters.ParameterModifier): Do some null
22251         checking and return sane values.
22252
22253         * class.cs (Method.Define): If we are a PInvoke method, ensure
22254         that we are static and extern. Report error # 601
22255
22256         * ../errors/cs0601.cs : Add test case for the above error.
22257
22258 2002-04-07  Ravi Pratap  <ravi@ximian.com>
22259
22260         * rootcontext.cs (attribute_types): We need to keep type of
22261         all attribute types separately and emit code for them first.
22262
22263         (RegisterAttribute) : Implement.
22264
22265         * class.cs (DefineType): Check if the current Type is a custom
22266         attribute type and register it accordingly.
22267
22268         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
22269         adding the first attribute twice and rename to
22270
22271         (SetGlobalAttributes): this.
22272
22273         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
22274         lookups.
22275
22276         * attribute.cs (ApplyAttributes): Take an additional argument telling us
22277         if we are processing global arguments. Hmm, I am unsure of this.
22278
22279 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22280
22281         * expression.cs: added static array of strings to avoid calling
22282         Enum.ToString () for Operator in Binary. Significant recover of
22283         performance.
22284
22285 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
22286
22287         * class.cs (FindMembers): Allow the Builders of the various
22288         members to be null.  If they are skip them.  This only happens
22289         during the PInvoke declaration.
22290
22291 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
22292
22293         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
22294         failure, so we do not keep going afterwards.
22295
22296         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
22297         wanted to pass `false' as the `is_delegate' argument.  If this is
22298         the case, why not use delegate_type == null to mean `is_delegate =
22299         false' and anything else as is_delegate = true.
22300
22301 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
22302
22303         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
22304         code for the section, not the beginning of the tests.
22305
22306 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
22307
22308         * cfold.cs: Handle operator + (Enum x, Underlying x) 
22309
22310         * expression.cs (Binary): same.  Warn about errors where we have
22311         Enum/Enum in operator + as well.
22312
22313 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
22314
22315         * statement.cs:
22316                 - added support for switch(bool)
22317                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
22318                 - add TableSwitchEmit() to handle table-based switch statements
22319
22320 2002-04-05  Ravi Pratap  <ravi@ximian.com>
22321
22322         * expression.cs (Invocation.OverloadResolve): Factor out code which
22323         does parameter compatibility checking with arguments so that we can 
22324         re-use the code even from Delegate.VerifyApplicability
22325
22326         (VerifyArgumentsCompat): Move above code here.
22327
22328         * delegate.cs (VerifyApplicability): Get rid of duplicate code
22329         and instead make a call to the above method.
22330
22331 2002-03-31  Ravi Pratap  <ravi@ximian.com>
22332
22333         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
22334         We use it to keep track of classes which are attribute types.
22335
22336 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
22337
22338         * delegate.cs (Delegate.Define): Correctly define the types in the
22339         presence of fixed and array parameters.
22340
22341         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
22342         doing FindMembers.
22343
22344         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
22345         include NonPublic after the first iteration.
22346
22347         * class.cs (Indexer.CheckBase): Only check if both parents are
22348         non-null. 
22349
22350         * cs-parser.jay (accessor_body): If empty, set to null.
22351
22352         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
22353         same code path here to resolve constants names that we did have in
22354         MemberAccess.DoResolve.  There is too much code duplicated here.
22355
22356 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
22357
22358         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
22359
22360         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
22361         to MakeUnionSet.
22362
22363         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
22364         tokens, numbers and strings.
22365
22366         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
22367         parenthesis.
22368
22369         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
22370         asyncronous parameters and the regular parameters.  
22371
22372         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
22373         specify the target directory.
22374
22375         * expression.cs: (This.DoResolve): Simplify
22376         (As.Emit): Optimize, do not generate IsInst if the expression is
22377         always of the given type.
22378
22379         (Is.DoResolve): Bug fix, we were reporting both always/never for
22380         the is expression.
22381
22382         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
22383         creating too many unnecessary arrays.
22384
22385 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
22386
22387         * class.cs (EmitFieldInitializer): Use Assign expression to assign
22388         fields instead of rolling our own initializer.   Takes care of all
22389         implicit conversions, and drops unnecessary static checks/argument.
22390
22391 2002-03-31  Dick Porter  <dick@ximian.com>
22392
22393         * driver.cs: use the GetDirectories() return values properly, and
22394         use "/" as path separator.
22395
22396 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
22397
22398         * expression.cs (Unary): Optimize - - expr into expr.
22399         (Binary): Optimize a + (-b) into a -b.
22400
22401         * codegen.cs (CodeGen): Made all methods static.
22402
22403 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
22404
22405         * rootcontext.cs: 
22406
22407         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
22408         TypeBuilder property.
22409
22410         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
22411         instead. 
22412
22413         * tree.cs: Removed the various RecordXXXX, and replaced with a
22414         single RecordDecl.  Removed all the accessor methods, and just
22415         left a single access point Type 
22416
22417         * enum.cs: Rename DefineEnum to DefineType.
22418
22419         * decl.cs: New abstract method `DefineType' used to unify the
22420         Defines for Enumerations, Interfaces, TypeContainers and
22421         Delegates.
22422
22423         (FindType): Moved LookupInterfaceOrClass here.  Moved the
22424         LookupBaseClasses method that used to live in class.cs and
22425         interface.cs here, and renamed to FindType.
22426
22427         * delegate.cs: Implement DefineType.  Take advantage of the
22428         refactored pattern for locating the parent builder without taking
22429         the parent_builder argument (which we know does not work if we are
22430         nested, and triggering a toplevel definition).
22431
22432 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22433
22434         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
22435         accessibility of a member has changed during override and report
22436         an error if so.
22437
22438         * class.cs (Method.Define, Property.Define): Only complain on
22439         overrides if the method is private, any other accessibility is
22440         fine (and since we just checked the permission is the same, we are
22441         good to go).
22442
22443         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
22444         and elif are processed always.  The other pre-processing
22445         directives are only processed if we are "taking" the path
22446
22447 2002-03-29  Martin Baulig  <martin@gnome.org>
22448
22449         * class.cs (Method.Emit): Only emit symbolic debugging info if the
22450         current location is not Null.
22451
22452         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
22453         a separate method so we can profile it.
22454
22455         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
22456         `span.Seconds' are just seconds, but no minutes or hours.
22457         (MainDriver): Profile the CodeGen.SaveSymbols calls.
22458
22459 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22460
22461         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
22462         Remove the gratuitous set of Final:
22463
22464                                 // If an interface implementation, then we can set Final.
22465                                 if (((flags & MethodAttributes.Abstract) == 0) &&
22466                                     implementing.DeclaringType.IsInterface)
22467                                         flags |= MethodAttributes.Final;
22468
22469         I do not know what I was smoking when I used that.
22470
22471
22472         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
22473         step into fixing the name resolution issues for delegates and
22474         unifying the toplevel name resolution.
22475
22476 2002-03-28  Martin Baulig  <martin@gnome.org>
22477
22478         * class.cs (Method.Emit): If we have a symbol writer, call its
22479         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
22480         tell it about the current method.
22481
22482         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
22483         writer that we're going to emit the first byte of IL code for a new
22484         statement (a new source line).
22485         (EmitContext.EmitTopBlock): If we have a symbol writer, call
22486         EmitContext.Mark() before emitting any code.
22487
22488         * location.cs (SymbolDocument): Return null when we're Null.
22489
22490         * statement.cs (Statement): Moved the `Location loc' variable here.
22491         (Statement.EmitBoolExpression): If we have a symbol writer, call
22492         ec.Mark() before emitting any code to tell it that we're at the
22493         beginning of a new statement.
22494         (StatementExpression): Added `Location' argument to the constructor.
22495         (Block): Added public readonly variable `StartLocation' and public
22496         variable `EndLocation'.  The latter is to be set using SetEndLocation().
22497         (Block): Added constructor which takes a start and end location.
22498         (Block.SetEndLocation): New method. This sets the end location.
22499         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
22500         local variables we create.
22501         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
22502         each statement and do also mark the begin and end of the block.
22503
22504         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
22505         tell it the current lexer.Location, use Location.Null for the end of the
22506         block.
22507         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
22508         current block, set its end location using SetEndLocation().
22509         (statement_expression): StatementExpression constructor now takes the
22510         lexer.Location as additional argument.
22511         (for_statement, declare_local_variables): Likewise.
22512         (declare_local_variables): When creating a new implicit block, use the
22513         new Block constructor and pass it the lexer.Location.
22514
22515 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22516
22517         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
22518         members also on the parent interfaces recursively.
22519
22520 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
22521
22522         * report.cs: Use new formats, since Gonzalo finished the missing
22523         bits. 
22524
22525         * expression.cs (Binary.ResolveOperator): added missing operator|
22526         operator& and operator^ for bool/bool.
22527
22528         * cs-parser.jay: CheckDef now takes a Location argument that is
22529         used to report errors more precisly (instead of reporting the end
22530         of a definition, we try to track something which is a lot closer
22531         to the source of the problem).
22532
22533         * cs-tokenizer.cs: Track global token use, so we can properly flag
22534         the use of #define/#undef after the first token has been seen.
22535
22536         Also, rename the reportXXXX to Error_DescriptiveName
22537
22538         * decl.cs (DeclSpace.IsTopLevel): Move property here from
22539         TypeContainer, so that Enum and Interface can use this too.
22540
22541         * class.cs (TypeContainer.LookupInterfaceOrClass,
22542         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
22543         `builder' argument.  Typically this was used to pass the parent
22544         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
22545         the definition).  
22546
22547         The problem is that a nested class could trigger the definition of
22548         a toplevel class, and the builder would be obviously wrong in that
22549         case. 
22550
22551         So we drop this argument, and we compute dynamically the
22552         TypeBuilder/ModuleBuilder (the correct information was available
22553         to us anyways from DeclSpace.Parent)
22554
22555         * interface.cs (Interface.DefineInterface): Drop builder
22556         parameter cleanup like class.cs
22557
22558         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
22559         like class.cs
22560
22561         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
22562         values. 
22563
22564         (Try.Emit): Propagate the returns value from the statement.
22565
22566         (Return.Emit): Even if we are leavning 
22567
22568         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
22569
22570         * modifiers.cs: Fix the computation of MethodAttributes flags.
22571
22572 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
22573
22574         * driver.cs: allow compilation of files that start with '/'.
22575         Add a default case when checking the argument of --target.
22576
22577 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
22578
22579         * interface.cs: Implement the same search algorithm for types in
22580         the interface code.
22581
22582         * delegate.cs: Do not allow multiple definition.
22583
22584         * Recovered ChangeLog that got accidentally amputated
22585
22586         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
22587
22588         * rootcontext.cs: Load manually enum to allow core classes to
22589         contain enumerations.
22590
22591         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
22592         Update to new static methods in TypeManager.
22593
22594         * typemanager.cs (GetMethod, GetConstructor): Use our
22595         implementation of FindMembers to find the members, since during
22596         corlib compilation, the types are TypeBuilders and GetMethod and
22597         GetConstructor do not work.
22598
22599         Make all methods in TypeManager static.
22600
22601         (InitCodeHelpers): Split the functionality from
22602         the InitCodeTypes function.
22603
22604         * driver.cs: Call InitCodeHelpers after we have populated the
22605         types. 
22606
22607         * cs-parser.jay (delegate_declaration): we did not used to compute
22608         the delegate name correctly for void delegates.
22609
22610 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
22611
22612         * rootcontext.cs (RootContext): Init the interface_resolve_order
22613         and type_container_resolve_order always.
22614
22615         (ResolveCore, BootstrapCorlib_ResolveClass,
22616         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
22617         compiler when compiling with --nostdlib
22618
22619         * class.cs (TypeContainer.DefineType): Check that our parent is
22620         not null.  This test is most important when we are bootstraping
22621         the core types.
22622
22623         * codegen.cs: Split out the symbol writing code.
22624
22625 2002-03-25  Martin Baulig  <martin@gnome.org>
22626
22627         * driver.cs (-g): Made -g an alias for --debug.
22628
22629 2002-03-24  Martin Baulig  <martin@gnome.org>
22630
22631         * codegen.cs (SymbolWriter): New public variable. Returns the
22632         current symbol writer.
22633         (CodeGen): Added `bool want_debugging_support' argument to the
22634          constructor. If true, tell the ModuleBuild that we want debugging
22635         support and ask it for the ISymbolWriter.
22636         (Save): If we have a symbol writer, call it's Close() method after
22637         saving the assembly.
22638
22639         * driver.c (--debug): New command line argument to create a
22640         debugger information file.
22641
22642         * location.cs (SymbolDocument): New public property. Returns an
22643         ISymbolDocumentWriter object for the current source file or null
22644         if we don't have a symbol writer.
22645
22646 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
22647
22648         * driver.cs (LoadAssembly): Correctly return when all the paths
22649         have been tried and not before.
22650
22651         * statement.cs (Switch.Emit): return the actual coverage for this
22652         statement (returns/not-returns)
22653
22654         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
22655         switch of the statement if we are the last switch section.  That
22656         kills two problems: try/catch problems (we used to emit an empty
22657         nop at the end) and switch statements where all branches would
22658         return. 
22659
22660 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
22661
22662         * driver.cs: Add default assemblies (the equivalent to the
22663         Microsoft CSC.RSP file)
22664
22665         * cs-tokenizer.cs: When updating `cols and setting it to zero,
22666         also update tokens_seen and set it to false.
22667
22668         * driver.cs: Implement --recurse for Mike.
22669
22670         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
22671         correctly splitting out the paths.
22672
22673 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
22674
22675         * interface.cs (Interface.PopulateProperty): Instead of using
22676         `parent' as the declaration space for the set parameters, use
22677         `this' 
22678
22679         * support.cs (InternalParameters): InternalParameters constructor
22680         takes a DeclSpace instead of a TypeContainer.
22681
22682         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
22683         types are being initialized, load the address of it before calling
22684         the function.  
22685
22686         (New): Provide a mechanism to disable the generation of local
22687         value type temporaries when the caller will be providing us with
22688         an address to store it.
22689
22690         (ArrayCreation.EmitDynamicInitializers): Use it.
22691
22692 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
22693
22694         * expression.cs (Invocation.EmitArguments): Only probe for array
22695         property if there is more than one argument.  Sorry about that.
22696
22697         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
22698         empty param arrays.
22699
22700         * class.cs (Method.LabelParameters): Fix incorrect code path that
22701         prevented the `ParamArrayAttribute' from being applied to the
22702         params attribute.
22703
22704 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
22705
22706         * support.cs (ReflectionParameters): Correctly compute whether the
22707         last argument is a params array.  Fixes the problem with
22708         string.Split ('a')
22709
22710         * typemanager.cs: Make the assemblies array always be non-null
22711         (empty, but non-null)
22712
22713         * tree.cs (RecordDecl): New function that abstracts the recording
22714         of names.  This reports error 101, and provides a pointer to the
22715         previous declaration.  Fixes a crash in the compiler.
22716
22717         * cs-parser.jay (constructor_declaration): Update to new grammar,
22718         and provide a constructor_body that can be empty.
22719
22720 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
22721
22722         * driver.cs: Add support for --resources.
22723
22724         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
22725         Make all types for the various array helper methods be integer.
22726
22727         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
22728         CheckState to ConvCast.
22729
22730         (ConvCast): Now it takes a `checked' state argument, to avoid
22731         depending on the emit context for the conversion, and just using
22732         the resolve time setting.
22733
22734         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
22735         instead of Invocation.EmitArguments.  We do not emit the original
22736         arguments, instead we emit those which have been converted to
22737         unsigned int expressions.
22738
22739         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
22740
22741         * codegen.cs: ditto.
22742
22743         * expression.cs (LocalVariableReference): Drop the use of the
22744         Store function that depended on the variable index.
22745
22746         * statement.cs (VariableInfo): Drop the `Idx' property from this
22747         class, as this is not taking into account the indexes for
22748         temporaries tat we generate during the execution, getting the
22749         indexes wrong.
22750
22751         * class.cs: First emit class initializers, then call the parent
22752         constructor. 
22753
22754         * expression.cs (Binary): Fix opcode emision.
22755         (UnaryMutator.EmitCode): Support checked code generation
22756
22757         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
22758         matches for events for both the Static and Instance scans,
22759         pointing to the same element.   Fix that.
22760
22761 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
22762
22763         * rootcontext.cs (ResolveTree): Always set the
22764         interface_resolve_order, because nested interfaces will be calling
22765         into us.
22766
22767         * class.cs (GetInterfaceOrClass): Track the same resolution
22768         process used by TypeManager.LookupType.  This fixes the nested
22769         type lookups in class declarations (separate path from
22770         LookupType). 
22771
22772         (TypeContainer.DefineType): Also define nested interfaces.
22773         (TypeContainer.RegisterOrder): New public function used to
22774         register the order in which child interfaces need to be closed.
22775
22776         Nested interfaces need to be closed after their parents have been
22777         created. 
22778
22779         * interface.cs (InterfaceAttr): Put all the logic for computing
22780         the interface attribute here. 
22781
22782         (DefineInterface): Register our interface order with the
22783         RootContext or with the TypeContainer depending on the case.
22784
22785 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22786
22787         * cs-parser.jay: rework foreach statement to work with the new
22788         changes to the policy on SimpleNames.
22789
22790         * report.cs: support Stacktrace on warnings as well.
22791
22792         * makefile: drop --unsafe and /unsafe from the compile.
22793
22794 2002-03-13  Ravi Pratap  <ravi@ximian.com>
22795
22796         * ecore.cs (StandardConversionExists): Modify to take an Expression
22797         as the first parameter. Ensure we do null -> reference type conversion
22798         checking.
22799
22800         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
22801         temporary Expression objects.
22802
22803 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
22804
22805         * interface.cs: workaround bug in method overloading resolution
22806         (there is already a bugzilla bug for it).
22807
22808 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22809
22810         We could also solve this problem by having a separate path for
22811         performing type lookups, instead of DoResolve, we could have a
22812         ResolveType entry point, and only participating pieces of the
22813         production (simplename, deref, array) would implement this. 
22814
22815         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
22816         signal SimpleName to only resolve type names and not attempt to
22817         resolve anything else.
22818
22819         * expression.cs (Cast): Set the flag.
22820
22821         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
22822
22823         * class.cs: Only report 108 if there is no `new' modifier.
22824
22825         * cs-parser.jay: rework foreach statement to work with the new
22826         changes to the policy on SimpleNames.
22827
22828         * report.cs: support Stacktrace on warnings as well.
22829
22830         * makefile: drop --unsafe and /unsafe from the compile.
22831
22832 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
22833
22834         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22835         lookups here, instead of doing that at parse time.  This means
22836         that our grammar will not introduce `LocalVariableReferences' as
22837         expressions at this point.  That solves the problem of code like
22838         this:
22839
22840         class X {
22841            static void Main ()
22842            { int X = 1;
22843             { X x = null }}}
22844
22845         This is only half the fix.  The full fix requires parameters to
22846         also be handled in this way.
22847
22848         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
22849         makes the use more obvious of the DeclSpace.  The
22850         ec.TypeContainer.TypeBuilder is now only used to pull the
22851         TypeBuilder for it.
22852
22853         My theory is that I can get rid of the TypeBuilder completely from
22854         the EmitContext, and have typecasts where it is used (from
22855         DeclSpace to where it matters).  
22856
22857         The only pending problem is that the code that implements Aliases
22858         is on TypeContainer, and probably should go in DeclSpace.
22859
22860         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22861         lookups here, instead of doing that at parse time.  This means
22862         that our grammar will not introduce `LocalVariableReferences' as
22863         expressions at this point.  That solves the problem of code like
22864         this:
22865
22866         class X {
22867            static void Main ()
22868            { int X = 1;
22869             { X x = null }}}
22870
22871         This is only half the fix.  The full fix requires parameters to
22872         also be handled in this way.
22873
22874         * class.cs (Property.DefineMethod): When implementing an interface
22875         method, set newslot, when implementing an abstract method, do not
22876         set the flag (before we tried never setting it, or always setting
22877         it, which is the difference).
22878         (Indexer.DefineMethod): same.
22879         (Method.DefineMethod): same.
22880
22881         * ecore.cs: Only set the status used flag if we get back a Field.
22882
22883         * attribute.cs: Temporary hack, so Paolo can keep working.
22884
22885 2002-03-08  Ravi Pratap  <ravi@ximian.com>
22886
22887         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
22888         the unmanaged type in the case we have a MarshalAs attribute.
22889
22890         (Resolve): Handle the case when we are parsing the special MarshalAs
22891         attribute [we need to store the unmanaged type to use later]
22892
22893         * typemanager.cs (marshal_as_attr_type): Built in type for the 
22894         MarshalAs Attribute.
22895
22896         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
22897         on parameters and accordingly set the marshalling info.
22898
22899 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
22900
22901         * class.cs: Optimizing slightly by removing redundant code after
22902         we switched to the `NoTypes' return value.
22903         (Property.DefineMethod): use NoTypes here too.
22904
22905         This fixes the bug I introduced in my last batch of changes.
22906
22907 2002-03-05  Ravi Pratap  <ravi@ximian.com>
22908
22909         * tree.cs (RecordEnum): Add. We now keep track of enums too.
22910
22911         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
22912         Enums since those are types too. 
22913
22914         * cs-parser.jay (enum_declaration): Record enums as we parse them.
22915
22916         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
22917         thanks to a call during the lookup process.
22918
22919 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
22920
22921         * statement.cs (Foreach): Lots of work to accomodate a particular
22922         kind of foreach statement that I had not kept in mind.  It is
22923         possible to have foreachs on classes that provide a GetEnumerator
22924         method that return objects that implement the "pattern" for using
22925         a foreach, there is no need to support GetEnumerator
22926         specifically. 
22927
22928         This is needed to compile nant.
22929
22930         * decl.cs: Only report 114 if the member is not `Finalize' and if
22931         the warning level is at least 2.
22932
22933         * class.cs: Moved the compare function from Method to
22934         MethodSignature. 
22935
22936         (MethodSignature.InheritableMemberSignatureCompare): Add new
22937         filter function that is used to extract inheritable methods from a
22938         class. 
22939
22940         (Method.Define): Use the new `inheritable_method_signature_filter'
22941         delegate
22942
22943         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
22944         command. 
22945
22946 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
22947
22948         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
22949
22950         * cs-parser.jay: Add opt_semicolon to the interface declaration.
22951
22952         * expression.cs: Pass location information to
22953         ConvertImplicitStandard. 
22954
22955         * class.cs: Added debugging code to track return values from
22956         interfaces. 
22957
22958 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
22959
22960         * expression.cs (Is.DoResolve): If either side of the `is' is an
22961         interface, do not flag the warning.
22962
22963         * ecore.cs (ImplicitReferenceConversion): We need a separate test
22964         for interfaces
22965
22966         * report.cs: Allow for --fatal to be used with --probe.
22967
22968         * typemanager.cs (NoTypes): Move the definition for the empty Type
22969         array here. 
22970
22971         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
22972         properties. 
22973         (TypeContainer.DefineProxy): New function used to proxy to parent
22974         implementations when implementing interfaces.
22975         (TypeContainer.ParentImplements): used to lookup if our parent
22976         implements a public function that is required by an interface.
22977         (TypeContainer.VerifyPendingMethods): Hook this up.
22978
22979         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
22980         `modules' and `assemblies' arraylists into arrays.  We only grow
22981         these are the very early start up of the program, so this improves
22982         the speedof LookupType (nicely measured).
22983
22984         * expression.cs (MakeByteBlob): Replaced unsafe code with
22985         BitConverter, as suggested by Paolo.
22986
22987         * cfold.cs (ConstantFold.Binary): Special case: perform constant
22988         folding of string concatenation, but if either side is a string,
22989         and the other is not, then return null, and let the runtime use
22990         the concatenation on the string plus the object (using
22991         `Object.ToString'). 
22992
22993 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
22994
22995         Constant Folding has been implemented now.
22996
22997         * expression.cs (Unary.Reduce): Do not throw an exception, catch
22998         the error instead on types that are not supported in one's
22999         complement. 
23000
23001         * constant.cs (Constant and all children): New set of functions to
23002         perform implict and explicit conversions.
23003
23004         * ecore.cs (EnumConstant): Implement the new functions to perform
23005         conversion by proxying to the child expression.
23006
23007         * codegen.cs: (ConstantCheckState): Constant evaluation has its
23008         own separate setting that can not be turned off from the command
23009         line using --unchecked or --checked and is only controlled using
23010         the checked/unchecked statements and expressions.  This setting is
23011         used by the constant folder to flag errors.
23012
23013         * expression.cs (CheckedExpr, UncheckedExpr): Set the
23014         ConstantCheckState as well.   
23015
23016         During Resolve, they also have to flag the state, because the
23017         constant folder runs completely in the Resolve phase.
23018
23019         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
23020         well.
23021
23022 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
23023
23024         * cfold.cs: New file, this file contains the constant folder.
23025
23026         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
23027         argument to track whether we are using the resulting address to
23028         load or store a value and provide better error messages. 
23029
23030         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
23031         new AddressOf arguments.
23032
23033         * statement.cs (Foreach.EmitCollectionForeach): Update
23034
23035         * expression.cs (Argument.Emit): Call AddressOf with proper
23036         arguments to track usage.
23037
23038         (New.DoEmit): Call AddressOf with new arguments.
23039
23040         (Unary.Emit): Adjust AddressOf call.
23041
23042 2002-03-01  Ravi Pratap  <ravi@ximian.com>
23043
23044         * cs-parser.jay (member_access): Change the case for pre-defined types
23045         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
23046         this suggestion.
23047
23048         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
23049         a method body.
23050
23051         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
23052         essentially like methods and apply attributes like MethodImplOptions to them too.
23053
23054         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
23055         not being null.
23056
23057         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
23058         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
23059         is the DeclSpace.
23060
23061         * Update code everywhere accordingly.
23062
23063         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
23064
23065         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
23066
23067 2002-02-28  Ravi Pratap  <ravi@ximian.com>
23068
23069         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
23070         try performing lookups against those instead of jumping straight into using
23071         the 'using' clauses.
23072
23073         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
23074
23075         (LookupType): Perform lookups in implicit parents too.
23076
23077         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
23078         sequence as RootContext.LookupType. 
23079
23080         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
23081         the various cases of namespace lookups into this method.
23082
23083 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
23084
23085         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
23086         in positional arguments)
23087
23088         * class.cs (Operator): Update the AllowedModifiers to contain
23089         extern. 
23090
23091         * cs-parser.jay: Update operator declaration to allow for the
23092         operator body to be empty.
23093
23094         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
23095         values. 
23096
23097 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
23098
23099         * class.cs (Method.Emit): Label parameters.
23100
23101         * driver.cs: Return 1 or 0 as the program exit code.
23102
23103 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
23104
23105         * expression.cs: Special case the `null' object when trying to
23106         auto-compute the type, as anything can be explicitly converted to
23107         that. 
23108
23109         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
23110         spotting this Paolo.
23111
23112         (Expression.ImplicitNumericConversion): Perform comparissions of
23113         the type using the underlying type in the case of an enumeration
23114         rather than using the enumeration type for the compare.
23115
23116         Cope with the underlying == type case, which is not possible to
23117         catch before. 
23118
23119         (Expression.ConvertNumericExplicit): Perform comparissions of
23120         the type using the underlying type in the case of an enumeration
23121         rather than using the enumeration type for the compare.
23122
23123         * driver.cs: If the user does not supply an extension, assume .exe
23124
23125         * cs-parser.jay (if_statement): Rewrote so that we can track the
23126         location for the if statement.
23127
23128         * expression.cs (Binary.ConstantFold): Only concat strings when
23129         the operation is "+", not everything ;-)
23130
23131         * statement.cs (Statement.EmitBoolExpression): Take a location
23132         argument. 
23133         (If, While, Do): Track location.
23134
23135         * expression.cs (Binary.ResolveOperator): In the object + string
23136         case, I was missing a call to ConvertImplicit
23137
23138 2002-02-25  Ravi Pratap  <ravi@ximian.com>
23139
23140         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
23141         Location arguments. Ensure we use RootContext.LookupType to do our work
23142         and not try to do a direct Type.GetType and ModuleBuilder.GetType
23143
23144         * interface.cs (PopulateMethod): Handle the type of the parameter being
23145         null gracefully.
23146
23147         * expression.cs (Invocation.BetterFunction): Handle the case when we 
23148         have a params method with no fixed arguments and a call is made with no
23149         arguments.
23150
23151 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
23152
23153         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
23154         the verbatim-string-literal
23155
23156         * support.cs (InternalParameters.ParameterModifier): handle null
23157         fixed parameters.
23158         (InternalParameters.ParameterType): ditto.
23159
23160         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
23161         duplicating the name of the variable parameter.
23162         (GetParameterByName): Fix bug where we were not looking up array
23163         paramters if they were the only present (thanks Paolo!).
23164         (GetParameterInfo): We only have an empty set of types if both
23165         fixed and array are set to null.
23166         (GetParameterInfo-idx): Handle FixedParameter == null
23167
23168         * cs-parser.jay: Handle the case where there is no catch
23169         statements (missing null test).
23170
23171 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
23172
23173         * driver.cs (MainDriver): Be conservative on our command line
23174         handling.
23175
23176         Catch DirectoryNotFoundException when calling GetFiles.
23177
23178         (SplitPathAndPattern): Used to split the input specification into
23179         a path and a pattern that we can feed to Directory.GetFiles.
23180
23181 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
23182
23183         * statement.cs (Fixed): Implement the last case of the Fixed
23184         statement (string handling).
23185
23186         * expression.cs (StringPtr): New class used to return a char * to
23187         a string;  Used by the Fixed statement.
23188
23189         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
23190
23191         * expression.cs (Binary.ResolveOperator): Remove redundant
23192         MemberLookup pn parent type.
23193         Optimize union call, we do not need a union if the types are the same.
23194         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
23195         type.
23196
23197         Specialize the use of MemberLookup everywhere, instead of using
23198         the default settings. 
23199
23200         (StackAlloc): Implement stackalloc keyword.
23201
23202         * cs-parser.jay: Add rule to parse stackalloc.
23203
23204         * driver.cs: Handle /h, /help, /?
23205
23206         * expression.cs (MakeByteBlob): Removed the hacks we had in place
23207         before we supported unsafe code.
23208
23209         * makefile: add --unsafe to the self compilation of mcs.
23210
23211 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
23212
23213         * expression.cs (PointerArithmetic): New class that is used to
23214         perform pointer arithmetic.
23215         (Binary.Resolve): Handle pointer arithmetic
23216         Handle pointer comparission.
23217         (ArrayPtr): Utility expression class that is used to take the
23218         address of an array.
23219
23220         (ElementAccess): Implement array access for pointers
23221
23222         * statement.cs (Fixed): Implement fixed statement for arrays, we
23223         are missing one more case before we are done.
23224
23225         * expression.cs (Indirection): Implement EmitAssign and set the
23226         ExprClass to Variable.  This allows pointer dereferences to be
23227         treated as variables, and to have values assigned to them.
23228
23229         * ecore.cs (Expression.StoreFromPtr): New utility function to
23230         store values dereferencing.
23231
23232 2002-02-20  Ravi Pratap  <ravi@ximian.com>
23233
23234         * expression.cs (Binary.ResolveOperator): Ensure that we are
23235         not trying to operate on a void type - this fixes the reported
23236         bug.
23237
23238         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
23239         the parent implementation is sealed.
23240
23241         * ../errors/cs0239.cs : Add.
23242
23243         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
23244
23245         * typemanager.cs (unverifiable_code_type): Corresponds to 
23246         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
23247         which have unsafe code in them.
23248
23249         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
23250         unsafe context.
23251
23252 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
23253
23254         * cs-tokenizer.cs: Add support for @"litreal strings"
23255
23256         Make tokenizer accept pre-processor directives
23257         on any column (remove the old C-like limitation). 
23258
23259         * rootcontext.cs (EmitCode): Emit any global attributes.
23260         (AddGlobalAttributes): Used to keep track of assembly attributes. 
23261
23262         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
23263
23264         * cs-parser.jay: Add support for global attributes.  
23265
23266 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
23267
23268         * expression.cs (Indirection): New helper class.  Unary will
23269         create Indirection classes to be able to implement the
23270         IMemoryLocation interface on it.
23271
23272 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
23273
23274         * cs-parser.jay (fixed_statement): reference the right statement.
23275
23276         * statement.cs (Fixed.Emit): Finish implementing the fixed
23277         statement for the &x case.
23278
23279 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
23280
23281         * class.cs (Property.Define, Method.Define): Remove newslot when
23282         `implementing'.  
23283
23284         * modifiers.cs: My use of NewSlot when `Abstract' was set was
23285         wrong.  NewSlot should only be used if the `new' keyword is present.
23286
23287         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
23288         locating our system dir.  Sorry about this.
23289
23290 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23291
23292         * driver.cs (GetSystemDir): Compute correctly the location of our
23293         system assemblies.  I was using the compiler directory instead of
23294         the library directory.
23295
23296 2002-02-13  Ravi Pratap  <ravi@ximian.com>
23297
23298         * expression.cs (BetterFunction): Put back in what Miguel commented out
23299         since it is the correct fix. The problem is elsewhere ;-)
23300
23301         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
23302         parameters of the parms method are themselves compatible or not !
23303
23304         (StandardConversionExists): Fix very dangerous bug where we were forgetting
23305         to check that a class implements an interface before saying that an implicit
23306         conversion was allowed. Use ImplementsInterface to do the checking.
23307
23308 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23309
23310         * class.cs (Method.Define): Track whether we are an explicit
23311         implementation or not.  And only call DefineMethodOverride if we
23312         are an explicit implementation.
23313
23314         (Property.DefineMethod): Ditto.
23315
23316 2002-02-11  Ravi Pratap  <ravi@ximian.com>
23317
23318         * expression.cs (BetterFunction): Catch hideous bug which was
23319          preventing us from detecting ambiguous calls due to implicit casts i.e
23320         cs0121.
23321
23322 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
23323
23324         * support.cs (Pair): Remove un-needed method.  I figured why I was
23325         getting the error in cs-parser.jay, the variable in a foreach loop
23326         is readonly, and the compiler does not really treat this as a variable.
23327
23328         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
23329         instead of EQUALS in grammar.  
23330
23331         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
23332
23333         * expression.cs (Unary.DoResolve): Check whether the argument is
23334         managed or not.
23335
23336 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
23337
23338         * support.cs: Api for Pair to set a value.  Despite the fact that
23339         the variables are public the MS C# compiler refuses to compile
23340         code that accesses the field if the variable is part of a foreach
23341         statement. 
23342
23343         * statement.cs (Fixed): Begin implementation of the fixed
23344         statement.
23345
23346         (Block.AddVariable): Return the VariableInfo on success and null
23347         on failure instead of true/false. 
23348
23349         * cs-parser.jay (foreach): Catch errors on variables already
23350         defined (we were ignoring this value before) and properly unwind
23351         the block hierarchy
23352
23353         (fixed_statement): grammar for the fixed statement.
23354
23355 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
23356
23357         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
23358         pointer types to be incretemented.
23359
23360         (SizeOf): Implement.
23361
23362         * cs-parser.jay (pointer_member_access): Implement
23363         expr->IDENTIFIER production.
23364
23365         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
23366         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
23367         on safe contexts.
23368
23369         (Unary): Implement indirection.
23370
23371         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
23372         use in non-unsafe context).
23373
23374         (SimpleName.DoResolve): Check for pointers in field access on safe
23375         contexts. 
23376
23377         (Expression.LoadFromPtr): Factor the load-indirect code in this
23378         function.  This was duplicated in UnboxCast and ParameterReference
23379
23380 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
23381
23382         * expression.cs (ComposedCast): report an error if a pointer cast
23383         is used in a safe region.
23384
23385         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
23386         pointer type casts in unsafe context.
23387
23388         * codegen.cs (EmitContext): Set up IsUnsafe.
23389
23390         * cs-parser.jay (non_expression_type): Add productions for pointer
23391         casts. 
23392
23393         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
23394         code.  We should not use force into static mode if the method is
23395         not virtual.  Fixes bug in MIS
23396
23397         * statement.cs (Do.Emit, While.Emit, For.Emit,
23398         Statement.EmitBoolExpression): Add support to Do and While to
23399         propagate infinite loop as `I do return' semantics.
23400
23401         Improve the For case to also test for boolean constants.
23402
23403         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
23404         to the list of attributes we can add.
23405
23406         Remove `EmitContext' argument.
23407
23408         * class.cs (Method.Define): Apply parameter attributes.
23409         (Constructor.Define): Apply parameter attributes.
23410         (MethodCore.LabelParameters): Move here the core of labeling
23411         parameters. 
23412
23413         * support.cs (ReflectionParameters.ParameterModifier,
23414         InternalParameters.ParameterModifier): Use IsByRef on the type and
23415         only return the OUT bit for these parameters instead of in/out/ref
23416         flags.
23417
23418         This is because I miss-understood things.  The ParameterInfo.IsIn
23419         and IsOut represent whether the parameter has the [In] and [Out]
23420         attributes set.  
23421
23422 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
23423
23424         * ecore.cs (FieldExpr.Emit): Release temporaries.
23425
23426         * assign.cs (LocalTemporary.Release): new function.
23427
23428         * codegen.cs (EmitContext.GetTemporaryStorage,
23429         EmitContext.FreeTemporaryStorage): Rework the way we deal with
23430         temporary storage.  Now we can "put back" localbuilders when we
23431         are done with them
23432
23433 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
23434
23435         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
23436         need to make a copy of the variable to generate verifiable code.
23437
23438 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
23439
23440         * driver.cs: Compute dynamically the system directory.
23441
23442         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
23443         Slower, but more generally useful.  Used by the abstract
23444         registering implementation. 
23445
23446         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
23447         the rules for the special rule on Type/instances.  First check if
23448         we have the same name, and if so, try that special static path
23449         rather than the instance path.
23450
23451 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
23452
23453         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
23454         for, while and if.
23455
23456         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
23457         Enum, ValueType, Delegate or Array for non-corlib compiles.
23458
23459         * cs-tokenizer.cs: Catch long identifiers (645)
23460
23461         * typemanager.cs (IndexerPropetyName): Ravi never tested this
23462         piece of code.
23463
23464         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
23465         fix, we were returning too early, so we were not registering
23466         pending methods from abstract classes.
23467
23468         Do not register pending methods if the class is abstract.
23469
23470         * expression.cs (Conditional.DoResolve): Report circular implicit
23471         conversions when we neecd to compute it for conditional
23472         expressions. 
23473
23474         (Is.DoResolve): If the expression is always of the provided type,
23475         flag warning 183.  If the expression can not ever be of the
23476         provided type flag warning 184.
23477
23478         * class.cs: Catch 169 as well.
23479
23480         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
23481         read. 
23482
23483 2002-01-18  Nick Drochak  <ndrochak@gol.com>
23484
23485         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
23486
23487 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
23488
23489         * interface.cs: (PopulateMethod): Check for pointers being defined
23490         only if the unsafe context is active.
23491         (PopulateProperty): ditto.
23492         (PopulateIndexer): ditto.
23493
23494         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
23495         specified.  If pointers are present, make sure that they are
23496         present in an unsafe context.
23497         (Constructor, Constructor.Define): ditto.
23498         (Field, Field.Define): ditto.
23499         (Property, Property.Define): ditto.
23500         (Event, Event.Define): ditto.
23501
23502         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
23503         hashtable if there are classes or structs defined.
23504
23505         * expression.cs (LocalVariableReference.DoResolve): Simplify this
23506         code, as the constant resolution moved.
23507
23508         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
23509         the metadata, so we can flag error 133. 
23510
23511         * decl.cs (MemberCore.UnsafeOK): New function to test that a
23512         pointer is being declared in an unsafe context.
23513
23514 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
23515
23516         * modifiers.cs (Modifiers.Check): Require a Location argument.
23517         Report error 227 for Unsafe use.
23518
23519         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
23520
23521         * statement.cs (For.Emit): If the test is null, then report that
23522         we do `return', as we wont reach anything afterwards.
23523
23524         (Switch.SwitchGoverningType): Track the expression that matched
23525         the conversion.
23526
23527         * driver.cs: Allow negative numbers as an error code to flag.
23528
23529         * cs-parser.jay: Handle 1551.
23530
23531         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
23532
23533 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23534
23535         * cs-parser.jay: Report 1518 (type declaration can only contain
23536         class, struct, interface, enum or delegate)
23537
23538         (switch_label): Report 1523 (keywords `case' or `default' must
23539         preced code)
23540
23541         (opt_switch_sections): Report 1522 (empty switch)
23542
23543         * driver.cs: Report 1515 (response file specified multiple times)
23544         Report 1516 (Source file specified multiple times).
23545
23546         * expression.cs (Argument.Resolve): Signal 1510
23547
23548         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
23549         access not allowed in static code)
23550
23551 2002-01-11  Ravi Pratap  <ravi@ximian.com>
23552
23553         * typemanager.cs (IsPointerType): Utility method which we are going
23554         to need a lot.
23555
23556         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
23557         the object type, so we take care of that.
23558
23559         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
23560
23561         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
23562         added to non-params parameters :-)
23563
23564         * typemanager.cs (CSharpName): Include 'void' type too. 
23565
23566         (void_ptr_type): Include in the set of core types.
23567
23568         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
23569         duplicating code.
23570
23571         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
23572         an unsafe context.
23573
23574         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
23575         completely forgotten about it.
23576
23577 2002-01-10  Ravi Pratap  <ravi@ximian.com>
23578
23579         * cs-parser.jay (pointer_type): Add. This begins our implementation
23580         of parsing rules for unsafe code.
23581
23582         (unsafe_statement): Implement.
23583
23584         (embedded_statement): Modify to include the above.
23585
23586         * statement.cs (Unsafe): Implement new class for unsafe blocks.
23587
23588         * codegen.cs (EmitContext.InUnsafe): Add. This determines
23589         if the current context is an unsafe one.
23590
23591         * cs-parser.jay (local_variable_pointer_type): Since local variable types
23592         are handled differently, we need separate rules for them.
23593
23594         (local_variable_declaration): Update to use local_variable_pointer_type
23595         to allow variable declarations of unmanaged pointer types.
23596
23597         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
23598         in unsafe contexts.
23599
23600         * ../errors/cs0214.cs : Add.
23601
23602 2002-01-16  Nick Drochak  <ndrochak@gol.com>
23603
23604         * makefile: remove 'response' file when cleaning.
23605
23606 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23607
23608         * cs-parser.jay: Report 1524.
23609
23610 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
23611
23612         * typemanager.cs (RegisterMethod): drop checking if we have
23613         registered this from here
23614
23615 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
23616
23617         * class.cs (Method.EmitDestructor): Implement calling our base
23618         destructor. 
23619
23620         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
23621         value of InFinally.
23622
23623         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
23624         this routine and will wrap the call in a try/catch block.  Deal
23625         with the case.
23626
23627 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
23628
23629         * ecore.cs (Expression.MemberLookup): instead of taking a
23630         parameter `same_type' that was used to tell whether we could
23631         access private members we compute our containing type from the
23632         EmitContext.
23633
23634         (FieldExpr): Added partial support for volatile fields.  This does
23635         not work for volatile fields exposed from assemblies, as I can not
23636         figure out how to extract the modreq from it.
23637
23638         Updated all the source files to use this.
23639
23640         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
23641         because it is referenced by MemberLookup very often. 
23642
23643 2002-01-09  Ravi Pratap  <ravi@ximian.com>
23644
23645         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
23646         TypeBuilder.GetCustomAttributes to retrieve what we need.
23647
23648         Get rid of redundant default_member_attr_type as this is the same as
23649         default_member_type which already exists.
23650
23651         * interface.cs, attribute.cs : Update accordingly.
23652
23653 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
23654
23655         * typemanager.cs: Enable IndexerPropertyName again.  It does not
23656         work for TYpeBuilders though.  Ravi, can you please fix this?
23657
23658         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
23659
23660         * expression.cs (Argument.Emit): Handle the case of ref objects
23661         being passed to ref functions;  
23662
23663         (ParameterReference.EmitLoad): Loads the content of the pointer
23664         without dereferencing.
23665
23666 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23667
23668         * cs-tokenizer.cs: Implemented the pre-processing expressions.
23669
23670 2002-01-08  Ravi Pratap  <ravi@ximian.com>
23671
23672         * class.cs (Indexer.DefineMethod): Incorporate the interface
23673         type in the name of the method if we are doing explicit interface
23674         implementation.
23675
23676         * expression.cs (ConversionExists): Remove as it is completely obsolete.
23677
23678         (BetterConversion): Fix extremely trivial bug where we were referring to
23679         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
23680         again !
23681
23682         * ../errors/bug16.cs : Add although we have fixed it.
23683
23684 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23685
23686         * expression.cs (BaseIndexer): Begin implementation.
23687
23688         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
23689
23690         * cs-parser.jay (indexer_declarator): Use qualified_identifier
23691         production directly to remove a shift/reduce, and implement
23692         explicit interface implementation.
23693
23694         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
23695         after a floating point suffix.
23696
23697         * expression.cs (DoNumericPromotions): Improved the conversion for
23698         uint/uint.  If we have a constant, we avoid doing a typecast to a
23699         larger type.
23700
23701         * class.cs (Indexer): Implement explicit interface implementation
23702         for indexers.
23703
23704 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
23705
23706         * class.cs: make the default instance constructor public and hidebysig.
23707
23708 2001-01-03  Ravi Pratap  <ravi@ximian.com>
23709
23710         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
23711         so we can call it from elsewhere.
23712
23713         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
23714         we emit it internally if the class has a defined indexer; otherwise the user
23715         emits it by decorating the class definition with the DefaultMemberAttribute.
23716
23717         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
23718         attribute is not used on a type which defines an indexer.
23719
23720         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
23721         character when we skip whitespace.
23722
23723         * ../errors/cs0646.cs : Add.
23724
23725 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
23726
23727         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
23728         again. 
23729
23730         * makefile: Add practical target `mcs3.exe' which builds the third
23731         generation compiler. 
23732
23733         * expression.cs (New): Fix structures constructor calling.
23734
23735         * class.cs (Property, Method, Indexer): Emit Final flag on the
23736         method if we are an interface implementation and we are not
23737         abstract. 
23738
23739         * ecore.cs (PropertyExpr): New public field `IsBase', tells
23740         whether this property is referencing a `base' method.
23741
23742         * expression.cs (Invocation.EmitCall): take an extra argument:
23743         is_base, this is used to determine whether the `call' or
23744         `callvirt' opcode should be used.
23745
23746
23747         * delegate.cs: update EmitCall.
23748
23749         * class.cs (Method.Define): Set NewSlot for the cases where we are
23750         not implementing an interface method.
23751
23752         (Property.Define): ditto.
23753
23754 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
23755
23756         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
23757         'r'.  Allows mcs to parse itself fully.
23758
23759 2002-01-02  Ravi Pratap  <ravi@ximian.com>
23760
23761         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
23762         of the number of initializers that require the InitializeArray method.
23763
23764         (CheckIndices): Store the Expression in all cases - not the plain value. Also
23765         update the above field where necessary.
23766
23767         (MakeByteBlob): Update accordingly.
23768
23769         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
23770         greater than 2.
23771
23772         (EmitDynamicInitializers): Update in accordance with the new optimization.
23773
23774         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
23775         same OpCode applies.
23776
23777         * cs-parser.jay : Fix some glaring errors I introduced.
23778
23779 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
23780
23781         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
23782         so that we can check for name clashes there too.
23783
23784         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
23785         for interface indexers.
23786
23787         * interfaces.cs (Define): Emit the default member attribute.
23788
23789         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
23790         variable was being referred to while setting the value ;-)
23791
23792 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
23793
23794         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
23795         byte-by-byte information when we know the data is zero.
23796
23797         Make the block always a multiple of 4, because
23798         DefineInitializedData has a bug.
23799
23800         * assign.cs: Fix, we should assign from the temporary, not from
23801         the source. 
23802
23803         * expression.cs (MakeByteBlob): Fix my incorrect code.
23804
23805 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
23806
23807         * typemanager.cs (EnumToUnderlying): This function is used to get
23808         the underlying type from an enumeration, because it does not
23809         always work. 
23810
23811         * constant.cs: Use the I4_S form for values between -128 and 127.
23812
23813         * statement.cs (Block.LookupLabel): Looks up a label.
23814         (Block): Drop support for labeled blocks.
23815
23816         (LabeledStatement): New kind of statement that represents a label
23817         only.
23818
23819         (Goto): Finally implement this bad boy.
23820
23821         * cs-parser.jay: Update to reflect new mechanism to implement
23822         labels.
23823
23824 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
23825
23826         * codegen.cs (EmitContext.This): a codegen property that keeps the
23827         a single instance of this instead of creating many different this
23828         instances. 
23829
23830         * delegate.cs (Delegate.DoResolve): Update to use the property;
23831
23832         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
23833
23834         * expression.cs (BaseAccess.DoResolve): Ditto.
23835
23836 2001-12-29  Ravi Pratap  <ravi@ximian.com>
23837
23838         * typemanager.cs (methodimpl_attr_type): Add to hold the type
23839         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
23840
23841         (InitCoreTypes): Update accordingly.
23842
23843         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
23844         so we can quickly store the state.
23845
23846         (ApplyAttributes): Set the correct implementation flags
23847         for InternalCall methods.
23848
23849 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
23850
23851         * expression.cs (EmitCall): if a method is not virtual, then do
23852         not use callvirt on it.
23853
23854         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
23855         user defined stuff) requires the use of stobj, which takes an
23856         address on the stack instead of an array and an index.  So emit
23857         the Ldelema operation for it.
23858
23859         (EmitStoreOpcode): Use stobj for valuetypes.
23860
23861         (UnaryMutator.EmitCode): Use the right 1 value depending on
23862         whether we are dealing with int64/uint64, float or doubles.
23863
23864         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
23865         constructors that I implemented last night.
23866
23867         (Constructor.IsDefault): Fix to work properly for static
23868         constructors.
23869
23870         * cs-parser.jay (CheckDef): report method signature errors.
23871         Update error number 103 to be 132.
23872
23873         * decl.cs: New AdditionResult enumeration value: MethodExists.
23874         Although we do this check for methods later on in the semantic
23875         analysis, catching repeated default constructors is so easy that
23876         we catch these here. 
23877
23878         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
23879         promotions code.
23880
23881         (ParameterReference.EmitAssign, Emit): handle
23882         bools as bytes.
23883
23884         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
23885         (ArrayAccess.EmitStoreOpcode): ditto.
23886
23887         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
23888
23889         * expression.cs (MakeByteBlob): Complete all the missing types
23890         (uint, short, ushort, byte, sbyte)
23891
23892         * class.cs: Only init instance field initializers on instance
23893         constructors. 
23894
23895         Rename `constructors' to instance_constructors. 
23896
23897         (TypeContainer.AddConstructor): Only add constructors to the list
23898         if it is not static.
23899
23900         Make sure that we handle default_static_constructor independently
23901         everywhere where we handle instance_constructors
23902
23903 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
23904
23905         * class.cs: Do not lookup or create a base initializer for a
23906         static constructor.
23907
23908         (ConstructorInitializer.Resolve): use the proper type to lookup
23909         for constructors.
23910
23911         * cs-parser.jay: Report error 1585 (modifiers between type and name).
23912
23913         * enum.cs, interface.cs: Remove CloseType, this is taken care by
23914         in DeclSpace. 
23915
23916         * decl.cs: CloseType is now an virtual method, the default
23917         implementation just closes this type.
23918
23919 2001-12-28  Ravi Pratap  <ravi@ximian.com>
23920
23921         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
23922         to PreserveSig by default. Also emit HideBySig on such methods.
23923
23924         Basically, set the defaults to standard values.
23925
23926         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
23927         argument, if candidate is better, it can't be worse than the best !
23928
23929         (Invocation): Re-write bits to differentiate between methods being
23930         applicable in their expanded form and their normal form - for params
23931         methods of course.
23932
23933         Get rid of use_standard everywhere as only standard conversions are allowed
23934         in overload resolution. 
23935
23936         More spec conformance.
23937
23938 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23939
23940         * driver.cs: Add --timestamp, to see where the compiler spends
23941         most of its time.
23942
23943         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
23944         `this' in static code.
23945
23946         (SimpleName.DoResolve): Implement in terms of a helper function
23947         that allows static-references to be passed upstream to
23948         MemberAccess.
23949
23950         (Expression.ResolveWithSimpleName): Resolve specially simple
23951         names when called by MemberAccess to implement the special
23952         semantics. 
23953
23954         (Expression.ImplicitReferenceConversion): Handle conversions from
23955         Null to reference types before others, as Null's type is
23956         System.Object. 
23957
23958         * expression.cs (Invocation.EmitCall): Handle the special case of
23959         calling methods declared on a reference type from a ValueType
23960         (Base classes System.Object and System.Enum)
23961
23962         (MemberAccess.Resolve): Only perform lookups on Enumerations if
23963         the left hand side is a TypeExpr, not on every enumeration. 
23964
23965         (Binary.Resolve): If types are reference types, then do a cast to
23966         object on operators != and == of both arguments.
23967
23968         * typemanager.cs (FindMembers): Extract instance and static
23969         members if requested.
23970
23971         * interface.cs (PopulateProperty): Use void_type instead of null
23972         as the return type for the setter method.
23973
23974         (PopulateIndexer): ditto.
23975
23976 2001-12-27  Ravi Pratap  <ravi@ximian.com>
23977
23978         * support.cs (ReflectionParameters): Fix minor bug where we
23979         were examining the wrong parameter for the ParamArray attribute.
23980
23981         Cope with requests for the type of the parameter at position
23982         greater than the params parameter's. We now return the element
23983         type of the params array as that makes more sense.
23984
23985         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
23986         accordingly as we no longer have to extract the element type
23987         ourselves.
23988
23989         (Invocation.OverloadResolve): Update.
23990
23991 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23992
23993         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
23994         against IEnumerator, test whether the return value is a descendant
23995         of the IEnumerator interface.
23996
23997         * class.cs (Indexer.Define): Use an auxiliary method to implement
23998         the other bits of the method definition.  Begin support for
23999         explicit interface implementation.
24000
24001         (Property.DefineMethod): Use TypeManager.void_type instead of null
24002         for an empty return value.
24003
24004 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
24005
24006         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
24007         dealing with a FieldExpr which is composed of a FieldBuilder, in
24008         the code path we did extract the constant, but we should have
24009         obtained the underlying value to be able to cast it (otherwise we
24010         end up in an infinite loop, this is what Ravi was running into).
24011
24012         (ArrayCreation.UpdateIndices): Arrays might be empty.
24013
24014         (MemberAccess.ResolveMemberAccess): Add support for section
24015         14.5.4.1 that deals with the special case of E.I when E is a type
24016         and something else, that I can be a reference to a static member.
24017
24018         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
24019         handle a particular array type to create byte blobs, it is just
24020         something we dont generate byteblobs for.
24021
24022         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
24023         arguments. 
24024
24025         * location.cs (Push): remove the key from the hashtable that we
24026         are about to add.   This happens for empty files.
24027
24028         * driver.cs: Dispose files after we have parsed them.
24029
24030         (tokenize): new function that only runs the tokenizer on its
24031         input, for speed testing.
24032
24033 2001-12-26  Ravi Pratap  <ravi@ximian.com>
24034
24035         * class.cs (Event.Define): Define the private field only if there
24036         are no accessors defined.
24037
24038         * expression.cs (ResolveMemberAccess): If there is no associated
24039         field with the event, that means we have an event defined with its
24040         own accessors and we should flag error cs0070 since transforming
24041         ourselves into a field is not valid in that case.
24042
24043         * ecore.cs (SimpleName.DoResolve): Same as above.
24044
24045         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
24046         and charset to sane values.
24047
24048 2001-12-25  Ravi Pratap  <ravi@ximian.com>
24049
24050         * assign.cs (DoResolve): Perform check on events only if they 
24051         are being accessed outside the declaring type.
24052
24053         * cs-parser.jay (event_declarations): Update rules to correctly
24054         set the type of the implicit parameter etc.
24055
24056         (add_accessor, remove_accessor): Set current local parameters.
24057
24058         * expression.cs (Binary): For delegate addition and subtraction,
24059         cast the return value from the method into the appropriate delegate
24060         type.
24061
24062 2001-12-24  Ravi Pratap  <ravi@ximian.com>
24063
24064         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
24065         of these as the workaround is unnecessary.
24066
24067         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
24068         delegate data - none of that is needed at all.
24069
24070         Re-write bits to extract the instance expression and the delegate method
24071         correctly.
24072
24073         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
24074         on delegates too.
24075
24076         * attribute.cs (ApplyAttributes): New method to take care of common tasks
24077         of attaching attributes instead of duplicating code everywhere.
24078
24079         * everywhere : Update code to do attribute emission using the above method.
24080
24081 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
24082
24083         * expression.cs (IsParamsMethodApplicable): if there are not
24084         parameters, return immediately.
24085
24086         * ecore.cs: The 0 literal can be implicity converted to an enum
24087         type. 
24088
24089         (SimpleName.DoResolve): First lookup the type, then lookup the
24090         members. 
24091
24092         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
24093         want to get its address.  If the InstanceExpression is not
24094         addressable, store the result in a temporary variable, then get
24095         the address of it.
24096
24097         * codegen.cs: Only display 219 errors on warning level or above. 
24098
24099         * expression.cs (ArrayAccess): Make it implement the
24100         IMemoryLocation interface.
24101
24102         (Binary.DoResolve): handle the operator == (object a, object b)
24103         and operator != (object a, object b) without incurring into a
24104         BoxedCast (because 5 != o should never be performed).
24105
24106         Handle binary enumerator operators.
24107
24108         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
24109         value type, otherwise use Ldelem_ref.
24110
24111         Use precomputed names;
24112
24113         (AddressOf): Implement address of
24114
24115         * cs-parser.jay (labeled_statement): Fix recursive block
24116         addition by reworking the production.
24117
24118         * expression.cs (New.DoEmit): New has a special case:
24119                 
24120                  If we are dealing with a ValueType, we have a few
24121                  situations to deal with:
24122                 
24123                     * The target of New is a ValueType variable, that is
24124                       easy, we just pass this as the variable reference
24125                 
24126                     * The target of New is being passed as an argument,
24127                       to a boxing operation or a function that takes a
24128                       ValueType.
24129                 
24130                       In this case, we need to create a temporary variable
24131                       that is the argument of New.
24132
24133
24134 2001-12-23  Ravi Pratap  <ravi@ximian.com>
24135
24136         * rootcontext.cs (LookupType): Check that current_type is not null before
24137         going about looking at nested types.
24138
24139         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
24140         not implement the IAssignMethod interface any more.
24141
24142         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
24143         where we tranform them into FieldExprs if they are being resolved from within
24144         the declaring type.
24145
24146         * ecore.cs (SimpleName.DoResolve): Do the same here.
24147
24148         * assign.cs (DoResolve, Emit): Clean up code considerably. 
24149
24150         * ../errors/bug10.cs : Add.
24151
24152         * ../errors/cs0070.cs : Add.
24153
24154         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
24155
24156         * assign.cs : Get rid of EventIsLocal everywhere.
24157
24158 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
24159
24160         * ecore.cs (ConvertIntLiteral): finished the implementation.
24161
24162         * statement.cs (SwitchLabel): Convert the value we are using as a
24163         key before looking up the table.
24164
24165 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
24166
24167         * codegen.cs (EmitTopBlock): Require a Location argument now.
24168
24169         * cs-parser.jay (constructor_declarator): We need to setup
24170         current_local_parameters before we parse the
24171         opt_constructor_initializer, to allow the variables to be bound
24172         to the constructor arguments.
24173
24174         * rootcontext.cs (LookupType): First lookup nested classes in our
24175         class and our parents before we go looking outside our class.
24176
24177         * expression.cs (ConstantFold): Extract/debox the values at the
24178         beginnning. 
24179
24180         * rootcontext.cs (EmitCode): Resolve the constants first before we
24181         resolve the types.  This is not really needed, but it helps debugging.
24182
24183         * statement.cs: report location.
24184
24185         * cs-parser.jay: pass location to throw statement.
24186
24187         * driver.cs: Small bug fix.
24188
24189         * report.cs: Updated format to be 4-zero filled digits.
24190
24191 2001-12-22  Ravi Pratap  <ravi@ximian.com>
24192
24193         * expression.cs (CheckIndices): Fix minor bug where the wrong
24194         variable was being referred to ;-)
24195
24196         (DoEmit): Do not call EmitStaticInitializers when the 
24197         underlying type is System.Object.
24198
24199 2001-12-21  Ravi Pratap  <ravi@ximian.com>
24200
24201         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
24202         and do the usual workaround for SRE.
24203
24204         * class.cs (MyEventBuilder.EventType): New member to get at the type
24205         of the event, quickly.
24206
24207         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
24208
24209         * assign.cs (Assign.DoResolve): Handle the case when the target
24210         is an EventExpr and perform the necessary checks.
24211
24212         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
24213         interface.
24214
24215         (SimpleName.MemberStaticCheck): Include check for EventExpr.
24216
24217         (EventExpr): Set the type in the constructor itself since we 
24218         are meant to be born fully resolved.
24219
24220         (EventExpr.Define): Revert code I wrote earlier.
24221                 
24222         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
24223         instance expression is null. The instance expression is a This in that case
24224         or a null, depending on whether it is a static method or not.
24225
24226         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
24227         refers to more than one method.
24228
24229         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
24230         and accordingly flag errors.
24231
24232 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
24233
24234         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
24235
24236 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
24237
24238         * location.cs (ToString): Provide useful rutine.
24239
24240 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
24241
24242         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
24243         objects, return the actual integral boxed.
24244
24245         * statement.cs (SwitchLabel): define an ILLabel for each
24246         SwitchLabel. 
24247
24248         (Switch.CheckSwitch): If the value is a Literal, extract
24249         the underlying literal.
24250
24251         Also in the unused hashtable we had, add the SwitchLabel so we can
24252         quickly look this value up.
24253
24254         * constant.cs: Implement a bunch of new constants.  Rewrite
24255         Literal based on this.  Made changes everywhere to adapt to this.
24256
24257         * expression.cs (Expression.MakeByteBlob): Optimize routine by
24258         dereferencing array only once, and also copes with enumrations.
24259
24260         bytes are two bytes wide, not one.
24261
24262         (Cast): Perform constant conversions.
24263
24264         * ecore.cs (TryImplicitIntConversion): Return literals instead of
24265         wrappers to the literals here.
24266
24267         * expression.cs (DoNumericPromotions): long literals can converted
24268         to ulong implicity (this is taken care of elsewhere, but I was
24269         missing this spot).
24270
24271         * ecore.cs (Expression.Literalize): Make the return type Literal,
24272         to improve type checking.
24273
24274         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
24275
24276 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24277
24278         * literal.cs: Revert code from ravi that checked the bounds.  The
24279         bounds are sane by the definition of the type itself. 
24280
24281         * typemanager.cs: Fix implementation of ImplementsInterface.  We
24282         need to actually look up in our parent hierarchy for interfaces
24283         implemented. 
24284
24285         * const.cs: Use the underlying type for enumerations
24286
24287         * delegate.cs: Compute the basename for the delegate creation,
24288         that should fix the delegate test case, and restore the correct
24289         Type Lookup semantics in rootcontext
24290
24291         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
24292         referencing a nested type with the Reflection API is using the "+"
24293         sign. 
24294
24295         * cs-parser.jay: Do not require EOF token at the end.
24296
24297 2001-12-20  Ravi Pratap  <ravi@ximian.com>
24298
24299         * rootcontext.cs (LookupType): Concatenate type names with
24300         a '.' instead of a '+' The test suite passes again.
24301
24302         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
24303         field of the enumeration.
24304
24305         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
24306         the case when the member is an EventExpr.
24307
24308         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
24309         static has an associated instance expression.
24310
24311         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
24312
24313         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
24314
24315         * class.cs (Event.Define): Register event and perform appropriate checks
24316         for error #111.
24317
24318         We define the Add and Remove methods even if the use provides none because
24319         in that case, we provide default implementations ourselves.
24320
24321         Define a private field of the type of the event. This is done by the CSC compiler
24322         and we should be doing it too ;-)
24323
24324         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
24325         More methods we use in code we generate.
24326
24327         (multicast_delegate_type, delegate_type): Two separate types since the distinction
24328         is important.
24329
24330         (InitCoreTypes): Update accordingly for the above.
24331
24332         * class.cs (Event.Emit): Generate code for default accessors that we provide
24333
24334         (EmitDefaultMethod): Do the job in the above.
24335
24336         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
24337         appropriate place.
24338
24339 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24340
24341         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
24342         builders even if we were missing one.
24343
24344         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
24345         pass the Basename as our class name instead of the Name.  The
24346         basename will be correctly composed for us.
24347
24348         * parameter.cs (Paramters): Now takes a Location argument.
24349
24350         * decl.cs (DeclSpace.LookupType): Removed convenience function and
24351         make all the code call directly LookupType in RootContext and take
24352         this chance to pass the Location information everywhere.
24353
24354         * Everywhere: pass Location information.
24355
24356 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
24357
24358         * class.cs (Constructor.Define): Updated way of detecting the
24359         length of the parameters.
24360
24361         (TypeContainer.DefineType): Use basename as the type name for
24362         nested types.
24363
24364         (TypeContainer.Define): Do not recursively define types here, as
24365         definition is taken care in order by the RootContext.
24366
24367         * tree.cs: Keep track of namespaces in a per-file basis.
24368
24369         * parameter.cs (Parameter.ComputeSignature): Update to use
24370         DeclSpace. 
24371
24372         (Parameters.GetSignature): ditto.
24373
24374         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
24375         instead of a TypeContainer.
24376
24377         (Interface.SemanticAnalysis): Use `this' instead of our parent to
24378         resolve names.  Because we need to be resolve in our context, not
24379         our parents.
24380
24381         * driver.cs: Implement response files.
24382
24383         * class.cs (TypeContainer.DefineType): If we are defined, do not
24384         redefine ourselves.
24385
24386         (Event.Emit): Emit the code for add/remove handlers.
24387         (Event.Define): Save the MethodBuilders for add/remove.
24388
24389         * typemanager.cs: Use pair here too.
24390
24391         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
24392         DictionaryEntry requires the first argument to be non-null.  
24393
24394         (enum_declaration): Compute full name for registering the
24395         enumeration.
24396
24397         (delegate_declaration): Instead of using
24398         formal_parameter_list, use opt_formal_parameter_list as the list
24399         can be empty.
24400
24401         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
24402         (EventParsing): New property that controls whether `add' and
24403         `remove' are returned as tokens or identifiers (for events);
24404
24405 2001-12-19  Ravi Pratap  <ravi@ximian.com>
24406
24407         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
24408         use MyEventBuilder only and let it wrap the real builder for us.
24409
24410         (MyEventBuilder): Revamp constructor etc.
24411
24412         Implement all operations that we perform on EventBuilder in precisely the same
24413         way here too.
24414
24415         (FindMembers): Update to use the EventBuilder member.
24416
24417         (Event.Emit): Update accordingly.
24418
24419 2001-12-18  Ravi Pratap  <ravi@ximian.com>
24420
24421         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
24422         by calling the appropriate methods.
24423
24424         (GetCustomAttributes): Make stubs as they cannot possibly do anything
24425         useful.
24426
24427         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
24428
24429 2001-12-17  Ravi Pratap  <ravi@ximian.com>
24430
24431         * delegate.cs (Delegate.Populate): Check that the return type
24432         and various parameters types are indeed accessible.
24433
24434         * class.cs (Constructor.Define): Same here.
24435
24436         (Field.Define): Ditto.
24437
24438         (Event.Define): Ditto.
24439
24440         (Operator.Define): Check that the underlying Method defined itself
24441         correctly - so it's MethodBuilder should not be null.
24442
24443         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
24444         expression happens to be null.
24445
24446         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
24447         members but as of now we don't seem to be able to do anything really useful with it.
24448
24449         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
24450         not the EventBuilder.
24451
24452 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
24453
24454         * cs-tokenizer.cs: Add support for defines.
24455         Add support for #if, #elif, #else, #endif
24456
24457         (eval_var): evaluates a variable.
24458         (eval): stubbed for evaluating functions.
24459
24460         * cs-parser.jay: Pass the defines information
24461
24462         * driver.cs: Add --define command line option.
24463
24464         * decl.cs: Move MemberCore here.
24465
24466         Make it the base class for DeclSpace.  This allows us to catch and
24467         report 108 and 109 for everything now.
24468
24469         * class.cs (TypeContainer.Define): Extract all the members
24470         before populating and emit the warning 108 (new keyword required
24471         to override) instead of having each member implement this.
24472
24473         (MemberCore.Define): New abstract method, we will be using this in
24474         the warning reporting engine in Populate.
24475
24476         (Operator.Define): Adjust to new MemberCore protocol. 
24477
24478         * const.cs (Const): This does not derive from Expression, it is a
24479         temporary object we use to create fields, it is a MemberCore. 
24480
24481         * class.cs (Method.Define): Allow the entry point to be in a
24482         specific class.
24483
24484         * driver.cs: Rewrite the argument handler to clean it up a bit.
24485
24486         * rootcontext.cs: Made it just an auxiliary namespace feature by
24487         making everything static.
24488
24489         * driver.cs: Adapt code to use RootContext type name instead of
24490         instance variable.
24491
24492         * delegate.cs: Remove RootContext argument.
24493
24494         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
24495         argument. 
24496
24497         * class.cs (Event.Define): The lookup can fail.
24498
24499         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
24500
24501         * expression.cs: Resolve the this instance before invoking the code.
24502
24503 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
24504
24505         * cs-parser.jay: Add a production in element_access that allows
24506         the thing to become a "type" reference.  This way we can parse
24507         things like "(string [])" as a type.
24508
24509         Note that this still does not handle the more complex rules of
24510         casts. 
24511
24512
24513         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
24514
24515         * ecore.cs: (CopyNewMethods): new utility function used to
24516         assemble the list of methods from running FindMembers.
24517
24518         (MemberLookup): Rework FindMembers so that 
24519
24520 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
24521
24522         * class.cs (TypeContainer): Remove Delegates who fail to be
24523         defined.
24524
24525         * delegate.cs (Populate): Verify that we dont get null return
24526         values.   TODO: Check for AsAccessible.
24527
24528         * cs-parser.jay: Use basename to emit error 574 (destructor should
24529         have the same name as container class), not the full name.
24530
24531         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
24532         possible representation.  
24533
24534         Also implements integer type suffixes U and L.
24535
24536 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
24537
24538         * expression.cs (ArrayCreation.DoResolve): We need to do the
24539         argument resolution *always*.
24540
24541         * decl.cs: Make this hold the namespace.  Hold the root context as
24542         well.
24543         (LookupType): Move here.
24544
24545         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
24546
24547         * location.cs (Row, Name): Fixed the code, it was always returning
24548         references to the first file.
24549
24550         * interface.cs: Register properties defined through interfaces.
24551
24552         * driver.cs: Add support for globbing on the command line
24553
24554         * class.cs (Field): Make it derive from MemberCore as well.
24555         (Event): ditto.
24556
24557 2001-12-15  Ravi Pratap  <ravi@ximian.com>
24558
24559         * class.cs (Event::Define): Check that the type of the event is a delegate
24560         type else flag error #66.
24561
24562         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
24563         same.
24564
24565         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
24566         values of EntryPoint, CharSet etc etc.
24567
24568         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
24569
24570         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
24571         be null and we should ignore this. I am not sure if this is really clean. Apparently,
24572         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
24573         which needs this to do its work.
24574
24575         * ../errors/cs0066.cs : Add.
24576
24577 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
24578
24579         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
24580         helper functions.
24581
24582         * class.cs: (MethodSignature.MethodSignature): Removed hack that
24583         clears out the parameters field.
24584         (MemberSignatureCompare): Cleanup
24585
24586         (MemberCore): New base class used to share code between MethodCore
24587         and Property.
24588
24589         (RegisterRequiredImplementations) BindingFlags.Public requires
24590         either BindingFlags.Instace or Static.  Use instance here.
24591
24592         (Property): Refactored code to cope better with the full spec.
24593
24594         * parameter.cs (GetParameterInfo): Return an empty array instead
24595         of null on error.
24596
24597         * class.cs (Property): Abstract or extern properties have no bodies.
24598
24599         * parameter.cs (GetParameterInfo): return a zero-sized array.
24600
24601         * class.cs (TypeContainer.MethodModifiersValid): Move all the
24602         method modifier validation to the typecontainer so we can reuse
24603         this on properties.
24604
24605         (MethodCore.ParameterTypes): return an empty sized array of types.
24606
24607         (Property.Define): Test property modifier validity.
24608
24609         Add tests for sealed/override too.
24610
24611         (Method.Emit): abstract or extern methods have no bodies.
24612
24613 2001-12-14  Ravi Pratap  <ravi@ximian.com>
24614
24615         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
24616         thing.
24617
24618         (Method::Define, ::Emit): Modify accordingly.
24619
24620         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
24621
24622         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
24623
24624         * makefile: Pass in /unsafe.
24625
24626 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
24627
24628         * class.cs (MakeKey): Kill routine.
24629
24630         * class.cs (TypeContainer.Define): Correctly define explicit
24631         method implementations (they require the full interface name plus
24632         the method name).
24633
24634         * typemanager.cs: Deply the PtrHashtable here and stop using the
24635         lame keys.  Things work so much better.
24636
24637         This of course broke everyone who depended on `RegisterMethod' to
24638         do the `test for existance' test.  This has to be done elsewhere.
24639
24640         * support.cs (PtrHashtable): A hashtable that avoid comparing with
24641         the object stupid Equals method (because, that like fails all over
24642         the place).  We still do not use it.
24643
24644         * class.cs (TypeContainer.SetRequiredInterface,
24645         TypeContainer.RequireMethods): Killed these two routines and moved
24646         all the functionality to RegisterRequiredImplementations.
24647
24648         (TypeContainer.RegisterRequiredImplementations): This routine now
24649         registers all the implementations required in an array for the
24650         interfaces and abstract methods.  We use an array of structures
24651         which can be computed ahead of time to reduce memory usage and we
24652         also assume that lookups are cheap as most classes will not
24653         implement too many interfaces.
24654
24655         We also avoid creating too many MethodSignatures.
24656
24657         (TypeContainer.IsInterfaceMethod): Update and optionally does not
24658         clear the "pending" bit if we find that there are problems with
24659         the declaration.
24660
24661         (TypeContainer.VerifyPendingMethods): Update to report errors of
24662         methods that look like implementations but are not.
24663
24664         (TypeContainer.Define): Add support for explicit interface method
24665         implementation. 
24666
24667 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
24668
24669         * typemanager.cs: Keep track of the parameters here instead of
24670         being a feature of the TypeContainer.
24671
24672         * class.cs: Drop the registration of parameters here, as
24673         InterfaceMethods are also interface declarations.
24674
24675         * delegate.cs: Register methods with the TypeManager not only with
24676         the TypeContainer.  This code was buggy.
24677
24678         * interface.cs: Full registation here.
24679
24680 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
24681
24682         * expression.cs: Remove reducer for binary expressions, it can not
24683         be done this way.
24684
24685         * const.cs: Put here the code that used to go into constant.cs
24686
24687         * constant.cs: Put here the code for constants, this is a new base
24688         class for Literals.
24689
24690         * literal.cs: Make Literal derive from Constant.
24691
24692 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
24693
24694         * statement.cs (Return.Emit): Report error 157 if the user
24695         attempts to return from a finally block.
24696
24697         (Return.Emit): Instead of emitting a return, jump to the end of
24698         the function.
24699
24700         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
24701         LocalBuilder to store the result of the function.  ReturnLabel is
24702         the target where we jump.
24703
24704
24705 2001-12-09  Radek Doulik  <rodo@ximian.com>
24706
24707         * cs-parser.jay: remember alias in current namespace
24708
24709         * ecore.cs (SimpleName::DoResolve): use aliases for types or
24710         namespaces
24711
24712         * class.cs (LookupAlias): lookup alias in my_namespace
24713
24714         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
24715         aliases hashtable
24716         (LookupAlias): lookup alias in this and if needed in parent
24717         namespaces
24718
24719 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
24720
24721         * support.cs: 
24722
24723         * rootcontext.cs: (ModuleBuilder) Made static, first step into
24724         making things static.  I need this to avoid passing the
24725         TypeContainer when calling ParameterType.
24726
24727         * support.cs (InternalParameters.ParameterType): Remove ugly hack
24728         that did string manipulation to compute the type and then call
24729         GetType.  Use Parameter.ParameterType instead.
24730
24731         * cs-tokenizer.cs: Consume the suffix for floating values.
24732
24733         * expression.cs (ParameterReference): figure out whether this is a
24734         reference parameter or not.  Kill an extra variable by computing
24735         the arg_idx during emission.
24736
24737         * parameter.cs (Parameters.GetParameterInfo): New overloaded
24738         function that returns whether a parameter is an out/ref value or not.
24739
24740         (Parameter.ParameterType): The type of the parameter (base,
24741         without ref/out applied).
24742
24743         (Parameter.Resolve): Perform resolution here.
24744         (Parameter.ExternalType): The full type (with ref/out applied).
24745
24746         * statement.cs (Using.Emit, Using.EmitExpression): Implement
24747         support for expressions on the using statement.
24748
24749 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
24750
24751         * statement.cs (Using.EmitLocalVariableDecls): Split the
24752         localvariable handling of the using statement.
24753
24754         (Block.EmitMeta): Keep track of variable count across blocks.  We
24755         were reusing slots on separate branches of blocks.
24756
24757         (Try.Emit): Emit the general code block, we were not emitting it. 
24758
24759         Check the type of the declaration to be an IDisposable or
24760         something that can be implicity converted to it. 
24761
24762         Emit conversions if required.
24763
24764         * ecore.cs (EmptyExpression): New utility class.
24765         (Expression.ImplicitConversionExists): New utility function.
24766
24767 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
24768
24769         * statement.cs (Using): Implement.
24770
24771         * expression.cs (LocalVariableReference): Support read only variables.
24772
24773         * statement.cs: Remove the explicit emit for the Leave opcode.
24774         (VariableInfo): Add a readonly field.
24775
24776 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
24777
24778         * ecore.cs (ConvCast): new class used to encapsulate the various
24779         explicit integer conversions that works in both checked and
24780         unchecked contexts.
24781
24782         (Expression.ConvertNumericExplicit): Use new ConvCast class to
24783         properly generate the overflow opcodes.
24784
24785 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24786
24787         * statement.cs: The correct type for the EmptyExpression is the
24788         element_type, not the variable type.  Ravi pointed this out.
24789
24790 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24791
24792         * class.cs (Method::Define): Handle PInvoke methods specially
24793         by using DefinePInvokeMethod instead of the usual one.
24794
24795         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
24796         above to do the task of extracting information and defining the method.
24797
24798 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24799
24800         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
24801         of the condition for string type.
24802
24803         (Emit): Move that here. 
24804
24805         (ArrayCreation::CheckIndices): Keep string literals in their expression
24806         form.
24807
24808         (EmitDynamicInitializers): Handle strings appropriately.
24809
24810 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24811
24812         * codegen.cs (EmitContext): Replace multiple variables with a
24813         single pointer to the current Switch statement.
24814
24815         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
24816         EmitContext.
24817
24818 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24819
24820         * statement.cs 
24821
24822         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
24823         default'.
24824
24825         (Foreach.Emit): Foreach on arrays was not setting
24826         up the loop variables (for break/continue).
24827
24828         (GotoCase): Semi-implented.
24829
24830 2001-12-03  Ravi Pratap  <ravi@ximian.com>
24831
24832         * attribute.cs (CheckAttribute): Handle system attributes by using
24833         Attribute.GetAttributes to examine information we need.
24834
24835         (GetValidPlaces): Same here.
24836
24837         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
24838
24839         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
24840
24841         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
24842
24843         (Method::Define): Set appropriate flags if we have a DllImport attribute.
24844
24845         (Method::Emit): Handle the case when we are a PInvoke method.
24846
24847 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24848
24849         * expression.cs: Use ResolveWithSimpleName on compound names.
24850
24851 2001-12-02  Ravi Pratap  <ravi@ximian.com>
24852
24853         * constant.cs (EmitConstant): Make sure we resolve the associated expression
24854         before trying to reduce it.
24855
24856         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
24857
24858         * constant.cs (LookupConstantValue): Implement.
24859
24860         (EmitConstant): Use the above in emitting the constant.
24861
24862         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
24863         that are user-defined by doing a LookupConstantValue on them.
24864
24865         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
24866         too, like above.
24867
24868 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
24869
24870         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
24871
24872         (BaseAccess.DoResolve): Implement.
24873
24874         (MemberAccess.DoResolve): Split this routine into a
24875         ResolveMemberAccess routine that can be used independently
24876
24877 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
24878
24879         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
24880         As that share bits of the implementation.  Is returns a boolean,
24881         while As returns the Type that is being probed.
24882
24883 2001-12-01  Ravi Pratap  <ravi@ximian.com>
24884
24885         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
24886         instead of a Literal - much easier.
24887
24888         (EnumInTransit): Remove - utterly useless :-)
24889
24890         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
24891
24892         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
24893
24894         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
24895         chain when we have no associated expression.
24896
24897 2001-11-30  Ravi Pratap  <ravi@ximian.com>
24898
24899         * constant.cs (Define): Use Location while reporting the errror.
24900
24901         Also emit a warning when 'new' is used and there is no inherited
24902         member to hide.
24903
24904         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
24905         populated.
24906
24907         (LookupEnumValue): Implement to lookup an enum member's value and define it
24908         if necessary.
24909
24910         (Populate): Re-write accordingly to use the above routine.
24911
24912 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
24913
24914         * expression.cs (This): Fix prototype for DoResolveLValue to
24915         override the base class DoResolveLValue.
24916
24917         * cs-parser.cs: Report errors cs574 and cs575 (destructor
24918         declarations) 
24919
24920         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
24921         (we need to load the address of the field here).  This fixes
24922         test-22. 
24923
24924         (FieldExpr.DoResolveLValue): Call the DoResolve
24925         function to initialize the Instance expression.
24926
24927         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
24928         correctly the GetEnumerator operation on a value type.
24929
24930         * cs-parser.jay: Add more simple parsing error catches.
24931
24932         * statement.cs (Switch): Add support for string switches.
24933         Handle null specially.
24934
24935         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
24936
24937 2001-11-28  Ravi Pratap  <ravi@ximian.com>
24938
24939         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
24940
24941         (declare_local_constant): New helper function.
24942
24943         * statement.cs (AddConstant): Keep a separate record of constants
24944
24945         (IsConstant): Implement to determine if a variable is a constant.
24946
24947         (GetConstantExpression): Implement.
24948
24949         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
24950
24951         * statement.cs (IsVariableDefined): Re-write.
24952
24953 2001-11-27  Ravi Pratap  <ravi@ximian.com>
24954
24955         * class.cs (TypeContainer::FindMembers): Look for constants
24956         in the case when we are looking for MemberTypes.Field
24957
24958         * expression.cs (MemberAccess::DoResolve): Check that in the
24959         case we are a FieldExpr and a Literal, we are not being accessed
24960         by an instance reference.
24961
24962         * cs-parser.jay (local_constant_declaration): Implement.
24963
24964         (declaration_statement): Implement for constant declarations.
24965
24966 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
24967
24968         * statement.cs (Switch): Catch double defaults.
24969
24970         (Switch): More work on the switch() statement
24971         implementation.  It works for integral values now, need to finish
24972         string support.
24973
24974
24975 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24976
24977         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
24978         integer literals into other integer literals.  To be used by
24979         switch. 
24980
24981 2001-11-24  Ravi Pratap  <ravi@ximian.com>
24982
24983         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
24984         some memory.
24985
24986         (EmitDynamicInitializers): Cope with the above since we extract data
24987         directly from ArrayData now.
24988
24989         (ExpectInitializers): Keep track of whether initializers are mandatory
24990         or not.
24991
24992         (Bounds): Make it a hashtable to prevent the same dimension being 
24993         recorded for every element in that dimension.
24994
24995         (EmitDynamicInitializers): Fix bug which prevented the Set array method
24996         from being found.
24997
24998         Also fix bug which was causing the indices to be emitted in the reverse
24999         order.
25000
25001 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
25002
25003         * expression.cs (ArrayCreation): Implement the bits that Ravi left
25004         unfinished.  They do not work, because the underlying code is
25005         sloppy.
25006
25007 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25008
25009         * cs-parser.jay: Remove bogus fixme.
25010
25011         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
25012         on Switch statement.
25013
25014 2001-11-23  Ravi Pratap  <ravi@ximian.com>
25015
25016         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
25017         the same. 
25018
25019         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
25020         parameter. Apparently, any expression is allowed. 
25021
25022         (ValidateInitializers): Update accordingly.
25023
25024         (CheckIndices): Fix some tricky bugs thanks to recursion.
25025
25026         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
25027         I was being completely brain-dead.
25028
25029         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
25030         and re-write acordingly.
25031
25032         (DelegateInvocation): Re-write accordingly.
25033
25034         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
25035
25036         (MakeByteBlob): Handle types more correctly.
25037
25038         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
25039         initialization from expressions but it is incomplete because I am a complete
25040         Dodo :-|
25041
25042 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25043
25044         * statement.cs (If.Emit): Fix a bug that generated incorrect code
25045         on If.  Basically, we have to return `true' (ie, we do return to
25046         our caller) only if both branches of the if return.
25047
25048         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
25049         short-circuit operators, handle them as short circuit operators. 
25050
25051         (Cast.DoResolve): Resolve type.
25052         (Cast.Cast): Take an expression as the target type.
25053
25054         * cs-parser.jay (cast_expression): Remove old hack that only
25055         allowed a limited set of types to be handled.  Now we take a
25056         unary_expression and we resolve to a type during semantic
25057         analysis.
25058
25059         Use the grammar productions from Rhys to handle casts (this is
25060         not complete like Rhys syntax yet, we fail to handle that corner
25061         case that C# has regarding (-x), but we will get there.
25062
25063 2001-11-22  Ravi Pratap  <ravi@ximian.com>
25064
25065         * class.cs (EmitFieldInitializer): Take care of the case when we have a
25066         field which is an array type.
25067
25068         * cs-parser.jay (declare_local_variables): Support array initialization too.
25069
25070         * typemanager.cs (MakeKey): Implement.
25071
25072         (everywhere): Use the above appropriately.
25073
25074         * cs-parser.jay (for_statement): Update for array initialization while
25075         declaring variables.
25076
25077         * ecore.cs : The error message was correct, it's the variable's names that
25078         were misleading ;-) Make the code more readable.
25079
25080         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
25081         the correct type etc.
25082
25083         (ConvertExplicit): Handle Enum types by examining the underlying type.
25084
25085 2001-11-21  Ravi Pratap  <ravi@ximian.com>
25086
25087         * parameter.cs (GetCallingConvention): Always return
25088         CallingConventions.Standard for now.
25089
25090 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25091
25092         * expression.cs (Binary.ResolveOperator): Update the values of `l'
25093         and `r' after calling DoNumericPromotions.
25094
25095         * ecore.cs: Fix error message (the types were in the wrong order).
25096
25097         * statement.cs (Foreach.ProbeCollectionType): Need to pass
25098         BindingFlags.Instance as well 
25099
25100         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
25101         implicit int literal conversion in an empty cast so that we
25102         propagate the right type upstream.
25103
25104         (UnboxCast): new class used to unbox value types.
25105         (Expression.ConvertExplicit): Add explicit type conversions done
25106         by unboxing.
25107
25108         (Expression.ImplicitNumericConversion): Oops, forgot to test for
25109         the target type before applying the implicit LongLiterals to ULong
25110         literal cast.
25111
25112 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
25113
25114         * cs-parser.jay (for_statement): Reworked the way For works: now
25115         we declare manually any variables that are introduced in
25116         for_initializer to solve the problem of having out-of-band code
25117         emition (that is what got for broken).
25118
25119         (declaration_statement): Perform the actual variable declaration
25120         that used to be done in local_variable_declaration here.
25121
25122         (local_variable_declaration): Do not declare anything, just pass
25123         the information on a DictionaryEntry
25124
25125 2001-11-20  Ravi Pratap  <ravi@ximian.com>
25126
25127         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
25128         re-write of the logic to now make it recursive.
25129
25130         (UpdateIndices): Re-write accordingly.
25131
25132         Store element data in a separate ArrayData list in the above methods.
25133
25134         (MakeByteBlob): Implement to dump the array data into a byte array.
25135
25136 2001-11-19  Ravi Pratap  <ravi@ximian.com>
25137
25138         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
25139         into CheckIndices.
25140
25141         * constant.cs (Define): Implement.
25142
25143         (EmitConstant): Re-write fully.
25144
25145         Pass in location info.
25146
25147         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
25148         respectively.
25149
25150         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
25151         DictionaryEntry since we need location info too.
25152
25153         (constant_declaration): Update accordingly.
25154
25155         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
25156         code into another method : UpdateIndices.
25157
25158 2001-11-18  Ravi Pratap  <ravi@ximian.com>
25159
25160         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
25161         some type checking etc.
25162
25163 2001-11-17  Ravi Pratap  <ravi@ximian.com>
25164
25165         * expression.cs (ArrayCreation::ValidateInitializers): Implement
25166         bits to provide dimension info if the user skips doing that.
25167
25168         Update second constructor to store the rank correctly.
25169
25170 2001-11-16  Ravi Pratap  <ravi@ximian.com>
25171
25172         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
25173         and try to implement.
25174
25175         * ../errors/cs0150.cs : Add.
25176
25177         * ../errors/cs0178.cs : Add.
25178
25179 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
25180
25181         * statement.cs: Implement foreach on multi-dimensional arrays. 
25182
25183         * parameter.cs (Parameters.GetParameterByName): Also lookup the
25184         name of the params argument.
25185
25186         * expression.cs: Use EmitStoreOpcode to get the right opcode while
25187         initializing the array.
25188
25189         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
25190         we can use this elsewhere.
25191
25192         * statement.cs: Finish implementation of foreach for single
25193         dimension arrays.
25194
25195         * cs-parser.jay: Use an out-of-band stack to pass information
25196         around, I wonder why I need this.
25197
25198         foreach_block: Make the new foreach_block the current_block.
25199
25200         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
25201         function used to return a static Parameters structure.  Used for
25202         empty parameters, as those are created very frequently.
25203
25204         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
25205
25206 2001-11-15  Ravi Pratap  <ravi@ximian.com>
25207
25208         * interface.cs : Default modifier is private, not public. The
25209         make verify test passes again.
25210
25211 2001-11-15  Ravi Pratap  <ravi@ximian.com>
25212
25213         * support.cs (ReflectionParameters): Fix logic to determine
25214         whether the last parameter is a params one. Test 9 passes again.
25215
25216         * delegate.cs (Populate): Register the builders we define with
25217         RegisterParameterForBuilder. Test 19 passes again.
25218
25219         * cs-parser.jay (property_declaration): Reference $6 instead
25220         of $$ to get at the location.
25221
25222         (indexer_declaration): Similar stuff.
25223
25224         (attribute): Ditto.
25225
25226         * class.cs (Property): Register parameters for the Get and Set methods
25227         if they exist. Test 23 passes again.
25228
25229         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
25230         call to EmitArguments as we are sure there aren't any params arguments. 
25231         Test 32 passes again.
25232
25233         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
25234         IndexOutOfRangeException. 
25235
25236         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
25237         Test 33 now passes again.
25238
25239 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
25240
25241         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
25242         broke a bunch of things.  Will have to come up with a better way
25243         of tracking locations.
25244
25245         * statement.cs: Implemented foreach for single dimension arrays.
25246
25247 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25248
25249         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
25250         an error.  This removes the lookup from the critical path.
25251
25252         * cs-parser.jay: Removed use of temporary_loc, which is completely
25253         broken. 
25254
25255 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
25256
25257         * support.cs (ReflectionParameters.ParameterModifier): Report
25258         whether the argument is a PARAMS argument or not.
25259
25260         * class.cs: Set the attribute `ParamArrayAttribute' on the
25261         parameter argument.
25262
25263         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
25264         and cons_param_array_attribute (ConstructorInfo for
25265         ParamArrayAttribute)., 
25266
25267         * codegen.cs: Emit the return using the `Return' statement, that
25268         way we can report the error correctly for missing return values. 
25269
25270         * class.cs (Method.Emit): Clean up.
25271
25272         * expression.cs (Argument.Resolve): Take another argument: the
25273         location where this argument is used.  Notice that this is not
25274         part of the "Argument" class as to reduce the size of the
25275         structure (we know the approximate location anyways).
25276
25277         Test if the argument is a variable-reference, if not, then
25278         complain with a 206.
25279
25280         (Argument.Emit): Emit addresses of variables.
25281
25282         (Argument.FullDesc): Simplify.
25283
25284         (Invocation.DoResolve): Update for Argument.Resolve.
25285
25286         (ElementAccess.DoResolve): ditto.
25287
25288         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
25289         method should be virtual, as this method is always virtual.
25290
25291         (NewDelegate.DoResolve): Update for Argument.Resolve.
25292
25293         * class.cs (ConstructorInitializer.DoResolve): ditto.
25294
25295         * attribute.cs (Attribute.Resolve): ditto.
25296
25297 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
25298
25299         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
25300
25301         * expression.cs (ParameterReference): Drop IStackStorage and implement
25302         IAssignMethod instead. 
25303
25304         (LocalVariableReference): ditto.
25305
25306         * ecore.cs (FieldExpr): Drop IStackStorage and implement
25307         IAssignMethod instead. 
25308
25309 2001-11-13  Miguel de Icaza <miguel@ximian.com>
25310
25311         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
25312         enumerations that are used in heavily used structures derive from
25313         byte in a laughable and pathetic attempt to reduce memory usage.
25314         This is the kind of pre-optimzations that you should not do at
25315         home without adult supervision.
25316
25317         * expression.cs (UnaryMutator): New class, used to handle ++ and
25318         -- separatedly from the other unary operators.  Cleans up the
25319         code, and kills the ExpressionStatement dependency in Unary.
25320
25321         (Unary): Removed `method' and `Arguments' from this class, making
25322         it smaller, and moving it all to SimpleCall, so I can reuse this
25323         code in other locations and avoid creating a lot of transient data
25324         strucutres when not required.
25325
25326         * cs-parser.jay: Adjust for new changes.
25327
25328 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
25329
25330         * enum.cs (Enum.Populate): If there is a failure during
25331         definition, return
25332
25333         * cs-parser.jay (opt_enum_base): we used to catch type errors
25334         here, but this is really incorrect.  The type error should be
25335         catched during semantic analysis.
25336
25337 2001-12-11  Ravi Pratap  <ravi@ximian.com>
25338
25339         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
25340         current_local_parameters as expected since I, in my stupidity, had forgotten
25341         to do this :-)
25342
25343         * attribute.cs (GetValidPlaces): Fix stupid bug.
25344
25345         * class.cs (Method::Emit): Perform check on applicability of attributes.
25346
25347         (Constructor::Emit): Ditto.
25348
25349         (Field::Emit): Ditto.
25350
25351         (Field.Location): Store location information.
25352
25353         (Property, Event, Indexer, Operator): Ditto.
25354
25355         * cs-parser.jay (field_declaration): Pass in location for each field.
25356
25357         * ../errors/cs0592.cs : Add.
25358
25359 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25360
25361         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
25362
25363         (InitCoreTypes): Update accordingly.
25364
25365         (RegisterAttrType, LookupAttr): Implement.
25366
25367         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
25368         info about the same.
25369
25370         (Resolve): Update to populate the above as necessary.
25371
25372         (Error592): Helper.
25373
25374         (GetValidPlaces): Helper to the above.
25375
25376         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
25377
25378         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
25379
25380 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25381
25382         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
25383
25384         * ../errors/cs0617.cs : Add.
25385
25386 2001-11-11  Ravi Pratap  <ravi@ximian.com>
25387
25388         * enum.cs (Emit): Rename to Populate to be more consistent with what
25389         we expect it to do and when exactly it is called.
25390
25391         * class.cs, rootcontext.cs : Update accordingly.
25392
25393         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
25394         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
25395
25396         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
25397
25398         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
25399         of a fieldinfo using the above, when dealing with a FieldBuilder.
25400
25401 2001-11-10  Ravi Pratap  <ravi@ximian.com>
25402
25403         * ../errors/cs0031.cs : Add.
25404
25405         * ../errors/cs1008.cs : Add.
25406
25407         * ../errrors/cs0543.cs : Add.
25408
25409         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
25410         enum type.
25411
25412         (FindMembers): Implement.
25413
25414         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
25415         enums and delegates too.
25416
25417         (enum_types): Rename to builder_to_enum.
25418
25419         (delegate_types): Rename to builder_to_delegate.
25420
25421         * delegate.cs (FindMembers): Implement.
25422
25423 2001-11-09  Ravi Pratap  <ravi@ximian.com>
25424
25425         * typemanager.cs (IsEnumType): Implement.
25426
25427         * enum.cs (Emit): Re-write parts to account for the underlying type
25428         better and perform checking etc.
25429
25430         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
25431         of the underlying type.
25432
25433         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
25434         value
25435
25436         * enum.cs (error31): Helper to report error #31.
25437
25438         * cs-parser.jay (enum_declaration): Store location of each member too.
25439
25440         * enum.cs (member_to_location): New hashtable. 
25441
25442         (AddEnumMember): Update location hashtable.
25443
25444         (Emit): Use the location of each member while reporting errors.
25445
25446 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25447
25448         * cs-parser.jay: A for_initializer if is a
25449         local_variable_declaration really ammount to have an implicit
25450         block with the variable declaration and no initializer for for.
25451
25452         * statement.cs (For.Emit): Cope with null initializers.
25453
25454         This fixes the infinite loop on for initializers.
25455
25456 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
25457
25458         * enum.cs: More cleanup.
25459
25460         * ecore.cs: Remove dead code.
25461
25462         * class.cs (Property.Emit): More simplification.
25463         (Event.Emit): ditto.
25464
25465         Reworked to have less levels of indentation.
25466
25467 2001-11-08  Ravi Pratap  <ravi@ximian.com>
25468
25469         * class.cs (Property): Emit attributes.
25470
25471         (Field): Ditto.
25472
25473         (Event): Ditto.
25474
25475         (Indexer): Ditto.
25476
25477         (Operator): Ditto.
25478
25479         * enum.cs (Emit): Ditto.
25480
25481         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
25482         Enums too.
25483
25484         * class.cs (Field, Event, etc.): Move attribute generation into the
25485         Emit method everywhere.
25486
25487         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
25488         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
25489         as we had no way of defining nested enums !
25490
25491         * rootcontext.cs : Adjust code accordingly.
25492
25493         * typemanager.cs (AddEnumType): To keep track of enum types separately.
25494
25495 2001-11-07  Ravi Pratap  <ravi@ximian.com>
25496
25497         * expression.cs (EvalConstantExpression): Move into ecore.cs
25498
25499         * enum.cs (Enum): Rename some members and make them public and readonly
25500         according to our convention.
25501
25502         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
25503         nothing else.
25504
25505         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
25506
25507         (Enum::Emit): Write a simple version for now which doesn't try to compute
25508         expressions. I shall modify this to be more robust in just a while.
25509
25510         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
25511
25512         (TypeContainer::CloseType): Create the Enum types too.
25513
25514         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
25515
25516         * expression.cs (EvalConstantExpression): Get rid of completely.
25517
25518         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
25519         user-defined values and other cases.
25520
25521         (IsValidEnumLiteral): Helper function.
25522
25523         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
25524         out there in the case we had a literal FieldExpr.
25525
25526         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
25527
25528         (Literalize): Revamp a bit to take two arguments.
25529
25530         (EnumLiteral): New class which derives from Literal to wrap enum literals.
25531
25532 2001-11-06  Ravi Pratap  <ravi@ximian.com>
25533
25534         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
25535
25536         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
25537
25538         (Resolve): Use the above to ensure we have proper initializers.
25539
25540 2001-11-05  Ravi Pratap  <ravi@ximian.com>
25541
25542         * expression.cs (Expression::EvalConstantExpression): New method to 
25543         evaluate constant expressions.
25544
25545         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
25546
25547 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
25548
25549         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
25550         in an array.
25551
25552         (Binary.ResolveOperator): Handle operator != (object a, object b)
25553         and operator == (object a, object b);
25554
25555         (Binary.DoNumericPromotions): Indicate whether the numeric
25556         promotion was possible.
25557
25558         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
25559         Implement.  
25560
25561         Made the ArrayAccess implement interface IAssignMethod instead of
25562         IStackStore as the order in which arguments are passed reflects
25563         this.
25564
25565         * assign.cs: Instead of using expr.ExprClass to select the way of
25566         assinging, probe for the IStackStore/IAssignMethod interfaces.
25567
25568         * typemanager.cs: Load InitializeArray definition.
25569
25570         * rootcontext.cs (RootContext.MakeStaticData): Used to define
25571         static data that can be used to initialize arrays. 
25572
25573 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
25574
25575         * expression.cs: Handle operator== and operator!= for booleans.
25576
25577         (Conditioal.Reduce): Implement reducer for the ?: operator.
25578
25579         (Conditional.Resolve): Implement dead code elimination.
25580
25581         (Binary.Resolve): Catch string literals and return a new
25582         concatenated string.
25583
25584         (Unary.Reduce): Implement reduction of unary expressions.
25585
25586         * ecore.cs: Split out the expression core handling here.
25587
25588         (Expression.Reduce): New method used to perform constant folding
25589         and CSE.  This is needed to support constant-expressions. 
25590
25591         * statement.cs (Statement.EmitBoolExpression): Pass true and false
25592         targets, and optimize for !x.
25593
25594 2001-11-04  Ravi Pratap  <ravi@ximian.com>
25595
25596         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
25597         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
25598         set custom atttributes.
25599
25600         * literal.cs (Literal::GetValue): New abstract method to return the actual
25601         value of the literal, cast as an object.
25602
25603         (*Literal): Implement GetValue method.
25604
25605         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
25606         expressions to the arraylist but objects of type Argument.
25607
25608         * class.cs (TypeContainer::Emit): Emit our attributes too.
25609
25610         (Method::Emit, Constructor::Emit): Ditto.
25611
25612         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
25613         to be ignoring earlier.
25614
25615 2001-11-03  Ravi Pratap  <ravi@ximian.com>
25616
25617         * attribute.cs (AttributeSection::Define): Implement to do the business
25618         of constructing a CustomAttributeBuilder.
25619
25620         (Attribute): New trivial class. Increases readability of code.  
25621
25622         * cs-parser.jay : Update accordingly.
25623
25624         (positional_argument_list, named_argument_list, named_argument): New rules
25625
25626         (attribute_arguments): Use the above so that we are more correct.
25627
25628 2001-11-02  Ravi Pratap  <ravi@ximian.com>
25629
25630         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
25631         to perform all checks for a method with a params parameter.
25632
25633         (Invocation::OverloadResolve): Update to use the above method and therefore
25634         cope correctly with params method invocations.
25635
25636         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
25637         params too.
25638
25639         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
25640         constructors in our parent too because we can't afford to miss out on 
25641         protected ones ;-)
25642
25643         * attribute.cs (AttributeSection): New name for the class Attribute
25644
25645         Other trivial changes to improve readability.
25646
25647         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
25648         use the new class names.
25649
25650 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25651
25652         * class.cs (Method::Define): Complete definition for params types too
25653
25654         (Indexer::Define): Ditto.
25655
25656         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
25657         Cope everywhere with a request for info about the array parameter.
25658
25659 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25660
25661         * tree.cs (RecordNamespace): Fix up to check for the correct key.
25662
25663         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
25664         local_variable_type to extract the string corresponding to the type.
25665
25666         (local_variable_type): Fixup the action to use the new helper method.
25667
25668         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
25669         go.
25670
25671         * expression.cs : Clean out code which uses the above.
25672
25673 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25674
25675         * typemanager.cs (RegisterMethod): Check if we already have an existing key
25676         and bale out if necessary by returning a false.
25677
25678         (RegisterProperty): Ditto.
25679
25680         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
25681         and print out appropriate error messages.
25682
25683         * interface.cs (everywhere): Ditto.
25684
25685         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
25686         location to constructor.
25687
25688         * class.cs (Property, Event, Indexer): Update accordingly.
25689
25690         * ../errors/cs111.cs : Added.
25691
25692         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
25693         of a method, as laid down by the spec.
25694
25695         (Invocation::OverloadResolve): Use the above method.
25696
25697 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25698
25699         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
25700         now take a TypeContainer and a Parameters object.
25701
25702         (ParameterData): Modify return type of ParameterModifier method to be 
25703         Parameter.Modifier and not a string.
25704
25705         (ReflectionParameters, InternalParameters): Update accordingly.
25706
25707         * expression.cs (Argument::GetParameterModifier): Same here.
25708
25709         * support.cs (InternalParameters::ParameterType): Find a better way of determining
25710         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
25711         symbol in it at all so maybe this is only for now.
25712
25713 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25714
25715         * support.cs (InternalParameters): Constructor now takes an extra argument 
25716         which is the actual Parameters class.
25717
25718         (ParameterDesc): Update to provide info on ref/out modifiers.
25719
25720         * class.cs (everywhere): Update call to InternalParameters to pass in
25721         the second argument too.
25722
25723         * support.cs (ParameterData): Add ParameterModifier, which is a method 
25724         to return the modifier info [ref/out etc]
25725
25726         (InternalParameters, ReflectionParameters): Implement the above.
25727
25728         * expression.cs (Argument::ParameterModifier): Similar function to return
25729         info about the argument's modifiers.
25730
25731         (Invocation::OverloadResolve): Update to take into account matching modifiers 
25732         too.
25733
25734         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
25735         a new SetFormalParameters object which we pass to InternalParameters.
25736
25737 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25738
25739         * expression.cs (NewArray): Merge into the ArrayCreation class.
25740
25741 2001-10-29  Ravi Pratap  <ravi@ximian.com>
25742
25743         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
25744         NewUserdefinedArray into one as there wasn't much of a use in having
25745         two separate ones.
25746
25747         * expression.cs (Argument): Change field's name to ArgType from Type.
25748
25749         (Type): New readonly property which returns the proper type, taking into 
25750         account ref/out modifiers.
25751
25752         (everywhere): Adjust code accordingly for the above.
25753
25754         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
25755         whether we are emitting for a ref or out parameter.
25756
25757         * expression.cs (Argument::Emit): Use the above field to set the state.
25758
25759         (LocalVariableReference::Emit): Update to honour the flag and emit the
25760         right stuff.
25761
25762         * parameter.cs (Attributes): Set the correct flags for ref parameters.
25763
25764         * expression.cs (Argument::FullDesc): New function to provide a full desc.
25765
25766         * support.cs (ParameterData): Add method ParameterDesc to the interface.
25767
25768         (ReflectionParameters, InternalParameters): Implement the above method.
25769
25770         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
25771         reporting errors.
25772
25773         (Invocation::FullMethodDesc): Ditto. 
25774
25775 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
25776
25777         * cs-parser.jay: Add extra production for the second form of array
25778         creation. 
25779
25780         * expression.cs (ArrayCreation): Update to reflect the above
25781         change. 
25782
25783         * Small changes to prepare for Array initialization.
25784
25785 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
25786
25787         * typemanager.cs (ImplementsInterface): interface might be null;
25788         Deal with this problem;
25789
25790         Also, we do store negative hits on the cache (null values), so use
25791         this instead of calling t.GetInterfaces on the type everytime.
25792
25793 2001-10-28  Ravi Pratap  <ravi@ximian.com>
25794
25795         * typemanager.cs (IsBuiltinType): New method to help determine the same.
25796
25797         * expression.cs (New::DoResolve): Get rid of array creation code and instead
25798         split functionality out into different classes.
25799
25800         (New::FormArrayType): Move into NewBuiltinArray.
25801
25802         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
25803         quite useless.
25804
25805         (NewBuiltinArray): New class to handle creation of built-in arrays.
25806
25807         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
25808         account creation of one-dimensional arrays.
25809
25810         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
25811
25812         (NewUserdefinedArray::DoResolve): Implement.
25813
25814         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
25815
25816         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
25817         we maintain inside the TypeManager. This is necessary to perform lookups on the
25818         module builder.
25819
25820         (LookupType): Update to perform GetType on the module builders too.     
25821
25822         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
25823
25824         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
25825
25826 2001-10-23  Ravi Pratap  <ravi@ximian.com>
25827
25828         * expression.cs (New::DoResolve): Implement guts of array creation.
25829
25830         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
25831
25832 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
25833
25834         * expression.cs: Fix bug I introduced lsat night that broke
25835         Delegates. 
25836
25837         (Expression.Resolve): Report a 246 error (can not resolve name)
25838         if we find a SimpleName in the stream.
25839
25840         (Expression.ResolveLValue): Ditto.
25841
25842         (Expression.ResolveWithSimpleName): This function is a variant of
25843         ResolveName, this one allows SimpleNames to be returned without a
25844         warning.  The only consumer of SimpleNames is MemberAccess
25845
25846 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
25847
25848         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
25849         might arrive here.  I have my doubts that this is correct.
25850
25851         * statement.cs (Lock): Implement lock statement.
25852
25853         * cs-parser.jay: Small fixes to support `lock' and `using'
25854
25855         * cs-tokenizer.cs: Remove extra space
25856
25857         * driver.cs: New flag --checked, allows to turn on integer math
25858         checking. 
25859
25860         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
25861         Threading.Monitor.Exit 
25862
25863 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
25864
25865         * expression.cs (IndexerAccess::DoResolveLValue): Set the
25866         Expression Class to be IndexerAccess.
25867
25868         Notice that Indexer::DoResolve sets the eclass to Value.
25869
25870 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
25871
25872         * class.cs (TypeContainer::Emit): Emit code for indexers.
25873
25874         * assign.cs (IAssignMethod): New interface implemented by Indexers
25875         and Properties for handling assignment.
25876
25877         (Assign::Emit): Simplify and reuse code. 
25878
25879         * expression.cs (IndexerAccess, PropertyExpr): Implement
25880         IAssignMethod, clean up old code. 
25881
25882 2001-10-22  Ravi Pratap  <ravi@ximian.com>
25883
25884         * typemanager.cs (ImplementsInterface): New method to determine if a type
25885         implements a given interface. Provides a nice cache too.
25886
25887         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
25888         method.
25889
25890         (ConvertReferenceExplicit): Ditto.
25891
25892         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
25893         various methods, with correct names etc.
25894
25895         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
25896         Operator.UnaryNegation.
25897
25898         * cs-parser.jay (operator_declarator): Be a little clever in the case where
25899         we have a unary plus or minus operator.
25900
25901         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
25902         UnaryMinus.
25903
25904         * everywhere : update accordingly.
25905
25906         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
25907         respectively.
25908
25909         * class.cs (Method::Define): For the case where we are implementing a method
25910         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
25911         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
25912
25913 2001-10-21  Ravi Pratap  <ravi@ximian.com>
25914
25915         * interface.cs (FindMembers): Implement to work around S.R.E
25916         lameness.
25917
25918         * typemanager.cs (IsInterfaceType): Implement.
25919
25920         (FindMembers): Update to handle interface types too.
25921
25922         * expression.cs (ImplicitReferenceConversion): Re-write bits which
25923         use IsAssignableFrom as that is not correct - it doesn't work.
25924
25925         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
25926         and accordingly override EmitStatement.
25927
25928         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
25929         using the correct logic :-)
25930
25931 2001-10-19  Ravi Pratap  <ravi@ximian.com>
25932
25933         * ../errors/cs-11.cs : Add to demonstrate error -11 
25934
25935 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
25936
25937         * assign.cs (Assign::Resolve): Resolve right hand side first, and
25938         then pass this as a hint to ResolveLValue.
25939
25940         * expression.cs (FieldExpr): Add Location information
25941
25942         (FieldExpr::LValueResolve): Report assignment to readonly
25943         variable. 
25944
25945         (Expression::ExprClassFromMemberInfo): Pass location information.
25946
25947         (Expression::ResolveLValue): Add new method that resolves an
25948         LValue. 
25949
25950         (Expression::DoResolveLValue): Default invocation calls
25951         DoResolve. 
25952
25953         (Indexers): New class used to keep track of indexers in a given
25954         Type. 
25955
25956         (IStackStore): Renamed from LValue, as it did not really describe
25957         what this did.  Also ResolveLValue is gone from this interface and
25958         now is part of Expression.
25959
25960         (ElementAccess): Depending on the element access type
25961
25962         * typemanager.cs: Add `indexer_name_type' as a Core type
25963         (System.Runtime.CompilerServices.IndexerNameAttribute)
25964
25965         * statement.cs (Goto): Take a location.
25966
25967 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25968
25969         * delegate.cs (Delegate::VerifyDelegate): New method to verify
25970         if two delegates are compatible.
25971
25972         (NewDelegate::DoResolve): Update to take care of the case when
25973         we instantiate a delegate from another delegate.
25974
25975         * typemanager.cs (FindMembers): Don't even try to look up members
25976         of Delegate types for now.
25977
25978 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25979
25980         * delegate.cs (NewDelegate): New class to take care of delegate
25981         instantiation.
25982
25983         * expression.cs (New): Split the delegate related code out into 
25984         the NewDelegate class.
25985
25986         * delegate.cs (DelegateInvocation): New class to handle delegate 
25987         invocation.
25988
25989         * expression.cs (Invocation): Split out delegate related code into
25990         the DelegateInvocation class.
25991
25992 2001-10-17  Ravi Pratap  <ravi@ximian.com>
25993
25994         * expression.cs (New::DoResolve): Implement delegate creation fully
25995         and according to the spec.
25996
25997         (New::DoEmit): Update to handle delegates differently.
25998
25999         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
26000         because of which we were printing out arguments in reverse order !
26001
26002         * delegate.cs (VerifyMethod): Implement to check if the given method
26003         matches the delegate.
26004
26005         (FullDelegateDesc): Implement.
26006
26007         (VerifyApplicability): Implement.
26008
26009         * expression.cs (Invocation::DoResolve): Update to accordingly handle
26010         delegate invocations too.
26011
26012         (Invocation::Emit): Ditto.
26013
26014         * ../errors/cs1593.cs : Added.
26015
26016         * ../errors/cs1594.cs : Added.
26017
26018         * delegate.cs (InstanceExpression, TargetMethod): New properties.
26019
26020 2001-10-16  Ravi Pratap  <ravi@ximian.com>
26021
26022         * typemanager.cs (intptr_type): Core type for System.IntPtr
26023
26024         (InitCoreTypes): Update for the same.
26025
26026         (iasyncresult_type, asynccallback_type): Ditto.
26027
26028         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
26029         correct.
26030
26031         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
26032         too.
26033
26034         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
26035         the builders for the 4 members of a delegate type :-)
26036
26037         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
26038         type.
26039
26040         * expression.cs (New::DoResolve): Implement guts for delegate creation.
26041
26042         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
26043
26044 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
26045
26046         * statement.cs (Break::Emit): Implement.   
26047         (Continue::Emit): Implement.
26048
26049         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26050         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26051         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26052         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
26053         end loop
26054
26055         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
26056         properties that track the label for the current loop (begin of the
26057         loop and end of the loop).
26058
26059 2001-10-15  Ravi Pratap  <ravi@ximian.com>
26060
26061         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
26062         use of emitting anything at all.
26063
26064         * class.cs, rootcontext.cs : Get rid of calls to the same.
26065
26066         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
26067
26068         (Populate): Define the constructor correctly and set the implementation
26069         attributes.
26070
26071         * typemanager.cs (delegate_types): New hashtable to hold delegates that
26072         have been defined.
26073
26074         (AddDelegateType): Implement.
26075
26076         (IsDelegateType): Implement helper method.
26077
26078         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
26079
26080         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
26081         and accordingly handle it.
26082
26083         * delegate.cs (Populate): Take TypeContainer argument.
26084         Implement bits to define the Invoke method. However, I still haven't figured out
26085         how to take care of the native int bit :-(
26086
26087         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
26088         Qualify the name of the delegate, not its return type !
26089
26090         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
26091         conversion.
26092
26093         (StandardConversionExists): Checking for array types turns out to be recursive.
26094
26095         (ConvertReferenceExplicit): Implement array conversion.
26096
26097         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
26098
26099 2001-10-12  Ravi Pratap  <ravi@ximian.com>
26100
26101         * cs-parser.jay (delegate_declaration): Store the fully qualified
26102         name as it is a type declaration.
26103
26104         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
26105         readonly.
26106
26107         (DefineDelegate): Renamed from Define. Does the same thing essentially,
26108         as TypeContainer::DefineType.
26109
26110         (Populate): Method in which all the definition of the various methods (Invoke)
26111         etc is done.
26112
26113         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
26114         see.
26115
26116         (CloseDelegate): Finally creates the delegate.
26117
26118         * class.cs (TypeContainer::DefineType): Update to define delegates.
26119         (Populate, Emit and CloseType): Do the same thing here too.
26120
26121         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
26122         delegates in all these operations.
26123
26124 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
26125
26126         * expression.cs: LocalTemporary: a new expression used to
26127         reference a temporary that has been created.
26128
26129         * assign.cs: Handle PropertyAccess back here, so that we can
26130         provide the proper semantic access to properties.
26131
26132         * expression.cs (Expression::ConvertReferenceExplicit): Implement
26133         a few more explicit conversions. 
26134
26135         * modifiers.cs: `NEW' modifier maps to HideBySig.
26136
26137         * expression.cs (PropertyExpr): Make this into an
26138         ExpressionStatement, and support the EmitStatement code path. 
26139
26140         Perform get/set error checking, clean up the interface.
26141
26142         * assign.cs: recognize PropertyExprs as targets, and if so, turn
26143         them into toplevel access objects.
26144
26145 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
26146
26147         * expression.cs: PropertyExpr::PropertyExpr: use work around the
26148         SRE.
26149
26150         * typemanager.cs: Keep track here of our PropertyBuilders again to
26151         work around lameness in SRE.
26152
26153 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
26154
26155         * expression.cs (LValue::LValueResolve): New method in the
26156         interface, used to perform a second resolution pass for LValues. 
26157
26158         (This::DoResolve): Catch the use of this in static methods.
26159
26160         (This::LValueResolve): Implement.
26161
26162         (This::Store): Remove warning, assigning to `this' in structures
26163         is 
26164
26165         (Invocation::Emit): Deal with invocation of
26166         methods on value types.  We need to pass the address to structure
26167         methods rather than the object itself.  (The equivalent code to
26168         emit "this" for structures leaves the entire structure on the
26169         stack instead of a pointer to it). 
26170
26171         (ParameterReference::DoResolve): Compute the real index for the
26172         argument based on whether the method takes or not a `this' pointer
26173         (ie, the method is static).
26174
26175         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
26176         value types returned from functions when we need to invoke a
26177         method on the sturcture.
26178
26179
26180 2001-10-11  Ravi Pratap  <ravi@ximian.com>
26181
26182         * class.cs (TypeContainer::DefineType): Method to actually do the business of
26183         defining the type in the Modulebuilder or Typebuilder. This is to take
26184         care of nested types which need to be defined on the TypeBuilder using
26185         DefineNestedMethod.
26186
26187         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
26188         methods in RootContext, only ported to be part of TypeContainer.
26189
26190         (TypeContainer::GetInterfaceOrClass): Ditto.
26191
26192         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
26193
26194         * interface.cs (Interface::DefineInterface): New method. Does exactly
26195         what RootContext.CreateInterface did earlier, only it takes care of nested types 
26196         too.
26197
26198         (Interface::GetInterfaces): Move from RootContext here and port.
26199
26200         (Interface::GetInterfaceByName): Same here.
26201
26202         * rootcontext.cs (ResolveTree): Re-write.
26203
26204         (PopulateTypes): Re-write.
26205
26206         * class.cs (TypeContainer::Populate): Populate nested types too.
26207         (TypeContainer::Emit): Emit nested members too.
26208
26209         * typemanager.cs (AddUserType): Do not make use of the FullName property,
26210         instead just use the name argument passed in as it is already fully
26211         qualified.
26212
26213         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
26214         to TypeContainer mapping to see if a type is user-defined.
26215
26216         * class.cs (TypeContainer::CloseType): Implement. 
26217
26218         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
26219         the default constructor.
26220
26221         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
26222         twice.
26223
26224         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
26225
26226         * interface.cs (CloseType): Create the type here.
26227
26228         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
26229         the hierarchy.
26230
26231         Remove all the methods which are now in TypeContainer.
26232
26233 2001-10-10  Ravi Pratap  <ravi@ximian.com>
26234
26235         * delegate.cs (Define): Re-write bits to define the delegate
26236         correctly.
26237
26238 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
26239
26240         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
26241
26242         * expression.cs (ImplicitReferenceConversion): handle null as well
26243         as a source to convert to any reference type.
26244
26245         * statement.cs (Return): Perform any implicit conversions to
26246         expected return type.  
26247
26248         Validate use of return statement.  
26249
26250         * codegen.cs (EmitContext): Pass the expected return type here.
26251
26252         * class.cs (Method, Constructor, Property): Pass expected return
26253         type to EmitContext.
26254
26255 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
26256
26257         * expression.cs: Make DoResolve take an EmitContext instead of a
26258         TypeContainer.
26259
26260         Replaced `l' and `location' for `loc', for consistency.
26261
26262         (Error, Warning): Remove unneeded Tc argument.
26263
26264         * assign.cs, literal.cs, constant.cs: Update to new calling
26265         convention. 
26266
26267         * codegen.cs: EmitContext now contains a flag indicating whether
26268         code is being generated in a static method or not.
26269
26270         * cs-parser.jay: DecomposeQI, new function that replaces the old
26271         QualifiedIdentifier.  Now we always decompose the assembled
26272         strings from qualified_identifier productions into a group of
26273         memberaccesses.
26274
26275 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
26276
26277         * rootcontext.cs: Deal with field-less struct types correctly now
26278         by passing the size option to Define Type.
26279
26280         * class.cs: Removed hack that created one static field. 
26281
26282 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26283
26284         * statement.cs: Moved most of the code generation here. 
26285
26286 2001-10-09  Ravi Pratap  <ravi@ximian.com>
26287
26288         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
26289         seem very right.
26290
26291         (ElementAccess): Remove useless bits for now - keep checks as the spec
26292         says.
26293
26294 2001-10-08  Ravi Pratap  <ravi@ximian.com>
26295
26296         * expression.cs (ElementAccess::DoResolve): Remove my crap code
26297         and start performing checks according to the spec.
26298
26299 2001-10-07  Ravi Pratap  <ravi@ximian.com>
26300
26301         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
26302         rank_specifiers instead.
26303
26304         (rank_specifiers): Change the order in which the rank specifiers are stored
26305
26306         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
26307
26308         * expression.cs (ElementAccess): Implement the LValue interface too.
26309
26310 2001-10-06  Ravi Pratap  <ravi@ximian.com>
26311
26312         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
26313         except that user defined conversions are not included.
26314
26315         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
26316         perform the conversion of the return type, if necessary.
26317
26318         (New::DoResolve): Check whether we are creating an array or an object
26319         and accordingly do the needful.
26320
26321         (New::Emit): Same here.
26322
26323         (New::DoResolve): Implement guts of array creation.
26324
26325         (New::FormLookupType): Helper function.
26326
26327 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26328
26329         * codegen.cs: Removed most of the code generation here, and move the
26330         corresponding code generation bits to the statement classes. 
26331
26332         Added support for try/catch/finalize and throw.
26333
26334         * cs-parser.jay: Added support for try/catch/finalize.
26335
26336         * class.cs: Catch static methods having the flags override,
26337         virtual or abstract.
26338
26339         * expression.cs (UserCast): This user cast was not really doing
26340         what it was supposed to do.  Which is to be born in fully resolved
26341         state.  Parts of the resolution were being performed at Emit time! 
26342
26343         Fixed this code.
26344
26345 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26346
26347         * expression.cs: Implicity convert the result from UserCast.
26348
26349 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26350
26351         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
26352         prevented it from working correctly. 
26353
26354         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
26355         merely ConvertImplicit.
26356
26357 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26358
26359         * typemanager.cs: Make the LookupTypeContainer function static,
26360         and not per-instance.  
26361
26362         * class.cs: Make static FindMembers (the one that takes a Type
26363         argument). 
26364
26365         * codegen.cs: Add EmitForeach here.
26366
26367         * cs-parser.jay: Make foreach a toplevel object instead of the
26368         inline expansion, as we need to perform semantic analysis on it. 
26369
26370 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26371
26372         * expression.cs (Expression::ImplicitUserConversion): Rename to
26373         UserDefinedConversion.
26374
26375         (Expression::UserDefinedConversion): Take an extra argument specifying 
26376         whether we look for explicit user conversions too.
26377
26378         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
26379
26380         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
26381
26382         (ExplicitUserConversion): Make it a call to UserDefinedConversion
26383         with the appropriate arguments.
26384
26385         * cs-parser.jay (cast_expression): Record location too.
26386
26387         * expression.cs (Cast): Record location info.
26388
26389         (Expression::ConvertExplicit): Take location argument.
26390
26391         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
26392         to determine if we are doing explicit conversions.
26393
26394         (UserCast::Emit): Update accordingly.
26395
26396         (Expression::ConvertExplicit): Report an error if everything fails.
26397
26398         * ../errors/cs0030.cs : Add.
26399
26400 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
26401
26402         * modifiers.cs: If the ABSTRACT keyword is present, also set the
26403         virtual and newslot bits. 
26404
26405         * class.cs (TypeContainer::RegisterRequiredImplementations):
26406         Record methods we need.
26407
26408         (TypeContainer::MakeKey): Helper function to make keys for
26409         MethodBases, since the Methodbase key is useless.
26410
26411         (TypeContainer::Populate): Call RegisterRequiredImplementations
26412         before defining the methods.   
26413
26414         Create a mapping for method_builders_to_methods ahead of time
26415         instead of inside a tight loop.
26416
26417         (::RequireMethods):  Accept an object as the data to set into the
26418         hashtable so we can report interface vs abstract method mismatch.
26419
26420 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26421
26422         * report.cs: Make all of it static.
26423
26424         * rootcontext.cs: Drop object_type and value_type computations, as
26425         we have those in the TypeManager anyways.
26426
26427         Drop report instance variable too, now it is a global.
26428
26429         * driver.cs: Use try/catch on command line handling.
26430
26431         Add --probe option to debug the error reporting system with a test
26432         suite. 
26433
26434         * report.cs: Add support for exiting program when a probe
26435         condition is reached.
26436
26437 2001-10-03  Ravi Pratap  <ravi@ximian.com>
26438
26439         * expression.cs (Binary::DoNumericPromotions): Fix the case when
26440         we do a forcible conversion regardless of type, to check if 
26441         ForceConversion returns a null.
26442
26443         (Binary::error19): Use location to report error.
26444
26445         (Unary::error23): Use location here too.
26446
26447         * ../errors/cs0019.cs : Check in.
26448
26449         * ../errors/cs0023.cs : Check in.
26450
26451         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
26452         case of a non-null MethodInfo object with a length of 0 !
26453
26454         (Binary::ResolveOperator): Flag error if overload resolution fails to find
26455         an applicable member - according to the spec :-)
26456         Also fix logic to find members in base types.
26457
26458         (Unary::ResolveOperator): Same here.
26459
26460         (Unary::report23): Change name to error23 and make first argument a TypeContainer
26461         as I was getting thoroughly confused between this and error19 :-)
26462
26463         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
26464         (::FindMostEncompassedType): Implement.
26465         (::FindMostEncompassingType): Implement.
26466         (::StandardConversionExists): Implement.
26467
26468         (UserImplicitCast): Re-vamp. We now need info about most specific
26469         source and target types so that we can do the necessary conversions.
26470
26471         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
26472         mathematical union with no duplicates.
26473
26474 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26475
26476         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
26477         in order from base classes to child classes, so that we can in
26478         child classes look up in our parent for method names and
26479         attributes (required for handling abstract, virtual, new, override
26480         constructs: we need to instrospect our base class, and if we dont
26481         populate the classes in order, the introspection might be
26482         incorrect.  For example, a method could query its parent before
26483         the parent has any methods and would determine that the parent has
26484         no abstract methods (while it could have had them)).
26485
26486         (RootContext::CreateType): Record the order in which we define the
26487         classes.
26488
26489 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
26490
26491         * class.cs (TypeContainer::Populate): Also method definitions can
26492         fail now, keep track of this.
26493
26494         (TypeContainer::FindMembers): Implement support for
26495         DeclaredOnly/noDeclaredOnly flag.
26496
26497         (Constructor::Emit) Return the ConstructorBuilder.
26498
26499         (Method::Emit) Return the MethodBuilder. 
26500         Check for abstract or virtual methods to be public.
26501
26502         * rootcontext.cs (RootContext::CreateType): Register all the
26503         abstract methods required for the class to be complete and the
26504         interface methods that must be implemented. 
26505
26506         * cs-parser.jay: Report error 501 (method requires body if it is
26507         not marked abstract or extern).
26508
26509         * expression.cs (TypeOf::Emit): Implement.
26510
26511         * typemanager.cs: runtime_handle_type, new global type.
26512
26513         * class.cs (Property::Emit): Generate code for properties.
26514
26515 2001-10-02  Ravi Pratap  <ravi@ximian.com>
26516
26517         * expression.cs (Unary::ResolveOperator): Find operators on base type
26518         too - we now conform exactly to the spec.
26519
26520         (Binary::ResolveOperator): Same here.
26521
26522         * class.cs (Operator::Define): Fix minor quirk in the tests.
26523
26524         * ../errors/cs0215.cs : Added.
26525
26526         * ../errors/cs0556.cs : Added.
26527
26528         * ../errors/cs0555.cs : Added.
26529
26530 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26531
26532         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
26533         single integer which is really efficient
26534
26535 2001-10-01  Ravi Pratap  <ravi@ximian.com>
26536
26537         *  expression.cs (Expression::ImplicitUserConversion): Use location
26538         even in the case when we are examining True operators.
26539  
26540         * class.cs (Operator::Define): Perform extensive checks to conform
26541         with the rules for operator overloading in the spec.
26542
26543         * expression.cs (Expression::ImplicitReferenceConversion): Implement
26544         some of the other conversions mentioned in the spec.
26545
26546         * typemanager.cs (array_type): New static member for the System.Array built-in
26547         type.
26548
26549         (cloneable_interface): For System.ICloneable interface.
26550
26551         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
26552         we start resolving the tree and populating types.
26553
26554         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
26555  
26556 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26557
26558         * expression.cs (Expression::ExprClassFromMemberInfo,
26559         Expression::Literalize): Create literal expressions from
26560         FieldInfos which are literals.
26561
26562         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
26563         type casts, because they were wrong.  The test suite in tests
26564         caught these ones.
26565
26566         (ImplicitNumericConversion): ushort to ulong requires a widening
26567         cast. 
26568
26569         Int32 constant to long requires widening cast as well.
26570
26571         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
26572         for integers because the type on the stack is not i4.
26573
26574 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
26575
26576         * expression.cs (report118): require location argument. 
26577
26578         * parameter.cs: Do not dereference potential null value.
26579
26580         * class.cs: Catch methods that lack the `new' keyword when
26581         overriding a name.  Report warnings when `new' is used without
26582         anything being there to override.
26583
26584         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
26585
26586         * class.cs: Only add constructor to hashtable if it is non-null
26587         (as now constructors can fail on define).
26588
26589         (TypeManager, Class, Struct): Take location arguments.
26590
26591         Catch field instance initialization in structs as errors.
26592
26593         accepting_filter: a new filter for FindMembers that is static so
26594         that we dont create an instance per invocation.
26595
26596         (Constructor::Define): Catch errors where a struct constructor is
26597         parameterless 
26598
26599         * cs-parser.jay: Pass location information for various new
26600         constructs. 
26601
26602         * delegate.cs (Delegate): take a location argument.
26603
26604         * driver.cs: Do not call EmitCode if there were problesm in the
26605         Definition of the types, as many Builders wont be there. 
26606
26607         * decl.cs (Decl::Decl): Require a location argument.
26608
26609         * cs-tokenizer.cs: Handle properly hex constants that can not fit
26610         into integers, and find the most appropiate integer for it.
26611
26612         * literal.cs: Implement ULongLiteral.
26613
26614         * rootcontext.cs: Provide better information about the location of
26615         failure when CreateType fails.
26616
26617 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
26618
26619         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
26620         as well.
26621
26622         * expression.cs (Binary::CheckShiftArguments): Add missing type
26623         computation.
26624         (Binary::ResolveOperator): Add type to the logical and and logical
26625         or, Bitwise And/Or and Exclusive Or code paths, it was missing
26626         before.
26627
26628         (Binary::DoNumericPromotions): In the case where either argument
26629         is ulong (and most signed types combined with ulong cause an
26630         error) perform implicit integer constant conversions as well.
26631
26632 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26633
26634         * expression.cs (UserImplicitCast): Method should always be
26635         non-null. 
26636         (Invocation::BetterConversion): Simplified test for IntLiteral.
26637
26638         (Expression::ImplicitNumericConversion): Split this routine out.
26639         Put the code that performs implicit constant integer conversions
26640         here. 
26641
26642         (Expression::Resolve): Become a wrapper around DoResolve so we can
26643         check eclass and type being set after resolve.
26644
26645         (Invocation::Badness): Remove this dead function
26646
26647         (Binary::ResolveOperator): Do not compute the expensive argumnets
26648         unless we have a union for it.
26649
26650         (Probe::Emit): Is needs to do an isinst and then
26651         compare against null.
26652
26653         (::CanConvert): Added Location argument.  If the Location argument
26654         is null (Location.Null), then we do not report errors.  This is
26655         used by the `probe' mechanism of the Explicit conversion.  We do
26656         not want to generate an error for something that the user
26657         explicitly requested to be casted.  But the pipeline for an
26658         explicit cast first tests for potential implicit casts.
26659
26660         So for now, if the Location is null, it means `Probe only' to
26661         avoid adding another argument.   Might have to revise this
26662         strategy later.
26663
26664         (ClassCast): New class used to type cast objects into arbitrary
26665         classes (used in Explicit Reference Conversions).
26666
26667         Implement `as' as well.
26668
26669         Reverted all the patches from Ravi below: they were broken:
26670
26671                 * The use of `level' as a mechanism to stop recursive
26672                   invocations is wrong.  That was there just to catch the
26673                   bug with a strack trace but not as a way of addressing
26674                   the problem.
26675
26676                   To fix the problem we have to *understand* what is going
26677                   on and the interactions and come up with a plan, not
26678                   just get things going.
26679
26680                 * The use of the type conversion cache that I proposed
26681                   last night had an open topic: How does this work across
26682                   protection domains.  A user defined conversion might not
26683                   be public in the location where we are applying the
26684                   conversion, a different conversion might be selected
26685                   (ie, private A->B (better) but public B->A (worse),
26686                   inside A, A->B applies, but outside it, B->A will
26687                   apply).
26688
26689                 * On top of that (ie, even if the above is solved),
26690                   conversions in a cache need to be abstract.  Ie, `To
26691                   convert from an Int to a Short use an OpcodeCast', not
26692                   `To convert from an Int to a Short use the OpcodeCast on
26693                   the variable 5' (which is what this patch was doing).
26694
26695 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26696
26697         * expression.cs (Invocation::ConversionExists): Re-write to use
26698         the conversion cache
26699
26700         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
26701         cache all conversions done, not just user-defined ones.
26702
26703         (Invocation::BetterConversion): The real culprit. Use ConversionExists
26704         to determine if a conversion exists instead of acutually trying to 
26705         perform the conversion. It's faster too.
26706
26707         (Expression::ConvertExplicit): Modify to use ConversionExists to check
26708         and only then attempt the implicit conversion.
26709
26710 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26711
26712         * expression.cs (ConvertImplicit): Use a cache for conversions
26713         already found. Check level of recursion and bail out if necessary.
26714
26715 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26716
26717         * typemanager.cs (string_concat_string_string, string_concat_object_object):
26718         Export standard methods that we expect for string operations.
26719
26720         * statement.cs (Block::UsageWarning): Track usage of variables and
26721         report the errors for not used variables.
26722
26723         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
26724         operator. 
26725
26726 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26727
26728         * codegen.cs: remove unnneded code 
26729
26730         * expression.cs: Removed BuiltinTypeAccess class
26731
26732         Fix the order in which implicit conversions are
26733         done.  
26734
26735         The previous fixed dropped support for boxed conversions (adding a
26736         test to the test suite now)
26737
26738         (UserImplicitCast::CanConvert): Remove test for source being null,
26739         that code is broken.  We should not feed a null to begin with, if
26740         we do, then we should track the bug where the problem originates
26741         and not try to cover it up here.
26742
26743         Return a resolved expression of type UserImplicitCast on success
26744         rather than true/false.  Ravi: this is what I was talking about,
26745         the pattern is to use a static method as a "constructor" for
26746         objects. 
26747
26748         Also, do not create arguments until the very last minute,
26749         otherwise we always create the arguments even for lookups that
26750         will never be performed. 
26751
26752         (UserImplicitCast::Resolve): Eliminate, objects of type
26753         UserImplicitCast are born in a fully resolved state. 
26754
26755         * typemanager.cs (InitCoreTypes): Init also value_type
26756         (System.ValueType). 
26757
26758         * expression.cs (Cast::Resolve): First resolve the child expression.
26759
26760         (LValue): Add new method AddressOf to be used by
26761         the `&' operator.  
26762
26763         Change the argument of Store to take an EmitContext instead of an
26764         ILGenerator, because things like FieldExpr need to be able to call
26765         their children expression to generate the instance code. 
26766
26767         (Expression::Error, Expression::Warning): Sugar functions for
26768         reporting errors.
26769
26770         (Expression::MemberLookup): Accept a TypeContainer instead of a
26771         Report as the first argument.
26772
26773         (Expression::ResolvePrimary): Killed.  I still want to improve
26774         this as currently the code is just not right.
26775
26776         (Expression::ResolveMemberAccess): Simplify, but it is still
26777         wrong. 
26778
26779         (Unary::Resolve): Catch errors in AddressOf operators.
26780
26781         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
26782         index to a byte for the short-version, or the compiler will choose
26783         the wrong Emit call, which generates the wrong data.
26784
26785         (ParameterReference::Emit, ::Store): same.
26786
26787         (FieldExpr::AddressOf): Implement.
26788
26789         * typemanager.cs: TypeManager: made public variable instead of
26790         property.
26791
26792         * driver.cs: document --fatal.
26793
26794         * report.cs (ErrorMessage, WarningMessage): new names for the old
26795         Error and Warning classes.
26796
26797         * cs-parser.jay (member_access): Turn built-in access to types
26798         into a normal simplename
26799
26800 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26801
26802         * expression.cs (Invocation::BetterConversion): Fix to cope
26803         with q being null, since this was introducing a bug.
26804
26805         * expression.cs (ConvertImplicit): Do built-in conversions first.
26806
26807 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26808
26809         * expression.cs (UserImplicitCast::Resolve): Fix bug.
26810
26811 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26812
26813         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
26814         I had introduced long ago (what's new ?).
26815
26816         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
26817         the work of all the checking. 
26818         (ConvertImplicit): Call CanConvert and only then create object if necessary.
26819         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
26820
26821         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
26822         that is the right way. 
26823
26824         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
26825         overloading resolution. Use everywhere instead of cutting and pasting code.
26826
26827         (Binary::ResolveOperator): Use MakeUnionSet.
26828
26829         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
26830         we have to convert to bool types. Not complete yet.
26831
26832 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26833
26834         * typemanager.cs (TypeManager::CSharpName): support ushort.
26835
26836         * expression.cs (Expression::TryImplicitIntConversion): Attempts
26837         to provide an expression that performsn an implicit constant int
26838         conversion (section 6.1.6).
26839         (Expression::ConvertImplicitRequired): Reworked to include
26840         implicit constant expression conversions.
26841
26842         (Expression::ConvertNumericExplicit): Finished.
26843
26844         (Invocation::Emit): If InstanceExpression is null, then it means
26845         that we perform a call on this.
26846
26847 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26848
26849         * expression.cs (Unary::Emit): Remove some dead code.
26850         (Probe): Implement Resolve and Emit for `is'.
26851         (Expression::ConvertImplicitRequired): Attempt to do constant
26852         expression conversions here.  Maybe should be moved to
26853         ConvertImplicit, but I am not sure.
26854         (Expression::ImplicitLongConstantConversionPossible,
26855         Expression::ImplicitIntConstantConversionPossible): New functions
26856         that tell whether is it possible to apply an implicit constant
26857         expression conversion.
26858
26859         (ConvertNumericExplicit): Started work on explicit numeric
26860         conversions.
26861
26862         * cs-parser.jay: Update operator constants.
26863
26864         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
26865         (Parameters::GetSignature): Hook up VerifyArgs here.
26866         (Parameters::VerifyArgs): Verifies that no two arguments have the
26867         same name. 
26868
26869         * class.cs (Operator): Update the operator names to reflect the
26870         ones that the spec expects (as we are just stringizing the
26871         operator names).
26872
26873         * expression.cs (Unary::ResolveOperator): Fix bug: Use
26874         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
26875         previous usage did only work for our methods.
26876         (Expression::ConvertImplicit): Handle decimal implicit numeric
26877         conversions as well.
26878         (Expression::InternalTypeConstructor): Used to invoke constructors
26879         on internal types for default promotions.
26880
26881         (Unary::Emit): Implement special handling for the pre/post
26882         increment/decrement for overloaded operators, as they need to have
26883         the same semantics as the other operators.
26884
26885         (Binary::ResolveOperator): ditto.
26886         (Invocation::ConversionExists): ditto.
26887         (UserImplicitCast::Resolve): ditto.
26888
26889 2001-09-26  Ravi Pratap  <ravi@ximian.com>
26890
26891         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
26892         operator, return after emitting body. Regression tests pass again !
26893
26894         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
26895         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
26896         (Invocation::OverloadResolve): Ditto.
26897         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
26898
26899         * everywhere : update calls to the above methods accordingly.
26900
26901 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26902
26903         * assign.cs (Assign): Make it inherit from ExpressionStatement.
26904
26905         * expression.cs (ExpressionStatement): New base class used for
26906         expressions that can appear in statements, so that we can provide
26907         an alternate path to generate expression that do not leave a value
26908         on the stack.
26909
26910         (Expression::Emit, and all the derivatives): We no longer return
26911         whether a value is left on the stack or not.  Every expression
26912         after being emitted leaves a single value on the stack.
26913
26914         * codegen.cs (EmitContext::EmitStatementExpression): Use the
26915         facilties of ExpressionStatement if possible.
26916
26917         * cs-parser.jay: Update statement_expression.
26918
26919 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
26920
26921         * driver.cs: Change the wording of message
26922
26923 2001-09-25  Ravi Pratap  <ravi@ximian.com>
26924
26925         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
26926         the type of the expression to the return type of the method if
26927         we have an overloaded operator match ! The regression tests pass again !
26928         (Unary::ResolveOperator): Ditto.
26929
26930         * expression.cs (Invocation::ConversionExists): Correct the member lookup
26931         to find "op_Implicit", not "implicit" ;-)
26932         (UserImplicitCast): New class to take care of user-defined implicit conversions.
26933         (ConvertImplicit, ForceConversion): Take TypeContainer argument
26934
26935         * everywhere : Correct calls to the above accordingly.
26936
26937         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
26938         (ConvertImplicit): Do user-defined conversion if it exists.
26939
26940 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
26941
26942         * assign.cs: track location.
26943         (Resolve): Use implicit conversions on assignment.
26944
26945         * literal.cs: Oops.  Not good, Emit of short access values should
26946         pass (Bytes) or the wrong argument will be selected.
26947
26948         * expression.cs (Unary::Emit): Emit code for -expr.
26949
26950         (Unary::ResolveOperator): Handle `Substract' for non-constants
26951         (substract from zero from the non-constants).
26952         Deal with Doubles as well. 
26953
26954         (Expression::ConvertImplicitRequired): New routine that reports an
26955         error if no implicit conversion exists. 
26956
26957         (Invocation::OverloadResolve): Store the converted implicit
26958         expressions if we make them
26959
26960 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26961
26962         * class.cs (ConstructorInitializer): Take a Location argument.
26963         (ConstructorBaseInitializer): Same here.
26964         (ConstructorThisInitializer): Same here.
26965
26966         * cs-parser.jay : Update all calls accordingly.
26967
26968         * expression.cs (Unary, Binary, New): Take location argument.
26969         Update accordingly everywhere.
26970
26971         * cs-parser.jay : Update all calls to the above to take a location
26972         argument.
26973
26974         * class.cs : Ditto.
26975
26976 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26977
26978         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
26979         (Invocation::BetterConversion): Same here
26980         (Invocation::ConversionExists): Ditto.
26981
26982         (Invocation::ConversionExists): Implement.
26983
26984 2001-09-22  Ravi Pratap  <ravi@ximian.com>
26985
26986         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
26987         Also take an additional TypeContainer argument.
26988
26989         * All over : Pass in TypeContainer as argument to OverloadResolve.
26990
26991         * typemanager.cs (CSharpName): Update to check for the string type and return
26992         that too.
26993
26994         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
26995         a given method.
26996
26997 2001-09-21  Ravi Pratap  <ravi@ximian.com>
26998
26999         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
27000         (Invocation::BetterFunction): Implement.
27001         (Invocation::BetterConversion): Implement.
27002         (Invocation::ConversionExists): Skeleton, no implementation yet.
27003
27004         Okay, things work fine !
27005
27006 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
27007
27008         * typemanager.cs: declare and load enum_type, delegate_type and
27009         void_type. 
27010
27011         * expression.cs (Expression::Emit): Now emit returns a value that
27012         tells whether a value is left on the stack or not.  This strategy
27013         might be reveted tomorrow with a mechanism that would address
27014         multiple assignments.
27015         (Expression::report118): Utility routine to report mismatches on
27016         the ExprClass.
27017
27018         (Unary::Report23): Report impossible type/operator combination
27019         utility function.
27020
27021         (Unary::IsIncrementableNumber): Whether the type can be
27022         incremented or decremented with add.
27023         (Unary::ResolveOperator): Also allow enumerations to be bitwise
27024         complemented. 
27025         (Unary::ResolveOperator): Implement ++, !, ~,
27026
27027         (Invocation::Emit): Deal with new Emit convetion.
27028
27029         * All Expression derivatives: Updated their Emit method to return
27030         whether they leave values on the stack or not.
27031
27032         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
27033         stack for expressions that are statements. 
27034
27035 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
27036
27037         * expression.cs (LValue): New interface.  Must be implemented by
27038         LValue objects.
27039         (LocalVariableReference, ParameterReference, FieldExpr): Implement
27040         LValue interface.
27041
27042         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
27043         interface for generating code, simplifies the code.
27044
27045 2001-09-20  Ravi Pratap  <ravi@ximian.com>
27046
27047         * expression.cs (everywhere): Comment out return statements in ::Resolve
27048         methods to avoid the warnings.
27049
27050 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
27051
27052         * driver.cs (parse): Report error 2001 if we can not open the
27053         source file.
27054
27055         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
27056         not resolve it.
27057
27058         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
27059         object. 
27060
27061         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
27062         otherwise nested blocks end up with the same index.
27063
27064         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
27065
27066         * expression.cs:  Instead of having FIXMEs in the Resolve
27067         functions, throw exceptions so it is obvious that we are facing a
27068         bug. 
27069
27070         * cs-parser.jay (invocation_expression): Pass Location information.
27071
27072         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
27073         Use a basename for those routines because .NET does not like paths
27074         on them. 
27075
27076         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
27077         already defined.
27078
27079 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
27080
27081         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
27082         are loading the correct data types (throws an exception if not).
27083         (TypeManager::InitCoreTypes): Use CoreLookupType
27084
27085         * expression.cs (Unary::ResolveOperator): return the child
27086         expression for expressions which are just +expr.
27087         (Unary::ResolveOperator): Return negative literals for -LITERAL
27088         expressions (otherwise they are Unary {Literal}).
27089         (Invocation::Badness): Take into account `Implicit constant
27090         expression conversions'.
27091
27092         * literal.cs (LongLiteral): Implement long literal class.
27093         (IntLiteral): export the `Value' of the intliteral. 
27094
27095 2001-09-19  Ravi Pratap  <ravi@ximian.com>
27096
27097         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
27098
27099         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
27100         instead of 'Operator'
27101
27102         * expression.cs (Binary::ResolveOperator): Update accordingly.
27103         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
27104         and 'Minus'
27105
27106         * cs-parser.jay (unary_expression): Update to use the new names.
27107
27108         * gen-treedump.cs (GetUnary): Same here.
27109
27110         * expression.cs (Unary::Resolve): Implement.
27111         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
27112         operators are found instead of making noise ;-)
27113         (Unary::ResolveOperator): New method to do precisely the same thing which
27114         Binary::ResolveOperator does for Binary expressions.
27115         (Unary.method, .Arguments): Add.
27116         (Unary::OperName): Implement.   
27117         (Unary::ForceConversion): Copy and Paste !
27118
27119         * class.cs (Operator::Define): Fix a small bug for the case when we have 
27120         a unary operator.
27121
27122         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
27123         for the inbuilt operators. Only overloading works for now ;-)
27124
27125 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
27126
27127         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
27128         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
27129
27130         * expression.cs (This::Emit): Implement. 
27131         (This::Resolve): Implement.
27132         (TypeOf:Resolve): Implement.
27133         (Expression::ResolveSimpleName): Add an implicit this to instance
27134         field references. 
27135         (MemberAccess::Resolve): Deal with Parameters and Fields. 
27136         Bind instance variable to Field expressions.
27137         (FieldExpr::Instance): New field used to track the expression that
27138         represents the object instance.
27139         (FieldExpr::Resolve): Track potential errors from MemberLookup not
27140         binding 
27141         (FieldExpr::Emit): Implement.
27142
27143         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
27144         the last instruction contains a return opcode to avoid generating
27145         the last `ret' instruction (this generates correct code, and it is
27146         nice to pass the peverify output).
27147
27148         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
27149         initializer for static and instance variables.
27150         (Constructor::Emit): Allow initializer to be null in the case of
27151         static constructors.  Only emit initializer for instance
27152         constructors. 
27153
27154         (TypeContainer::FindMembers): Return a null array if there are no
27155         matches.
27156
27157         Also fix the code for the MemberTypes.Method branch, as it was not
27158         scanning that for operators (or tried to access null variables before).
27159
27160         * assign.cs (Assign::Emit): Handle instance and static fields. 
27161
27162         * TODO: Updated.
27163
27164         * driver.cs: Stop compilation if there are parse errors.
27165
27166         * cs-parser.jay (constructor_declaration): Provide default base
27167         initializer for non-static constructors.
27168         (constructor_declarator): Do not provide a default base
27169         initializers if none was specified.
27170         Catch the fact that constructors should not have parameters.
27171
27172         * class.cs: Do not emit parent class initializers for static
27173         constructors, that should be flagged as an error.
27174
27175 2001-09-18  Ravi Pratap  <ravi@ximian.com>
27176
27177         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
27178         Move back code into TypeContainer::Populate.
27179
27180 2001-09-18  Ravi Pratap  <ravi@ximian.com>
27181
27182         * class.cs (TypeContainer::AddConstructor): Fix the check to
27183         compare against Name, not Basename. 
27184         (Operator::OpType): Change Plus and Minus to Add and Subtract.
27185
27186         * cs-parser.jay : Update accordingly.
27187
27188         * class.cs (TypeContainer::FindMembers): For the case where we are searching
27189         for methods, don't forget to look into the operators too.
27190         (RegisterMethodBuilder): Helper method to take care of this for
27191         methods, constructors and operators.
27192         (Operator::Define): Completely revamp.
27193         (Operator.OperatorMethod, MethodName): New fields.
27194         (TypeContainer::Populate): Move the registering of builders into
27195         RegisterMethodBuilder.
27196         (Operator::Emit): Re-write.
27197
27198         * expression.cs (Binary::Emit): Comment out code path to emit method
27199         invocation stuff for the case when we have a user defined operator. I am
27200         just not able to get it right !
27201
27202 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
27203
27204         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
27205         argument. 
27206
27207         (Expression::MemberLookup): Provide a version that allows to
27208         specify the MemberTypes and BindingFlags. 
27209
27210         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
27211         so it was not fetching variable information from outer blocks.
27212
27213         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
27214         Beforefieldinit as it was buggy.
27215
27216         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
27217         that Ravi put here.  
27218
27219         * class.cs (Constructor::Emit): Only emit if block is not null.
27220         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
27221         deal with this by semantically definining it as if the user had
27222         done it.
27223
27224         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
27225         constructors as we now "emit" them at a higher level.
27226
27227         (TypeContainer::DefineDefaultConstructor): Used to define the
27228         default constructors if none was provided.
27229
27230         (ConstructorInitializer): Add methods Resolve and Emit. 
27231
27232         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
27233
27234 2001-09-17  Ravi Pratap  <ravi@ximian.com>
27235
27236         * class.cs (TypeContainer::EmitDefaultConstructor): Register
27237         the default constructor builder with our hashtable for methodbuilders
27238         to methodcores.
27239
27240         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
27241         and argument_count is 0 in which case we have a match.
27242         (Binary::ResolveOperator): More null checking and miscellaneous coding
27243         style cleanup.
27244
27245 2001-09-17  Ravi Pratap  <ravi@ximian.com>
27246
27247         * rootcontext.cs (IsNameSpace): Compare against null.
27248
27249         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
27250
27251         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
27252         and Unary::Operator.
27253
27254         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
27255         accordingly.
27256
27257         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
27258         we have overloaded operators.
27259         (Binary::ResolveOperator): Implement the part which does the operator overload
27260         resolution.
27261
27262         * class.cs (Operator::Emit): Implement.
27263         (TypeContainer::Emit): Emit the operators we have too.
27264
27265         * expression.cs (Binary::Emit): Update to emit the appropriate code for
27266         the case when we have a user-defined operator.
27267
27268 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
27269
27270         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
27271
27272 2001-09-16  Ravi Pratap  <ravi@ximian.com>
27273
27274         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
27275         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
27276         (Constructor::Emit): Implement.
27277         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
27278         if we have no work to do. 
27279         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
27280         Emit method.
27281
27282         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
27283         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
27284
27285         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
27286         of parent.parent.
27287
27288 2001-09-15  Ravi Pratap  <ravi@ximian.com>
27289
27290         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
27291         in the source.
27292         (Tree::RecordNamespace): Method to do what the name says ;-)
27293         (Tree::Namespaces): Property to get at the namespaces hashtable.
27294
27295         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
27296         keep track.
27297
27298         * rootcontext.cs (IsNamespace): Fixed it :-)
27299
27300 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27301
27302         * class.cs (TypeContainer::FindMembers): Add support for
27303         constructors. 
27304         (MethodCore): New class that encapsulates both the shared aspects
27305         of a Constructor and a Method.  
27306         (Method, Constructor): Factored pieces into MethodCore.
27307
27308         * driver.cs: Added --fatal which makes errors throw exceptions.
27309         Load System assembly as well as part of the standard library.
27310
27311         * report.cs: Allow throwing exceptions on errors for debugging.
27312
27313         * modifiers.cs: Do not use `parent', instead use the real type
27314         container to evaluate permission settings.
27315
27316         * class.cs: Put Ravi's patch back in.  He is right, and we will
27317         have to cope with the
27318
27319 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27320
27321         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
27322         FamORAssem, not FamANDAssem.
27323
27324 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27325
27326         * driver.cs: Added --parse option that only parses its input files
27327         and terminates.
27328
27329         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
27330         incorrect.  IsTopLevel is not used to tell whether an object is
27331         root_types or not (that can be achieved by testing this ==
27332         root_types).  But to see if this is a top-level *class* (not
27333         necessarly our "toplevel" container). 
27334
27335 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27336
27337         * enum.cs (Enum::Define): Modify to call the Lookup method on the
27338         parent instead of a direct call to GetType.
27339
27340 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27341
27342         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
27343         Modifiers.TypeAttr. This should just be a call to that method.
27344
27345         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
27346         object so that we can determine if we are top-level or not.
27347
27348         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
27349         TypeContainer too.
27350
27351         * enum.cs (Enum::Define): Ditto.
27352
27353         * modifiers.cs (FieldAttr): Re-write.
27354
27355         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
27356         (TypeContainer::HaveStaticConstructor): New property to provide access
27357         to precisely that info.
27358
27359         * modifiers.cs (MethodAttr): Re-write.
27360         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
27361
27362         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
27363         of top-level types as claimed.
27364
27365 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27366
27367         * expression.cs (MemberLookup): Fruitless attempt to lookup
27368         constructors.  Maybe I need to emit default constructors?  That
27369         might be it (currently .NET emits this for me automatically).
27370         (Invocation::OverloadResolve): Cope with Arguments == null.
27371         (Invocation::EmitArguments): new function, shared by the new
27372         constructor and us.
27373         (Invocation::Emit): Handle static and instance methods.  Emit
27374         proper call instruction for virtual or non-virtual invocations.
27375         (New::Emit): Implement.
27376         (New::Resolve): Implement.
27377         (MemberAccess:Resolve): Implement.
27378         (MethodGroupExpr::InstanceExpression): used conforming to the spec
27379         to track instances.
27380         (FieldExpr::Resolve): Set type.
27381
27382         * support.cs: Handle empty arguments.
27383                 
27384         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
27385         SimpleLookup): Auxiliary routines to help parse a qualifier
27386         identifier.  
27387
27388         Update qualifier_identifier rule.
27389
27390         * codegen.cs: Removed debugging messages.
27391
27392         * class.cs: Make this a global thing, this acts just as a "key" to
27393         objects that we might have around.
27394
27395         (Populate): Only initialize method_builders_to_methods once.
27396
27397         * expression.cs (PropertyExpr): Initialize type from the
27398         PropertyType. 
27399
27400         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
27401         Resolve pattern.  Attempt to implicitly convert value to boolean.
27402         Emit code.
27403
27404         * expression.cs: Set the type for the int32/int32 argument case.
27405         (Binary::ResolveOperator): Set the return type to boolean for
27406         comparission operators
27407
27408         * typemanager.cs: Remove debugging print code.
27409
27410         (Invocation::Resolve): resolve type.
27411
27412         * class.cs: Allocate a MemberInfo of the correct size, as the code
27413         elsewhere depends on the test to reflect the correct contents.
27414
27415         (Method::) Keep track of parameters, due to System.Reflection holes
27416
27417         (TypeContainer::Populate): Keep track of MethodBuilders to Method
27418         mapping here.
27419
27420         (TypeContainer::FindMembers): Use ArrayList and then copy an array
27421         of the exact size and return that.
27422
27423         (Class::LookupMethodByBuilder): New function that maps
27424         MethodBuilders to its methods.  Required to locate the information
27425         on methods because System.Reflection bit us again.
27426
27427         * support.cs: New file, contains an interface ParameterData and
27428         two implementations: ReflectionParameters and InternalParameters
27429         used to access Parameter information.  We will need to grow this
27430         as required.
27431
27432         * expression.cs (Invocation::GetParameterData): implement a cache
27433         and a wrapper around the ParameterData creation for methods. 
27434         (Invocation::OverloadResolve): Use new code.
27435
27436 2001-09-13  Ravi Pratap  <ravi@ximian.com>
27437
27438         * class.cs (TypeContainer::EmitField): Remove and move into 
27439         (Field::Define): here and modify accordingly.
27440         (Field.FieldBuilder): New member.
27441         (TypeContainer::Populate): Update accordingly.
27442         (TypeContainer::FindMembers): Implement.
27443
27444 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27445
27446         * statement.cs: (VariableInfo::VariableType): New field to be
27447         initialized with the full type once it is resolved. 
27448
27449 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
27450
27451         * parameter.cs (GetParameterInfo): Use a type cache to compute
27452         things only once, and to reuse this information
27453
27454         * expression.cs (LocalVariableReference::Emit): Implement.
27455         (OpcodeCast::Emit): fix.
27456
27457         (ParameterReference::Resolve): Implement.
27458         (ParameterReference::Emit): Implement.
27459
27460         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
27461         that are expressions need to stay as Expressions.
27462
27463         * typemanager.cs (CSharpName): Returns the C# name of a type if
27464         possible. 
27465
27466         * expression.cs (Expression::ConvertImplicit): New function that
27467         implements implicit type conversions.
27468
27469         (Expression::ImplicitReferenceConversion): Implements implicit
27470         reference conversions.
27471
27472         (EmptyCast): New type for transparent casts.
27473
27474         (OpcodeCast): New type for casts of types that are performed with
27475         a sequence of bytecodes.
27476
27477         (BoxedCast): New type used for casting value types into reference
27478         types.  Emits a box opcode.
27479
27480         (Binary::DoNumericPromotions): Implements numeric promotions of
27481         and computation of the Binary::Type.
27482
27483         (Binary::EmitBranchable): Optimization.
27484
27485         (Binary::Emit): Implement code emission for expressions.
27486
27487         * typemanager.cs (TypeManager): Added two new core types: sbyte
27488         and byte.
27489
27490 2001-09-12  Ravi Pratap  <ravi@ximian.com>
27491
27492         * class.cs (TypeContainer::FindMembers): Method which does exactly
27493         what Type.FindMembers does, only we don't have to use reflection. No
27494         implementation yet.
27495
27496         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
27497         typecontainer objects as we need to get at them.
27498         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
27499
27500         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
27501         typecontainer object.
27502
27503         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
27504         of just a Report object.
27505
27506 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27507
27508         * class.cs (Event::Define): Go back to using the prefixes "add_" and
27509         "remove_"
27510         (TypeContainer::Populate): Now define the delegates of the type too.
27511         (TypeContainer.Delegates): Property to access the list of delegates defined
27512         in the type.
27513
27514         * delegates.cs (Delegate::Define): Implement partially.
27515
27516         * modifiers.cs (TypeAttr): Handle more flags.
27517
27518 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27519
27520         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
27521         and not <=
27522         (Operator::Define): Re-write logic to get types by using the LookupType method
27523         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
27524         (Indexer::Define): Ditto.
27525         (Event::Define): Ditto.
27526         (Property::Define): Ditto.
27527
27528 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27529
27530         * class.cs (TypeContainer::Populate): Now define operators too. 
27531         (TypeContainer.Operators): New property to access the list of operators
27532         in a type.
27533         (Operator.OperatorMethodBuilder): New member to hold the method builder
27534         for the operator we are defining.
27535         (Operator::Define): Implement.
27536
27537 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27538
27539         * class.cs (Event::Define): Make the prefixes of the accessor methods
27540         addOn_ and removeOn_ 
27541
27542         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
27543         of the location being passed in too. Ideally, this should go later since all
27544         error reporting should be done through the Report object.
27545
27546         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
27547         (Populate): Iterate thru the indexers we have and define them too.
27548         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
27549         for the get and set accessors.
27550         (Indexer::Define): Implement.
27551
27552 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
27553
27554         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
27555         my previous implementation, did not work.
27556
27557         * typemanager.cs: Add a couple of missing types (the longs).
27558
27559         * literal.cs: Use TypeManager.bool_type instead of getting it.
27560
27561         * expression.cs (EventExpr): New kind of expressions.
27562         (Expressio::ExprClassFromMemberInfo): finish
27563
27564 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
27565
27566         * assign.cs: Emit stores to static fields differently.
27567
27568 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27569
27570         * Merge in changes and adjust code to tackle conflicts. Backed out my
27571         code in Assign::Resolve ;-) 
27572
27573 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27574
27575         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
27576         instead Report.Error and also pass in the location.
27577         (CSharpParser::Lexer): New readonly property to return the reference
27578         to the Tokenizer object.
27579         (declare_local_variables): Use Report.Error with location instead of plain 
27580         old error.
27581         (CheckDef): Ditto.
27582
27583         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
27584         (Operator.CheckBinaryOperator): Ditto.
27585
27586         * cs-parser.jay (operator_declarator): Update accordingly.
27587
27588         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
27589         (CheckBinaryOperator): Same here.
27590
27591         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
27592         on the name without any prefixes of namespace names etc. This is because we
27593         already might have something already fully qualified like 
27594         'System.Console.WriteLine'
27595
27596         * assign.cs (Resolve): Begin implementation. Stuck ;-)
27597
27598 2001-09-07  Ravi Pratap  <ravi@ximian.com>
27599
27600         * cs-tokenizer.cs (location): Return a string which also contains
27601         the file name.
27602
27603         * expression.cs (ElementAccess): New class for expressions of the
27604         type 'element access.'
27605         (BaseAccess): New class for expressions of the type 'base access.'
27606         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
27607         respectively.
27608
27609         * cs-parser.jay (element_access): Implement action.
27610         (base_access): Implement actions.
27611         (checked_expression, unchecked_expression): Implement.
27612
27613         * cs-parser.jay (local_variable_type): Correct and implement.
27614         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
27615
27616         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
27617
27618         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
27619         name and the specifiers.
27620
27621         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
27622
27623         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
27624         making them all public ;-)
27625
27626         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
27627         class anyways.
27628
27629 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
27630
27631         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
27632         PropertyExprs.
27633         (FieldExpr, PropertyExprs): New resolved expressions.
27634         (SimpleName::MemberStaticCheck): Perform static checks for access
27635         to non-static fields on static methods. Maybe this should be
27636         generalized for MemberAccesses. 
27637         (SimpleName::ResolveSimpleName): More work on simple name
27638         resolution. 
27639
27640         * cs-parser.jay (primary_expression/qualified_identifier): track
27641         the parameter index.
27642
27643         * codegen.cs (CodeGen::Save): Catch save exception, report error.
27644         (EmitContext::EmitBoolExpression): Chain to expression generation
27645         instead of temporary hack.
27646         (::EmitStatementExpression): Put generic expression code generation.
27647
27648         * assign.cs (Assign::Emit): Implement variable assignments to
27649         local variables, parameters and fields.
27650
27651 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
27652
27653         * statement.cs (Block::GetVariableInfo): New method, returns the
27654         VariableInfo for a variable name in a block.
27655         (Block::GetVariableType): Implement in terms of GetVariableInfo
27656
27657         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
27658         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
27659
27660 2001-09-06  Ravi Pratap  <ravi@ximian.com>
27661
27662         * cs-parser.jay (operator_declaration): Continue on my quest : update
27663         to take attributes argument.
27664         (event_declaration): Ditto.
27665         (enum_declaration): Ditto.
27666         (indexer_declaration): Ditto.
27667
27668         * class.cs (Operator::Operator): Update constructor accordingly.
27669         (Event::Event): Ditto.
27670
27671         * delegate.cs (Delegate::Delegate): Same here.
27672
27673         * enum.cs (Enum::Enum): Same here.
27674
27675 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27676
27677         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
27678
27679         * ../tests/cs0658.cs : New file to demonstrate error 0658.
27680
27681         * attribute.cs (Attributes): New class to encapsulate all attributes which were
27682         being passed around as an arraylist.
27683         (Attributes::AddAttribute): Method to add attribute sections.
27684
27685         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
27686         (struct_declaration): Update accordingly.
27687         (constant_declaration): Update.
27688         (field_declaration): Update.
27689         (method_header): Update.
27690         (fixed_parameter): Update.
27691         (parameter_array): Ditto.
27692         (property_declaration): Ditto.
27693         (destructor_declaration): Ditto.
27694
27695         * class.cs (Struct::Struct): Update constructors accordingly.
27696         (Class::Class): Ditto.
27697         (Field::Field): Ditto.
27698         (Method::Method): Ditto.
27699         (Property::Property): Ditto.
27700         (TypeContainer::OptAttribute): update property's return type.
27701
27702         * interface.cs (Interface.opt_attributes): New member.
27703         (Interface::Interface): Update to take the extra Attributes argument.
27704
27705         * parameter.cs (Parameter::Parameter): Ditto.
27706
27707         * constant.cs (Constant::Constant): Ditto.
27708
27709         * interface.cs (InterfaceMemberBase): New OptAttributes field.
27710         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
27711         the attributes as a parameter.
27712         (InterfaceProperty): Update constructor call.
27713         (InterfaceEvent): Ditto.
27714         (InterfaceMethod): Ditto.
27715         (InterfaceIndexer): Ditto.
27716
27717         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
27718         pass the attributes too.
27719         (interface_event_declaration): Ditto.
27720         (interface_property_declaration): Ditto.
27721         (interface_method_declaration): Ditto.
27722         (interface_declaration): Ditto.
27723
27724 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
27725
27726         * class.cs (Method::Define): Track the "static Main" definition to
27727         create an entry point. 
27728
27729         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
27730         EntryPoint if we find it. 
27731
27732         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
27733         (EmitContext::ig): Make this variable public.
27734
27735         * driver.cs: Make the default output file be the first file name
27736         with the .exe extension.  
27737
27738         Detect empty compilations
27739
27740         Handle various kinds of output targets.  Handle --target and
27741         rename -t to --dumper.
27742
27743         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
27744         methods inherited from Expression return now an Expression.  This
27745         will is used during the tree rewriting as we resolve them during
27746         semantic analysis.
27747
27748         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
27749         the spec.  Missing entirely is the information about
27750         accessability of elements of it.
27751
27752         (Expression::ExprClassFromMemberInfo): New constructor for
27753         Expressions that creates a fully initialized Expression based on
27754         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
27755         a Type.
27756
27757         (Invocation::Resolve): Begin implementing resolution of invocations.
27758
27759         * literal.cs (StringLiteral):  Implement Emit.
27760
27761 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27762
27763         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
27764         member.
27765
27766 2001-09-04  Ravi Pratap  <ravi@ximian.com>
27767
27768         * cs-parser.jay (attribute_arguments): Implement actions.
27769         (attribute): Fix bug in production. Implement action.
27770         (attribute_list): Implement.
27771         (attribute_target): Implement.
27772         (attribute_target_specifier, opt_target_specifier): Implement
27773         (CheckAttributeTarget): New method to check if the attribute target
27774         is valid.
27775         (attribute_section): Implement.
27776         (opt_attributes): Implement.
27777
27778         * attribute.cs : New file to handle attributes.
27779         (Attribute): Class to hold attribute info.
27780
27781         * cs-parser.jay (opt_attribute_target_specifier): Remove production
27782         (attribute_section): Modify production to use 2 different rules to 
27783         achieve the same thing. 1 s/r conflict down !
27784         Clean out commented, useless, non-reducing dimension_separator rules.
27785
27786         * class.cs (TypeContainer.attributes): New member to hold list
27787         of attributes for a type.
27788         (Struct::Struct): Modify to take one more argument, the attribute list.
27789         (Class::Class): Ditto.
27790         (Field::Field): Ditto.
27791         (Method::Method): Ditto.
27792         (Property::Property): Ditto.
27793
27794         * cs-parser.jay (struct_declaration): Update constructor call to
27795         pass in the attributes too.
27796         (class_declaration): Ditto.
27797         (constant_declaration): Ditto.
27798         (field_declaration): Ditto.
27799         (method_header): Ditto.
27800         (fixed_parameter): Ditto.
27801         (parameter_array): Ditto.
27802         (property_declaration): Ditto.
27803
27804         * constant.cs (Constant::Constant): Update constructor similarly.
27805         Use System.Collections.
27806
27807         * parameter.cs (Parameter::Parameter): Update as above.
27808
27809 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27810
27811         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
27812         (TypeContainer.delegates): New member to hold list of delegates.
27813
27814         * cs-parser.jay (delegate_declaration): Implement the action correctly 
27815         this time as I seem to be on crack ;-)
27816
27817 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
27818
27819         * rootcontext.cs (RootContext::IsNamespace): new function, used to
27820         tell whether an identifier represents a namespace.
27821
27822         * expression.cs (NamespaceExpr): A namespace expression, used only
27823         temporarly during expression resolution.
27824         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
27825         utility functions to resolve names on expressions.
27826
27827 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
27828
27829         * codegen.cs: Add hook for StatementExpressions. 
27830
27831         * class.cs: Fix inverted test for static flag in methods.
27832
27833 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27834
27835         * class.cs (Operator::CheckUnaryOperator): Correct error number used
27836         to make it coincide with MS' number.
27837         (Operator::CheckBinaryOperator): Ditto.
27838
27839         * ../errors/errors.txt : Remove error numbers added earlier.
27840
27841         * ../errors/cs1019.cs : Test case for error # 1019
27842
27843         * ../errros/cs1020.cs : Test case for error # 1020
27844
27845         * cs-parser.jay : Clean out commented cruft.
27846         (dimension_separators, dimension_separator): Comment out. Ostensibly not
27847         used anywhere - non-reducing rule.
27848         (namespace_declarations): Non-reducing rule - comment out.
27849
27850         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
27851         with TypeContainer::AddEnum.
27852
27853         * delegate.cs : New file for delegate handling classes.
27854         (Delegate): Class for declaring delegates.
27855
27856         * makefile : Update.
27857
27858         * cs-parser.jay (delegate_declaration): Implement.
27859
27860 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
27861
27862         * class.cs (Event::Define): Implement.
27863         (Event.EventBuilder): New member.
27864
27865         * class.cs (TypeContainer::Populate): Update to define all enums and events
27866         we have.
27867         (Events): New property for the events arraylist we hold. Shouldn't we move to using
27868         readonly fields for all these cases ?
27869
27870 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27871
27872         * class.cs (Property): Revamp to use the convention of making fields readonly.
27873         Accordingly modify code elsewhere.
27874
27875         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
27876         the Define method of the Property class.
27877
27878         * class.cs : Clean up applied patch and update references to variables etc. Fix 
27879         trivial bug.
27880         (TypeContainer::Populate): Update to define all the properties we have. Also
27881         define all enumerations.
27882
27883         * enum.cs (Define): Implement.
27884
27885 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27886
27887         * cs-parser.jay (overloadable_operator): The semantic value is an
27888         enum of the Operator class.
27889         (operator_declarator): Implement actions.
27890         (operator_declaration): Implement.
27891
27892         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
27893         validity of definitions.
27894         (Operator::CheckBinaryOperator): Static method to check for binary operators
27895         (TypeContainer::AddOperator): New method to add an operator to a type.
27896
27897         * cs-parser.jay (indexer_declaration): Added line to actually call the
27898         AddIndexer method so it gets added ;-)
27899
27900         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
27901         already taken care of by the MS compiler ?  
27902
27903 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27904
27905         * class.cs (Operator): New class for operator declarations.
27906         (Operator::OpType): Enum for the various operators.
27907
27908 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27909
27910         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
27911         ostensibly handle this in semantic analysis.
27912
27913         * cs-parser.jay (general_catch_clause): Comment out
27914         (specific_catch_clauses, specific_catch_clause): Ditto.
27915         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
27916         (catch_args, opt_catch_args): New productions.
27917         (catch_clause): Rewrite to use the new productions above
27918         (catch_clauses): Modify accordingly.
27919         (opt_catch_clauses): New production to use in try_statement
27920         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
27921         and re-write the code in the actions to extract the specific and
27922         general catch clauses by being a little smart ;-)
27923
27924         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
27925         Hooray, try and catch statements parse fine !
27926
27927 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27928
27929         * statement.cs (Block::GetVariableType): Fix logic to extract the type
27930         string from the hashtable of variables.
27931
27932         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
27933         I end up making that mistake ;-)
27934         (catch_clauses): Fixed gross error which made Key and Value of the 
27935         DictionaryEntry the same : $1 !!
27936
27937 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27938
27939         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
27940
27941         * cs-parser.jay (event_declaration): Correct to remove the semicolon
27942         when the add and remove accessors are specified. 
27943
27944 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27945
27946         * cs-parser.jay (IndexerDeclaration): New helper class to hold
27947         information about indexer_declarator.
27948         (indexer_declarator): Implement actions.
27949         (parsing_indexer): New local boolean used to keep track of whether
27950         we are parsing indexers or properties. This is necessary because 
27951         implicit_parameters come into picture even for the get accessor in the 
27952         case of an indexer.
27953         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
27954
27955         * class.cs (Indexer): New class for indexer declarations.
27956         (TypeContainer::AddIndexer): New method to add an indexer to a type.
27957         (TypeContainer::indexers): New member to hold list of indexers for the
27958         type.
27959
27960 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27961
27962         * cs-parser.jay (add_accessor_declaration): Implement action.
27963         (remove_accessor_declaration): Implement action.
27964         (event_accessors_declaration): Implement
27965         (variable_declarators): swap statements for first rule - trivial.
27966
27967         * class.cs (Event): New class to hold information about event
27968         declarations.
27969         (TypeContainer::AddEvent): New method to add an event to a type
27970         (TypeContainer::events): New member to hold list of events.
27971
27972         * cs-parser.jay (event_declaration): Implement actions.
27973
27974 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27975
27976         * cs-parser.jay (dim_separators): Implement. Make it a string
27977         concatenating all the commas together, just as they appear.
27978         (opt_dim_separators): Modify accordingly
27979         (rank_specifiers): Update accordingly. Basically do the same
27980         thing - instead, collect the brackets here.
27981         (opt_rank_sepcifiers): Modify accordingly.
27982         (array_type): Modify to actually return the complete type string
27983         instead of ignoring the rank_specifiers.
27984         (expression_list): Implement to collect the expressions
27985         (variable_initializer): Implement. We make it a list of expressions
27986         essentially so that we can handle the array_initializer case neatly too.
27987         (variable_initializer_list): Implement.
27988         (array_initializer): Make it a list of variable_initializers
27989         (opt_array_initializer): Modify accordingly.
27990
27991         * expression.cs (New::NType): Add enumeration to help us
27992         keep track of whether we have an object/delegate creation
27993         or an array creation.
27994         (New:NewType, New::Rank, New::Indices, New::Initializers): New
27995         members to hold data about array creation.
27996         (New:New): Modify to update NewType
27997         (New:New): New Overloaded contructor for the array creation
27998         case.
27999
28000         * cs-parser.jay (array_creation_expression): Implement to call
28001         the overloaded New constructor.
28002
28003 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
28004
28005         * class.cs (TypeContainer::Constructors): Return member
28006         constructors instead of returning null.
28007
28008 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
28009
28010         * typemanager.cs (InitCoreTypes): Initialize the various core
28011         types after we have populated the type manager with the user
28012         defined types (this distinction will be important later while
28013         compiling corlib.dll)
28014
28015         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
28016         on Expression Classification.  Now all expressions have a method
28017         `Resolve' and a method `Emit'.
28018
28019         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
28020         generation from working.     Also add some temporary debugging
28021         code. 
28022
28023 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
28024
28025         * codegen.cs: Lots of code generation pieces.  This is only the
28026         beginning, will continue tomorrow with more touches of polish.  We
28027         handle the fundamentals of if, while, do, for, return.  Others are
28028         trickier and I need to start working on invocations soon.
28029
28030         * gen-treedump.cs: Bug fix, use s.Increment here instead of
28031         s.InitStatement. 
28032
28033         * codegen.cs (EmitContext): New struct, used during code
28034         emission to keep a context.   Most of the code generation will be
28035         here. 
28036
28037         * cs-parser.jay: Add embedded blocks to the list of statements of
28038         this block.  So code generation proceeds in a top down fashion.
28039
28040 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
28041
28042         * statement.cs: Add support for multiple child blocks.
28043
28044 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
28045
28046         * codegen.cs (EmitCode): New function, will emit the code for a
28047         Block of code given a TypeContainer and its ILGenerator. 
28048
28049         * statement.cs (Block): Standard public readonly optimization.
28050         (Block::Block constructors): Link children. 
28051         (Block::Child): Child Linker.
28052         (Block::EmitVariables): Emits IL variable declarations.
28053
28054         * class.cs: Drop support for MethodGroups here, delay until
28055         Semantic Analysis.
28056         (Method::): Applied the same simplification that I did before, and
28057         move from Properties to public readonly fields.
28058         (Method::ParameterTypes): Returns the parameter types for the
28059         function, and implements a cache that will be useful later when I
28060         do error checking and the semantic analysis on the methods is
28061         performed.
28062         (Constructor::GetCallingConvention): Renamed from CallingConvetion
28063         and made a method, optional argument tells whether this is a class
28064         or a structure to apply the `has-this' bit.
28065         (Method::GetCallingConvention): Implement, returns the calling
28066         convention. 
28067         (Method::Define): Defines the type, a second pass is performed
28068         later to populate the methods.
28069
28070         (Constructor::ParameterTypes): implement a cache similar to the
28071         one on Method::ParameterTypes, useful later when we do semantic
28072         analysis. 
28073
28074         (TypeContainer::EmitMethod):  New method.  Emits methods.
28075
28076         * expression.cs: Removed MethodGroup class from here.
28077
28078         * parameter.cs (Parameters::GetCallingConvention): new method.
28079
28080 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
28081
28082         * class.cs (TypeContainer::Populate): Drop RootContext from the
28083         argument. 
28084
28085         (Constructor::CallingConvention): Returns the calling convention.
28086         (Constructor::ParameterTypes): Returns the constructor parameter
28087         types. 
28088
28089         (TypeContainer::AddConstructor): Keep track of default constructor
28090         and the default static constructor.
28091
28092         (Constructor::) Another class that starts using `public readonly'
28093         instead of properties. 
28094
28095         (Constructor::IsDefault): Whether this is a default constructor. 
28096
28097         (Field::) use readonly public fields instead of properties also.
28098
28099         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
28100         track of static constructors;  If none is used, turn on
28101         BeforeFieldInit in the TypeAttributes. 
28102
28103         * cs-parser.jay (opt_argument_list): now the return can be null
28104         for the cases where there are no arguments. 
28105
28106         (constructor_declarator): If there is no implicit `base' or
28107         `this', then invoke the default parent constructor. 
28108
28109         * modifiers.cs (MethodAttr): New static function maps a set of
28110         modifiers flags into a MethodAttributes enum
28111         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
28112         MethodAttr, TypeAttr to represent the various mappings where the
28113         modifiers are used.
28114         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
28115
28116 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
28117
28118         * parameter.cs (GetParameterInfo): Fix bug where there would be no
28119         method arguments.
28120
28121         * interface.cs (PopulateIndexer): Implemented the code generator
28122         for interface indexers.
28123
28124 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
28125
28126         * interface.cs (InterfaceMemberBase): Now we track the new status
28127         here.  
28128
28129         (PopulateProperty): Implement property population.  Woohoo!  Got
28130         Methods and Properties going today. 
28131
28132         Removed all the properties for interfaces, and replaced them with
28133         `public readonly' fields. 
28134
28135 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
28136
28137         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
28138         initialize their hashtables/arraylists only when they are needed
28139         instead of doing this always.
28140
28141         * parameter.cs: Handle refs and out parameters.
28142
28143         * cs-parser.jay: Use an ArrayList to construct the arguments
28144         instead of the ParameterCollection, and then cast that to a
28145         Parameter[] array.
28146
28147         * parameter.cs: Drop the use of ParameterCollection and use
28148         instead arrays of Parameters.
28149
28150         (GetParameterInfo): Use the Type, not the Name when resolving
28151         types. 
28152
28153 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
28154
28155         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
28156         and instead use public readonly fields.
28157
28158         * class.cs: Put back walking code for type containers.
28159
28160 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
28161
28162         * class.cs (MakeConstant): Code to define constants.
28163
28164         * rootcontext.cs (LookupType): New function.  Used to locate types 
28165
28166
28167 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
28168
28169         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
28170         this System.Reflection code is.  Kudos to Microsoft
28171
28172         * typemanager.cs: Implement a type cache and avoid loading all
28173         types at boot time.  Wrap in LookupType the internals.  This made
28174         the compiler so much faster.  Wow.  I rule!
28175
28176         * driver.cs: Make sure we always load mscorlib first (for
28177         debugging purposes, nothing really important).
28178
28179         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
28180         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
28181
28182         * rootcontext.cs: Lookup types on their namespace;  Lookup types
28183         on namespaces that have been imported using the `using' keyword.
28184
28185         * class.cs (TypeContainer::TypeAttr): Virtualize.
28186         (Class::TypeAttr): Return attributes suitable for this bad boy.
28187         (Struct::TypeAttr): ditto.
28188         Handle nested classes.
28189         (TypeContainer::) Remove all the type visiting code, it is now
28190         replaced with the rootcontext.cs code
28191
28192         * rootcontext.cs (GetClassBases): Added support for structs. 
28193
28194 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
28195
28196         * interface.cs, statement.cs, class.cs, parameter.cs,
28197         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
28198         Drop use of TypeRefs, and use strings instead.
28199
28200 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
28201
28202         * rootcontext.cs: 
28203
28204         * class.cs (Struct::Struct): set the SEALED flags after
28205         checking the modifiers.
28206         (TypeContainer::TypeAttr): new property, returns the
28207         TypeAttributes for a class.  
28208
28209         * cs-parser.jay (type_list): Oops, list production was creating a
28210         new list of base types.
28211
28212         * rootcontext.cs (StdLib): New property.
28213         (GetInterfaceTypeByName): returns an interface by type name, and
28214         encapsulates error handling here.
28215         (GetInterfaces): simplified.
28216         (ResolveTree): Encapsulated all the tree resolution here.
28217         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
28218         types. 
28219
28220         * driver.cs: Add support for --nostdlib, to avoid loading the
28221         default assemblies.
28222         (Main): Do not put tree resolution here. 
28223
28224         * rootcontext.cs: Beginning of the class resolution.
28225
28226 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
28227
28228         * rootcontext.cs: Provide better error reporting. 
28229
28230         * cs-parser.jay (interface_base): set our $$ to be interfaces.
28231
28232         * rootcontext.cs (CreateInterface): Handle the case where there
28233         are no parent interfaces.
28234
28235         (CloseTypes): Routine to flush types at the end.
28236         (CreateInterface): Track types.
28237         (GetInterfaces): Returns an array of Types from the list of
28238         defined interfaces.
28239
28240         * typemanager.c (AddUserType): Mechanism to track user types (puts
28241         the type on the global type hash, and allows us to close it at the
28242         end). 
28243
28244 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
28245
28246         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
28247         RecordInterface instead.
28248
28249         * cs-parser.jay: Updated to reflect changes above.
28250
28251         * decl.cs (Definition): Keep track of the TypeBuilder type that
28252         represents this type here.  Not sure we will use it in the long
28253         run, but wont hurt for now.
28254
28255         * driver.cs: Smaller changes to accomodate the new code.
28256
28257         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
28258         when done. 
28259
28260         * rootcontext.cs (CreateInterface):  New method, used to create
28261         the System.TypeBuilder type for interfaces.
28262         (ResolveInterfaces): new entry point to resolve the interface
28263         hierarchy. 
28264         (CodeGen): Property, used to keep track of the code generator.
28265
28266 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
28267
28268         * cs-parser.jay: Add a second production for delegate_declaration
28269         with `VOID'.
28270
28271         (enum_body): Put an opt_comma here instead of putting it on
28272         enum_body or enum_member_declarations so we can handle trailing
28273         commas on enumeration members.  Gets rid of a shift/reduce.
28274
28275         (type_list): Need a COMMA in the middle.
28276
28277         (indexer_declaration): Tell tokenizer to recognize get/set
28278
28279         * Remove old targets.
28280
28281         * Re-add the parser target.
28282
28283 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28284
28285         * cs-parser.jay: Add precendence rules for a number of operators
28286         ot reduce the number of shift/reduce conflicts in the grammar.
28287
28288 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
28289
28290         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
28291         and put it here.
28292
28293         Get rid of old crufty code.
28294
28295         * rootcontext.cs: Use this to keep track of the parsed
28296         representation and the defined types available to the program. 
28297
28298         * gen-treedump.cs: adjust for new convention.
28299
28300         * type.cs: Split out the type manager, and the assembly builder
28301         from here. 
28302
28303         * typemanager.cs: the type manager will live here now.
28304
28305         * cil-codegen.cs: And the code generator here. 
28306
28307 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
28308
28309         * makefile: Fixed up for easy making.
28310
28311 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28312
28313         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
28314         the 
28315
28316         (unary_expression): Expand pre_increment_expression and
28317         post_decrement_expression to reduce a shift/reduce.
28318
28319 2001-07-11  Simon Cozens
28320
28321         * cs-tokenizer.cs: Hex numbers should begin with a 0.
28322
28323         Improve allow_keyword_as_indent name.
28324
28325 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
28326
28327         * Adjustments for Beta2. 
28328
28329 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
28330
28331         * decl.cs: Added `Define' abstract method.
28332         (InTransit): new property, used to catch recursive definitions. 
28333
28334         * interface.cs: Implement `Define'. 
28335
28336         * modifiers.cs: Map Modifiers.constants to
28337         System.Reflection.TypeAttribute flags.
28338
28339         * class.cs: Keep track of types and user-defined types.
28340         (BuilderInit): New method for creating an assembly
28341         (ResolveType): New function to launch the resolution process, only
28342         used by interfaces for now.
28343
28344         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
28345         that are inserted into the name space. 
28346
28347 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
28348
28349         * ARGH.  I have screwed up my tree so many times due to the use of
28350         rsync rather than using CVS.  Going to fix this at once. 
28351
28352         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
28353         load types.
28354
28355 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
28356
28357         * Experiment successful: Use System.Type rather that our own
28358         version of Type.  
28359
28360 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
28361
28362         * cs-parser.jay: Removed nsAliases from here.
28363
28364         Use new namespaces, handle `using XXX;' 
28365
28366         * namespace.cs: Reimplemented namespace handling, use a recursive
28367         definition of the class.  Now we can keep track of using clauses
28368         and catch invalid using clauses.
28369
28370 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
28371
28372         * gen-treedump.cs: Adapted for all the renaming.
28373
28374         * expression.cs (Expression): this class now has a Type property
28375         which returns an expression Type.
28376
28377         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
28378         `Type', as this has a different meaning now in the base
28379
28380 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
28381
28382         * interface.cs, class.cs: Removed from all the sources the
28383         references to signature computation, as we can not do method
28384         signature computation during the parsing time, as we are not
28385         trying to solve at that point distinguishing:
28386
28387         class X {
28388                 void a (Blah x) {}
28389                 void a (NS.Blah x) {}
28390         }
28391
28392         Which depending on the context might be valid or not, as we do not
28393         know if Blah is the same thing as NS.Blah at that point.
28394
28395         * Redid everything so the code uses TypeRefs now instead of
28396         Types.  TypeRefs are just temporary type placeholders, that need
28397         to be resolved.  They initially have a pointer to a string and the
28398         current scope in which they are used.  This is used later by the
28399         compiler to resolve the reference to an actual Type. 
28400
28401         * DeclSpace is no longer a CIR.Type, and neither are
28402         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
28403         are all DeclSpaces, but no Types. 
28404
28405         * type.cs (TypeRefManager): This implements the TypeRef manager,
28406         which keeps track of all the types that need to be resolved after
28407         the parsing has finished. 
28408
28409 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
28410
28411         * ARGH.  We are going to have to store `foreach' as a class rather
28412         than resolving it, as we need to verify error 1579 after name
28413         resolution.   *OR* we could keep a flag that says `This request to
28414         IEnumerator comes from a foreach statement' which we can then use
28415         to generate the error.
28416
28417 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
28418
28419         * class.cs (TypeContainer.AddMethod): we now add methods to the
28420         MethodGroup instead of the method hashtable.  
28421
28422         * expression.cs: Add MethodGroup abstraction, which gets us one
28423         step closer to the specification in the way we handle method
28424         declarations.  
28425
28426         * cs-parser.jay (primary_expression): qualified_identifier now
28427         tried to match up an identifier to a local variable reference or
28428         to a parameter reference.
28429
28430         current_local_parameters is now a parser global variable that
28431         points to the current parameters for the block, used during name
28432         lookup.
28433
28434         (property_declaration): Now creates an implicit `value' argument to
28435         the set accessor.
28436
28437 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
28438
28439         * parameter.cs: Do not use `param' arguments as part of the
28440         signature, per the spec.
28441
28442 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
28443
28444         * decl.cs: Base class for classes, structs and interfaces.  This
28445         is the "Declaration Space" 
28446
28447         * cs-parser.jay: Use CheckDef for checking declaration errors
28448         instead of having one on each function.
28449
28450         * class.cs: Factor out some code for handling error handling in
28451         accordance to the "Declarations" section in the "Basic Concepts"
28452         chapter in the ECMA C# spec.
28453
28454         * interface.cs: Make all interface member classes derive from
28455         InterfaceMemberBase.
28456
28457 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
28458
28459         * Many things: all interfaces are parsed and generated in
28460         gen-treedump.  Support for member variables, constructors,
28461         destructors, properties, constants is there.
28462
28463         Beginning of the IL backend, but very little done, just there for
28464         testing purposes. 
28465
28466 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
28467
28468         * cs-parser.jay: Fix labeled statement.
28469
28470         * cs-tokenizer.cs (escape): Escape " and ' always.
28471         ref_line, ref_name: keep track of the line/filename as instructed
28472         by #line by the compiler.
28473         Parse #line.
28474
28475 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
28476
28477         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
28478         to match the values in System.CodeDOM.
28479
28480         Divid renamed to Divide.
28481
28482         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
28483         statements. 
28484         (Statements.set): remove.
28485
28486         * System.CodeDOM/CodeCatchClause.cs: always have a valid
28487         statements. 
28488
28489         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
28490         falseStatements always have valid values. 
28491
28492         * cs-parser.jay: Use System.CodeDOM now.
28493