2008-03-19 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2008-03-19  Marek Safar  <marek.safar@gmail.com>
2
3         * delegate.cs: Use extension method source as delegate target.
4
5 2008-03-19  Marek Safar  <marek.safar@gmail.com>
6
7         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
8         binary operations to be purely based on binary operations and optimized
9         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
10         and other ET refactoring.
11         
12         * typemanager.cs: Fixed warning.
13         
14 2008-03-17  Marek Safar  <marek.safar@gmail.com>
15
16         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
17         
18         * symbolwriter.cs: Fixed.
19
20 2008-03-17  Marek Safar  <marek.safar@gmail.com>
21
22         * anonymous.cs, driver.cs: Reset anonymous types counters.
23
24 2008-03-17  Marek Safar  <marek.safar@gmail.com>
25
26         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
27         
28         * class.cs: Use fullname for all type member definitions.
29         
30 2008-02-19  Martin Baulig  <martin@ximian.com>
31
32         * class.cs
33         (IMethodData.EmitExtraSymbolInfo): New interface method.
34         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
35         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
36         interface method here as an empty public virtual method.
37
38         * anonymous.cs
39         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
40         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
41         CodeGen.SymbolWriter.SetRealMethodName().       
42
43 2008-02-18  Martin Baulig  <martin@ximian.com>
44
45         * anonymous.cs
46         (ScopeInfo.EmitType): Override this and emit debugging
47         information for captured variables.
48         (RootScopeInfo.EmitType): Override this and emit symbol
49         information for a captured `this'.
50
51 2008-02-15  Martin Baulig  <martin@ximian.com>
52
53         * iterators.cs: Emit debugging info.
54
55         * codegen.cs
56         (EmitContext.Flags): Add `OmitDebuggingInfo'.
57         (EmitContext.OmitDebuggingInfo): New public property.
58
59         * statement.cs
60         (While): Override Emit() and don't emit symbol info there; do it
61         inside DoEmit() instead.
62         (Block.Emit): Omit symbol information while emitting the scope
63         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
64         block logic.
65         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
66         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
67         .ctor to make `IsIterator' work.
68
69 2008-03-14  Martin Baulig  <martin@ximian.com>
70
71         * symbolwriter.cs: Added the new symbol writer function from the
72         debugger's `terrania' branch; temporarily enclose them inside
73         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
74         my vacations.
75
76 2008-03-14  Martin Baulig  <martin@ximian.com>
77
78         * symbolwriter.cs
79         (SymbolWriter): Make this a public static class.
80
81         * codegen.cs
82         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
83         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
84
85 2008-03-14  Marek Safar  <marek.safar@gmail.com>
86
87         A fix for bug #370577
88         * statement.cs, lambda.cs: Added extra limitations when dealing with void
89         return type.
90         
91 2008-03-14  Marek Safar  <marek.safar@gmail.com>
92
93         * typemanager.cs (CSharpName): Made 250 times faster.
94
95 2008-03-13  Marek Safar  <marek.safar@gmail.com>
96
97         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
98         
99 2008-03-12  Marek Safar  <marek.safar@gmail.com>
100
101         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
102         crash when predefined field does not exist.
103         
104 2008-03-12  Marek Safar  <marek.safar@gmail.com>
105
106         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
107         
108 2008-03-12  Marek Safar  <marek.safar@gmail.com>
109
110         * class.cs (FixedField): Don't crash when contructors are missing.
111
112 2008-03-11  Marek Safar  <marek.safar@gmail.com>
113
114         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
115         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
116         check internal types accessibility for internal and external types.
117         Replaced EnumToUnderlying by GetEnumUnderlyingType.
118
119 2008-03-11  Marek Safar  <marek.safar@gmail.com>
120
121         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
122         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
123         attribute.cs, statement: Use corect instance of predefined types (work
124         related to #364674).
125
126 2008-03-07  Marek Safar  <marek.safar@gmail.com>
127
128         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
129         
130 2008-03-07  Marek Safar  <marek.safar@gmail.com>
131
132         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
133         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
134         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
135         predefined types clean up, delayed predefined types members initialization
136         (work related to #364674).
137
138 2008-03-05  Marek Safar  <marek.safar@gmail.com>
139
140         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
141         
142 2008-03-05  Marek Safar  <marek.safar@gmail.com>
143
144         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
145         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
146         predefined types clean up (work related to #364674).
147
148 2008-03-04  Marek Safar  <marek.safar@gmail.com>
149
150         * ecore.cs: Print an error message instead of throwing exception.
151         
152 2008-03-04  Marek Safar  <marek.safar@gmail.com>
153
154         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
155         expression.cs, statement.cs: Unififed null literal representation.
156
157 2008-03-03  Marek Safar  <marek.safar@gmail.com>
158
159         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
160         expression.cs: Refactored binary operators resolve phase and improved speed.
161         The nullable code is still missing and won't work correctly, more fixes
162         required.
163
164         It also fixes #323726, #324312, #324248, and many other unreported issues.
165
166 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
167
168         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
169         instead of 'gmcs'.
170
171 2008-02-27  Marek Safar  <marek.safar@gmail.com>
172
173         * ecore.cs: Clean-up and split BetterConversion.
174         
175 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
176
177         Fix #363791
178         * enum.cs (EnumMember.Value): Only access 'value' if
179         ResolveValue says it's ok.
180         (EnumMember.DoResolveValue): Don't set prev_member.value.
181         (Enum.GetDefinition): Reverse arguments of Equals --
182         EnumMember.Value can return 'null'.
183
184         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
185
186 2008-02-22  Marek Safar  <marek.safar@gmail.com>
187
188         * generic.cs, expression.cs: More ongoing work on expression trees.
189         
190 2008-02-21  Marek Safar  <marek.safar@gmail.com>
191
192         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
193         handle missing matches when mutiple operators exist.
194         
195 2008-02-20  Marek Safar  <marek.safar@gmail.com>
196
197         A fix for bug #363218
198         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
199         initializers.
200         
201 2008-02-20  Marek Safar  <marek.safar@gmail.com>
202
203         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
204         update. This time to deal correctly with SideEffectConstant expression used
205         as an argument for another constant folding.
206
207 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
208
209         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
210         MethodBuilder.
211
212 2008-02-19  Marek Safar  <marek.safar@gmail.com>
213
214         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
215
216 2008-02-19  Marek Safar  <marek.safar@gmail.com>
217
218         A fix for bug #328136
219         * expression.cs: Do not fold immediately LogicalAnd operators when the left
220         side is a false constant, because we still need to evaluate the right-hand
221         side.
222
223         * statement.cs (If): Emit two types of boolean constants (simple constant,
224         side-effect constant).
225
226 2008-02-19  Marek Safar  <marek.safar@gmail.com>
227
228         * constant.cs (SideEffectConstant): Don't emit boolean constant.
229
230         * expression.cs: Fold immediately LogicalAnd operators when both sides are
231         constants.
232
233 2008-02-18  Marek Safar  <marek.safar@gmail.com>
234
235         A fix for bug #361457
236         * ecore.cs (IsApplicable): Params methods have lower priority.
237
238         * support.cs: Return correct parameter modifier for params types.
239
240 2008-02-18  Marek Safar  <marek.safar@gmail.com>
241
242         * generic.cs (TypeParameter): Cache attribute target name.
243
244         * support.cs: Removed unused variable.
245
246         * typemanager.cs: Removed debugging leftover.
247
248         * ecore.cs: Use local type instead of a property;
249
250         * class.cs (VerifyMembers): Consider also parent to test whether type member
251         is local or public.
252
253         * expression.cs (FullMethodDesc): Removed.
254
255         * attribute.cs (IsValidArgumentType): Made static.
256
257 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
258
259         Cleanup to be more readable.
260         * Makefile (GMCS_PROFILE): Remove.
261         (COMPILER_NAME): New helper.
262
263 2008-02-15  Miguel de Icaza  <miguel@novell.com>
264
265         * cs-tokenizer.cs: if a conditional expression happens inside a
266         (...) this also means that we do not need to de-ambiguate between
267         an parenthesized expression and a cast.
268
269         Fixes 346484.
270
271         * constant.cs (SideEffectConstant): a constant value that happens
272         to have a side effect.
273
274         Fixes the build regressions introduced by the fix for #359789
275
276 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
277
278         * expression.cs (Conditional.Emit): when emitting the ternary
279         operator, use local variables to generate code verifiable code.
280
281         The verifier cannot infer that the type on stack before the
282         stloc.0 is executed is of type ParentB. This happens because the
283         stack merge algorithm uses only parent types when deciding which
284         is the common type.  This is described in Part III 1.8.1.3 of ECMA
285         335.
286
287         This code compiled with mcs is not verifiable under MS. The MS
288         verifier picks the first common interface of Foo and Bar, which is
289         wrong, but doesn't use a full join type of the 2 interfaces.
290
291         CSC uses a clever hack to compile such code in a verifiable
292         way. It stores the intermediate values in a local variable with
293         the expected type.
294
295         Fixes: #358102
296
297 2008-02-14  Miguel de Icaza  <miguel@novell.com>
298
299         * expression.cs: Do not fold BitwiseAnd operators when the left
300         side is a false constant, because we still need to evaluate the
301         right-hand side.
302
303         Fixes #359789
304
305         * support.cs: Instead of throwing an InternalErrorException when
306         the position of the stream is outside the boundary of our buffer,
307         reset the state of the reader, and restart the reading from the
308         beginning of the file.
309
310 2008-02-14  Marek Safar  <marek.safar@gmail.com>
311
312         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
313
314 2008-02-14  Marek Safar  <marek.safar@gmail.com>
315
316         A fix for bug #361686
317         * decl.cs: A protected types used inside a private class which parents
318         derives from the protected class are accessible.
319
320 2008-02-13  Marek Safar  <marek.safar@gmail.com>
321
322         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
323         the parameterless constructor.
324
325 2008-02-13  Marek Safar  <marek.safar@gmail.com>
326
327         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
328         lookup methods to use standard member cache when doing member lookup.
329
330 2008-02-12  Marek Safar  <marek.safar@gmail.com>
331
332         * driver.cs: Don't report full path for referenced module as assembly error.
333
334 2008-02-12  Marek Safar  <marek.safar@gmail.com>
335
336         * Makefile: Fixed `qh' target to work on all machines.
337
338         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
339         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
340         and HasElementType with TypeManager implementation.
341
342 2008-02-08  Marek Safar  <marek.safar@gmail.com>
343
344         A fix for bugs #325134, #359749
345         * expression.cs, ecore.cs: Try to resolve an extension method even if the
346         first binds point to non-method member expression.
347
348 2008-02-08  Marek Safar  <marek.safar@gmail.com>
349
350         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
351
352 2008-02-08  Marek Safar  <marek.safar@gmail.com>
353
354         A fix for bugs #321394, #323028
355         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
356         Reworked naive IsAccessibleAs implementation to handle nested types.
357
358 2008-02-05  Jb Evain  <jbevain@novell.com>
359
360         * class.cs: use generic type comparison for parameters
361         as well.
362
363 2008-02-05  Marek Safar  <marek.safar@gmail.com>
364
365         A fix for bug #325372
366         * class.cs: Use generic type comparison when testing method signatures.
367
368 2008-02-05  Marek Safar  <marek.safar@gmail.com>
369
370         A fix for bug #357047
371         * ecore.cs: Applied C# 3.0 changes to better conversion.
372
373 2008-02-05  Marek Safar  <marek.safar@gmail.com>
374
375         A fix for bug #358374
376         * cs-parser.jay: Correctly set modifiers for all constructor types.
377
378 2008-02-04  Marek Safar  <marek.safar@gmail.com>
379
380         A fix for bug #355251
381         * generic.cs: Added base class constraint based type inference.
382
383 2008-02-01  Marek Safar  <marek.safar@gmail.com>
384
385         A fix for bug #357255
386         * decl.cs: One more missing visibility check.
387
388 2008-02-01  Marek Safar  <marek.safar@gmail.com>
389
390         * support.cs: Fixed broken return.
391
392 2008-01-25  Marek Safar  <marek.safar@gmail.com>
393
394         * report.cs: Correctly reset warnings count after probing.
395
396 2008-01-25  Martin Baulig  <martin@ximian.com>
397
398         * namespace.cs
399         (NamespaceEntry.SymbolFileID): Make this work again after
400         MemberName.ToString() is gone.
401
402 2008-01-25  Marek Safar  <marek.safar@gmail.com>
403
404         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
405         expressions.
406
407 2008-01-25  Marek Safar  <marek.safar@gmail.com>
408
409         * generic.cs: Use full implicit conversion for type inference fixing.
410
411 2008-01-24  Marek Safar  <marek.safar@gmail.com>
412
413         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
414         Fixed user operator conversions.
415
416 2008-01-24  Marek Safar  <marek.safar@gmail.com>
417
418         * generic.cs: Do nullable type to null comparison optimization during
419         resolve phase.
420
421 2008-01-24  Marek Safar  <marek.safar@gmail.com>
422
423         A fix for bug #355163
424         * generic.cs: Enabled l-value resolve on nullable expressions.
425
426 2008-01-24  Marek Safar  <marek.safar@gmail.com>
427
428         A fix for bug #353986
429         * class.cs: Ingore static ctors with parameters for any further checks.
430
431 2008-01-24  Marek Safar  <marek.safar@gmail.com>
432
433         A fix for bug #354310
434         * namespace.cs: Removed redundant check.
435
436 2008-01-24  Marek Safar  <marek.safar@gmail.com>
437
438         A fix for bug #354928
439         * expression.cs: ElementInitializers can be resolved only once.
440
441 2008-01-24  Marek Safar  <marek.safar@gmail.com>
442
443         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
444         Condition expressions.
445
446 2008-01-23  Marek Safar  <marek.safar@gmail.com>
447
448         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
449
450 2008-01-22  Marek Safar  <marek.safar@gmail.com>
451
452         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
453         not allowed.
454
455         * generic.cs: Implemented coalesce expression.
456
457 2008-01-22  Marek Safar  <marek.safar@gmail.com>
458
459         A fix for bug #355145
460         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
461         expression tree type inference.
462
463 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
464
465         Fix #354663
466         * expression.cs (Binary.IsUnsignedType): Fix typo.
467
468 2008-01-22  Marek Safar  <marek.safar@gmail.com>
469
470         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
471
472 2008-01-22  Marek Safar  <marek.safar@gmail.com>
473
474         A fix for bug #355161
475         * ecore.cs, expression.cs: Wider range of extension method supported
476         expressions.
477
478 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
479
480         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
481         AssemblyBuilder to operate in compiler context. Fixes mcs part of
482         bug #354970.
483
484 2008-01-22  Marek Safar  <marek.safar@gmail.com>
485
486         A fix for bug #355148
487         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
488
489 2008-01-22  Miguel de Icaza  <miguel@novell.com>
490
491         * expression.cs (CreateExpressionTree): Add support for or and
492         logical or, and indent following the coding conventions.
493
494         * typemanager.cs (LinqExpression): renamed from
495         ExpressionTreeManager, for a shorter name.
496
497         Use TypeManager.CoreLookupType to lookup types from our core
498         assemblies and turn those into "Type" variables.
499
500         Consumers that previously used "Namespace" and "Type" from this
501         class should instead use the TypeExpression which is a type that
502         is fully resolved (without involving the regular C# resolution
503         rules). 
504
505         This typically looks like this:
506
507         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
508         new MemberAccess (texpr, name, type_arguments, loc)
509
510         This avoids the problem in: #355178
511
512 2008-01-21  Marek Safar  <marek.safar@gmail.com>
513
514         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
515         feature in parser only as we do in other cases.
516         
517 2008-01-21  Marek Safar  <marek.safar@gmail.com>
518
519         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
520         typemanager.cs: A refactoring of params arguments to reuse existing
521         expressions (params -> array initializer) to emit params argument instead
522         of specialized handling.
523         It was required by expression tree implementation and it has other benefits
524         as well, we now apply same optimization for params arguments as we do for
525         array initializers.
526         
527 2008-01-18  Marek Safar  <marek.safar@gmail.com>
528
529         A fix for bug #353526
530         * generic.cs: A type inference of params arguments may not required any
531         temporary array creation.
532         
533 2008-01-18  Marek Safar  <marek.safar@gmail.com>
534
535         A fix for bug #353534
536         * generic.cs, ecore.cs, expression.cs: A method group type inference is
537         supported for delegates only.
538         
539 2008-01-18  Marek Safar  <marek.safar@gmail.com>
540
541         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
542         type for more than 1 candidates.
543         
544 2008-01-18  Marek Safar  <marek.safar@gmail.com>
545
546         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
547         expressions.
548         
549 2008-01-16  Marek Safar  <marek.safar@gmail.com>
550
551         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
552         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
553         operator) expressions. 
554                 
555 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
556
557         * statement.cs: Avoid declaring an IL variable for this_variable since it is
558         not accessed from the generated IL.
559
560 2008-01-14  Marek Safar  <marek.safar@gmail.com>
561
562         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
563         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
564         statement.cs: The first expression tree implementation drop, mostly
565         infrastructure work.
566
567 2008-01-14  Marek Safar  <marek.safar@gmail.com>
568
569         * ecore.cs (IsNestedChild): Refactored.
570
571 2008-01-11  Marek Safar  <marek.safar@gmail.com>
572
573         * lambda.cs: Don't use a cast on unknown expression statement.
574
575 2008-01-10  Geoff Norton  <gnorton@novell.com>
576
577         * cs-tokenizer.cs: One more token to distinguish between method and lambda
578         arguments
579
580 2008-01-09  Marek Safar  <marek.safar@gmail.com>
581
582         * doc.cs: Report better /doc crash details.
583         
584 2008-01-09  Marek Safar  <marek.safar@gmail.com>
585
586         A fix for bug #352536
587         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
588
589 2008-01-08  Marek Safar  <marek.safar@gmail.com>
590
591         A fix for bug #352287
592         * ecore.cs, expression.cs: Do `this' access checking in all member access
593         expressions.
594         
595 2008-01-08  Marek Safar  <marek.safar@gmail.com>
596
597         * rootcontext.cs, driver.cs: Switch to linq mode by default.
598         
599         * report.cs: Reset message stacks.
600         
601 2008-01-08  Marek Safar  <marek.safar@gmail.com>
602
603         * generic.cs (InferInPhases): Correctly calculate params position.
604         
605 2008-01-08  Marek Safar  <marek.safar@gmail.com>
606
607         * cs-tokenizer.cs: No need to parse full string when parsing lambda
608         arguments.
609
610 2008-01-07  Marek Safar  <marek.safar@gmail.com>
611
612         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
613         
614         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
615         
616         * driver.cs: Updated --help option.
617         
618 2008-01-07  Marek Safar  <marek.safar@gmail.com>
619
620         * generic.cs (InferParamsTypeArguments): Removed.
621         (InferInPhases): Add params type inference.
622         (LowerBoundInference): Fixed scoring mechanism.
623         
624         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
625         
626 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
627
628         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
629         byte array for unsigned "baked" assemblies.
630
631 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
632
633         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
634         array for assemblies that are not strongnamed.
635
636 2008-01-04  Marek Safar  <marek.safar@gmail.com>
637
638         A fix for bug #351481
639         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
640         declaring type for nested generic types.
641         
642 2008-01-04  Marek Safar  <marek.safar@gmail.com>
643
644         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
645         instead of ToString.
646         
647 2008-01-03  Marek Safar  <marek.safar@gmail.com>
648
649         A fix for bug #351047
650         * expression.cs (Binary.ResolveOperator): Allow equality operators between
651         null and structs only when equality and inequality operators are defined
652         either as an user-operators or predefined operators.
653         
654 2008-01-03  Marek Safar  <marek.safar@gmail.com>
655
656         A fix for bug #351047
657         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
658         
659 2008-01-03  Marek Safar  <marek.safar@gmail.com>
660
661         A fix for bug #351257
662         * cs-tokenizer.cs: Advance line number for '\r' correctly.
663         
664 2008-01-03  Marek Safar  <marek.safar@gmail.com>
665
666         A fix for bug #351157
667         * class.cs (Using): Fixed yet another broken cloning.
668         
669         (Block): Put back more sensible default value for statements.
670         
671 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
672
673         * codegen.cs: Allow AssemblyVersion with only major version component.
674         Fixes bug #351055.
675
676 2007-12-29  Marek Safar  <marek.safar@gmail.com>
677
678         A fix for bug #324654
679         * class.cs: Use FullName property as member name.
680
681 2007-12-28  Marek Safar  <marek.safar@gmail.com>
682
683         A fix for bug #342117
684         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
685         constructor constraint.
686
687 2007-12-28  Marek Safar  <marek.safar@gmail.com>
688
689         A fix for bug #338273
690         * class.cs (ProbertyBase): Access modifier checks are required for overrides
691         only.
692
693 2007-12-28  Marek Safar  <marek.safar@gmail.com>
694
695         A fix for bug #350839
696         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
697
698 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
699
700         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
701         GHOP:
702         
703         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
704
705         * statement.cs: Changed some Hashtables to use HybridDictionaries
706         instead. It was observed that some HashTables only contained a few
707         items in the vast majority of cases. Since HybridDictionary is
708         more efficient on small sets (<10 elements), "known_variables"
709         from class ExplicitBlock as well as "labels" and "constants " from
710         class Block were changed to HybridDictionaries. 
711
712         Atsai results: (56216kb->54987kb)
713
714         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
715
716
717 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
718
719         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
720         GHOP:
721         
722         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
723         
724         * expression.cs: foreach loop to for loop, saved on allocation of
725         enumerator (59333kb->59141kb)
726
727         * statement.cs. Changed foreach loops to for loops, saved on
728         allocation of enumerator (59141kb->59006kb)
729
730         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
731         when constructed with no specified capacity. This was causing a
732         few ArrayLists to allocate more memory than they would potentially
733         need in the Block class and MemberCache class. Setting the
734         ArrayLists to construct with a capacity of 1 saves some
735         memory. (56216kb->55585kb)
736
737 2007-12-27  Marek Safar  <marek.safar@gmail.com>
738
739         A fix for bug #347189 (2nd issue)
740         * expression.cs (MemberAccess): Nested type can be found in base non-generic
741         type.
742
743 2007-12-27  Miguel de Icaza  <miguel@novell.com>
744         
745         * report.cs: Do not use colors if stdout and stderr are not a
746         terminal.
747
748 2007-12-27  Marek Safar  <marek.safar@gmail.com>
749
750         A fix for bug #346998
751         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
752         overloads.
753
754 2007-12-27  Marek Safar  <marek.safar@gmail.com>
755
756         A fix for bug #343465
757         * class.cs: Explicit method name for nested types uses dots only.
758
759 2007-12-27  Marek Safar  <marek.safar@gmail.com>
760
761         A fix for bug #343707
762         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
763
764 2007-12-27  Marek Safar  <marek.safar@gmail.com>
765
766         * ecore.cs: Report type inference errors only when arguments count matches
767         parameter count.
768         
769         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
770         
771         * expression.cs, report.cs: New warning.
772         
773         * typemanager.cs: Catch anonymous method type too.
774
775 2007-12-23  Marek Safar  <marek.safar@gmail.com>
776
777         A fix for bug #346379
778         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
779
780 2007-12-23  Marek Safar  <marek.safar@gmail.com>
781
782         A fix for bug #347359
783         * expression.cs (Invocation): Don't resolve already resolved expression.
784
785 2007-12-23  Marek Safar  <marek.safar@gmail.com>
786
787         A fix for bug #347189
788         * class.cs (FixedField): Use non-dependent code only in the define phase.
789
790 2007-12-23  Marek Safar  <marek.safar@gmail.com>
791
792         A fix for bug #348076
793         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
794
795 2007-12-22  Marek Safar  <marek.safar@gmail.com>
796
797         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
798         discovered extension methods.
799
800 2007-12-22  Marek Safar  <marek.safar@gmail.com>
801
802         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
803         method.
804
805 2007-12-21  Miguel de Icaza  <miguel@novell.com>
806
807         * report.cs (ErrorMessage): Add support for using colors on
808         terminals that support it. 
809
810 2007-12-21  Marek Safar  <marek.safar@gmail.com>
811
812         * ecore.cs: Use information about expanded params for error reporting.
813
814 2007-12-21  Marek Safar  <marek.safar@gmail.com>
815
816         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
817         and logic for params overloads.
818         
819 2007-12-15  Miguel de Icaza  <miguel@novell.com>
820
821         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
822         as this is also created from the parser.  Fixes #349034
823
824 2007-12-12  Miguel de Icaza  <miguel@novell.com>
825
826         * statement.cs (Throw.CloneTo): it is valid to have empty
827         expressions for throw. 
828
829 2007-12-03  Marek Safar  <marek.safar@gmail.com>
830
831         * cs-parser.jay: Set delegate constraint parsing region correctly.
832
833 2007-12-03  Marek Safar  <marek.safar@gmail.com>
834
835         A fix for bug #345467
836         * typemanager.cs (IsEqual): Compare generic parameters position only.
837         
838 2007-11-28  Marek Safar  <marek.safar@gmail.com>
839
840         * expression.cs (BaseAccess): Type arguments can be null.
841
842 2007-11-27  Raja R Harinath  <harinath@gmail.com>
843
844         * statement.cs (Block.Resolve): Ensure flow-branching tree is
845         consistent even when an error has occured.
846         (Switch.Resolve): Likewise.
847
848 2007-11-22  Marek Safar  <marek.safar@gmail.com>
849
850         A fix for bug #334505
851         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
852         overrides.
853         
854 2007-11-22  Marek Safar  <marek.safar@gmail.com>
855
856         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
857         refactorings required to resolve extension methods correctly when mixing
858         generics and non-generics members.
859         
860 2007-11-20  Marek Safar  <marek.safar@gmail.com>
861
862         A fix for bug #342584
863         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
864         conversion.
865         
866 2007-11-19  Marek Safar  <marek.safar@gmail.com>
867
868         A fix for bug #342512
869         * delegate.cs: Use delegate argument expression when is available. Don't
870         emit virtual call when class is sealed.
871         
872 2007-11-16  Marek Safar  <marek.safar@gmail.com>
873
874         A fix for bug #325423
875         * assign.cs (FieldInitializer): Use resolved expression for emit.
876         
877         * class.cs: Print less confusing error message.
878         
879 2007-11-16  Marek Safar  <marek.safar@gmail.com>
880
881         * cs-tokenizer.cs: Removed GMCS ifdefs.
882         
883         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
884         mcs.
885         
886         * cs-parser.jay: Disabled nullable check.
887         
888         * generic-mcs: Copied more generic stuff.
889                 
890 2007-11-16  Marek Safar  <marek.safar@gmail.com>
891
892         * gcs-parser.jay: Merged to cs-parser.jay.
893         
894         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
895         * *.csproj, *.sources: Updated to use only jay parser file.
896
897 2007-11-16  Marek Safar  <marek.safar@gmail.com>
898
899         * gcs-parser.jay: Added nullable and default expression feature checks.
900         
901 2007-11-16  Marek Safar  <marek.safar@gmail.com>
902
903         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
904         it fixes many TODOs and hidden bugs.
905         
906         * expression: Removed duplicate error check.
907
908 2007-11-15  Marek Safar  <marek.safar@gmail.com>
909
910         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
911         implicitly type local variable only when it is used in a declaration.
912
913 2007-11-15  Marek Safar  <marek.safar@gmail.com>
914
915         * attribute.cs: Use CS0612 for empty strings.
916
917 2007-11-14  Marek Safar  <marek.safar@gmail.com>
918
919         * lambda.cs, statement.cs: Contextual return may act as a statement.
920
921 2007-11-14  Marek Safar  <marek.safar@gmail.com>
922
923         A fix for a regression cause by #324222
924         * class.cs: Don't report unused even when it implements an interface.
925         
926 2007-11-13  Marek Safar  <marek.safar@gmail.com>
927
928         A fix for bug #341205
929         * ecore.cs, expression.cs: Method group expression cannot do static
930         method access with an instance reference check before overloading takes
931         a place.
932         
933 2007-11-13  Marek Safar  <marek.safar@gmail.com>
934
935         A fix for bug #325359
936         * class.cs: Use predictable name for automatically generated property.
937         
938 2007-11-12  Marek Safar  <marek.safar@gmail.com>
939
940         A fix for bug #324996
941         * expression.cs (Is): Handle case where D is nullable and T is not
942         correctly.
943         
944         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
945         
946 2007-11-12  Marek Safar  <marek.safar@gmail.com>
947
948         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
949         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
950         Flush small error reporting changes.
951         
952 2007-11-09  Marek Safar  <marek.safar@gmail.com>
953
954         A fix for bug #324996
955         * expression.cs: Rewrote Is expression implementation to work with
956         generics, nullable types, anonymous method. A const result expression 
957         uses existing infrastructure instead of custom not fully-featured one.
958         
959 2007-11-08  Marek Safar  <marek.safar@gmail.com>
960
961         A fix for bug #340202
962         * class.cs: Consider generics for volatile field.
963
964 2007-11-08  Marek Safar  <marek.safar@gmail.com>
965
966         A fix for bug #335594
967         * expression.cs: Use conversion rules when handling string addition.
968         
969 2007-11-07  Marek Safar  <marek.safar@gmail.com>
970
971         A fix for bug #336651
972         * expression.cs: Fixed a crash when probing is on.
973         
974 2007-11-07  Marek Safar  <marek.safar@gmail.com>
975
976         A fix for bug #324242
977         * covert.cs: Added a conversion from any nullable-type with an 
978         underlying enum-type to the type System.Enum.
979         
980 2007-11-07  Marek Safar  <marek.safar@gmail.com>
981
982         A fix for bug #324222
983         * class.cs: Report all non-used event fields.
984         
985 2007-11-07  Marek Safar  <marek.safar@gmail.com>
986
987         A fix for bug #325161
988         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
989         qualifier for generic types.
990         
991 2007-11-07  Marek Safar  <marek.safar@gmail.com>
992
993         A fix for bug #322971
994         * expression.cs, ecore.cs: Added intermediate result value check for
995         indexers. 
996         
997 2007-11-07  Marek Safar  <marek.safar@gmail.com>
998
999         A fix for bug #324754
1000         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
1001         when it was requested.
1002
1003 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1004
1005         A fix for bug #325101
1006         * expression.cs: Do type not value comparison for `is' expression.
1007
1008 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1009
1010         A fix for bug #320236
1011         * convert.cs: Don't apply user conversion on underlying target type.
1012
1013 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1014
1015         * expression.cs: Don't use unresolved expression for error reporting.
1016  
1017 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1018
1019         A fix for bugs #337712, #324490
1020         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
1021         overloading resolution too.
1022         
1023         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
1024         the process consistent and more robust.
1025         
1026         * expression.cs, linq.cs, report.cs: Update.
1027
1028 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1029
1030         A fix for bug #332909
1031         * attribute.cs: Resolve attributes in correct context using error
1032         handling procedure.
1033         
1034         * rootcontext.cs: Define Obsolete attribute members as core members.
1035         
1036 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1037
1038         * statement.cs: Removed unused methods.
1039         
1040 2007-10-31  Wade Berrier  <wberrier@novell.com>
1041
1042         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
1043         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
1044         during 'make dist')
1045
1046 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1047
1048         A fix for bug #338102
1049         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
1050         methods registered as non-generics.
1051         
1052 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1053
1054         A fix for bugs #337712, #324490
1055         * delegate.cs: Delegate covariance and contravariance is not allowed for
1056         value types.
1057         
1058 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1059
1060         A fix for bug #337719 
1061         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
1062         `from' keyword.
1063         
1064 2007-10-30  Marek Safar  <marek.safar@gmail.com>
1065  
1066         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
1067
1068 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1069  
1070         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
1071         query expressions.
1072
1073 2007-10-29  Raja R Harinath  <rharinath@novell.com>
1074
1075         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
1076
1077 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1078  
1079         A fix for bug #334652
1080         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
1081         extension methods when we have not found the best candidate in normal
1082         container.
1083
1084 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1085
1086         * AssemblyInfo.cs: Keep up-to-date.
1087
1088 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1089
1090         * Makefile: Fixed generics compiler name.
1091         
1092 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1093
1094         * lambda.test: removed, lambda parsing is done differently.
1095         
1096         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
1097
1098 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
1099
1100         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
1101
1102 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1103
1104         * Makefile, *.sources : All C# compilers are in mcs folder.
1105         
1106         * *.cs: Use existing 2_1 define for smcs.
1107
1108 2007-10-26  Marek Safar  <marek.safar@gmail.com>
1109
1110         A fix for bug #335847
1111         * assign.cs, expression.cs: Couple of changes to avoid creating a
1112         temporary variable for each object initializer assignment statement. It
1113         simplifies struct initialization too, otherwise two temporary variables
1114         would be required.
1115         Implemented optimization of redundant default element initializers.
1116         
1117 2007-10-25  Marek Safar  <marek.safar@gmail.com>
1118
1119         A fix for bug #336766
1120         * expression.cs (Class.CheckBase): Use generic name when method is
1121         generic.
1122         
1123 2007-10-25  Marek Safar  <marek.safar@gmail.com>
1124
1125         A fix for bug #334737
1126         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
1127         variable and not variable argument for prepared copies.
1128
1129 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1130
1131         A fix for bug #325110
1132         * class.cs, expression.cs, attribute.cs: Use open generic method when
1133         checking conditional attribute.
1134         
1135 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1136
1137         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
1138         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
1139         FeatureIsNotAvailable.
1140
1141 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1142
1143         ** C# 3.0 Partial methods
1144         
1145         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
1146         methods support. Because of member cache issue with generics only
1147         non-generics partial methods are fully supported.
1148         
1149 2007-10-23  Marek Safar  <marek.safar@gmail.com>
1150         
1151         * class.cs, decl.cs: Rewrote member overloads check to cope with 
1152         generics and to use member cache for member checking. It also improves
1153         performance and fixes remaining overloads issues.
1154         
1155 2007-10-20  Marek Safar  <marek.safar@gmail.com>
1156         
1157         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
1158         roottypes.cs, typemanager.cs:
1159                 
1160         A member cache creation logic changed to add members immediately and
1161         not rely on fallback. The member cache is now only prefered way
1162         how to access and find type declaration members. It saves 5 MB of memory
1163         during MWF compilation and makes code ready for more optimizations and
1164         clean-ups, it's also a pre-requirement for partial methods.
1165         
1166 2007-10-18  Raja R Harinath  <harinath@gmail.com>
1167
1168         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
1169         handling for generic parameters.
1170
1171 2007-10-15  Marek Safar  <marek.safar@gmail.com>
1172         
1173         * class.cs (FixedField): Removed redundant volatile check.
1174         
1175 2007-10-15  Marek Safar  <marek.safar@gmail.com>
1176         
1177         * class.cs, decl.cs: Fixed overload members verification to do only one
1178         check per possible collision.
1179         
1180 2007-10-13  Marek Safar  <marek.safar@gmail.com>
1181         
1182         A fix for bug #325478
1183         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
1184         and create only one disposable flags container.
1185         
1186 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1187         
1188         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
1189         * statement.cs (Fixed): Fixed variables cloning.
1190         
1191 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1192         
1193         A fix for bug #333342
1194         * class.cs (EventField): Don't mark value type event as synchronized. 
1195         
1196 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1197         
1198         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
1199         inference to identify best candidate method correctly.
1200         (ProperyExpr): A range variable is read only and cannot be modified.
1201         
1202 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1203         
1204         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
1205         logic to identify best candidate method correctly.
1206         
1207 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1208         
1209         * location.cs (Equals, GetHashCode): Removed.
1210         
1211 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1212         
1213         * report.cs: Implemented message recorder. It is used mainly for lambda
1214         expressions to capture otherwise swallowed error messages.
1215         
1216         * anonymous.cs, lambda.cs.cs: Do full parameters check.
1217
1218         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
1219         and not at the top.
1220         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
1221                 
1222         * expression.cs (MemberAccess): Always report lookup failure.
1223         
1224         * location.cs: Implemented Equals, GetHashCode.
1225         
1226         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
1227         
1228 2007-10-10  Jb Evain  <jbevain@novell.com>
1229
1230         * codegen.cs: re-enable assembly version check.
1231
1232 2007-10-09  Marek Safar  <marek.safar@gmail.com>
1233         
1234         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
1235         checks.
1236         
1237         * namespace.cs (UsingAlias): Do correct version check.
1238         
1239 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1240         
1241         * expresison.cs, ecore.cs: Issue extension method error message when
1242         appropriate.
1243         
1244         * rootcontext.cs: Added ISO_2 compiler mode option.
1245
1246 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1247         
1248         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
1249          message.
1250         
1251 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1252         
1253         * attribute.cs (GetString, GetBoolean): Work with both literal and
1254         constant.
1255         
1256         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
1257         Moved method overload specific methods to MethodGroupExpr.
1258         
1259         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
1260         it should be less memory consuming.
1261         
1262 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
1263
1264         * codegen.cs: remove the assembly version check until the buildbot is
1265         fixed.
1266
1267 2007-10-07  Jb Evain  <jbevain@novell.com>
1268
1269         * attribute.cs (Attribute.GetString): if the value
1270         expression is a StringConstant, return its string value.
1271
1272 2007-10-07  Jb Evain  <jbevain@novell.com>
1273
1274         * typemanager.cs: add `assembly_version_attribute_type`.
1275         * codegen.cs: on attribute emission, check that the
1276         AssemblyVersionAttribute doesn't overflow.
1277
1278 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1279         
1280         A fix for bug #324677
1281         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
1282         parent container of a scope container with currently resolved one. 
1283         
1284 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1285         
1286         A fix for bug #325534
1287         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
1288         only.
1289         
1290 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1291         
1292         A fix for bug #327504
1293         * class.cs (Operator.Define): Refactored implicit and explicit user
1294         operator conversion rules.
1295         
1296 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1297         
1298         A fix for bug #327520
1299         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
1300         
1301 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1302         
1303         A fix for bug #328022
1304         * class.cs (MethodData.Define): Use correct method to check whether
1305         a method implementents an accessor.
1306         
1307 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1308         
1309         A fix for bug #330069
1310         * statement.cs (Fixed.Resolve): Read the first array element only when
1311         an array is instantiated. 
1312         
1313 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1314         
1315         * expression.cs, assign.cs, generics.cs: Print correct operator when
1316         compound assignment is used.
1317         
1318 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1319         
1320         A fix for bug #325841
1321         * expression.cs (ArrayAccess): Use full argument cloning only for
1322         string compound concatenation.
1323         
1324 2007-10-03  Marek Safar  <marek.safar@gmail.com>
1325         
1326         A fix for bug #328774
1327         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
1328         assignment.
1329         (PropertyExpr.EmitAssign): Fixed string concatenation compound
1330         assignment.
1331
1332 2007-10-03  Raja R Harinath  <rharinath@novell.com>
1333
1334         Fix #328490
1335         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
1336         Event accessibility checks here.  Remove some bogus code that
1337         accidently made GenericMethods work.
1338         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
1339
1340 2007-09-25  Marek Safar  <marek.safar@gmail.com>
1341         
1342         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
1343         
1344         * statement.cs (Block): Refactored AddVariable to allow error handling
1345         customization.
1346         
1347         * generic.cs: New stub.
1348         
1349 2007-09-23  Marek Safar  <marek.safar@gmail.com>
1350         
1351         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
1352         flag.
1353         
1354 2007-09-17  Marek Safar  <marek.safar@gmail.com>
1355
1356         * class.cs: Use partial container to record whether any partial part
1357         contains static field initializer and therefore default contructor has
1358         to be defined.
1359         
1360 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1361
1362         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
1363         mono-list when only one of two partial parts has defined accessibility
1364         modifier.
1365         
1366 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1367
1368         A fix for bug #82845
1369         
1370         * class.cs (TypeContainer): Set correct resolve context for all field
1371         initializers.
1372         
1373 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1374
1375         * assign.cs: Fixed a crash when field is resolved twice with an error.
1376         
1377         * codegen.cs: Changed InFieldInitializer to be flag.
1378         
1379         * anonymous.cs, ecore.cs, expression.cs: Update after
1380         IsInFieldInitializer rename.
1381         
1382         * const.cs: Removed unused parameter.
1383         
1384         * class.cs: Changed the way how we resolve and emit field initializers.
1385         The field initilizers have to have access to contructor block to emit
1386         compiler generated code.
1387
1388 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1389
1390         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
1391         generics use TypeContainer instead.
1392         
1393 2007-09-12  Marek Safar  <marek.safar@gmail.com>
1394         
1395         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
1396
1397         * lambda.cs (ResolveParameters): Use more powerful
1398         InflateGenericArgument.
1399         
1400         * parameters.cs: Better exception message.
1401                 
1402 2007-09-10  Marek Safar  <marek.safar@gmail.com>
1403
1404         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
1405         correct expression block type. 
1406         
1407         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
1408         
1409         * expression.cs (Invocation): Extracted method group resolve to
1410         DoResolveOverload.
1411         
1412 2007-09-07  Marek Safar  <marek.safar@gmail.com>
1413
1414         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
1415         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
1416         
1417         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
1418         generic extension methods.
1419
1420 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1421
1422         A fix for bug #82676 (Do I get it right now?)
1423         * convert.cs (Binary.ResolveOperator): An interface is converted to the
1424         object before a standard conversion is applied.
1425         
1426 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1427
1428         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
1429         #82676.
1430         
1431 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1432
1433         A fix for bug #82676
1434         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
1435         non-generic interface types.
1436         
1437 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1438
1439         A fix for bug #82690
1440         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
1441         
1442 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1443
1444         A fix for bug #82571
1445         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
1446         modifier for container based methods.
1447         
1448 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1449
1450         A fix for bug #82676
1451         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
1452         any interface-type T means to any of interface type T.
1453
1454 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1455
1456         * namespace.cs: We have 2 versions of System.Core assembly.
1457
1458 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1459
1460         A fix for bug #82652
1461         * class.cs (Class.GetClassBases): Compare types and not expressions.
1462
1463 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1464
1465         A fix for bug #82620
1466         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
1467         actually never worked before.
1468         (IndexerAccess): Emit prepared arguments before they are modified.
1469         
1470 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1471
1472         A fix for bug #82563
1473         * assign.cs: Revert wrong fix.
1474         
1475         * expression.cs (VariableReference.EmitAssign): Handle ref reference
1476         correctly.
1477         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
1478         Instead of ldelema/stdind we have to use temporary variables to handle
1479         cases like String.Concat (params string[]).
1480         
1481 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1482
1483         * class.cs: EmitAttributes to Emit rename.
1484         
1485         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
1486         null.
1487         (MemberCore.HasClsCompliantAttribute): Don't depend on 
1488         GetClsCompliantAttributeValue execution.
1489         
1490 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1491
1492         * anonymous.cs: Use shorter type prefix.
1493         
1494         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
1495         when exist.
1496         
1497         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
1498         variables when probing is on.
1499         
1500         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
1501         unresolved variables.
1502         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
1503         handle transparent identifiers.
1504         
1505 2007-08-26  Marek Safar  <marek.safar@gmail.com>
1506
1507         * attribute.cs (IsClsCompliant): Add nullable types test.
1508         
1509 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
1510
1511         * doc.cs : catch other types of exception than XmlException to
1512           report CS1570. Fixed bug #82565.
1513
1514 2007-08-23  Marek Safar  <marek.safar@gmail.com>
1515
1516         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
1517         The number of delegate parameters has to match.
1518         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
1519         arrays.
1520
1521 2007-08-21  Marek Safar  <marek.safar@gmail.com>
1522
1523         * anonymous.cs (AnonymousMethod): Generate private anonymous method
1524         to fix problem with private arguments.
1525
1526 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1527
1528         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
1529         
1530         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
1531         
1532         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
1533         empty. Add cloning suport.
1534         
1535         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
1536
1537 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1538
1539         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
1540         to create EmptyCast. It handles EmptyConstantCast specialization for
1541         constants.
1542         
1543 2007-08-18  Marek Safar  <marek.safar@gmail.com>
1544
1545         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
1546         (EmitArrayArgument): One routine for array arguments.
1547         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
1548         
1549 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1550
1551         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
1552
1553 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1554
1555         * anonymous.cs: MemberLookupFinal update.
1556
1557         * class.cs (ConstructorInitializer): Is expression based.
1558         
1559         * delegate.cs: MethodGroupExpr update.
1560         
1561         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
1562         messages.
1563         (Error_MemberLookupFailed): Customizable error override.
1564         (MethodGroupExpr): Keep queried type for later usage.
1565         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
1566         resolve.
1567         
1568         * expression.cs: Error_MemberLookupFailed refactoring.
1569         (New.DoResolve): Resolve as much as possible.
1570         (ElementInitializer.Error_MemberLookupFailed): Object initializer
1571         customization for invalid member types.
1572
1573         * statement.cs: MethodGroupExpr update.
1574         
1575 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1576
1577         * modifier.cs (Check): Check all modifiers and not only accessibility
1578         ones.
1579
1580 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1581
1582         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
1583         type and not an expression.
1584
1585 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1586
1587         * statement.cs (Catch.Clone): Type and variable can be null.
1588
1589 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1590
1591         A fix for bug #81979
1592         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
1593         I am really not sure whether this is the best fix.
1594         
1595         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
1596         only once.
1597         
1598 2007-08-14  Marek Safar  <marek.safar@gmail.com>
1599
1600         ** C# 3.0 Object and collection initializers (major re-write)
1601         
1602         * assign.cs (DoResolve): Initializers are not assign related.
1603         
1604         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
1605         used during collection or object initialization.
1606         
1607         * expression.cs (Error_InvalidArguments): Add initializers specific
1608         messages. More will come later because it requires some general
1609         refactoring.
1610         (New.DoResolve): Better error handling for unsafe types.
1611         (EmptyExpressionStatement): New class.
1612         (ElementInitializer): An object initializer expression.
1613         (CollectionElementInitializer): A collection initializer expression.
1614         (CollectionOrObjectInitializers): A block of object or collection
1615         initializers.
1616         (NewInitialize): New expression with element/object initializers.
1617         
1618         * statement.cs: Reverted object/collection initializer hacks.
1619         
1620         * typemanager.cs (CSharpName): Filter __arglist type.
1621         
1622 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1623
1624         ** C# 3.0 Anonymous Types (update to the latest standard)
1625         
1626         * expression.cs (Binary.ResolveOperator): Threat all null based types
1627         same.
1628         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
1629         (AnonymousTypeParameter): Updated.
1630         
1631         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
1632         (AnonymousTypeClass): New anonymous type container.
1633         
1634         * class.cs (AddField): Return operation result.
1635         
1636         * generic.cs: Another empty TypeArguments overload.
1637         
1638         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
1639         are stored at top of normal hierarchy.
1640         
1641         * typemanager.cs (CSharpName): Filter anonymous types.
1642         
1643 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1644
1645         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
1646         as single Concat call. How could we miss that :-(
1647         
1648 2007-08-08  Marek Safar  <marek.safar@gmail.com>
1649
1650         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
1651         
1652 2007-08-07  Miguel de Icaza  <miguel@novell.com>
1653
1654         * expression.cs: Fix the previous commit, the creation of the
1655         arguments array list needs also to be conditional on the arguments
1656         not being null.
1657
1658         * class.cs: Add a little bit of help to help narrow down problems.
1659
1660         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
1661         not try to copy in that case. 
1662
1663         * driver.cs: When building SMCS, include a new different set of
1664         default assemblies here.   Do this here so we can control whether
1665         to include the default assemblies with /noconfig.
1666
1667 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1668
1669         A fix for bug #81979
1670         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
1671         only.
1672
1673 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1674
1675         A fix for bug #82300
1676
1677         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
1678         we are in probing scope.
1679
1680 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1681
1682         A fix for bug #82301
1683
1684         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
1685         (Statement.CloneTo): Clone and not map children blocks.
1686
1687 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1688
1689         A fix for bug #82299
1690
1691         * expression.cs (LocalVariableReference.CloneTo): Remap local info
1692         variable too.
1693         
1694         * statement.cs (Statement.CloneTo): Clone variables before statements
1695         to allow remaping of local variables.
1696
1697 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1698
1699         A fix for bug #82296
1700
1701         * anonymous.cs,
1702         * report.cs: Log crash details for future clone problems.
1703         
1704         * statement.cs (Return.Clone): Don't clone non-existent expression.
1705
1706 2007-08-03  Raja R Harinath  <harinath@gmail.com>
1707
1708         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
1709         (Class.AddBasesForPart): Move CS0537 check here from ...
1710         * cs-parser.jay (class_declaration): ... here.  Move calling of
1711         'AddBasesForPart' to ...
1712         (class_bases): ... here.
1713         (struct_declaration, interface_declaration): Update to changes.
1714
1715 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1716
1717         A fix for bug #81923
1718
1719         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
1720         conversion is allowed.
1721
1722 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1723
1724         A fix for bug #81564
1725
1726         * ecore.cs (EventExpr): Add IsBase handling.
1727
1728         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
1729         too.    
1730         
1731 2007-08-02  Raja R Harinath  <harinath@gmail.com>
1732
1733         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
1734         * cs-parser.jay: Some whitespace cleanups.
1735         (current_delegate): New.
1736         (type_name): New.
1737         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
1738         a dummy code block, and use 'type_name' instead of 'member_name'.
1739         (interface_declaration, class_declaration): Likewise.
1740         (delegate_declaration): Likewise.  Rearrange slightly and use
1741         'current_delegate'.
1742         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
1743         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
1744
1745 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1746
1747         A fix for bug #82039
1748
1749         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
1750         available.
1751
1752         * typemanager.cs (CSharpName): Split to string overload.
1753
1754 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1755
1756         * expression.cs,
1757         * report.cs: Updated warning CS0472.
1758
1759 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1760
1761         A fix for bug #82181
1762         * cs-parser.jay,
1763         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
1764
1765 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1766
1767         A fix for bug #82277
1768         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
1769
1770 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1771
1772         ** C# 3.0 Type Inference (major bits are working)
1773         
1774         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
1775         (.ImplicitStandardConversionExists): Uses compatible.
1776         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
1777         (.InferReturnType): New method.
1778         (.Compatible): Refactored.
1779         (.ResolveParameters): Uses factory to create resolved parameters.
1780         (.CompatibleMethod): Add probing mode support.
1781         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
1782         clearly distinguish between 2 different operations.
1783         (LambdaMethod): Moved to lambda.cs.
1784         (AnonymousMethod): Removed unused fields and methods.
1785         (AnonymousDelegate): Simplified.
1786         
1787         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
1788         
1789         * convert. cs (ImplicitConversionStandard): Compatible works differently.
1790         
1791         * delegate.cs (Delegate): New mehods to reduce code duplication.
1792         (.GetConstructor): New method.
1793         (.GetInvokeMethod): New method.
1794         (DelegateCreation): Updated.
1795         
1796         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
1797         does not exist.
1798         (OverloadResolve): Made probing little bit faster.
1799         
1800         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
1801         when probing is on.
1802         
1803         * generic.cs (TypeInferenceContext): Dummy implementation.
1804         
1805         * iterators.cs: Updated after Resolve/Define rename.
1806         
1807         * lambda.cs (LambdaExpression)
1808         (.ResolveParameters): Handles both type of arguments and type inference too.
1809         
1810         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
1811         (InflateTypes): Updated.
1812         
1813         * support.cs (InflateTypes): Changed signature and updated.
1814         
1815         * typemanager.cs (LookupMemberCache): Better dynamic type check.
1816         (MemberLookup_FindMembers): More MS tricks.
1817         (GetParameterData): Ditto.
1818         (GetDelegateParameters): Uses quick path for dynamic types.
1819         
1820 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1821
1822         * class.cs (MethodData.Define): EmitContext is required for generic stuff
1823         only.
1824
1825 2007-07-31  Marek Safar  <marek.safar@gmail.com>
1826
1827         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
1828         syntax.
1829         
1830 2007-07-26  Jb Evain  <jbevain@novell.com>
1831
1832         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
1833         which takes a boolean 'report_errors', similar to the GetMethod.
1834         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
1835         in .net 2.1, do not report errors here.
1836
1837         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
1838         System.Runtime.CompilerServices.RequiredAttributeAttribute and
1839         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
1840         in .net 2.1.
1841
1842         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
1843         of the type InternalsVisibleToAttribute before the first call
1844         to CoreLookupType which is allowed to fail (third boolean parameter
1845         to true). Because, during the resolution for a type that is not
1846         immediately found, we try to check if the type is not defined in
1847         a friend assembly, and to do so, we need the
1848         InternalVisibleToAttribute.
1849
1850 2007-07-23  Miguel de Icaza  <miguel@novell.com>
1851
1852         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
1853         feature that allows structs to be compared against null and inline
1854         the result as true or false.
1855
1856         Notice that the same code is not permitted inside a generic block
1857         of code that would do:
1858
1859         class Foo<T> where T : struct {
1860             bool Eval (T x)
1861             {
1862                  return x == null;
1863             }
1864         }
1865
1866         It is only allowed if the type of T is not bound (no where
1867         clause).   In my opinion, this CSC 2 behavior is broken but people
1868         seem to be using it (IronRuby does, a few bug reports on bugzilla
1869         have it and some people have complained about it).
1870
1871         All of the users that depend on this behavior have code that is
1872         very likely broken. 
1873         
1874         * report.cs (Warning, Error): make these take object arguments,
1875         not strings, as that allows us to take advantage of Format.
1876
1877 2007-07-20  William Holmes  <billholmes54@gmail.com>
1878
1879         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
1880           Left member variable for the Count.
1881         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
1882           MemberName.CountTypeArguments to avoid a NRE. 
1883
1884         This code is contributed under the MIT X11 license
1885
1886 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1887
1888         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
1889
1890 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1891
1892         * doc.cs : generic method arguments are written as ``x while generic
1893           type arguments are `x. Combined with the previous change, fixed bug
1894           #79706.
1895
1896 2007-07-18  Raja R Harinath  <rharinath@novell.com>
1897
1898         Fix #82120
1899         * expression.cs (Binary.ResolveOperator): When converting
1900         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
1901
1902 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1903
1904         * doc.cs : when T: or whatever x: is specified, it does not really
1905           check the doc comment's syntax correctness. Fixed bug #82006.
1906
1907 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1908
1909         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
1910         LambdaExpression better.
1911         
1912         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
1913         
1914         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
1915         
1916         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
1917         as it can be generated.
1918         
1919         * expression.cs (Invocation.Error_InvalidArguments): Show correct
1920         modifiers.
1921         
1922         * lambda.cs (LambdaExpression): Refactored to share same code with
1923         AnonymousMethodExpression.
1924         
1925 2007-07-17  Marek Safar  <marek.safar@gmail.com>
1926
1927         * anonymous.cs (MakeName): Include host name for easier debugging.
1928         (LambdaMethod): New class for lambda spcecific stuff.
1929         
1930         * attribute.cs: Set EmitContext return type.
1931
1932         * class.cs: Set EmitContext return type.
1933         
1934         * codegen.cs (EmitContext): Return type cannot be null to stop messing
1935         with null/void meaning.
1936         
1937         * iterators.cs (ContainerType): Implemented.
1938         
1939         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
1940         
1941         * statement.cs (Return): Updated to lambda expressions.
1942         (Block.CloneTo): Parent can be null.
1943                 
1944 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1945
1946         A fix for bug #81917
1947         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
1948         
1949         * class.cs (FixedField): Check whether field is in unsafe scope.
1950
1951         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
1952         (FieldExpr.Emit): Fixed buffers cannot be volatile.
1953
1954         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
1955         FieldExpr.
1956         
1957         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
1958                 
1959 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1960
1961         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
1962         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
1963         from Report class.
1964
1965 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1966
1967         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
1968         
1969 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1970
1971         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
1972         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
1973         
1974         * codegen.cs(EmitContext): Add ProbingMode flag.
1975         
1976         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
1977         
1978         * driver.cs: For now set both warning values.
1979         
1980         * ecore.cs (SimpleName): Name is readonly.
1981         (MethodGroup.OverloadResolve): One quick path for probing.
1982         
1983         * expression.cs (Unary): Set Oper r/o.
1984         (Binary): Set Oper r/o.
1985         (ParameterReference): Set few instance variables as r/o.
1986         (ParameterReference.DoResolveBase): Don't capture aruments when 
1987         the probing is on.
1988         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
1989         (Arglist): arguments are private.
1990         (SizeOf): type is private and r/o.
1991         (MemberAccess): arguments are private.
1992
1993         * report.cs: Enhanced reporting on/off capabilities.
1994         
1995         * lambda.cs: Uses ec.IsInProbingMode.
1996         (ContextualReturn): Derives from return.
1997         
1998         * rootcontext.cs: For now set both warning values.
1999         
2000         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
2001         copy if one exists.
2002         (Return.Resolve): Don't die immediately.
2003         (Block.Resolve): Speed-up probing.
2004         (Block.CloneTo): Clone only child blocks.
2005
2006 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
2007
2008         * iterators.cs: reverted Miguel's latest change (r81925) as it
2009         breaks the build in System.
2010
2011 2007-07-13  Miguel de Icaza  <miguel@novell.com>
2012
2013         * iterators.cs (Yield.CheckContext): Check for the iterator type
2014         also here as we can call into Yield even in codepaths that are not
2015         directly checked by
2016         (MethodOrOperator is the only path that was checked).
2017
2018         In addition to the standard check, use a more specific check for
2019         constructors to report a more verbose error. 
2020
2021 2007-07-12  Miguel de Icaza  <miguel@novell.com>
2022
2023         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
2024         report the warning and continue 
2025
2026         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
2027         values on the stack on the call to Emit.   Use EmitStatement if
2028         possible, or using Emit + Pop if not possible.   Fixes #82064
2029
2030 2007-07-12  Raja R Harinath  <rharinath@novell.com>
2031
2032         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
2033         avoid try...finally in some cases.
2034
2035 2007-07-10  Marek Safar  <marek.safar@gmail.com>
2036
2037         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
2038         
2039         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
2040         instead of method. Re-use standard error handling.
2041         (ConstructorInitializer.Emit): Simplified.
2042         
2043         * delegate.cs: Updated after Invocation.EmitCall change.
2044         
2045         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
2046         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
2047         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
2048         method and don't permanently changing input arguments.
2049         (MethodGroupExpr): Introduced resolved best_candidate, when method group
2050         is resolved it has one of the candidates is the best one which is later
2051         used to emit. Removed a few unused method.
2052         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
2053
2054         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
2055         (Binary.ResolveOperator): Ditto.
2056         (ConditionalLogicalOperator.DoResolve): Ditto.
2057         (Invocation): Uses method group.
2058         (Invocation.DoResolve): Simplified.
2059         (Invocation.EmitCall): Removed useless is_static.
2060         (Invocation.Emit): Delegate to method group.
2061         (Invocation.EmitStatement): Simplified.
2062         (New): Uses method group.
2063         (MemberAccess.DoResolve): Don't destroy original expression.
2064         
2065         * statement.cs (ForEach.Resolve): Use null for no method arguments.
2066         
2067 2007-07-04  Marek Safar  <marek.safar@gmail.com>
2068
2069         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
2070         
2071         * anonymous.cs,
2072         * lambda.cs: Add custom error message type.
2073
2074 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2075
2076         * lambda.cs: Simplified little bit.
2077         
2078         * parameter.cs: Introduced ImplicitLambdaParameter.
2079         (Parameters.CreateFullyResolved): New factory instead of ctor.
2080         
2081         * anonymous.cs,
2082         * class.cs,
2083         * delegate.cs: Updated parameter creation.
2084         
2085 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2086
2087         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
2088         arguments.
2089         
2090         * generic.cs: Synchronized with gmcs.
2091         
2092 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2093
2094         * class.cs (Indexer): Check return type as soon as possible.
2095         
2096         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
2097         members too.
2098         
2099         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
2100         
2101         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
2102         
2103         * parameter.cs (Parameter): Use expression type when it is available.
2104         
2105         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
2106         method modifier for the first parameter only.
2107
2108 2007-06-24  Marek Safar  <marek.safar@gmail.com>
2109
2110         A fix for bug #81938
2111         * typemanager.cs (ChangeType): Fixed couple of char conversions.
2112         
2113         * constant.cs: Tide up an exception message.
2114
2115 2007-06-22  Marek Safar  <marek.safar@gmail.com>
2116
2117         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
2118         an uninitialized variable is used.
2119         
2120         * expression.cs (LocalVariableReference.DoResolve): Ditto.
2121
2122 2007-06-22  Marek Safar  <marek.safar@gmail.com>
2123
2124         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
2125         not found error handling.
2126
2127         * expression.cs (ArrayCreation): Removed redundant fields and little bit
2128         simplified.
2129         (ArrayCreation.ResolveArrayElement): To be ready to customization.
2130         (ArrayCreation.DoResolve): Simplified.
2131         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
2132         its own resolve process.
2133         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
2134
2135 2007-06-20  Marek Safar  <marek.safar@gmail.com>
2136
2137         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
2138         more error details.
2139         
2140 2007-06-20  Marek Safar  <marek.safar@gmail.com>
2141
2142         * cs-tokenizer.cs: Removed var related stuff.
2143         
2144         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
2145         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
2146         a type and a keyword at same time.
2147         
2148         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
2149         matches to "var".
2150         
2151         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
2152         implicitly typed arrays, more changes will follow.
2153         
2154         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
2155         
2156 2007-06-19  Marek Safar  <marek.safar@gmail.com>
2157
2158         * ecore.cs (VarExpr): Removed Handled field.
2159         
2160         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
2161         build-in assign functionality.
2162         (ForEach.Resolve): Removed all implicitly typed local variable code and
2163         simplified.
2164         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
2165         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
2166
2167 2007-06-18  Marek Safar  <marek.safar@gmail.com>
2168
2169         * assign.cs: Removed implicitly typed local variable check.
2170         
2171         * expression.cs (LocalVariableReference.DoResolve): Add check for self
2172         referencing implicitly typed local variable.
2173         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
2174         variable here.
2175         
2176         * statement.cs (Fixed): Removed unsupported implicitly typed local
2177         variable code.
2178
2179 2007-06-15  Marek Safar  <marek.safar@gmail.com>
2180
2181         * decl.cs (MemberName): Moved all Unbound stuff to parser.
2182
2183 2007-06-14  Marek Safar  <marek.safar@gmail.com>
2184
2185         A fix for bugs #81855 and #76274
2186         * attribute.cs (AttachTo): Always set owner for global attributes to
2187         prefined owner.
2188         
2189         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
2190         usefull too.
2191         
2192         * cs-parser.jay: Assembly and module attributes must precede all other
2193         elements except using clauses and extern alias declarations.
2194
2195 2007-06-13  Marek Safar  <marek.safar@gmail.com>
2196
2197         A fix for bug #81748
2198         * cs-tokenizer.cs,
2199         * expression.cs: More checks for non ISO-1 features.
2200
2201 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2202
2203         A fix for bug #81807
2204         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
2205         present inside switch statement and it is required by nullable check.
2206
2207 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2208
2209         A fix for bug #81840
2210         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
2211         when type matching fails.
2212         
2213         * namespace.cs: Tiny error message change.
2214
2215 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2216
2217         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
2218         reporting. Added automatic property check.
2219         
2220         * class.cs: Updated after CheckAbstractAndExtern relocation.
2221         (AEventPropertyAccessor.GetSignatureForError): Customized.
2222         
2223 2007-06-11  Marek Safar  <marek.safar@gmail.com>
2224
2225         * class.cs (DefineBaseTypes): Base type can be undefined.
2226         
2227         * ecore.cs (TypeLookup): Minor refactoring.
2228         (DoResolveAsTypeStep): Removed redundant check.
2229
2230         * namespace.cs (Lookup): Removed redundant check.
2231                 
2232         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
2233         ResolveAsTypeTerminal step.
2234         (BootstrapCorlib_*): Simplified.
2235         (PopulateCoreType): Core types can be now external.
2236
2237 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2238
2239         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
2240          verification only.
2241          (InferTypeArguments): Infers anonymous expression type arguments.
2242          (Compatible): Split to Compatible and InferTypeArguments. 
2243         
2244         * lambda.cs: Updated.
2245
2246 2007-06-08  Marek Safar  <marek.safar@gmail.com>
2247
2248         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
2249
2250 2007-06-07  Raja R Harinath  <harinath@gmail.com>
2251
2252         Fix #80477, cs0135-2.cs, cs0135-3.cs
2253         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
2254         names to the "known" variables list.
2255         (Block.CheckInvariantMeaningInBlock): Handle the fact the
2256         parameter names are also "known".
2257         (Block.CheckError136): Remove.
2258         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
2259         null.
2260
2261 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2262
2263         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
2264
2265 2007-06-06  Marek Safar  <marek.safar@gmail.com>
2266
2267         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
2268         internal error not an user error.
2269          
2270         * expression.cs (IsApplicable): Refactored to make debugging easier.
2271
2272         * support.cs: More tricks for non-mono runtimes.
2273         
2274         * typemanager.cs (CoreLookupType): Made public.
2275         (InitSystemCore): All linq specific stuff moved to linq.cs
2276
2277 2007-06-05  Marek Safar  <marek.safar@gmail.com>
2278
2279         * typemanager.cs (CSharpSignature): One more missing build-in types
2280         replacement.
2281         More tricks for non-mono runtime.
2282
2283 2007-06-05  Raja R Harinath  <harinath@gmail.com>
2284
2285         * statement.cs (Block.CheckError136_InParents): Remove.
2286         (Block.AddVariable): Use GetParameterInfo instead.
2287         (ToplevelBlock.ProcessArguments): Likewise.
2288
2289 2007-06-04  Raja R Harinath  <rharinath@novell.com>
2290
2291         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
2292         information too.
2293         (ToplevelBlock.GetParameterInfo): Split out of ...
2294         (ToplevelBlock.GetParameterRefernce): ... this.
2295         (ToplevelBlock.ParameterMap): Remove.
2296         * expression.cs (ParameterReference): Update to use
2297         ToplevelParameterInfo.
2298
2299         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
2300         regression.
2301
2302         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
2303         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
2304
2305         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
2306         (ToplevelBlock.ProcessParameters) ... here.
2307         (ToplevelBlock..ctor): Invoke it.
2308
2309         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
2310         new parameters.
2311
2312         * statement.cs (IKnownVariable): New interface.
2313         (LocalInfo): Implement it.
2314         (ToplevelParameterInfo): New class.
2315         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
2316         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
2317         GetKnownVariableInfo.
2318
2319 2007-06-03  Raja R Harinath  <harinath@gmail.com>
2320
2321         Partly speed up CS0136 error checks.
2322         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
2323         'recurse' parameter.
2324         (Block.DoCheckError136): Only check errors in parameters.  Move
2325         local variable checks ...
2326         (Block.AddVariable): ... here, and ...
2327         (ToplevelBlock.ResolveMeta): ... here.
2328
2329 2007-06-02  Raja R Harinath  <harinath@gmail.com>
2330
2331         * statement.cs (Block.IsChildOf): Remove.
2332
2333         * statement.cs (Statement.Clone): Move special case code ...
2334         (Block.CloneTo): ... here.
2335
2336 2007-05-29  Raja R Harinath  <rharinath@novell.com>
2337
2338         * statement.cs (ToplevelBlock.container): Remove field.  It's
2339         redundant with 'Parent'.
2340         (ToplevelBlock.ContainerBlock): Remove accessor.
2341         (ToplevelBlock..ctor): Update to changes.  Register anonymous
2342         child with parent here, ...
2343         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
2344         current_block.
2345         (start_anonymous): Don't save current_block.
2346         (top_current_block): Remove.
2347
2348         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
2349         (Block.Resolve): Update to changes.
2350         (Block..ctor): Move setting of "correct" 'Toplevel'
2351         and 'Explicit' fields to ...
2352         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
2353
2354 2007-05-27  Raja R Harinath  <harinath@gmail.com>
2355
2356         Kill Block.Implicit
2357         * statement.cs (Block.Implicit): Remove.
2358         (Block): Update to changes.
2359         * flowanalysis.cs: Likewise.
2360
2361         Mildly speed up CheckInvariantMeaningInBlock
2362         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
2363         Recursively call AddKnownVariable to all enclosing blocks.
2364         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
2365         Remove recursive calls.
2366         (Block): Update to changes.
2367
2368         New ExplicitBlock invariants
2369         * statement.cs (Block.Explicit): New field.  It points to the
2370         immediately enclosing non-implicit block.
2371         (Block..ctor): Maintain the invariant.
2372         * cs-parser.jay: Take advantage of invariant.
2373
2374         Introduce ExplicitBlock
2375         * statement.cs (ExplicitBlock): New.
2376         (ToplevelBlock): Derive from it.
2377         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
2378         sense of flag.
2379         (Block.Implicit): Update to changes.
2380         * cs-parser.jay: Update to changes.
2381
2382         Remove unused field
2383         * codegen.cs (EmitContext.IsLastStatement): Remove.
2384         * statement.cs (Block.DoEmit): Update to changes.
2385
2386 2007-05-25  Raja R Harinath  <rharinath@novell.com>
2387
2388         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
2389         modifying current_block directly.
2390
2391 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
2392         
2393         * class.cs: Implemented automatic properties (C# 3.0)
2394           Thanks to Marek for the help.
2395
2396 2007-05-23  Raja R Harinath  <rharinath@novell.com>
2397
2398         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
2399         variable as assigned, note also that all its components are
2400         assigned too.
2401         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
2402
2403 2007-05-19  Marek Safar  <marek.safar@gmail.com>
2404
2405         * anonymous.cs, class.cs: Emit Compiler generated attribute when
2406         member is marked as compiler generated.
2407         
2408         * decl.cs (MemberCore): Refactored ModFlags into property.
2409
2410         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
2411         (Check): Check only accessibility modifiers.
2412
2413 2007-05-18  Raja R Harinath  <rharinath@novell.com>
2414
2415         Track all assignable slots in one bit array
2416         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
2417         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
2418         logic from VariableMap constructor here.  Use the same 'offset'
2419         variable that's later used for computing offsets of local
2420         variables.
2421         * flowanalysis.cs (UsageVector.parameters): Remove.
2422         (UsageVector): Update to changes.
2423         (VariableMap): Remove.
2424
2425         Avoid creating ParameterMap in every block
2426         * statement.cs (Block.ParameterMap): Move ...
2427         (ToplevelBlock.ParameterMap): ... here.
2428         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
2429         only once.
2430         * flowanalysis.cs (FlowBranching.param_map): Remove.
2431         (FlowBranching.UsageVector): Update to changes.
2432         (FlowBranchingToplevel.CheckOutParameters): Likewise.
2433
2434         * statement.cs (Block.CloneTo): Clone Toplevel field too.
2435
2436         * expression.cs (ParameterReference): Distinguish between block
2437         where parameter was referenced and declared.
2438
2439 2007-05-18  Marek Safar  <marek.safar@gmail.com>
2440
2441         * flowanalysis.cs, statement.cs: Put back improved error handling.
2442
2443 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
2444         
2445         * assign.cs:
2446         * expression.cs:
2447           Imporved object and collection initialization (C# 3.0).
2448
2449 2007-05-15  Marek Safar  <marek.safar@gmail.com>
2450
2451         A fix for bug #81380
2452         * expression.cs (Is.DoResolve): Only value types have constant `is'
2453         behaviour.
2454
2455 2007-05-15  Raja R Harinath  <rharinath@novell.com>
2456
2457         * statement.cs (ToplevelBlock.child): Remove.
2458
2459 2007-05-15  Raja R Harinath  <harinath@gmail.com>
2460
2461         Rationalize ResolveMeta: refactoring
2462         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
2463         out constant handling code into ...
2464         (Block.DoResolveConstants): ... this.
2465
2466         Rationalize ResolveMeta: kill local_map
2467         * statement.cs (Block.local_map, Block.LocalMap): Remove.
2468         (Block.AssignableSlots): New.
2469         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
2470         for locals -- move code from VariableMap here.  Avoid unnecessary
2471         allocations.
2472         * flowanalysis.cs (FlowBranching.local_map): Remove.
2473         (FlowBranching..ctor): Use Block.AssignableSlots.
2474         (VariableMap): Remove unused constructors.
2475
2476 2007-05-11  Raja R Harinath  <rharinath@novell.com>
2477
2478         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
2479
2480 2007-05-11  Marek Safar  <marek.safar@gmail.com>
2481
2482         * typemanager.cs (IsFriendAssembly): Should not be called for building
2483         assembly.
2484
2485 2007-05-09  Marek Safar  <marek.safar@gmail.com>
2486
2487         * literal.cs (NullConstant): Print null in all cases.
2488         
2489         * expression.cs (Binary.ResolveOperator): Implemented delegate
2490          comparison based on C# 2.0 changes.
2491
2492 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
2493
2494         This code is contributed under the MIT X11 license
2495         
2496         The following enables support for several C# 3.0 language features:
2497         
2498         * cs-tokenizer.cs: Added support for the "var" keyword.
2499         
2500         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
2501           Added VarExpr class to facilitate type inferencing.
2502         
2503         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
2504           to support anonymous types.
2505         
2506         * assign.cs: Added support for type inferencing and initialization.
2507         
2508         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
2509         
2510         * expression.cs: Added implicit array support to ArrayCreation.
2511           Added 5 types and 1 interface:
2512           
2513           IInitializable                Implementing classes can inject initializing
2514                                         statements after object instantiation.
2515           
2516           Initializer                   Stores data for object initialization.
2517           
2518           AnonymousType                 An expression for anonymous types.
2519           
2520           AnonymousTypeParameter        Stores data about an anonymous type's field.
2521           
2522           NewInitialize                 An expression for object initialization.
2523           
2524           CollectionInitialize          An expression for collection initialization.
2525         
2526         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
2527           statements.
2528
2529 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2530
2531         A fix for bug #81500
2532         * cs-tokenizer.cs: Add special handling for coalescing operator.
2533
2534 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2535
2536         A fix for bug #81529
2537         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
2538         its value from base class until it is redefined.
2539
2540 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2541
2542         Fix regression in cs0631-3.cs
2543         * cs-parser.jay (operator_declarator): Add opt_attributes to error
2544         fallback.  Make error fallback catch more cases.
2545
2546 2007-05-01  Miguel de Icaza  <miguel@novell.com>
2547
2548         * cs-parser.jay: Allow parameters in operator declarations to have
2549         attributes. 
2550
2551 2007-04-27  Miguel de Icaza  <miguel@novell.com>
2552
2553         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
2554         exists. 
2555
2556         * lambda.cs (ContextualReturn.Resolve): An expression is valid
2557         inside the ContextualReturn, it does not have to be an
2558         ExpressionStatement. 
2559
2560 2007-04-24  Miguel de Icaza  <miguel@novell.com>
2561
2562         * lambda.cs (ContextualReturn.Resolve): if the return type is not
2563         set, set it.
2564
2565 2007-04-23  Miguel de Icaza  <miguel@novell.com>
2566
2567         * anonymous.cs (AnonymousContainer): split the virtual Resolve
2568         method in two methods: ResolveNoDefine and Resolve.
2569
2570         ResolveNoDefine will stop just after ResolveTopBlock has been
2571         called.   
2572
2573         Resolve will then continue by creating a method and issuing the
2574         call to method.Define ().
2575
2576         (AnonymousMethod): Split and implement the new Resolve and
2577         ResolveNoDefine as well.
2578
2579         * lambda.cs (LambdaExpression): Split the anonymous method
2580         resolution code into a separate routine (CoreCompatibilityTest)
2581         from DoCompatibleTest.
2582
2583         (LambdaExpression.TryBuild): New method, this method tries to
2584         build the LambdaExpression with the given set of types to be used
2585         as the types for the various parameters of the lambda expression. 
2586
2587         If the compilation succeed with the given types, the infered type
2588         of the Anonymous method is returned, otherwise null is returned.
2589
2590 2007-04-23  Marek Safar  <marek.safar@gmail.com>
2591
2592         A fix for bug #81414
2593         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
2594
2595 2007-04-22  Miguel de Icaza  <miguel@novell.com>
2596
2597         * cs-tokenizer.cs: Change various identifiers here from the
2598         camelCasing to the recommended Linux-like style for instance
2599         variables from the Coding Guidelines. 
2600
2601 2007-04-19  Martin Baulig  <martin@ximian.com>
2602
2603         * convert.cs
2604         (Convert.ImplicitReferenceConversionCore): Allow conversions from
2605         System.Enum to System.ValueType.
2606
2607 2007-04-13  Martin Baulig  <martin@ximian.com>
2608
2609         Rewrote implicit reference conversions.  We need to distinguish
2610         between implicit reference conversions (13.1.4) and implicit
2611         boxing conversions (13.1.5).
2612
2613         According to the spec, there's an an implicit conversion
2614         "From a one-dimensional array-type S[] to IList<T> and base
2615         interfaces of this interface, provided there is an implicit
2616         reference conversion from S to T."  Note that this does not
2617         include boxing conversions.
2618
2619         * convert.cs
2620         (Convert.ImplicitTypeParameterBoxingConversion): New method.
2621         (Convert.ImplicitReferenceConversion): Split into
2622         ImplicitReferenceConversionCore() and
2623         ImplicitBoxingConversionExist().
2624         (Convert.ImplicitReferenceConversionExists): Use the new
2625         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
2626
2627 2007-04-12  Martin Baulig  <martin@ximian.com>
2628
2629         * convert.cs (Convert.ImplicitReferenceConversion): Move the
2630         `TypeManager.null_type' checks up to the top of the method.
2631
2632 2007-04-11  Marek Safar  <marek.safar@gmail.com>
2633
2634         A fix for bug #81350
2635         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
2636         extension methods.
2637
2638 2007-04-11  Martin Baulig  <martin@ximian.com>
2639
2640         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
2641         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
2642         to make this work for generic classes; fixes #79561.
2643
2644 2007-04-11  Martin Baulig  <martin@ximian.com>
2645
2646         * expression.cs (As): Add support for nullable types; fixes #79371.
2647
2648 2007-04-11  Martin Baulig  <martin@ximian.com>
2649
2650         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
2651         `type.FullName' is null; fixes #80243.
2652
2653 2007-04-11  Martin Baulig  <martin@ximian.com>
2654
2655         * expression.cs (Invocation.IsApplicable): Don't modify the method
2656         if type inference succeeded, but the method was not applicable.
2657         Fixes #81250.
2658
2659 2007-04-10  Marek Safar  <marek.safar@gmail.com>
2660
2661         A fix for bug #81324
2662         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
2663         internal and external namespaces containers.
2664
2665 2007-04-10  Martin Baulig  <martin@ximian.com>
2666
2667         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
2668         TypeManager.DropGenericMethodArguments() so we also call
2669         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
2670
2671 2007-04-10  Martin Baulig  <martin@ximian.com>
2672
2673         * iterators.cs (Iterator.CreateIterator): Don't crash if
2674         `method.ReturnType' is null.  This happens if something went wrong
2675         while resolving that typ (we already reported an error in this case).
2676
2677 2007-04-10  Martin Baulig  <martin@ximian.com>
2678
2679         * expression.cs (New.DoResolve): Don't call CheckComImport() on
2680         generic interfaces; report the CS0144 directly.
2681
2682 2007-04-10  Martin Baulig  <martin@ximian.com>
2683
2684         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
2685         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
2686
2687 2007-04-10  Martin Baulig  <martin@ximian.com>
2688
2689         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
2690
2691 2007-04-09  Raja R Harinath  <rharinath@novell.com>
2692
2693         A better fix
2694         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
2695         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
2696
2697         Fix #81338
2698         * statement.cs (For.Resolve): If resolution fails, use
2699         KillFlowBranching.
2700
2701 2007-04-08  Marek Safar  <marek.safar@gmail.com>
2702
2703         * anonymous.cs (MakeName): Make faster and zero-based.
2704         (VerifyExplicitParameterCompatibility): Back to mode where generic
2705         parameter is ignored.
2706         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
2707
2708         * class.cs (EmitType): Method can emit another new method.
2709
2710         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
2711
2712         * driver.cs: Updated.
2713
2714         * lambda.cs: Reuse predefined empty parameters.
2715
2716         * parameter.cs: Updated
2717
2718         * support.cs: Implemented InflateTypes.
2719
2720         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
2721         (InitSystemCore): Introduced to isolate 3.0 dependencies.
2722
2723 2007-04-03  Martin Baulig  <martin@ximian.com>
2724
2725         Fix #80632.
2726
2727         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
2728         version of TypeManager.IsOverride() which also works with generic
2729         types.  
2730
2731 2007-04-03  Martin Baulig  <martin@ximian.com>
2732
2733         Fix #81044.
2734
2735         * convert.cs
2736         (Convert.ExplicitReferenceConversion): We need to cast when
2737         converting from IList<T> to S[].
2738
2739 2007-04-01  Marek Safar  <marek.safar@gmail.com>
2740
2741         * decl.cs (FindExtensionMethods): Consider all candidates with same name
2742         at this level.
2743         
2744         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
2745
2746 2007-03-31  Marek Safar  <marek.safar@gmail.com>
2747
2748         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
2749         argument and return type inferring.
2750
2751         * codegen.cs (InferReturnType): Flag whether return can be inferred.
2752         (ReturnType): Turned to property.
2753
2754         * statement.cs (Return): Implemented return type inferring.
2755
2756         * support.cs (ReflectionParameters): Use local types if possible.
2757
2758 2007-03-30  Raja R Harinath  <rharinath@novell.com>
2759
2760         * flowanalysis.cs (FlowBranching.Reachability): Remove.
2761         (FlowBranching.UsageVector): Update to changes.
2762
2763         Prepare to kill 'Reachability'
2764         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
2765         argument of constructor.
2766
2767 2007-03-29  Raja R Harinath  <rharinath@novell.com>
2768
2769         Prepare to kill 'Reachability'
2770         * flowanalysis.cs (UsageVector.is_unreachable): New.
2771         (UsageVector): Update to maintain 'is_unreachable' in parallel to
2772         'reachability', and verify they're consistent.
2773
2774         Fix #81121
2775         * expression.cs (New.EmitStatement): Handle type parameters here too.
2776
2777 2007-03-29  Martin Baulig  <martin@ximian.com>
2778
2779         Fix #79148.
2780
2781         * anonymous.cs
2782         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
2783         CompilerGeneratedClass.
2784         (ScopeInfo.EmitScopeInstance): Make this protected.
2785         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
2786         `ec.CurrentAnonymousMethod.Scope == Scope'.
2787
2788         * statement.cs (Block.ScopeInfo): Make this a property.
2789
2790 2007-03-27  Raja R Harinath  <harinath@gmail.com>
2791
2792         Prepare to kill 'Reachability'
2793         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
2794         (FlowBranching.UsageVector.Reachability): Remove property.
2795         (FlowBranching.UsageVector.IsUnreachable): New property.
2796         (FlowBranching.UsageVector.ResetBarrier): New.
2797         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
2798         * codegen.cs, statement.cs: Update to changes.
2799
2800 2007-03-27  Martin Baulig  <martin@ximian.com>
2801
2802         Fix #81209.
2803
2804         * decl.cs
2805         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
2806         generic types.
2807
2808 2007-03-26  Raja R Harinath  <rharinath@novell.com>
2809
2810         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
2811         instead of TriState.  Remove all mention of TriState.
2812
2813         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
2814         replaced by a boolean.  Add boolean 'is_unreachable' field, check
2815         and maintain invariants.
2816
2817 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2818
2819         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
2820
2821 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2822
2823         * expression.cs: Stop using obsolete 2.0 opcodes.
2824
2825 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2826
2827         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
2828         one of the latests Martin's fixes.
2829
2830 2007-03-23  Miguel de Icaza  <miguel@novell.com>
2831
2832         * expression.cs: On BigEndian systems, swap the bytes, temporary
2833         solution until we get a new bitconverter class.
2834
2835 2007-03-23  Martin Baulig  <martin@ximian.com>
2836
2837         Fix #81158.
2838
2839         * decl.cs (MemberCache.AddMembers): Add generic methods both as
2840         "Method" and "Method`1".  Normally, a cache lookup is done on the
2841         "Method" form (ie. without the generic arity), but this one makes
2842         lookups on the full form work as well.
2843
2844 2007-03-22  Raja R Harinath  <rharinath@novell.com>
2845
2846         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
2847         unused properties.
2848
2849 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
2850         * class.cs: 
2851         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
2852         ordered_member_list, to TypeBuilder to store members to be defined
2853         in the order they were parsed in.
2854         - ordered_explicit_member_list contains all properties indexers
2855           and methods that are defined as explicit implementation of an
2856           interface or base class.
2857         - ordered_member_list contains all properties indexers and methods
2858           that are not defined as explicit implementation of an interface
2859           or base class.
2860
2861         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
2862         functionality in these removed classes has been replaced with 
2863         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
2864         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
2865
2866         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
2867         to CheckForDuplications inside GetMethod and SetMethod Define Method
2868         to handle method property and indexer name conflicts.
2869
2870         Fixes #79434
2871
2872         All code is contributed under the MIT/X11 license.
2873
2874 2007-03-20  Martin Baulig  <martin@ximian.com>
2875
2876         * class.cs (TypeContainer.Interfaces): Removed; they're now
2877         included in `TypeContainer.Types'.
2878
2879 2007-03-20  Martin Baulig  <martin@ximian.com>
2880
2881         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
2882
2883         * class.cs (TypeContainer.CreateType): New public method.  This is
2884         now called before DefineType() to create the TypeBuilders.
2885         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
2886         has already been created by CreateType().
2887         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
2888         don't resolve our base classes here; this has been moved into
2889         DefineBaseTypes().  We're now called from CreateType().
2890         (TypeContainer.DefineBaseTypes): New private method; resolve our
2891         base classes here.  We're now called from DefineType().
2892
2893         * rootcontext.cs
2894         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
2895         our types first to create all the TypeBuilders.  After that, call
2896         TypeContainer.DefineType() on all the types which'll resolve their
2897         base classes and setup the resolve order.
2898
2899 2007-03-20  Martin Baulig  <martin@ximian.com>
2900
2901         * class.cs (TypeContainer.Enums): Removed; they're now included in
2902         `TypeContainer.Types'.  
2903
2904 2007-03-20  Martin Baulig  <martin@ximian.com>
2905
2906         * class.cs
2907         (TypeContainer.DefineType): Don't call ResolveMembers() here.
2908         (TypeContainer.DoResolveMembers): Call DefineType() on our
2909         `compiler_generated' classes; moved here from DefineNestedTypes().
2910
2911         * rootcontext.cs
2912         (RootContext.ResolveTree): Call ResolveMembers() on all
2913         TypeContainer's in the `type_container_resolve_order'.
2914
2915 2007-03-19  Marek Safar  <marek.safar@gmail.com>
2916
2917         * class.cs: Use corlib to handle InternalMethodImplAttribute.
2918
2919 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2920
2921         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
2922         implementation flags.
2923
2924 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2925
2926         * class.cs: More optimizations for type parameters.
2927
2928 2007-03-15  Marek Safar  <marek.safar@gmail.com>
2929
2930         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
2931
2932         * ecore.cs, parameter.cs: More common code for both corlibs.
2933
2934         * typemanager.cs (IsGenericMethod): Simplified.
2935
2936 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2937
2938         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2939         'returns'.
2940         * statement.cs, iterators.cs, lambda.cs: Update to changes.
2941
2942         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
2943         unconditionally.  Simplify explanation.
2944         (Try.Resolve, Using.Resolve): Likewise.
2945
2946 2007-03-15  Martin Baulig  <martin@ximian.com>
2947
2948         Fix #80731.
2949
2950         * decl.cs (DeclSpace): If we're a partial class, use our
2951         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
2952
2953 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2954
2955         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2956         'throws'.
2957         (FlowBranching.UsageVector): Update to changes.
2958         (FlowBranching.MergeSiblings): Likewise.
2959         * statement.cs: Likewise.
2960
2961 2007-03-15  Martin Baulig  <martin@ximian.com>
2962
2963         Fix #79302.
2964
2965         * decl.cs
2966         (MemberCache): Added a special .ctor for type parameters.
2967
2968         * typemanager.cs
2969         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
2970         `MemberCache'.  
2971
2972 2007-03-09  Martin Baulig  <martin@ximian.com>
2973
2974         * enum.cs (Enum): Make this a TypeContainer.
2975         (EnumMember): Derive from `Const'.
2976
2977         * const.cs
2978         (Const.DoResolveValue): New protected virtual method; move most of
2979         the functionality of ResolveValue() here so we can override it in
2980         `EnumMember'.
2981         (Const.CreateConstantReference): Make this virtual.
2982
2983         * class.cs (Kind): Add `Kind.Enum'.
2984         (TypeContainer.Emit): Don't emit the enums here; they're already
2985         in the `RootContext.typecontainer_resolve_order'.
2986
2987         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
2988         here; they're already in the `typecontainer_resolve_order'.
2989
2990         * ecore.cs (EnumConstant.ConvertImplicitly): Add
2991         TypeManager.DropGenericTypeArguments().
2992
2993         * typemanager.cs
2994         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
2995         (TypeManager.IsEnumType): Likewise.
2996         (TypeManager.EnumToUnderlying): Likewise.
2997         (TypeManager.IsEqual): Add support for enums.
2998
2999 2007-03-12  Raja R Harinath  <rharinath@novell.com>
3000
3001         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
3002         DefaultParameterValueAttribute to be undefined, say if System.dll
3003         is not referenced.
3004
3005 2007-03-11  Marek Safar  <marek.safar@gmail.com>
3006
3007         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
3008         any mscorlib.
3009
3010 2007-03-10  Marek Safar  <marek.safar@gmail.com>
3011
3012         * class.cs, parameter.cs: Unified parameters verification.
3013
3014 2007-03-08  Martin Baulig  <martin@ximian.com>
3015
3016         * cs-parser.jay (constructor_header): Pass the location to the
3017         newly created TopLevelBlock.
3018
3019 2007-03-07  Martin Baulig  <martin@ximian.com>
3020
3021         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
3022
3023 2007-03-06  Miguel de Icaza  <miguel@novell.com>
3024
3025         * convert.cs (ExplicitReferenceConversionExists): Sync this method
3026         with the changes from David, fixes the build.
3027
3028 2007-03-05  David Mitchell  <dmitchell@logos.com>
3029
3030         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
3031         and its base interfaces to a one-dimensional array type S[],
3032         provided there is an implicit or explicit reference conversion
3033         from S to T.
3034
3035 2007-03-03  Marek Safar  <marek.safar@gmail.com>
3036
3037         * cs-tokenizer.cs: Implemented basic linq grammar.
3038
3039         * driver.cs: Set linq lang version on demand.
3040
3041 2007-02-26  Marek Safar  <marek.safar@gmail.com>
3042
3043         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
3044
3045 2007-02-25  Marek Safar  <marek.safar@gmail.com>
3046
3047         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
3048         (Fixes #80455)
3049
3050         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
3051         here.
3052         Check property and event extern attributes.
3053
3054         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
3055         charset.
3056
3057 2007-02-24  Marek Safar  <marek.safar@gmail.com>
3058
3059         A fix for bug #80407
3060         * ecore.cs: Don't report ambiguity error when methods have same parent.
3061
3062 2007-02-23  Marek Safar  <marek.safar@gmail.com>
3063
3064         A fix for bug #80878
3065         * class.cs, cs-parser.jay: Event property can host anonymous methods.
3066
3067 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3068
3069         * attribute.cs: Enable ExtensionAttribute presence test.
3070
3071 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3072
3073         * class.cs: Warn about missing GetHashCode only when Equals is override.
3074
3075         * decl.cs: Check accessibility of type arguments.
3076
3077         * typemanager.cs: Correctly report nullable array.
3078
3079 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3080
3081         * class.cs, report.cs: Capture more details when things go wrong.
3082
3083 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3084
3085         A fix for bug #80650
3086         * cs-parser.jay: Anonymous container starts at constructor declaration
3087         and not at block beginning because it has to be usable in constructor
3088         initializer.
3089
3090         * statement.cs: Use context location and not block one for error reporting.
3091
3092 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3093
3094         A fix for bug #78712
3095         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
3096         too.
3097
3098 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3099
3100         A fix for bug #80493 by Atsushi Enomoto
3101         * cs-parser.jay: Ignore invalid attribute target.
3102
3103 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3104  
3105         * cs-tokenizer.cs: Ignore '\0' as white space character.
3106
3107 2007-02-17  Miguel de Icaza  <miguel@novell.com>
3108
3109         * cs-parser.jay: Add support for lambda expressions to the mcs
3110         compiler as well.
3111
3112         * lambda.cs: Only clone when we are probing, not on the final call
3113         (Compatible is the final call). 
3114
3115         * statement.cs (CloneContext): Introduce class to provide block
3116         remapping during clone.
3117
3118         All statements Clone themselves now.
3119
3120         (Clone): special handling for blocks, when we clone a block, we
3121         register the block inside this routine, as children of the block
3122         might trigger a lookup. 
3123         
3124         * expression.cs: Add support for CloneContext in all expressions. 
3125         
3126 2007-02-17  Marek Safar  <marek.safar@gmail.com>
3127  
3128         A fix for bug #80493
3129         * statement.cs: Report ambiguous warning when interfaces are not related.
3130
3131 2007-02-15  Marek Safar  <marek.safar@gmail.com>
3132
3133         C# 3.0 extension methods.
3134
3135         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
3136         cannot be used directly.
3137
3138         * class.cs (Class.Emit): Emit extension attribute if any class method
3139         is extension method.
3140         (Method.Define): Add basic extension method validation conditions.
3141         (Method.Emit): Emit extension attribute for method.
3142
3143         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
3144         extension method exists. Currently we follow same approach as Microsoft
3145         does, emit even if a method or a class are private but this can change
3146         later.
3147
3148         * cs-parser.jay: Add handling of `this' keyword in method parameters
3149         context.
3150
3151         * decl.cs (DeclSpace.IsStaticClass): New property.
3152         (MemberCache.FindExtensionMethods): Looks for extension methods with
3153         defined name and extension type.
3154
3155         * doc.cs: Updated after OverloadResolve changes.
3156
3157         * driver.cs: Add new soft reference to System.Core.dll.
3158
3159         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
3160         (ExtensionMethodGroupExpr): Represents group of extension methods.
3161
3162         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
3163         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
3164         to MethodGroupExpr and made non-static for easier customization.
3165         (Invocation.DoResolve): Add extension method lookup when no standard
3166         method was found.
3167         (MemberAccess.DoResolve): Try extension methods if no member exists.
3168
3169         * modifiers.cs: Add METHOD_EXTENSION modifier.
3170
3171         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
3172         as well as candidate extension type.
3173         (ComputeNamespaces): When assembly constains extension methods registers
3174         them.
3175         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
3176         extension method lookup.
3177         (Namespace.LookupExtensionMethod): Looks for extension method in this
3178         namespace.
3179         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
3180         find a method which matches name and extensionType.
3181
3182         * parameter.cs (Parameter): Add This modifer.
3183         (HasExtensionMethodModifier): New property.
3184         (Resolve): Add extension parameter check.
3185         (ModFlags): turned to property to exclude this modifier as it is not real
3186         parameter modifier.
3187         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
3188
3189         * support.cs (ParameterData): Add ExtensionMethodType.
3190         (ReflectionParameters): Implemented ExtensionMethodType interface property.
3191
3192         * typemanager.cs: Add type and ctor extension attribute type.
3193
3194 2007-02-15  Miguel de Icaza  <miguel@novell.com>
3195
3196         * report.cs (DisableErrors, EnableErrors): used to prevent error
3197         output when we are "trying" to compile various methods with
3198         different types. 
3199
3200         * ecore.cs (Expression): Add Clone method that calls the virtual
3201         CloneTo method.  The current CloneTo method in Expression throws
3202         an exception so we can track down all the places where this must
3203         be implemented (not using abstract, because that would be a lot of
3204         up-front-work before we can start testing the implementation
3205         idea). 
3206
3207         Important: we only need Clone capabilities for expressions created
3208         by the parser, as the expressions we will be cloning are
3209         expressions in the pre-resolved state.   This vastly simplifies
3210         the work required. 
3211         
3212         (SimpleName): Add CloneTo that does nothing.
3213         (EmptyCast): Add CloneTo.
3214         
3215         * expression.cs (Binary): Implement CloneTo.
3216         (Invocation.IsApplicable): Store the current ec in
3217         EmitContext.TempEc and restore it on return.  This is used so we
3218         do not have to sprinkle hundres of methods with an extra
3219         EmitContext, we know that the only user is the lambda expression
3220         ImplicitConversionExists code. 
3221         
3222         (Argument): Add Cloning capabilities.
3223         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
3224         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
3225         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
3226         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
3227         IndexerAccess): Add Clone capability.
3228
3229         (LocalVariableReference, This): TODO: needs cloned Block mapping.
3230
3231         (Argument): Add cloning capability.
3232
3233         * assign.cs (Assign): Implement CloneTo.
3234
3235         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
3236         
3237         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
3238         version by calling Convert with the EmitContext (that we are
3239         currently storing in ec, this is not great, but will do for now,
3240         to avoid passing EmitContext parameters to hundreds of functions
3241         that do not need them now).
3242
3243         (SetExpression): Remove, it is not needed.
3244         
3245         (ContextualReturn): Implement CloneTo.
3246
3247         * statement.cs (Statement): Implement cloning infrastructure,
3248         similar to expressions.
3249
3250         (Block): Partial implementation of Clone for statements.
3251
3252         (Return): Implement clone.
3253         
3254         * constant.cs (Constant.CloneTo): New method, does nothing.
3255
3256         * codegen.cs (TempEc): Add a static EmitContext as a temporary
3257         solution, until we decide how to exactly do this.  
3258         
3259 2007-02-14  Marek Safar  <marek.safar@gmail.com>
3260  
3261         A fix for bug #80493
3262         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
3263         a property is override we need to use second accessor.
3264
3265 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3266  
3267         A fix for bug #80418
3268         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
3269         methods.
3270
3271 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3272
3273         Another fix for bug #80749
3274         * pending.cs: Abstract class has priority over interfaces.
3275
3276 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3277
3278         Another fix for bug #80749
3279         * pending.cs: Abstract class has priority over interfaces.
3280
3281 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3282
3283         Another fix for bug #80749
3284         * pending.cs: Abstract class has priority over interfaces.
3285
3286 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3287
3288         Another fix for bug #80749
3289         * pending.cs: Abstract class has priority over interfaces.
3290
3291 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3292
3293         * class.cs Better error message.
3294
3295         * driver.cs: Add shorter versions of -optimize option.
3296
3297 2007-02-13  Martin Baulig  <martin@ximian.com>
3298
3299         * class.cs (Constructor.Emit): Check the return value of
3300         ec.ResolveTopBlock() and return on error.
3301
3302 2007-02-13  Raja R Harinath  <rharinath@novell.com>
3303
3304         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
3305         message to fix error message regression.
3306
3307 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3308
3309         * delegate.cs: Delegate creation expression cannot be of Nullable type.
3310
3311 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3312
3313         A fix for bug #80749
3314         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
3315         its parent container.
3316
3317         * class.cs (DefineFieldInitializers): Each initializer can has different
3318         resolve context.
3319
3320         * const.cs: Updated.
3321
3322 2007-02-11  Miguel de Icaza  <miguel@novell.com>
3323
3324         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
3325         now all the heavy lifting to check that embedded statements or
3326         expressions have the right form is done in the ContextualReturn.
3327
3328         (ContextualReturn): New class.  
3329
3330         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
3331         method that can be invoked to report 201, so we do not replicate
3332         this everywhere.
3333
3334         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
3335         
3336         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
3337         treating tabs as spaces. 
3338
3339 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3340
3341         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
3342         * assign.cs: Use full implicit conversion for right side check.
3343
3344 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3345
3346         * statement.cs (Switch): Switch over boolean type is not standardized.
3347
3348 2007-02-08  Marek Safar  <marek.safar@gmail.com>
3349
3350         A fix for bug #80755
3351         * decl.cs (FindBaseEvent): Don't use method cache for events.
3352
3353 2007-02-07  Marek Safar  <marek.safar@gmail.com>
3354
3355         * cs-parser.jay: Better syntax error handling.
3356
3357         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
3358         instead of underlying type value.
3359
3360 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3361
3362         * driver.cs: Check define identifier before is registered.
3363
3364         * namespace.cs: Use existing error message.
3365
3366         * report.cs: New warning.
3367
3368 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3369
3370         A fix for bug #80742
3371         * expression.cs: Delegate Invoke method can be called directly.
3372
3373 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3374
3375         A fix for bug #80676
3376         * class.cs (IsEntryPoint): The Main method can have params modifier.
3377
3378 2007-02-04  Miguel de Icaza  <miguel@novell.com>
3379
3380         * parameter.cs (Parameter, Parameters): Add Clone method.
3381
3382         * anonymous.cs (Compatible): Turn method into virtual method, so
3383         LambdaExpression can implement a different behavior.
3384
3385         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
3386         out the basic checking here, so it can be used by
3387         LambdaExpressions.
3388         
3389         * lambda.cs: Introduce "Compatible" function that will do the
3390         heavy lifting.
3391
3392 2007-02-02  Marek Safar  <marek.safar@gmail.com>
3393
3394         * attribute.cs: Unified one error message.
3395
3396         * class.cs (Class): Use type attributes and not properties to test static
3397         class.
3398         (IsEntryPoint): Don's pass local variable.
3399
3400         * convert.cs: Removed duplicate check.
3401
3402         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
3403
3404         * driver.cs: Don't crash when soft reference does not exist.
3405
3406         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
3407         (UsingEntry): Removed redundant allocation.
3408
3409         * parameter.cs: Add fast path for type parameters.
3410
3411         * support.cs: Don't allocate attribute when it's not used.
3412
3413 2007-01-30  Miguel de Icaza  <miguel@novell.com>
3414
3415         * anonymous.cs
3416         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
3417         this into a virtual method, so we can override it in LambdaExpression.
3418
3419         * driver.cs: Improve diagnostics in case of failure. 
3420
3421         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
3422         write a function that is slightly more complex and that parses:
3423
3424         type identifier [, type identifier]* )
3425
3426         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
3427         this expression:
3428
3429                 (canEmpty ? i >= 0 : i > 0)
3430
3431 2007-01-30  Raja R Harinath  <rharinath@novell.com>
3432
3433         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
3434         exception on possibly valid code.
3435
3436 2007-01-29  Raja R Harinath  <rharinath@novell.com>
3437
3438         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
3439         Push/PopPosition.
3440         (parse_opt_type_arguments): Remove.  It's almost the same as
3441         parse_less_than.
3442         (parse_namespace_or_typename): Use parse_less_than.
3443
3444 2007-01-28  Miguel de Icaza  <miguel@novell.com>
3445
3446         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
3447         this bug took a few hours to find, because the state saved and
3448         restored by PushPosition and PopPosition was ignoring the state of
3449         parse_generic_less_than.
3450
3451         I can also now remove the handling of OP_LT and OP_GT, this solves
3452         the big mistery.
3453         
3454         * cs-tokenizer.cs: store the location for the ARROW token, we use
3455         that in the parser.
3456
3457         (PushPosition, PopPosition): save/restore also `current_token',
3458         restore `parse_generic_less_than' (was missing).
3459
3460         (parse_opt_type_arguments): use parse_type, not
3461         parse_namespace_or_typename to parse types.
3462
3463         * lambda.cs: Empty new file, will eventually have the lambda
3464         expression implementation.
3465
3466         * lambda.test: used to test the internal tokenizer. 
3467
3468         * report.cs (FeatureIsNotISO1): Rename from
3469         FeatureIsNotStandardized, because it was about the language level
3470         (1 vs 2) it was not about standarization.
3471
3472         (FeatureRequiresLINQ): New.
3473
3474         * support.cs (SeekableStreamReader): Only require that the reader
3475         is a TextReader, not a StreamReader, so we can plug StringReader. 
3476
3477         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
3478         given position in the input stream the following tokens can be
3479         parsed as a type followed by an identifier.
3480
3481         (is_punct): after a '(' if parse_type_and_parameter returns true,
3482         then return a special token OPEN_PARENS_LAMBDA which is used to
3483         avoid reduce/reduce errors in the grammar for the
3484         lambda_expression rules.
3485
3486         (parse_type): implement a type parser inside the
3487         tokenizer, the parser only returns true or false depending on
3488         whether the input at a given position can be parsed as a type.
3489
3490         (peek_token): new method used during type parsing.
3491
3492 2007-01-28  Raja R Harinath  <rharinath@novell.com>
3493
3494         Fix #80531
3495         * anonymous.cs (ScopeInfo.InflateParameters): New.
3496         (AnonymousContainer.Resolve): Use it to redirect types of
3497         delegate parameters.
3498
3499 2007-01-27  Raja R Harinath  <rharinath@novell.com>
3500
3501         Fix #80530
3502         * expression.cs (Error_InvalidArguments): Don't use two different
3503         messages for CS1503.  Use ExtraInformation and
3504         SymbolRelatedToPreviousError instead.
3505
3506         Fix #80358
3507         * decl.cs (DeclSpace.initialize_type_params): Don't access
3508         'type_params' of a partial class directly.
3509
3510 2007-01-26  Miguel de Icaza  <miguel@novell.com>
3511
3512         * constant.cs: Removed a handful of out-of-range checks that were
3513         not necessary. 
3514
3515 2007-01-25  Marek Safar  <marek.safar@gmail.com>
3516
3517         * expression.cs (CheckUselessComparison): Add additional check for char
3518         constants.
3519
3520         * namespace.cs: Fixed typo.
3521
3522 2007-01-23  Miguel de Icaza  <miguel@novell.com>
3523
3524         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
3525         gone, instead we inline the test, preventing the needless casts to
3526         longs, ulongs and doubles for the parameters, avoiding calls to
3527         methods that overchecked stuff, and instead inlined things
3528         nicely. 
3529
3530 2007-01-20  Marek Safar  <marek.safar@gmail.com>
3531
3532         * cs-parser.jay: Better parameter error handling.
3533
3534 2007-01-17  Marek Safar  <marek.safar@gmail.com>
3535
3536         A fix for bug #80368, #80522
3537         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
3538         whether array initializer contains constants only.
3539         (ArrayCreation.Emit): Use better formula to decide when
3540         are array initializers for static initialization.
3541         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
3542         have to emit even constants otherwise they are pre-initialized.
3543
3544 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
3545             Raja R Harinath  <rharinath@novell.com>
3546
3547         Fix emit order of 'get' vs. 'set'.
3548         * support.cs (Accessors): New.
3549         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
3550         Note the order in which accessors are declared in the source.
3551         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
3552         Refactored from Property.Define and Indexer.Define.
3553         (PropertyBase.DefineAccessors): New helper that calls the above in
3554         appropriate order as noted by the parser.
3555         (Property.Define, Indexer.Define): Update to changes.
3556         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
3557
3558 2007-01-17  Raja R Harinath  <rharinath@novell.com>
3559
3560         Fix cs0029-6.cs and gcs0029-2.cs (regression)
3561         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
3562         there's an implicit conversion from the current type to the target
3563         type before converting the underlying constant.
3564
3565 2007-01-16  Marek Safar  <marek.safar@gmail.com>
3566
3567         * const.cs (ResolveValue): Updated after constant conversion was made more
3568         generic.
3569
3570         * constant.cs (GetAttributableValue): constant to object conversion is
3571         used for attributes only.
3572         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
3573         constant conversions.
3574         (LongConstant.ConvertImplicitly): Ditto.
3575
3576         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
3577         (ImplicitConversionStandard): Handle constant conversion as extra step.
3578         It solves the issue when constant conversion was called indirectly like
3579         inside array initializer and constant folding was skipped.
3580
3581         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
3582         this change.
3583
3584         * statement.cs(ImplicitConversionStandard): Updated after constant
3585         conversion was made more generic.
3586
3587 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
3588
3589         * expression.cs (As.DoResolve): Use GenericConstraints instead of
3590         Constraints, solves the problem where the compiler incorrectly
3591         reported that a type parameter was not constrained to a class (Bug
3592         80518)
3593
3594 2007-01-14  Marek Habersack  <grendello@gmail.com>
3595
3596         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
3597
3598 2007-01-14  Marek Safar  <marek.safar@gmail.com>
3599
3600         A fix for bug #80368
3601         * assign.cs (FieldInitializer): New class implements field
3602         initializer statement.
3603
3604         * attribute.cs: Update after FieldMember rename.
3605
3606         * class.cs (PropertyBasedMember): New common class for property based
3607         types.
3608         (InterfaceMemberBase): New base class for all members which can be used as
3609         an interface members.
3610         (MethodCore): Moved really common code to InterfaceMemberBase.
3611         (Method.Define): Equal and GetHasCode detection is relevant for methods
3612         only.
3613         (MethodData.Define): Don't assume that public event implements an
3614         interface automatically.
3615         (MethodData.DefineMethodBuilder): Issue an error even if only extern
3616         modifier is used.
3617         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
3618         (FieldMember): Merged with FieldBase.
3619         (EventProperty.AEventPropertyAccessor): New specialization to check whether
3620         event extern modifier can be used.
3621         (EventField.EventFieldAccessor): Moved event field specific code here.
3622         (Event.AllowedModifiers): Even event can be extern.
3623         (Event.FindOutBaseMethod): New override specific to events.
3624         (Indexer.parameters): Reintroduce parameters because base class holds
3625         only properties common data.
3626         (Indexer.CheckForDuplications): Indexers are threated as methods so we
3627         need do extra parameters check.
3628
3629         * const.cs: Update after FieldMember rename.
3630
3631         * decl.cs (MemberCache.FindBaseEvent): New method.
3632
3633         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
3634         to reflect that indexer is now derived from PropertyBased.
3635
3636         * ecore.cs (GetMemberType): Made public.
3637         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
3638         obsolete event.
3639
3640         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
3641         
3642         * typemanager.cs (CSharpSignature): Correctly print event accessors.
3643         (RegisterEvent): Removed.
3644         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
3645         (GetPrivateFieldOfEvent): Renamed to GetEventField.
3646
3647 2007-01-11  Raja R Harinath  <rharinath@novell.com>
3648
3649         Fix #80249
3650         * statement.cs (CollectionForeach.TryType): Prefer generic
3651         GetEnumerator over non-generic variant.  Fix code to follow comments.
3652
3653 2007-01-09  Raja R Harinath  <rharinath@novell.com>
3654
3655         Fix #80446
3656         * support.cs (ReflectionParameter): Don't use an invalid index on
3657         the generic parameter data.
3658
3659 2007-01-08  Miguel de Icaza  <miguel@novell.com>
3660
3661         * driver.cs: Just add a tiny bit of infrastructure.
3662
3663 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3664
3665         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
3666         where field type is struct from current assembly.
3667         
3668         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
3669         it is possible.
3670
3671 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3672
3673         A fix for bug #80381
3674         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
3675         the core types.
3676
3677         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
3678         messages.
3679         (Namespace.LookupType): Always use core types from corlib when speficied.
3680
3681         * report.cs: A new warning.
3682
3683         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
3684         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
3685         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
3686
3687         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
3688         (InitCoreTypes): Set expression type of object_type and value_type
3689         immediately after lookup.
3690
3691 2007-01-01  Miguel de Icaza  <miguel@novell.com>
3692
3693         * cs-tokenizer.cs: Accept Pc class characters (Connector
3694         Punctuation) as valid identifiers.  Fixes #78259
3695
3696         * expression.cs (Invocation.DoResolve): Moved the check for the
3697         use of `this' for doing method calls to the Invocation resolution
3698         step, after overload resolution has taken place instead of doing
3699         the check at the low-level `This.DoResolve' level.
3700
3701         The `This.DoResolve'(appens before overload resolution, so it has
3702         no way of knowing if the method that will be called will be
3703         instace or static, triggering an erroneous report for cs0188 (Bug
3704         78113).
3705
3706         We now do the check for instance method invocations after we know
3707         what method will be called.
3708
3709         (This.CheckThisUsage): Move the actual use of this structure
3710         checking into its own method and expose it. 
3711
3712         * Everywhere that called Error_ValueCannotBeConverted: pass a new
3713         EmitContext.
3714
3715         Exceptions: Null.ConvertImplicitly,
3716         Constant.ImplicitConversionRequired as there are too many call
3717         sites for passing the ec. 
3718
3719         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
3720         EmitContext, if the value is null, then we do not try to provide
3721         the extra information from the error (If a userdefined conversion
3722         exists, as UserDefinedConversion requires a non null-EmitContext).
3723
3724         Fixes: #80347
3725
3726 2006-12-30  Raja R Harinath  <rharinath@novell.com>
3727
3728         * flowanalysis.cs (MyBitVector): Document some invariants.
3729         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
3730         introduced below, and add a couple of others, 
3731
3732 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3733
3734         * attribute.cs (GetMethodObsoleteAttribute): Uses new
3735         GetPropertyFromAccessor and GetEventFromAccessor.
3736         
3737         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
3738         overrides non-obsolete one.
3739         (Indexer.Define): Error message has been moved to the parser.
3740
3741         * cs-parser.jay: Better syntax errors handling.
3742
3743         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
3744         when an invocation has no arguments.
3745
3746         * ecore.cs: Removed not used caching.
3747
3748         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
3749         implementation.
3750
3751         * report.cs: Add a new warning.
3752
3753         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
3754
3755         * typemanager.cs (enumeration_type): Removed.
3756         (CSharpSignature): Reuses IsSpecialMethod.
3757         (IsEqual): Hack for MS BCL.
3758         (GetPropertyFromAccessor): New method.
3759         (GetEventFromAccessor): New method.
3760         (IsSpecialMethod): Fixed to handle more cases.
3761
3762 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3763
3764         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
3765         Made white spaces array static.
3766
3767         * ecore.cs (RemoveGenericArity): Optimized.
3768
3769         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
3770         10 times faster).
3771         (MyBitVector.initialize_vector): Simplified.
3772
3773 2006-12-22  Miguel de Icaza  <miguel@novell.com>
3774
3775         * ecore.cs: Am not entirely happy with this hack, but it seems to
3776         address the issue in 80257 (a small test case for
3777         CreativeDocs.NET). 
3778
3779         I set the MethodGroupExpr.Type to an internal compiler type
3780         (itself in this case) to force the resolution to take place.   Why
3781         it does not take place with a null is beyond me.
3782
3783 2006-12-20  Marek Safar  <marek.safar@gmail.com>
3784
3785         A fix for bug #80288
3786         * expression.cs (ResolveOperator): Consider user defined conversion for
3787         logical and operator too.
3788         (EmitBranchable): Optimization for logical and when full constant folding
3789         could not be applied but one operand is constant.
3790
3791 2006-12-19  Marek Safar  <marek.safar@gmail.com>
3792
3793         * class.cs (GetClassBases): Write 5 times every day, will never use
3794         FullName for error reporting.
3795
3796         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
3797
3798 2006-12-19  Martin Baulig  <martin@ximian.com>
3799
3800         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
3801         the symbol file info here.
3802
3803 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3804
3805         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
3806         of `elseif' is taking then following sections are not taking.
3807         Fixes an issue reported on mono mailing list.
3808
3809 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3810
3811         A fix for bug #80300
3812         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
3813         a caller is not taking.
3814
3815 2006-12-18  Raja R Harinath  <rharinath@novell.com>
3816
3817         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
3818         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
3819         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
3820         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
3821         * class.cs: Update to changes.
3822
3823 2006-12-17  Marek Safar  <marek.safar@gmail.com>
3824
3825         A fix for bug #79934
3826         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
3827         partial container.
3828
3829         * class.cs (ResolveMembers): Register an iterator in current container and
3830         not in shared one.
3831
3832 2006-12-16  Raja R Harinath  <rharinath@novell.com>
3833
3834         Fix test-543.cs
3835         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
3836         satisfy a params annotated parameter.
3837
3838 2006-12-16  Marek Safar  <marek.safar@gmail.com>
3839
3840         A fix for bug #77014
3841         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
3842         paramters correctly and not rely on hacks in Parameters class.
3843         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
3844         at any possition.
3845         (Invocation.VerifyArgumentsCompat): Ditto.
3846         (Invocation.EmitArguments): Changed to correctly emit params arguments at
3847         any possition.
3848
3849         * parameter.cs (HasParams): Don't assume that params is the last one.
3850
3851         * support.cs (ReflectionParameters.ctor): Look for params attribute
3852         correctly.
3853         (ReflectionParameters.ParameterType): Removed hack when we returned last
3854         parameter for out of range parameters.
3855         (ParameterName, ParameterModifier): Ditto.
3856
3857 2006-12-14  Marek Safar  <marek.safar@gmail.com>
3858
3859         A fix for bug #79987
3860         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
3861         when assembly is not CLS compliant but type is. I have no idea why is this
3862         allowed.
3863
3864         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
3865
3866 2006-12-13  Miguel de Icaza  <miguel@novell.com>
3867
3868         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
3869         in struct constructors, they are basically no-ops.
3870
3871 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3872
3873         * cs-tokenizer.cs (Position): Save preprocessor status too.
3874
3875 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3876
3877         A fix for bug #77794
3878         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
3879
3880 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3881
3882         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
3883         Fixes #69299.
3884         (pp_expr): Report error for an invalid expression.
3885         (handle_preprocessing_directive): Simplified; add more error checking.
3886
3887 2006-12-11  Marek Safar  <marek.safar@gmail.com>
3888
3889         A fix for bug #74939
3890         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
3891         directives handling.
3892
3893 2006-12-10  Marek Safar  <marek.safar@gmail.com>
3894
3895         A fix for bugs #80093, and #75984
3896         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
3897         logic, it seems to me as it worked before "by coincidence".
3898         (xtoken): Simplified to use reworked handle_preprocessing_directive.
3899         (cleanup): Enabled endif check.
3900
3901 2006-12-09  Marek Safar  <marek.safar@gmail.com>
3902
3903         A fix for bug #80162
3904         * statement.cs (CollectionForeach.TryType): Generics and non-generics
3905         enumerators are never ambiguous.
3906
3907 2006-12-08  Raja R Harinath  <rharinath@novell.com>
3908
3909         Fix #80060
3910         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
3911
3912 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3913
3914         A fix for bug #80144
3915         * class.cs (EventProperty.Define): Explicit implementation means
3916         that an even is used.
3917
3918 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3919
3920         Fixes the operators implementation (part II)
3921
3922         * cfold.cs (DoConstantNumericPromotions): Renamed to
3923         DoBinaryNumericPromotions and simplified.
3924         (BinaryFold): Couple of conversion fixes; simplified.
3925
3926         * constant.cs, ecore.cs, literal.cs
3927         (ToType): Renamed to ConvertImplicitly.
3928         (Reduce): Renamed to ConvertExplicitly.
3929
3930         * class.cs, convert.cs: Updated.
3931
3932         * expression.cs: TryReduce doesn't throw an exception.
3933
3934 2006-12-01  Marek Safar  <marek.safar@gmail.com>
3935
3936         A fix for bug #80108
3937         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
3938         compatible.
3939
3940 2006-11-30  Marek Safar  <marek.safar@gmail.com>
3941
3942         Fixes unary operators implementation (part I)
3943         Also fixes #80026
3944
3945         * cfold.cs (Error_CompileTimeOverflow): Made internal
3946
3947         * const.cs (IConstant): Changed to use reference to constant and
3948         not constant itself.
3949         Updated IConstant implementations.
3950
3951         * constant.cs (CreateConstant): New factory method.
3952         Updated IConstant implementation.
3953
3954         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
3955
3956         * ecore.cs: Updated to use CreateConstantReference.
3957
3958         * enum.cs: Reflects IConstant changes.
3959
3960         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
3961
3962         * literal.cs (NullConstant): Change to be independently usable.
3963
3964 2006-11-29  Martin Baulig  <martin@ximian.com>
3965
3966         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
3967         we need to emit the scope initializer before calling the base .ctor.
3968
3969         * anonymous.cs: Merged back from the new anonymous methods branch.
3970         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
3971
3972         * expression.cs (ParameterReference.DoResolveBase): Create a
3973         "normal" ScopeInfo when capturing parameters rather than using the
3974         root scope; this makes things work with anonymous methods having
3975         parameters.
3976
3977         * statement.cs
3978         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
3979
3980 2006-11-22  Marek Safar  <marek.safar@gmail.com>
3981
3982         A fix for bug #79987
3983         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
3984         check to a base class.
3985         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
3986         only when assembly has missing attribute.
3987         * report.cs: Update.
3988
3989 2006-11-21  Marek Safar  <marek.safar@gmail.com>
3990
3991         * cs-tokenizer.cs: Merged with gmcs version.
3992
3993 2006-11-20  Marek Safar  <marek.safar@gmail.com>
3994
3995         * cs-tokenizer.cs,
3996         * cs-parser.jay: Better error message when partial keyword is misplaced.
3997
3998 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
3999
4000         A fix for bug #79810
4001         report.cs: CS1058 only applies to 2.0 profile (gmcs).
4002         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
4003         a RuntimeWrappedException by default.
4004
4005 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4006
4007         A fix for bug #79843
4008         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
4009         implementation.
4010         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
4011
4012 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4013
4014         * driver.cs, namespace.cs: Uses faster IndexOf version.
4015
4016 2006-11-17  Marek Safar  <marek.safar@gmail.com>
4017
4018         A fix for bug #79941
4019         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
4020         operators.
4021         (Operator.Define): Implicit/Explicit operator of same type is duplicate
4022         even if internal name is different.
4023         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
4024         (UserDefinedConversion): Simplified as the operators cannot be internal.
4025         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
4026         conversions.
4027         (MethodLookup): Replaced EmitContext with parentType.
4028         * expression.cs: Updated.
4029
4030 2006-11-09  Raja R Harinath  <rharinath@novell.com>
4031
4032         * driver.cs (BadAssembly): Handle all the ugliness of
4033         DefineDynamicAssembly.
4034
4035 2006-11-08  Raja R Harinath  <rharinath@novell.com>
4036
4037         Address parts of #58244 -- most of what's left is in the runtime
4038         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
4039         CS1509 error checks, and handle them for all assembly loads, not
4040         just the first invocation.
4041         (LoadModule): Likewise.  Move handling of 'adder_method' ...
4042         * codegen.cs (AssemblyClass.AddModule): ... here.
4043
4044 2006-11-02  Marek Safar  <marek.safar@gmail.com>
4045
4046         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
4047         IEnumerable<T> is ambiguous.
4048
4049 2006-10-31  Marek Safar  <marek.safar@gmail.com>
4050
4051         A fix for bug #67689
4052         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
4053         GetEnumerator is ambiguous.
4054
4055         * report.cs: Add new warning.
4056
4057 2006-10-29  Marek Safar  <marek.safar@gmail.com>
4058
4059         A fix for bug #78602
4060         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4061         to protected member can be nested type.
4062
4063 2006-10-28  Marek Safar  <marek.safar@gmail.com>
4064
4065         A fix for bug #78965
4066         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4067         to protected member must derive from current type.
4068
4069 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4070
4071         assign.cs: Reuses error method.
4072
4073         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
4074         instead of type for constants.
4075         (Expression.Error_ValueAssignment): Common error method.
4076
4077         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
4078         for any assignment.
4079
4080 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4081
4082         A fix for bug #79081
4083         * expression.cs (MemberAccess.DoResolve): Check nested type
4084         accessibility.
4085
4086 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
4087
4088         * doc.cs : nested delegates were not handled. Fixed bug #79754.
4089
4090 2006-10-26  Marek Safar  <marek.safar@gmail.com>
4091
4092         A fix for bug #76591
4093         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
4094
4095 2006-10-26  Marek Safar  <marek.safar@gmail.com>
4096
4097         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
4098         type forwarder of the same type multiple times.
4099
4100 2006-10-26  Raja R Harinath  <rharinath@novell.com>
4101
4102         Fix #78820
4103         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
4104         instance as an rvalue, even when we later resolve as an lvalue.
4105
4106 2006-10-25  Martin Baulig  <martin@ximian.com>
4107
4108         * anonymous.cs: Fix #79673.
4109
4110 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
4111
4112         A fix for bug #79666
4113         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
4114         ignored when is optimized (= default value) as its value is already set.
4115
4116 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
4117
4118         A fix for bug #79724
4119         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
4120         TypeContainer for type lookup.
4121
4122 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
4123
4124         A fix for bug #79231
4125         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
4126         * expression.cs (OverloadResolve): Always convert type name for
4127         an error message.
4128         (ResolveNamespaceOrType): Don't confuse a nested type with any 
4129         other member.
4130
4131 2006-10-18  Martin Baulig <martin@ximian.com>
4132
4133         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
4134
4135 2006-10-17  Miguel de Icaza  <miguel@novell.com>
4136
4137         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
4138         an int32, but requesting an int64 from the conversion
4139
4140 2006-10-12  Martin Baulig  <martin@ximian.com>
4141
4142         * anonymous.cs
4143         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
4144         
4145 2006-10-12  Martin Baulig  <martin@ximian.com>
4146
4147         * statement.cs
4148         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
4149
4150 2006-10-11  Miguel de Icaza  <miguel@novell.com>
4151
4152         * convert.cs: Remove broken code: I was doing the "Existance"
4153         tests for Implicit conversions.
4154
4155 2006-10-10  Miguel de Icaza  <miguel@novell.com>
4156
4157         * convert.cs: Added one missing case in
4158         ImplicitStandardConversionExists uint64 to intptr.
4159
4160         Fixes #59800
4161         
4162         * typemanager.cs (uintptr_type): another core known type.   
4163
4164         * ecore.cs (OperatorCast): routine used to do cast operations that
4165         depend on op_Explicit.  We could change some of the Decimal
4166         conversions to use this.
4167
4168         This one has a probe mechanism that checks both types for an op_
4169         which it coudl be used to eliminate two classes: CastToDecimal
4170         and CastFromDecimal.
4171
4172         * convert.cs: Implement the conversions documented in #59800
4173         
4174 2006-10-10  Martin Baulig  <martin@ximian.com>
4175
4176         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
4177         before RootScope.ResolveMembers().
4178
4179         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
4180         `CurrentType' if appropriate.
4181
4182 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
4183
4184         A fix for bug #78568
4185         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
4186         when contains binary operators.
4187         * cs-parser.jay: Updated.
4188
4189 2006-10-09  Martin Baulig  <martin@ximian.com>
4190
4191         * delegate.cs
4192         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
4193         moved that into Define() and also do the other type parameter
4194         checks there.  Fixes #79094.  Added gtest-292.cs.
4195
4196         * expression.cs
4197         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
4198         since that doesn't include type parameters; don't use `Ldelema'
4199         for type parameters.  Fixes #78980.  Added gtest-293.cs.
4200
4201 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
4202
4203         A fix for #77796
4204         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
4205         conversion is allowed.
4206
4207 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
4208
4209         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
4210         error reporting when no error occurs.
4211
4212 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
4213
4214         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
4215         does not exist.
4216
4217 2006-10-06  Raja R Harinath  <rharinath@novell.com>
4218
4219         Fix #79584
4220         * class.cs (DefineTypeBuilder): Check circular dependencies before
4221         setting the parent of the TypeBuilder.
4222         (CheckRecursiveDefinition): Don't use 'BaseType', since
4223         it may not be valid until after DefineTypeBuilder.  Use
4224         'base_type' instead.
4225
4226 2006-10-04  Martin Baulig  <martin@ximian.com>
4227
4228         Merged the Anonymous Methods patch.
4229
4230         * anonymous.cs, iterators.cs: The new anonymous methods code.
4231
4232         * statement.cs (Variable): New public abstract class.
4233         (LocalInfo.Variable): New public property.
4234         (LocalInfo.ResolveVariable): New public method.
4235         (Block.Flags): Add `IsIterator'.
4236         (Block.AddVariable): Improved the CS0136 check.
4237         (Block.AnonymousChildren): New public property.
4238         (Block.AddAnonymousChild): New public method.
4239         (ToplevelBlock): Update to use the new anonymous method framework.
4240         (ToplevelBlock.ctor): `container' is now a `Block' and not a
4241         `ToplevelBlock'; this is required to correctly implement the
4242         CS0136 check.
4243         (Fixed, Using): Use `TemporaryVariable' instead of directly
4244         creating the `LocalBuilder'.
4245
4246         * parameter.cs (Parameter.ResolveVariable): New public method.
4247         (Parameters.ResolveVariable): Likewise.
4248
4249         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
4250
4251         * class.cs (TypeContainer): Replaced the `iterators' list and
4252         corresponding methods with a list of `CompilerGeneratedClass'es.
4253         (TypeContainer.ResolveMembers): New public method.
4254         (Method): `IIteratorContainer' has been replaced by
4255         `IAnonymousHost'.
4256
4257         * expression.cs (VariableReference): New public abstract base
4258         class for `LocalVariableReference', `ParameterReference' and
4259         `This'.
4260
4261         * codegen.cs (EmitContext): Removed `capture_context',
4262         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
4263         (EmitContext.EmitThis): Removed.
4264
4265         * cs-parser.jay: Replace `iterator_container' with
4266         `anonymous_host'.       
4267
4268 2006-10-04  Martin Baulig  <martin@ximian.com>
4269
4270         * generic.cs (GenericMethod): Don't make this abstract.
4271         (Constraints.Clone): Added dummy implementation.
4272
4273 2006-10-04  Raja R Harinath  <harinath@gmail.com>
4274
4275         Fix #79577
4276         * namespace.cs (LookForAnyGenericType): Avoid nullref on
4277         'declspaces'.  Avoid allocating arrays willy-nilly.
4278
4279         Fix #79553
4280         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
4281         cases out of the switch.
4282
4283 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4284
4285         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
4286         message when non-generic type is used with the type arguments.
4287         * expression.cs: Updated.
4288
4289 2006-09-28  Raja R Harinath  <rharinath@novell.com>
4290
4291         Fix #79013
4292         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
4293         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4294         Change semantics slightly.  Don't insist on having only one
4295         temporary EmptyExpression -- just throttle the creation of new ones.
4296
4297         Fix #79451
4298         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
4299         non-interfaces too.  If no methods are found, don't try to create
4300         a MethodGroupExpr.
4301
4302 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4303
4304         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
4305         generic type.
4306
4307         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
4308         us produce better error message.
4309
4310 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
4311
4312         * expression.cs (Binary.ResolveOperator): Warn about a side effect
4313         of the `|' operator.
4314
4315         * report.cs: A new warning added.
4316
4317 2006-09-27  Martin Baulig  <martin@ximian.com>
4318
4319         * generic.cs (GenericMethod): Don't make this abstract.
4320
4321 2006-09-27  Martin Baulig  <martin@ximian.com>
4322
4323         * report.cs
4324         (InternalErrorException): Added overloaded ctor taking a params array.
4325
4326 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
4327
4328         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
4329         Fixed the cases when same error was reported twice.
4330
4331         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
4332         now report symbol information.
4333
4334 2006-09-25  Martin Baulig  <martin@ximian.com>
4335
4336         * class.cs: Completely unified with the gmcs version.
4337
4338 2006-09-25  Martin Baulig  <martin@ximian.com>
4339
4340         * typemanager.cs (TypeManager.IsNullableType): New public function.
4341         (TypeManager.IsNullableTypeOf): Likewise.
4342         (TypeManager.IsNullableValueType): Likewise.
4343
4344         * class.cs (MethodCore): Added the `GenericMethod' argument from
4345         gmcs and also unified all classes derived from `MethodCore' with gmcs.
4346
4347 2006-09-24  Raja R Harinath  <harinath@gmail.com>
4348
4349         * convert.cs: Unify with gmcs version.
4350
4351 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4352
4353         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
4354         verify them as well.
4355
4356         * report.cs: New warning.
4357
4358 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4359
4360         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
4361         for anonymous block with out argument.
4362
4363 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4364
4365         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
4366         not used private events only.
4367
4368 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
4369
4370         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
4371
4372         * const.cs (Const.Define): Check for constant type.
4373         (Const.IsConstantTypeValid): Looks for valid constant types.
4374
4375         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
4376
4377         * ecore.cs (EmptyConstantCast): New common class for all constant based
4378         EmptyCast(s).
4379
4380         * expression.cs (Is.DoResolve): Handle null constant especially.
4381         (New.DoResolve): Check for new void().
4382         (MemberAccess.DoResolve): Cope with all kind of nulls.
4383
4384         * literal.cs (NullConstant): Uses EmptyConstantCast.
4385         (NullDefault): Based on EmptyConstantCast.
4386         (NullLiteral): Uses EmptyConstantCast.
4387
4388         * statement.cs (Block.ResolveMeta): Check for constant type.
4389
4390 2006-09-22  Martin Baulig  <martin@ximian.com>
4391
4392         * delegate.cs, attribute.cs: Merged with the gmcs versions.
4393
4394 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4395
4396         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
4397         not the null type.
4398
4399         Fix part of #79451
4400         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
4401         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
4402         code slightly.
4403
4404 2006-09-22  Martin Baulig  <martin@ximian.com>
4405
4406         * ecore.cs: Merged with the gmcs version.
4407
4408         * generic.cs (ConstructedType): New dummy class.
4409         (TypeArguments): Don't make this abstract.
4410
4411         * typemanager.cs
4412         (TypeManager.IsGenericTypeDefinition): New method.
4413         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
4414
4415 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4416
4417         * expression.cs (ComposedCast): Check for arrays of TypedReference
4418         before creating the type, not after.
4419
4420 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
4421
4422         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
4423         after ToType change.
4424
4425         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
4426         when constant must be implicitly convertible.
4427
4428         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
4429
4430         * ecore.cs (NullCast): Derives from NullConstant.
4431
4432         * expression.cs (Is.DoResolve): Removed useless variables.
4433         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
4434         (New.Constantify): Add enum support.
4435         (MemberAccess.DoResolve): Add warning when accessing null constant or
4436         variable.
4437
4438         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
4439         property.
4440
4441         * literal.cs (NullConstant): New abstract class with common
4442         functionality for all null specializations.
4443         (NullDefault): Represents default(X) when result can be
4444         reduced to null.
4445         (NullLiteral): Updated.
4446
4447         * report.cs: Add new warning.
4448
4449 2006-09-21  Martin Baulig  <martin@ximian.com>
4450
4451         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
4452
4453 2006-09-21  Martin Baulig  <martin@ximian.com>
4454
4455         * generic.cs (GenericConstraints): New dummy class.
4456         (Constraints): Likewise.
4457         (TypeParameter): Likewise.
4458         (TypeParameterName): Likewise.
4459         (GenericMethod): Likewise.
4460
4461         * typemanager.cs (TypeManager.GetGenericArguments): New method.
4462
4463         * decl.cs: Merged with the gmcs version.
4464
4465 2006-09-21  Raja R Harinath  <rharinath@novell.com>
4466
4467         * generic.cs (TypeParameter): Implement IMemberContainer.
4468         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
4469
4470         * rootcontext.cs: Unify with gmcs version.
4471
4472         * report.cs: Unify with gmcs version.
4473         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
4474         from gmcs/generics.cs.
4475         * generics.cs (TypeParameter): New dummy class.
4476
4477         * support.cs: Unify with gmcs version.
4478
4479 2006-09-20  Raja R Harinath  <rharinath@novell.com>
4480
4481         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
4482         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
4483
4484         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
4485         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
4486         * mcs.exe.sources: Add generic.cs.
4487
4488         * codegen.cs: Unify with gmcs version.
4489
4490         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
4491         (EmitContext): Add GenericDeclContainer implementation.
4492         * decl.cs (MemberCore, DeclSpace): Likewise.
4493         * namespace.cs: Remove #ifdef GMCS_SOURCE.
4494
4495         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
4496         MCS TypeManager has a corresponding dummy method.
4497
4498 2006-09-19  Martin Baulig  <martin@ximian.com>
4499
4500         * expression.cs: Completely merged with the gmcs version.
4501
4502 2006-09-19  Martin Baulig  <martin@ximian.com>
4503
4504         * expression.cs (Invocation): Merged with the gmcs version.
4505         (ArrayAccess.GetStoreOpcode): Likewise.
4506
4507 2006-09-19  Martin Baulig  <martin@ximian.com>
4508
4509         * typemanager.cs
4510         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
4511         (TypeManager.IsGenericMethodDefinition): Likewise.
4512
4513 2006-09-19  Martin Baulig  <martin@ximian.com>
4514
4515         * typemanager.cs
4516         (TypeManager.IsEqual): Moved the gmcs implementation here.
4517         (TypeManager.DropGenericTypeArguments): Likewise.
4518         (TypeManager.DropGenericMethodArguments): Likewise.
4519         (TypeManager.GetTypeArguments): Moved here from gmcs.
4520         (TypeManager.HasGenericArguments): Likewise.
4521
4522 2006-09-19  Martin Baulig  <martin@ximian.com>
4523
4524         * expression.cs (Binary): Merged with the gmcs version.
4525
4526 2006-09-19  Martin Baulig  <martin@ximian.com>
4527
4528         * expression.cs (Probe, As, Is): Merged with the gmcs version.
4529
4530 2006-09-19  Martin Baulig  <martin@ximian.com>
4531
4532         * typemanager.cs: Merged with the gmcs version.
4533
4534 2006-09-16  Raja R Harinath  <rharinath@novell.com>
4535
4536         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
4537         * driver.cs: Likewise.
4538
4539 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
4540
4541         A fix for #79401
4542         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
4543         only if parent type is class.
4544         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
4545         update.
4546
4547 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
4548
4549         * cs-parser.jay,
4550         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
4551         keywords are used.
4552         * typemanager.cs(CSharpName): Converts NullType to null.
4553
4554 2006-09-15  Martin Baulig  <martin@ximian.com>
4555
4556         * typemanager.cs
4557         (TypeManager.GetMethodName): Added mcs implementation.
4558         (TypeManager.IsEqual): Likewise.
4559
4560         * ecore.cs
4561         (SimpleName.RemoveGenericArity): Added dummy implementation.
4562
4563         * pending.cs: Merged with the gmcs version.     
4564
4565 2006-09-15  Martin Baulig  <martin@ximian.com>
4566
4567         * statement.cs: Merge with the gmcs version.
4568
4569 2006-09-15  Martin Baulig  <martin@ximian.com>
4570
4571         * statement.cs (Switch): Merge with the gmcs implementation
4572         (without nullables), which is newer.
4573
4574 2006-09-15  Martin Baulig  <martin@ximian.com>
4575
4576         * statement.cs (Block.Variables): Make this public.
4577         (ToplevelBlock.Parameters): Make this a property.
4578         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
4579
4580 2006-09-15  Martin Baulig  <martin@ximian.com>
4581
4582         * namespace.cs: Merge with the gmcs version.
4583
4584 2006-09-15  Martin Baulig  <martin@ximian.com>
4585
4586         * decl.cs (MemberName): Minor code cleanups.
4587
4588 2006-09-15  Martin Baulig  <martin@ximian.com>
4589
4590         * parameter.cs: Merge with the gmcs version.
4591
4592 2006-09-15  Martin Baulig  <martin@ximian.com>
4593
4594         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
4595         and an error in mcs.
4596
4597 2006-09-15  Martin Baulig  <martin@ximian.com>
4598
4599         * flowanalysis.cs: Merged from GMCS; added the generics code into
4600         a `GMCS_SOURCE' conditional so we can share this file.
4601
4602 2006-09-08  Martin Baulig  <martin@ximian.com>
4603
4604         * typemanager.cs (TypeManager.interlocked_type): New public field.
4605         (TypeManager.int_interlocked_compare-exchange): New public field.
4606         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
4607         enumerator types here and call InitGenericCoreTypes().
4608         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
4609         after calling InitEnumUnderlyingTypes().
4610
4611         * rootcontext.cs
4612         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
4613         `classes_second_stage'. 
4614
4615 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
4616
4617         * assign.cs, ecore.cs, expression.cs: Share error message text.
4618         * class.cs (FieldMember.Define): Check for varible of static type.
4619         * driver.cs (LoadAssembly): Uses error output for errors.
4620         * statement.cs: Updated.
4621
4622 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
4623
4624         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
4625         type instance.
4626
4627 2006-09-07  Martin Baulig  <martin@ximian.com>
4628
4629         * driver.cs
4630         (MainDriver): Revert r62663 from Marek; see #70506 for details.
4631
4632 2006-08-29  Miguel de Icaza  <miguel@novell.com>
4633
4634         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4635         
4636 2006-08-17  Miguel de Icaza  <miguel@novell.com>
4637
4638         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
4639         #52019 and #79064, the use of the \uXXXX sequence in source code
4640         to represent unicode characters.
4641
4642 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
4643
4644         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
4645         support.
4646         * class.cs, ecore.cs, statement.cs: Merged to one error message.
4647
4648 2006-08-13  Miguel de Icaza  <miguel@novell.com>
4649
4650         * assign.cs: Catch attempts to assign to a method groups in += and
4651         report as 1656
4652
4653 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
4654
4655         A fix for #79056
4656         * cs-parser.jay: Don't destroy current array type by typeof of array's.
4657
4658 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
4659
4660         * class.cs (Method.Define): Issue a warning when generic method looks like
4661         an entry point.
4662         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
4663         as well.
4664
4665 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
4666  
4667         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
4668         looking for ctor.
4669         * decl.cs (MemberCache.FindMembers): When container is interface we need to
4670         search all base interfaces as a member can be ambiguous.
4671         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
4672         Constructor member type filter. 
4673         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
4674         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
4675         reporting for returned memberinfos.
4676         * report.cs: Updated.
4677         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
4678         version to work on all runtimes.
4679         (TypeManager.RealMemberLookup): Removed members filtering.
4680
4681 2006-08-08  Raja R Harinath  <rharinath@novell.com>
4682
4683         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
4684         (PropertyExpr.EmitAssign): Likewise.
4685         * expression.cs (Indirection.EmitAssign): Likewise.
4686         (LocalVariableReference.EmitAssign): Likewise.
4687         (ParameterReference.EmitAssign): Likewise.
4688         (Invocation.EmitArguments): Likewise.
4689         (ArrayAccess.EmitAssign): Likewise.
4690         (IndexerAccess.EmitAssign): Likewise.
4691         (This.EmitAssign): Likewise.
4692         (ConditionalLogicalOperator.Emit): Likewise.
4693
4694         Fix #79026
4695         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
4696         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
4697         leave it in after returning it.
4698         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
4699
4700 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
4701
4702         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
4703         message.
4704
4705 2006-08-03  Raja R Harinath  <rharinath@novell.com>
4706
4707         Fix cs0146-3.cs and cs0146-4.cs.
4708         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
4709         enclosing types don't depend on the current type.
4710
4711 2006-08-02  Raja R Harinath  <rharinath@novell.com>
4712
4713         Fix #77963
4714         * class.cs (TypeContainer.DoDefineMembers): Use
4715         FindBaseMemberWithSameName on Parent, since we're interested in
4716         whether we hide inherited members or not.
4717         (FindBaseMemberWithSameName): Make slightly more robust.
4718
4719         Fix the non-generic testcase from #77396
4720         * decl.cs (DeclSpace.DeclContainer): Remove override.
4721
4722         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
4723         declspaces for doppelgangers too.
4724         (UsingEntry): Implement IResolveContext.
4725         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
4726         'this' as the resolve context.
4727         (LocalAliasEntry): Likewise.
4728
4729         Implement parts of #77403
4730         * roottypes.cs (RootDeclSpace): New.  Used to represent the
4731         toplevel declaration space.  Each namespace declaration introduces
4732         a "partial" root declaretion space.
4733         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
4734         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
4735         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
4736         from 'current_namespace.SlaveDeclSpace'.
4737         (namespace_declaration): Likewise.
4738         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
4739         check.  It can't happen now.
4740         * decl.cs (DeclSpace.LookupType): Likewise.
4741         * driver.cs (MainDriver): Sanity check.
4742
4743 2006-08-01  Raja R Harinath  <rharinath@novell.com>
4744
4745         * decl.cs (DeclSpace.FindNestedType): Remove.
4746         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
4747         LookupTypeContainer to get the container of the nested type.
4748         * class.cs (TypeContainer.FindNestedType): Make non-override.
4749
4750 2006-07-31  Raja R Harinath  <rharinath@novell.com>
4751
4752         * decl.cs (DeclSpace.PartialContainer): Move field from ...
4753         * class.cs (TypeContainer.PartialContainer): ... here.
4754         (TypeContainer.AddBasesForPart): New helper.
4755         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
4756         instead.
4757         * cs-parser.jay (current_class): Convert to DeclSpace.
4758         (struct_declaration, interface_declaration, class_declaration):
4759         Use AddBasesForPart instead of .Bases directly.
4760         * const.cs, iterators.cs: Update to changes.
4761
4762 2006-07-28  Raja R Harinath  <rharinath@novell.com>
4763
4764         * class.cs (TypeContainer.AddMemberType): Rename from
4765         AddToTypeContainer.
4766         (TypeContainer.AddMember): Rename from AddToMemberContainer.
4767         (AddTypeContainer): New.  Combine AddClassOrStruct and
4768         AddInterface.
4769         (AddPartial): Update.  Add 'is_partial' argument.
4770         * roottypes.cs: Update to changes.
4771         * cs-parser.jay (push_current_class): New helper for handling
4772         current_container and current_class.
4773         (struct_declaration, interface_declaration, class_declaration):
4774         Use it.
4775
4776 2006-07-26  Raja R Harinath  <rharinath@novell.com>
4777
4778         * roottypes.cs: Rename from tree.cs.
4779
4780         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
4781         * tree.cs (Tree, ITreeDump): Remove types.
4782         * rootcontext.cs (tree, Tree): Remove fields.
4783         (root, ToplevelTypes): New.
4784         * *.cs: Update to rename.
4785
4786         * tree.cs (Tree.RecordDecl): Remove.
4787         (RootTypes.AddToTypeContainer): Record the toplevel type in its
4788         namespace here.
4789         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
4790
4791 2006-07-23  Raja R Harinath  <harinath@gmail.com>
4792
4793         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
4794         DoFlowAnalysis and OmitStructFlowAnalysis here.
4795         (ec.With): Rename from WithUnsafe and generalize.
4796         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
4797         (ec.WithFlowAnalyis): New.
4798         * ecore.cs, expression.cs, statement.cs: Update.
4799
4800 2006-07-22  Raja R Harinath  <harinath@gmail.com>
4801
4802         * statement.cs (Block.ResolveMeta): Simplify slightly.
4803
4804         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
4805         multiple boolean fields.  Convert InUnsafe, constant_check_state,
4806         check_state to flags.
4807         (CheckState, ConstantCheckState): Update.
4808         (InUnsafe): New read-only property.
4809         (FlagsHandle): Rename from CheckStateHandle and convert to handle
4810         arbitrary flags.
4811         (WithUnsafe): New helper similar to WithCheckState.
4812         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
4813         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
4814
4815 2006-07-21  Raja R Harinath  <rharinath@novell.com>
4816
4817         Make comparisons use the same IL irrespective of whether they're
4818         in a 'checked' or 'unchecked' context: one of the issues in #78899
4819         * codegen.cs (EmitContext.CheckState): Make read-only property.
4820         (EmitContext.ConstantCheckState): Likewise.
4821         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
4822         helper that implement a save/restore stack for CheckState
4823         values.  This is the only way to change check-state.
4824         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
4825         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
4826         (CheckedExpr.EmitBranchable): New forwarding method.
4827         (UnCheckedExpr): Likewise.
4828         * statement.cs (Block.ResolveMeta): Use WithCheckState.
4829         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
4830         (Checked.Resolve, checked.DoEmit): Likewise.
4831
4832 2006-07-20  Miguel de Icaza  <miguel@novell.com>
4833
4834         * anonymous.cs: Cache the resolved anonymous delegate, and return
4835         this so that the ResolveTopBlock is only triggered once, not
4836         twice.
4837
4838         Currently we trigger ResolvetopBlock twice due to a first pass of
4839         argument check compatibility, and a second pass that does the
4840         actual resolution.   
4841         
4842 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4843
4844         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
4845         modifiers.
4846         * rootcontext.cs (Reset): Add helper_classes.
4847
4848 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4849
4850         A fix for #78860
4851         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
4852         correctly.
4853
4854 2006-07-13  Miguel de Icaza  <miguel@novell.com>
4855
4856         * statement.cs (Lock): Handle expressions of type
4857         TypeManager.null_type specially.  Fixes #78770
4858
4859 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4860
4861         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
4862         to an event.
4863
4864 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4865
4866         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
4867         for accessors as well.
4868         * ecore.cs (EventExpr): Add AccessorTable.
4869
4870 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
4871
4872         A fix for #78738
4873         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
4874         for CS0122 where appropriate.
4875         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
4876         level attributes.
4877         (Filter): Assembly can be null in the case of top level attributes.
4878
4879 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
4880
4881         A fix for #78690
4882
4883         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
4884         is done at global level.
4885
4886 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4887
4888         A fix for #77002, Implemented TypeForwarder support.
4889
4890         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
4891         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
4892         * typemanager.cs (): Add type_forwarder_attr_type.
4893
4894 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4895
4896         * report.cs: Add CS0469 warning.
4897
4898 2006-06-21  Martin Baulig  <martin@ximian.com>
4899
4900         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
4901         the `try'-block, so we also report CS0016 etc. there.
4902
4903 2006-06-21  Martin Baulig  <martin@ximian.com>
4904
4905         * delegate.cs
4906         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
4907
4908 2006-06-21  Martin Baulig  <martin@ximian.com>
4909
4910         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
4911         also report CS1686 for parameters.
4912
4913 2006-06-21  Martin Baulig  <martin@ximian.com>
4914
4915         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
4916         instead of an error if the value is not implicitly convertible to
4917         the switch types; fixes #77964.
4918
4919 2006-06-21  Raja R Harinath  <rharinath@novell.com>
4920
4921         Fix #78673
4922         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
4923         FieldBuilder is null.
4924
4925         Fix #78662
4926         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
4927         'left' and 'right' before error-checking.
4928
4929 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
4930
4931         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
4932         Fixed bug #78601.
4933         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
4934         (FieldExpr.DoResolve): likewise.
4935         (PropertyExpr.InstanceResolve): likewise.
4936         (EventExpr.InstanceResolve): likewise. 
4937
4938 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
4939
4940         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
4941         attribute applicable tests for attribute argument.
4942
4943 2006-06-02  Raja R Harinath  <rharinath@novell.com>
4944
4945         Fix #78079
4946         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
4947         (Binary.OverloadResolve_PredefinedIntegral): New.
4948         (Binary.OverloadResolve_PredefinedFloating): New.
4949         (Binary.OverloadResolve_PredefinedString): New.
4950         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
4951         Follow the standard more closely, and treat numeric promotions in
4952         terms of overload resolution.
4953         (Binary.CheckShiftArguments): Simplify.
4954
4955 2006-06-01  Raja R Harinath  <rharinath@novell.com>
4956
4957         * flowanalysis.cs (MyBitVector): Simplify representation.
4958         (MyBitVector.Clone): Avoid allocating BitArray.
4959         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
4960         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
4961         (*): Update.  Change all references to MyBitVector.And and
4962         MyBitVector.Or to &= and |=.
4963
4964 2006-05-29  Raja R Harinath  <rharinath@novell.com>
4965
4966         Fix cs0231-[34].cs.
4967         * cs-parser.jay (formal_parameter_list): Extend the pattern below
4968         to param arguments too.
4969
4970 2006-05-26  Miguel de Icaza  <miguel@novell.com>
4971
4972         * cs-parser.jay: Catch another parsing form for arglist being
4973         followed by other arguments.  Fixes #78313.
4974
4975 2006-05-24  Raja R Harinath  <rharinath@novell.com>
4976
4977         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
4978         checking of out parameters to ...
4979         (FlowBranchingToplevel.Merge): ... here.
4980         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
4981         set, propagate the origin upward, and only complain if there was
4982         no other error.
4983         (FlowBranchingException.AddContinueOrigin): Likewise.
4984         (FlowBranchingException.AddReturnOrigin): Likewise.
4985         (FlowBranchingException.AddGotoOrigin): Likewise.       
4986
4987 2006-05-23  Raja R Harinath  <rharinath@novell.com>
4988
4989         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
4990         unreachable, skip it.
4991         (FlowBranchingException.Merge): Always propagate jumps, even if
4992         the finally block renders subsequent code unreachable.
4993
4994 2006-05-18  Raja R Harinath  <rharinath@novell.com>
4995
4996         Fix #77601
4997         * statement.cs (Goto.Resolve): Move responsibility for resolving
4998         'goto' to FlowBranching.AddGotoOrigin.
4999         (Goto.SetResolvedTarget): New.  Callback to set the
5000         LabeledStatement that's the target of the goto.
5001         (Goto.DoEmit): Use Leave instead of Br when crossing an
5002         unwind-protect boundary.
5003         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
5004         LookupLabel and adjust to new semantics.
5005         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
5006         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
5007         Goto.SetResolvedTarget to update target.
5008         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
5009         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
5010         AddBreakOrigin & co.  Delay propagation until ...
5011         (FlowBranchingException.Merge): ... this.
5012
5013         * statement.cs (Block.Resolve): Always depend on flow-branching to
5014         determine unreachability.  Kill workaround that originally emitted
5015         only one statement after an "unreachable" label (see infloop in
5016         test-515.cs).
5017
5018         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
5019         This is still "wrong", but anything better would probably need a
5020         multi-pass algorithm.
5021         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
5022         usage vector.  Force current usage vector to be reachable, to
5023         optimistically signify backward jumps.
5024         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
5025         detected.
5026         (FlowBranchingLabeled.Merge): New.  If no backward jump was
5027         detected, return the original salted-away usage vector instead,
5028         updated with appropriate changes.  Print unreachable warning if
5029         necessary.
5030         * statement.cs (Block.Resolve): Don't print unreachable warning on
5031         a labeled statement.
5032
5033 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
5034
5035         * driver.cs: Pass filename without path to AssemblyBuilder's 
5036         AddResourceFile. Fixes bug #78407.
5037
5038 2006-05-17  Raja R Harinath  <rharinath@novell.com>
5039
5040         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
5041         * flowanalysis.cs (FlowBranchingLabeled): ... here.
5042         (FlowBranching.MergeChild): Overwrite
5043         reachability information from Labeled branchings too.
5044
5045 2006-05-16  Raja R Harinath  <rharinath@novell.com>
5046
5047         * statement.cs (Goto.Resolve): Merge jump origins here ...
5048         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
5049
5050         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
5051         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
5052         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
5053         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
5054         here, ...
5055         * statement.cs (Goto.Resolve): ... not here.
5056         (Goto.Emit): Remove CS1632 check.
5057
5058 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
5059
5060         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
5061         error message.
5062
5063 2006-05-11  Raja R Harinath  <rharinath@novell.com>
5064
5065         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
5066         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
5067         (FlowBranchingException.Label): Likewise.
5068
5069         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
5070         given value.
5071         (MyBitVector.Or): Use it to avoid losing information (Count).
5072         (FlowBranching.MergeOrigins): Likewise.
5073
5074         * flowanalysis.cs (UsageVector.IsDirty): Remove.
5075         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
5076         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
5077         (UsageVector.ToString): Simplify.
5078         (UsageVector.MergeSiblings): Move here from ...
5079         (FlowBranching.Merge): ... here.
5080         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
5081         not a MyBitVector.
5082
5083 2006-05-10  Raja R Harinath  <rharinath@novell.com>
5084
5085         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
5086         null bitvector is treated as all-true.
5087
5088         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
5089         (MyBitVector): Rationalize invariants.  'vector != null' implies
5090         that we have our own copy of the bitvector.  Otherwise,
5091         'InheritsFrom == null' implies all inherited bits are true.
5092
5093 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
5094
5095         * statement.cs (LocalInfo): Add IsConstant.
5096         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
5097         local variable for constants.
5098
5099 2006-05-09  Raja R Harinath  <rharinath@novell.com>
5100
5101         * flowanalysis.cs (MyBitVector.Empty): New.
5102         (MyBitVector): Don't allow InheritedFrom to be null.
5103         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
5104         (UsageVector, FlowBranching): Update to changes.
5105
5106         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
5107         recursion.  The 'Parent == null' condition isn't sufficient for
5108         anonymous methods.
5109         (FlowBranching.AddBreakOrigin): Likewise.
5110         (FlowBranching.AddContinueOrigin): Likewise.
5111         (FlowBranching.AddReturnOrigin): Likewise.
5112         (FlowBranching.StealFinallyClauses): Likewise.
5113         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
5114         (FlowBranching.CheckOutParameters): Likewise.
5115         (FlowBranchingToplevel): Terminate all the above recursions here.
5116         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
5117         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
5118
5119         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
5120         toplevel block.
5121         (FlowBranchingToplevel): New.  Empty for now.
5122         (FlowBranching.MergeTopBlock): Update.
5123         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
5124         branching for the anonymous delegate.
5125         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
5126
5127         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
5128         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
5129         information at the start of the merge.  Reorganize.
5130
5131 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5132
5133         * class.cs (MethodData.Define): Method cannot implement interface accessor.
5134
5135 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5136
5137         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
5138         to newly introduced ctor.
5139
5140         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
5141         message to one place.
5142         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
5143         global namespace.
5144
5145 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5146
5147         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
5148
5149         * ecore.cs (Expression.ResolveAsConstant): Updated.
5150
5151         * statement.cs (ResolveMeta): Updated.
5152
5153 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
5154
5155         * cs-parser.jay: __arglist cannot be used in initializer.
5156
5157 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
5158
5159         A fix for #77879
5160         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
5161         private types.
5162
5163 2006-05-05  Raja R Harinath  <rharinath@novell.com>
5164
5165         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
5166         (LabeledStatement): Add 'name' parameter.
5167         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
5168         (Block.AddLabel): Update to changes.
5169         * cs-parser.jay (labeled_statement): Likewise.
5170
5171         * flowanalysis.cs (BranchingType.Labeled): New.
5172         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
5173         (FlowBranchingLabeled): New.  Does nothing for now, but will
5174         eventually handle 'goto' flows.
5175         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
5176         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
5177         that's terminated ...
5178         (Block.Resolve): ... here.
5179
5180         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
5181         (UsageVector.MergeFinallyOrigins): Likewise.
5182         (FlowBranching.InTryOrCatch): Likewise.
5183         (FlowBranching.AddFinallyVector): Likewise.
5184         (FlowBranchingException): Update to changes.
5185
5186         Fix #78290
5187         * statement.cs (Return.Resolve): Move error checking to ...
5188         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
5189         (FlowBranchingException): Handle return origins like break and
5190         continue origins.
5191         (FlowBranching.UsageVector.CheckOutParameters): Remove.
5192
5193 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
5194
5195         A fix for #76122
5196         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
5197         filter.
5198
5199 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
5200
5201         A fix for #77543
5202         * class.cs (MethodData.Define): Do public accessor check only when method
5203         implements an interface.
5204
5205 2006-05-04  Raja R Harinath  <rharinath@novell.com>
5206
5207         Remove special handling of 'break'
5208         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
5209         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
5210         (UsageVector.Break): Remove.
5211         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
5212         reachability.
5213         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
5214
5215         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
5216         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
5217
5218 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
5219
5220         A fix for #75726
5221         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
5222         be the interface member.
5223
5224 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
5225
5226         A fix for #60069
5227         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
5228         for emitting small (int) values.
5229
5230 2006-05-03  Raja R Harinath  <rharinath@novell.com>
5231
5232         Fix #59427
5233         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
5234         control-flow passes through the 'finally' after merging-in all the
5235         control-flows from 'try' and the 'catch' clauses.
5236
5237         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
5238         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
5239         always true at the only non-recursive entry point.
5240         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
5241         FlowBranchingBreakable.
5242         (FlowBranchingLoop): Remove.
5243         * statement.cs (Return.DoResolve): Update to changes.
5244
5245         Fix #76471, #76665
5246         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
5247         (FlowBranching.CreateBranching): Handle it: create a
5248         FlowBranchingContinuable.
5249         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
5250         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
5251         except that it handles the 'continue' command.
5252         (FlowBranching.UsageVector.MergeOrigins): Rename from
5253         MergeBreakOrigins.
5254         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
5255         except that it overrides AddContinueOrigin.
5256         (FlowBranchingException): Override AddContinueOrigin, similar to
5257         AddBreakOrigin.
5258         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
5259         Create a new branching around the embedded statement.
5260         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
5261         control flow after the embedded statement.
5262         (Continue.Resolve): Move all error checking to AddContinueOrigin.
5263
5264         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
5265         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
5266         FlowBranchingBreakable.
5267         (FlowBranchingSwitch): Remove.
5268
5269         Fix test-503.cs
5270         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
5271         error reporting to ...
5272         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
5273         Rename from 'AddBreakVector'.  Add new location argument.  Return
5274         a bool indicating whether the 'break' crosses an unwind-protect.
5275         (FlowBranchingException.AddBreakOrigin): Add.
5276         (FlowBranchingException.Merge): Propagate 'break's to surrounding
5277         flowbranching after updating with the effects of the 'finally'
5278         clause.
5279         (FlowBranchingBreakable): New common base class for
5280         FlowBranchingLoop and FlowBranchingSwitch.
5281
5282         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
5283         embedded statement.
5284         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
5285
5286 2006-05-02  Raja R Harinath  <rharinath@novell.com>
5287
5288         * statement.cs (Do.Resolve): If the loop is infinite, set the
5289         barrier.
5290         (While.Resolve, For.Resolve): Set a barrier after the embedded
5291         statement.  There's no direct control flow that goes from the end
5292         of the embedded statement to the end of the loop.
5293         * flowanalysis.cs (FlowBranching.Infinite): Remove.
5294         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
5295         above ensure that the reachability is correctly computed.
5296
5297         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
5298         (UsageVector.MergeBreakOrigins): If the current path is
5299         unreachable, treat it as if all parameters/locals are initialized.
5300         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
5301         infinite loops before merging-in break origins.
5302
5303         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
5304         (Reachability.Reachable): Split part into ...
5305         (Reachability.Unreachable): ... this.  Simplify.
5306         (Reachability.IsUnreachable): Use 'Unreachable' instead.
5307
5308         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
5309         (Reachability.SetThrowsSometimes): Likewise.
5310         (FlowBranchingBlock.MergeTopBlock): Don't compare against
5311         TriState.Always, use corresponding property.
5312         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
5313         (Block.Resolve): Likewise.  Remove some redundant checks.
5314
5315 2006-05-02  Raja R Harinath  <harinath@gmail.com>
5316
5317         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
5318         (Reachability.Meet): Don't bother checking AlwaysThrows --
5319         barrier is always set.
5320         (FlowBranchingBlock.Merge): Likewise.
5321
5322 2006-05-01  Raja R Harinath  <harinath@gmail.com>
5323
5324         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
5325         checks for unreachable.
5326
5327 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
5328
5329         A fix for #77980
5330         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
5331
5332         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
5333         whether field is really assigned.
5334
5335 2006-04-30  Raja R Harinath  <harinath@gmail.com>
5336
5337         * flowanalysis.cs (Reachability): Make 4-argument constructor
5338         private.
5339         (Reachability.Meet): Rename from 'And'.  Remove static variant.
5340         (Reachability.Always): Rename from the highly misleading
5341         'Reachability.Never'.
5342         (FlowBranching.Merge): Update to changes.  Mark an impossible
5343         situation with a 'throw'.
5344         (*): Update to changes.
5345
5346 2006-04-29  Raja R Harinath  <harinath@gmail.com>
5347
5348         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
5349         Remove 'Undefined'.
5350         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
5351         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
5352         (*): Update to changes.
5353         * statement.cs: Update to changes.
5354
5355 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
5356
5357         A fix for #78049
5358         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
5359
5360 2006-04-28  Raja R Harinath  <harinath@gmail.com>
5361
5362         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
5363         dummy UsageVector.
5364
5365         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
5366         argument to two arguments: an usage-vector and a bool.  Move call
5367         to FlowBranching.Merge () ...
5368         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
5369
5370         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
5371         handling of loop and switch reachability to ...
5372         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
5373
5374 2006-04-27  Raja R Harinath  <harinath@gmail.com>
5375
5376         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
5377         handling to FlowBranchingLoop.InLoop.
5378         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
5379
5380 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
5381
5382         A fix for #78115
5383         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
5384         anonymous method is allowed from AnonymousContainer here.
5385
5386         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
5387
5388 2006-04-24  Raja R Harinath  <rharinath@novell.com>
5389
5390         Fix #78156
5391         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
5392
5393 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
5394
5395         A fix for #49011.
5396         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
5397         (DoubleConstant.Reduce): Ditto.
5398
5399 2006-04-23  Raja R Harinath  <rharinath@novell.com>
5400
5401         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
5402         Remove 'lvalue_right_side' argument.  Move parts to ...
5403         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
5404         (LocalVariable.DoResolveLValue): ... these.
5405
5406 2006-04-21  Raja R Harinath  <rharinath@novell.com>
5407
5408         Fix cs1655.cs
5409         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
5410         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
5411         (LocalVariableReference.DoResolveBase): Use it to implement new
5412         CS1655 check.
5413         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
5414         (Argument.Resolve): Simplify.  Move CS1510 check ...
5415         * ecore.cs (Expression.ResolveLValue): ... here.
5416         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
5417         (PropertyExpr.DoResolveLValue): Likewise.
5418         (FieldExpr.Report_AssignToReadonly): Likewise.
5419         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
5420         LValueMemberAccess or LValueMemberOutAccess on instance depending
5421         on it.
5422         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
5423         DoResolve as appropriate.
5424
5425 2006-04-20  Raja R Harinath  <rharinath@novell.com>
5426
5427         Fix #75800
5428         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
5429         implicit conversions on 'out' and 'ref' arguments.
5430
5431         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
5432         improve clarity.  Remove dead code.
5433
5434         Fix #66031
5435         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
5436         (Catch.Resolve): Resolve VarBlock if it exists.
5437
5438 2006-04-19  Miguel de Icaza  <miguel@novell.com>
5439
5440         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
5441         twice, this was some residual code, the enumerator was emitted
5442         properly in the two branche of if later.
5443
5444 2006-04-19  Raja R Harinath  <rharinath@novell.com>
5445
5446         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
5447         cast is never an lvalue.
5448         (Cast.DoResolve, Cast.ResolveRest): Combine.
5449         (Argument.Emit): Simplify slightly.  Move 'Expr is
5450         IMemoryLocation' check ...
5451         (Argument.Resolve): ... here.
5452         (Argument.Error_LValueRequired): Remove.  Inline into only user.
5453
5454         Simplifications.  Fix cs0191-2.cs
5455         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
5456         CS1649 and CS1651 to ...
5457         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
5458         the actual selection of the error code and message to a lookup
5459         table.  Add a dummy return value to simplify callsites.
5460         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
5461         readonly fields of other instances of the same type.  Move CS0197
5462         warning from ...
5463         * expression.cs (Argument.Resolve): ... here.  Simplify code.
5464         Ensure that ec.InRefOutArgumentResolving is only set during LValue
5465         resolution of an out or ref argument.  The code simplification
5466         above uses this invariant.
5467
5468 2006-04-18  Raja R Harinath  <rharinath@novell.com>
5469
5470         Possibly fix #77752.  Fix cs1690-[4-7].cs.
5471         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
5472         CheckMarshallByRefAccess.  Drop parameter.
5473         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
5474         warning.
5475         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
5476         InstanceExpression.
5477         * report.cs (AllWarnings): Add CS1690.
5478         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
5479         for ref access too.
5480         (LocalVariableReference.DoResolveBase): Update.
5481
5482 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5483
5484         * class.cs (MethodOrOperator): Moved common parts from method class.
5485         detect obsolete attributes.
5486         (Method.Define): Simplified as it reuses code from base.
5487         (Constructor.ValidAttributeTargets): Fixed issue found during
5488         refactoring.
5489         (Destructor.ValidAttributeTargets): Fixed issue found during
5490         refactoring.
5491         (Operator): Finished refactoring set off by #78020. Operator class is now
5492         ordinary method class.
5493
5494         * anonymous.cs: Updated.
5495
5496         * decl.cs (DeclSpace): Add IsGeneric
5497
5498 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5499
5500         * class.cs (Constructor.Emit): Don't emit the attributes twice.
5501
5502 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5503
5504         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
5505         detect obsolete attributes.
5506         (Method.CreateEmitContext): Moved to MethodOrOperator.
5507
5508 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5509
5510         A fix for #78048.
5511         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
5512         customized exception to make crash detection easier.
5513         (MethodOrOperator): Started to work on new base class for methods and
5514         operators.
5515         (Method): Derives from MethodOrOperator.
5516         (Constructor.Emit): Emits its own attributes.
5517         (AbstractPropertyEventMethod.Emit): Ditto.
5518         (Operator): Derives from MethodOrOperator, will refactor fully in extra
5519         patch.
5520         (Operator.Emit): It's temporary more tricky than should be.
5521         
5522         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
5523
5524         * report.cs (InternalErrorException): Add ctor with inner exception.
5525
5526 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
5527
5528         A fix for #76744.
5529         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
5530         only not visible.
5531
5532 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
5533
5534         A fix for #77916.
5535         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
5536         array.
5537
5538 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5539
5540         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
5541         attribute is present and Guid not.
5542         (Interface.ApplyAttributeBuilder): Ditto.
5543
5544         * attribute.cs: Add error message.
5545
5546 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5547
5548         A fix for #78020.
5549
5550         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
5551         sources (it's composite) so hold them in extra array as they are used in
5552         Emit phase only. It worked in the previous versions by mistake.
5553         (Attribute.Emit): Emit attribute for more owners when exist.
5554
5555         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
5556         it has now different behaviour.
5557
5558 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
5559
5560         * constant.cs (Constant.IsDefaultInitializer): New method.
5561
5562         * class.cs: Updated.
5563
5564         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
5565         re-initialize default values. It saves KBs almost for every assembly.
5566         Thanks Zoltan for the idea.
5567         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
5568         (ArrayCreation.DoResolve): Resolve only once.
5569         (ArrayCreation.Emit): Emit static initializer only when it is faster.
5570         (ArrayCreation.GetAttributableValue): Cope with optimized values.
5571
5572 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
5573
5574         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
5575         From #77961.
5576
5577 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5578
5579         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
5580         in an embedded statement too.
5581
5582 2006-04-01  Raja R Harinath  <rharinath@novell.com>
5583
5584         Fix #77958
5585         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
5586
5587 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5588
5589         A fix for #77966.
5590
5591         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
5592         was not specified.
5593
5594         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
5595
5596 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
5597
5598         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
5599         phase.
5600
5601         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
5602         LocalTemporary change.
5603
5604         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
5605         TypeContainer.
5606         (ClassOrStruct.DefineFieldInitializers): Implemented static field
5607         initializers optimization.
5608         (ClassOrStruct.TypeAttr): Moved from modifiers.
5609         (Constructor.CheckBase): Don't crash when static ctor has parameters.
5610         (FieldBase.ResolveInitializer): Resolves initializer.
5611         (FieldBase.HasDefaultInitializer): New property.
5612
5613         * cs-parser.jay: Removed message.
5614
5615         * expression.cs (CompilerGeneratedThis): New specialization.
5616
5617         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
5618
5619 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
5620
5621         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
5622
5623 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5624
5625         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
5626         be now EnumConstants only.
5627
5628 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5629
5630         * attribute.cs, driver.cs: Reset more caches.
5631
5632 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5633
5634         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
5635
5636 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5637
5638         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
5639         for easier reuse. Updated all overrides.
5640         (IntegralConstant): New base class for all integral constants.
5641         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
5642         of the constant range, report custom error.
5643         (UIntConstant.Reduce): Fixed uint conversion.
5644
5645         * ecore.cs, literal.cs: Reduce updates.
5646
5647 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5648
5649         A fix for #75813.
5650
5651         * class.cs (Constructor.Define): Removed extra if for default ctors.
5652         A patch from Atsushi Enomoto.
5653
5654 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5655
5656         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
5657         GetAttributableValue.
5658
5659         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
5660         when required.
5661
5662         * convert.cs (ImplicitConversionRequired): Error message moved to
5663         DoubleLiteral.
5664
5665         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
5666         automatic implicit conversion of an output value.
5667         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
5668
5669         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
5670         conversion.
5671         (TypeOf.GetAttributableValue): Add extra handling for object type.
5672
5673         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
5674         special error message.
5675
5676 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
5677
5678         * class.cs (Constructor.Emit): Don't crash when struct ctor is
5679         InternalCall.
5680         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
5681         compatible with MS runtime.
5682
5683 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
5684
5685         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
5686         attribute arguments here.
5687
5688         * class.cs (Indexer.Define): The check was moved to attribute class.
5689
5690 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
5691
5692         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
5693         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
5694         easier.
5695
5696 2006-03-22  Raja R Harinath  <rharinath@novell.com>
5697
5698         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
5699         mcs to keep code differences small.
5700         * attribute.cs (Attribute.GetParameterDefaultValue): New.
5701         * typemanager.cs (parameter_default_value_attribute_type): New.
5702         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
5703         CS1908 check.
5704
5705 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5706
5707         * expression.cs (StringConcat.Append): Reverted back to no warning state.
5708
5709 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5710
5711         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
5712
5713         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
5714         the blocks too.
5715
5716 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
5717
5718         * doc-bootstrap.cs : fix build.
5719
5720 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5721
5722         * expression.cs (StringConcat.Append): Issue a warning when empty string
5723         is going to append.
5724
5725 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5726
5727         * assign.cs (CompoundAssign.ResolveSource): Removed.
5728
5729         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
5730         clean up.
5731
5732         * class.cs (TypeContainer.FindMethods): Removed.
5733         (TypeContainer.CheckMemberUsage): Made static.
5734
5735         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
5736
5737         * constant.cs (CheckRange): Removed unused type argument.
5738         (CheckUnsigned): Removed unused type argument.
5739
5740         * cs-parser.jay: Updated after MemberAccess clean up.
5741         Uses Length for empty string test.
5742
5743         * cs-tokenizer.cs: Uses Length for empty string test.
5744         (IsCastToken): Made static.
5745         (is_hex): Made static.
5746         (real_type_suffix): Made static.
5747
5748         * decl.cs (SetupCache): Made static.
5749         (OnGenerateDocComment): Removed unused ds argument.
5750
5751         * delegate.cs (VerifyDelegate): Removed unused argument.
5752
5753         * doc.cs: Uses Length for empty string test.
5754
5755         * driver.cs: Uses Length for empty string test.
5756
5757         * enum.cs (IsValidEnumType): Made static
5758
5759         * expression.cs (EnumLiftUp): Removed unused argument.
5760         (ResolveMethodGroup): Ditto.
5761         (BetterConversion): Ditto.
5762         (GetVarargsTypes): Ditto.
5763         (UpdateIndices): Ditto.
5764         (ValidateInitializers): Ditto.
5765         (MemberAccess.ctor): Ditto.
5766         (GetIndexersForType): Ditto.
5767
5768         * flowanalysis.cs: (MergeFinally): Removed unused argument.
5769
5770         * iterators.cs: Updated after MemberAccess clean up.
5771
5772         * location.cs: Uses Length for empty string test.
5773
5774         * namespace.cs: Uses Length for empty string test.
5775
5776          * report.cs (CheckWarningCode): Made static.
5777
5778         * statement.cs (LabeledStatement): Removed unused argument.
5779
5780         * typemanager.cs (FilterNone): Removed.
5781
5782 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5783
5784         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
5785         obsolete.
5786
5787         * class.cs: Updated.
5788
5789 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5790
5791         * cs-parser.jay.cs: __arglist is not allowed for delegates.
5792
5793 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5794
5795         A fix for #77822.
5796
5797         * expression.cs (VerifyArgumentsCompat): Reverted to double error
5798         reporting, it's more tricky than I thought.
5799
5800 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5801
5802         A fix for #77816.
5803
5804         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
5805         host container.
5806         (AnonymousMethod.ImplicitStandardConversionExists): New method.
5807         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
5808         Add more error reporting; Fixed issue with params.
5809
5810         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
5811
5812         * cs-parser.jay: AnonymousMethod requires host container.
5813
5814         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
5815
5816 2006-03-18  Raja R Harinath  <harinath@gmail.com>
5817
5818         * class.cs: Change 'TypeContainer ds' constructor argument to
5819         'DeclSpace parent'.  Some classes were missed below due to
5820         different naming convention.
5821
5822         * class.cs (MemberCore.Parent): Delete.  This makes the
5823         ParentContainer changes below enforceable by the compiler.
5824
5825         Treat pointers to enclosing declaration space as 'DeclSpace', not
5826         'TypeContainer'.
5827         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
5828         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
5829
5830         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
5831         of TypeContainer.
5832         (Block.AddThisVariable): Likewise.
5833         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
5834         (AbstractPropertyEventMethod.Emit): Likewise.
5835         (AbstractPropertyEventMethod.EmitMethod): Likewise.
5836         (GetMethod.Define, SetMethod.Define): Likewise.
5837         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
5838         (DelegateMethod.EmitMethod): Likewise.
5839
5840         Fix regression test-partial-13.cs.
5841         Rationalize use of PartialContainer.  Ensure that the partial
5842         class semantics can be tied to type-correctness, i.e., any
5843         violation will cause a compile error.
5844         * class.cs, const.cs: Access all fields that belong to class
5845         TypeContainer via ParentContainer.  Arguments of EmitContexts and
5846         Resolve()-like functions still use 'Parent'.
5847
5848         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
5849         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
5850         (PropertyMethod.CheckModifiers): Remove unused argument.
5851         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
5852         DeclSpace.
5853
5854 2006-03-17  Raja R Harinath  <harinath@gmail.com>
5855
5856         Make semantics of PartialContainer simpler.
5857         * decl.cs (DeclSpace.IsPartial): Remove.
5858         * class.cs (TypeContainer.IsPartial): Likewise.
5859         (TypeContainer..ctor): Set PartialContainer to point to self.
5860         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
5861         (TypeContainer.FindNestedType): Likewise.
5862         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
5863
5864 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
5865
5866         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
5867
5868 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5869
5870         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
5871         classes.
5872
5873 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5874
5875         * class.cs (Operator.Define): An error for base conversion was not
5876         reported correctly.
5877
5878 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
5879
5880         * iterator.cs : yield break is allowed in try statement which has
5881           catch clauses. Fixed bug #77767.
5882
5883 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
5884
5885         A fix for #77593, #77574.
5886
5887         * class.cs (MethodCore.CheckBase): Another if for operator.
5888
5889 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
5890
5891         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
5892         were not resolved
5893
5894         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
5895         (DelegateCreation.ImplicitStandardConversionExists): New method for just
5896         conversion test.
5897         
5898         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
5899         not needed.
5900
5901         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
5902         Updated after another emitcontext usage was clean up. It should help us to
5903         synchronize with gmcs easier.
5904
5905 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
5906
5907         A fix for #77353.
5908
5909         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
5910         (Event.Define): ditto
5911         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
5912
5913         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
5914         Removed redundant code and set NewSlot for Invoke method too.
5915
5916         * parameter.cs (Parameters.ctor): Add custom, type ctor.
5917         (Parameters.MergeGenerated): New method. Use this method when you merge
5918         compiler generated argument with user arguments.
5919
5920 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
5921
5922         * attribute.cs (ResolveAsTypeTerminal): Removed.
5923
5924         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
5925         specialization for predefined types; 30% speed up.
5926         Finally placed obsolete check to right place.
5927         (Expression.ResolveType): Removed.
5928
5929         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
5930         Updated after ResolveType was removed.
5931
5932         * expression.cs (Cast.ctor): Check void cast.
5933         (Binary.ResolveAsTypeTerminal): Is never type.
5934         (Conditional.ResolveAsTypeTerminal): Is never type.
5935
5936         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
5937
5938 2006-03-01  Raja R Harinath  <rharinath@novell.com>
5939
5940         Fix #77679.
5941         * expression.cs (ParameterReference.DoResolveBase): Change return
5942         type to bool.
5943         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
5944         Update.
5945
5946         Fix #77628.
5947         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
5948
5949         Fix #77642.
5950         * typemanager.cs (GetFullNameSignature): Don't nullref on
5951         protected accessors.
5952
5953 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
5954
5955         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
5956         these two separated members to simplify the code.
5957         (Attribute.Resolve): Refactored to use new fields and methods.
5958         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
5959         implemented obsolete attribute checking.
5960         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
5961         implemented obsolete checking again. It look line never ending quest ;-)
5962         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
5963
5964         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
5965
5966         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
5967
5968         *class.cs (Property.Define): Add RegisterProperty call.
5969
5970         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
5971         argument groups (only 2).
5972
5973         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
5974         encoding expression to arguments.
5975         (Expression.ExprClassToResolveFlags): Just turned to property.
5976
5977         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
5978         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
5979         optimized as well as implemented support for zero-length attributes.
5980
5981         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
5982         Add caching of PropertyInfo's.
5983
5984 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5985
5986         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
5987         error multiple times.
5988
5989 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5990
5991         New partial class implementation.
5992         A fix for #77027, #77029, #77403
5993
5994         * attribute.cs (Attributable): Made attributes protected.
5995
5996         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
5997         the replacements of ClassPart and PartialContainer.
5998         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
5999         (TypeContainer.AddInterface): Ditto.
6000         (TypeContainer.AddPartial): The main method for partial classes. It checks
6001         for errors and merges ModFlags and attributes. At the end class is added to
6002         partial_parts list.
6003         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
6004         required here.
6005         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
6006         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
6007         from the rest of partial classes.
6008         (TypeContainer.GetClassBases): Simplified.
6009         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
6010         DefineType.
6011         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
6012         (TypeContainer.HasExplicitLayout): Uses Flags now.
6013         (PartialContainer): Removed.
6014         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
6015         (StaticClass): Was merged with Class.
6016         (Class.GetClassBases): class and static class bases are verified here.
6017         (Class.TypeAttr): Added static attributes when class is static.
6018         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
6019         (MemberBase): In some cases we need to call parent container for partial
6020         class. It should be eliminated but it's not easy now.
6021
6022         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
6023
6024         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
6025         partial classed to accumulate class comments.
6026         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
6027
6028         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
6029
6030         * driver.cs (MainDriver): Tree.GetDecl was removed.
6031
6032         * modifiers.cs (Modifiers): Add partial modifier.
6033
6034         * tree.cs (Tree.decl): Removed.
6035         (RootTypes): Started to use this class more often for root types
6036         specializations.
6037
6038 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6039
6040         A fix for #77615
6041
6042         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
6043         external interface does not have an attribute.
6044
6045 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6046
6047         Another prerequisites for new partial classs implementation.
6048         
6049         * attribute.cs (Attribute.Equal): Implemented.
6050         (Attribute.Emit): Changed as attributes can be applied more than twice.
6051         (Attributes.Emit): Check for duplicate attributes here.
6052
6053         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
6054         as a parameter, clean-up.
6055
6056 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6057
6058         A fix for #77485
6059
6060         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
6061         contains obsolete attribute check which can in some cases look for base
6062         type of current class which is not initialized yet.
6063         (TypeContainer.BaseType): Replacement of ptype.
6064
6065         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
6066
6067 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6068
6069         First of prerequisites for new partial classs implemention.
6070         
6071         * attribute.cs (Attributable): Extended by ResolveContext;
6072         Attributes finally have correct context for resolving in all cases.
6073         (AttachTo): Attribute owner is assigned here.
6074
6075         * codegen.cs (IResolveContext): Introduce new interface to hold
6076         all information needed in resolving phase.
6077         (EmitContext): Implements IResolveContext; more clean-up needed here.
6078         
6079         * decl.cs (MemberCore): Implemented IResolveContext.
6080
6081         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
6082         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
6083         parameter.cs, statement.cs, tree.cs, typemanager.cs:
6084         Refactored to use new IResolveContext instead of EmitContext; cleanup
6085
6086 2006-02-06  Miguel de Icaza  <miguel@novell.com>
6087
6088         * codegen.cs (EmitScopeInitFromBlock): check here the
6089         capture_context, there is no need to make two calls to the
6090         EmitContext. 
6091
6092         * anonymous.cs: Add some debugging messages that might help me
6093         track other instances of this problem in the future (the
6094         regression of test 467).
6095
6096         * cs-parser.jay: track the variable block, as we need to initalize
6097         any captured variables declared in this block for the "catch"
6098         portion of the "Try" statement.
6099
6100         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
6101         scope initialization for captured variables. 
6102
6103         Also, move the emit for the variables after the block location has
6104         been marked.
6105
6106 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
6107
6108         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
6109
6110 2006-02-02  Miguel de Icaza  <miguel@novell.com>
6111
6112         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
6113         commit yesterday, the initialization for the roots is necessary.
6114         What is not necessary is the scope activation.
6115
6116 2006-02-02  Raja R Harinath  <rharinath@novell.com>
6117
6118         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
6119         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
6120         CS0206 checks.
6121         (Argument.Resolve): Remove CS0206 checks.
6122
6123 2006-02-01  Miguel de Icaza  <miguel@novell.com>
6124
6125         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
6126         scopes for all the roots, the scopes will now be emitted when the
6127         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
6128
6129         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
6130         code.  This reduces a lot of existing cruft.
6131         
6132         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
6133         that the ScopeInfo is generated as we enter the scope, not at the
6134         time of use, which is what we used to do before.
6135
6136         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
6137         every time a Block is about to be emitted if we have a
6138         CaptureContext. 
6139
6140 2006-02-01  Raja R Harinath  <rharinath@novell.com>
6141
6142         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
6143         (Reset): Update.
6144         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
6145
6146         * typemanager.cs (cons_param_array_attribute): Make private.
6147         (Reset): Set it to null.
6148         (InitCoreHelpers): Don't initialize it.
6149         (ConsParamArrayAttribute): New.  Initialize it as needed.
6150         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
6151
6152 2006-01-31  Miguel de Icaza  <miguel@novell.com>
6153
6154         * expression.cs: There might be errors reported during the
6155         selection of applicable methods.  If there are errors, do not
6156         continue execution as it will lead the compiler to crash.
6157
6158 2006-01-30  Miguel de Icaza  <miguel@novell.com>
6159
6160         * expression.cs: Member access is not allowed on anonymous
6161         methods.  Fixes #77402.
6162
6163 2006-01-30  Raja R Harinath  <rharinath@novell.com>
6164
6165         Fix #77401
6166         * cs-parser.jay (VariableDeclaration): Don't set
6167         current_array_type to null.
6168         (field_declaration, event_declaration, declaration_statement):
6169         Set it to null here.
6170
6171 2006-01-28  Raja R Harinath  <harinath@gmail.com>
6172
6173         * typemanager.cs (GenericParameterPosition): New.
6174         * doc.cs: Use it.
6175
6176 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
6177
6178         * doc.cs : To process "include" elements, first we should create
6179           another list than XmlNodeList, because it could result in node
6180           removal, which could result in that the XmlNodeList gives up
6181           yielding next node.
6182
6183           (Also made code identical to gmcs again.)
6184
6185 2006-01-25  Miguel de Icaza  <miguel@novell.com>
6186
6187         * ecore.cs: Introduce an error report that we were not catching
6188         before, if not silent, we must report the error.  Gonzalo ran into
6189         it.
6190
6191 2006-01-23  Miguel de Icaza  <miguel@novell.com>
6192
6193         A fix for bug: #76957
6194         
6195         * iterators.cs (MoveNextMethod.CreateMethodHost): call
6196         ComputeMethodHost before creating the method, this is a new
6197         requirement. 
6198
6199         * anonymous.cs (AnonymousContainer): Now we track all the scopes
6200         that this method references (RegisterScope).  The actual scope
6201         where the method is hosted is computed with the ComputeMethodHost
6202         before we create the method.
6203
6204         Moved the Deepest routine here.
6205
6206         (AnonymousContainer.ComputeMethodHost): New routine used to
6207         compute the proper ScopeInfo that will host the anonymous method.
6208
6209         (ScopeInfo): Deal with multiple roots.  The problem was that we
6210         did not have a unique root where all ScopeInfos could be hanged
6211         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
6212         of roots.  
6213
6214         Remove AdjustMethodScope which is now computed at the end.  Remove
6215         LinkScope which did a partial link, instead link all ScopeInfos
6216         before code generation from the new "LinkScopes" routine. 
6217
6218         Simplify all the Add* routines as they no longer need to maintain
6219         the tree, they just need to record that they are using variables
6220         from a ScopeInfo.
6221
6222         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
6223         routines to produce the forest of ScopeInfo trees.
6224
6225         * class.cs (TypeContainer.AppendMethod): This is just like
6226         AddMethod, but ensures that an interface implementation method
6227         (IEnumerable.XXX) is not inserted at the beginning of the queue of
6228         methods, but at the end.
6229
6230         We use this functionality to ensure that the generated MoveNext
6231         method in the iterator class is resolved/emitted before the
6232         enumerator methods created.   
6233
6234         This is required because the MoveNext method computes the right
6235         ScopeInfo for the method.  And the other methods will eventually
6236         need to resolve and fetch information computed from the anonymous
6237         method. 
6238
6239 2006-01-21  Raja R Harinath  <harinath@gmail.com>
6240             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
6241
6242         Fix rest of #76995.
6243         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
6244         the 'aliases' hash.
6245         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
6246         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
6247
6248 2006-01-18  Raja R Harinath  <rharinath@novell.com>
6249
6250         Fix #76656, cs0231-2.cs.
6251         * cs-parser.jay (formal_parameter_list): Make error case catch
6252         more issues.
6253         (parenthesized_expression_0): Add CS1026 check.
6254         (invocation_expression): Remove unused { $$ = lexer.Location }.
6255
6256 2006-01-17  Raja R Harinath  <rharinath@novell.com>
6257
6258         Fix #76824.
6259         * cs-parser.jay (statement_expression): Don't list out the
6260         individual statement-expressions.  Convert syntax error into
6261         CS0201 check.
6262
6263 2006-01-16  Raja R Harinath  <rharinath@novell.com>
6264
6265         Fix #76874.
6266         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
6267         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
6268         CheckIntermediateModification.
6269         (FieldExpr.DoResolve): Add new two-argument version that
6270         allows us to resolve the InstanceExpression as an lvalue.
6271         The one-argument variant is now just a wrapper.
6272         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
6273         Resolve the lhs as an lvalue if the it has a value type.
6274         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
6275         from Assign.DoResolve.
6276         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
6277         resolved as an lvalue.
6278         (PropertyExpr.DoResolve): Update.
6279         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
6280         has a value type.  Move CS1612 check here from
6281         CheckIntermediateModification.
6282         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
6283         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
6284         'right_side' of a ResolveLValue on an 'out' argument.
6285         (EmptyExpression.LValueMemberAccess): New.  Used as the
6286         'right_side' of a propagated ResolveLValue on a value type.
6287         (LocalVariableReference.DoResolveBase): Recognize
6288         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
6289         Add CS1654 check.
6290         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
6291         EmptyExpression.Null.
6292
6293 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
6294
6295         * typemanager.cs : added IsGenericParameter(). In mcs it always
6296           return false.
6297         * doc.cs : for generic parameters, use GenericParameterPosition,
6298           not FullName.
6299
6300 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
6301
6302         * expression.cs: Fix Console.WriteLine ((this = x).foo);
6303
6304 2006-01-12  Miguel de Icaza  <miguel@novell.com>
6305
6306         This fixes the problem where we used ldfld instead of ldflda to
6307         load the "THIS" pointer on captured parameters, when THIS is a
6308         value type.  See bug #77205.
6309         
6310         * iterators.cs (CapturedThisReference.Emit): Pass false to
6311         EmitThis (we do not need the address).
6312
6313         * codegen.cs (EmitThis): it needs to know whether we need the
6314         address of `this' or not.  This is used by value types.  
6315
6316         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
6317         every other call passes false.
6318
6319 2006-01-12  Raja R Harinath  <rharinath@novell.com>
6320
6321         Fix #77221.
6322         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
6323         GetOverride.
6324         * expression.cs (Invocation.OverloadResolve): Update.
6325         (Invocation.DoResolve): Avoid double resolution of invocation.
6326
6327 2006-01-11  Raja R Harinath  <rharinath@novell.com>
6328
6329         Fix #77180.
6330         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
6331         unary negation of floating point types as 0-expr; negation cannot
6332         overflow in floating point types.
6333
6334         Fix #77204.
6335         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
6336         on operands of 'void' type.
6337
6338         Fix #77200.
6339         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
6340         and ExclusiveOr for boolean constants too.
6341
6342 2006-01-09  Raja R Harinath  <rharinath@novell.com>
6343
6344         Fix #75636.
6345         * expression.cs (Invocation.OverloadResolve): Replace reflected
6346         override methods with their base virtual methods, rather than
6347         skipping over them.
6348         * typemanager.cs (TypeManager.GetOverride): New.
6349
6350 2006-01-05  Jb Evain  <jbevain@gmail.com>
6351
6352         * class.cs (Property.Define, Indexer.Define): do not tag the
6353         properties as SpecialName | RTSpecialName.
6354
6355 2006-01-04  Miguel de Icaza  <miguel@novell.com>
6356
6357         * class.cs (MethodCore.IsDuplicateImplementation): This method was
6358         doing a low-level comparission of parameter types.  It was lacking
6359         a check for __argslist. 
6360
6361 2005-12-30  Miguel de Icaza  <miguel@novell.com>
6362
6363         * expression.cs (ParameterReference.DoResolveBase): Allow
6364         reference parameters if they are local to this block. 
6365
6366         This allows the ref and out parameters of a delegate to be used in
6367         an anonymous method, for example:
6368
6369         delegate void set (out int x);
6370
6371         set s = delegate (out int x){
6372                 x = 0;
6373         };
6374
6375         This is used by functionality introduced late in the C# language.
6376         
6377         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
6378         method that take ref and out parameters. 
6379
6380         Fixes #77119 which was a late change in the spec.
6381
6382 2005-12-23  Miguel de Icaza  <miguel@novell.com>
6383
6384         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
6385         parent if its the same scope.  Fixes #77060.
6386
6387 2005-12-21  Miguel de Icaza  <miguel@novell.com>
6388
6389         * driver.cs: Report the case of no source files and no -out:
6390         argument provided.
6391
6392 2005-12-20  Raja R Harinath  <rharinath@novell.com>
6393
6394         Fix #77035.
6395         * expression.cs (ComposedCast.GetSignatureForError): Define.
6396
6397 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
6398
6399         Fix #76995
6400
6401         * namespace.cs (NamespaceEntry): Add extern_aliases as a
6402         ListDictionary, to contain the ExternAliasEntry entries (in
6403         addition to the NamespaceEntry.aliases hashtable). This field is
6404         shared between the original entry and its doppelganger (bodyless 
6405         copy of it).
6406         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
6407         extern_aliases field.
6408         (NamespaceEntry.Lookup): Move the IsImplicit check after the
6409         lookup in extern_aliases.
6410
6411 2005-12-16  Raja R Harinath  <rharinath@novell.com>
6412
6413         Fix #77006.
6414         * class.cs (TypeContainer.Mark_HasEquals): New.
6415         (TypeContainer.Mark_HasGetHashCode): New.
6416         (ClassPart): Override them.
6417         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
6418
6419         Fix #77008.
6420         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
6421         'parent' argument to the base constructor.
6422
6423         Remove all mention of TypeContainer from decl.cs.
6424         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
6425         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
6426         (DeclSpace.DeclSpace): Likewise.
6427         (DeclSpace.DefineMembers): Remove unused argument.
6428         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
6429         debugging check -- we don't care if the debug code throws an
6430         InvalidCastException instead of an InternalErrorException.
6431         * class.cs (TypeContainer.DefineMembers): Update to changes.
6432         (TypeContainer.DoDefineMembers): Likewise.
6433         (TypeContainer.GetMethods): Likewise.
6434         (PropertyMember.Define): Likewise.
6435         (MemberBase.Parent): New property that forwards to
6436         MemberCore.Parent, but ensures that we get a TypeContainer.
6437         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
6438         (RootContext.PopulateTypes): Likewise.  Remove special case code
6439         for !RootContext.StdLib: DefineMembers is idempotent.
6440
6441 2005-12-14  Miguel de Icaza  <miguel@novell.com>
6442
6443         * convert.cs (ExplicitConversionCore): Check the return value from
6444         ExplicitConversionCore which can return null on failure.  Fixes #76914
6445
6446 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
6447
6448         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
6449
6450 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
6451
6452         * doc.cs : The search for referenced namespace was insufficient to
6453           get global one as it used to do. Fixed bug #76965.
6454
6455 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
6456
6457         * doc.cs : check name in cref in the last phase that whether it is
6458           namespace or not.
6459
6460 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6461
6462         * cs-tokenizer.cs : reverted the latest change: it somehow broke
6463           Mono.C5.
6464
6465 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6466
6467         * doc.cs : so it turned out that we cannot skip override check for 
6468           interface members. Fixed bug #76954.
6469
6470 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6471
6472         * cs-tokenizer.cs : fixed bug #75984:
6473           - #warning and #error should not be handled when the source line
6474             is disabled.
6475           - #line is not checked strictly when the source line is disabled.
6476           - #define and #undef is on the other hand checked strictly at any
6477             state.
6478
6479 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
6480
6481         * cs-tokenizer.cs : missing Location (actually, filename) in one of
6482           CS1027 report.
6483
6484 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6485
6486         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
6487
6488         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
6489         event initializers.
6490         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
6491         (FieldBase.Initializer): Initializer is now optional.
6492         (EventField.Define): Only event field can have initializer.
6493
6494         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
6495
6496         * const.cs (Const): Reuse initializer.
6497
6498         * cs-parser.jay: Updated after FieldBase changes.
6499         Added current_array_type to simplify array initializers.
6500
6501         * ecore.cs (NullCast.IsDefaultValue): Implemented.
6502
6503         * expression.cs, iterators.cs: Updated.
6504
6505         * namespace.cs (NamespaceEntry): Made UsingFound private.
6506
6507 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6508
6509         * parameterCollection.cs: Obsolete, removed.
6510         * parser.cs: Obsolete, removed.
6511
6512 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6513
6514         Fix #76849.
6515         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
6516
6517         * enum.cs (Enum.Define): Set obsolete context here.
6518
6519 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6520
6521         * doc.cs :
6522           - FindDocumentedMember() now expects 1) paramList as null
6523             when "we don't have to check the number of parameters" and
6524             2) Type.EmptyTypes when "there is no arguments".
6525           - Introduced FoundMember struct to hold the exact type which was
6526             used to find the documented member (the above change broke
6527             test-xml-044; it might be better just to use DeclaringType than
6528             what MS does, like this change does, but it depends on usage.)
6529
6530 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6531
6532         * doc.cs : documented member might be from DeclaringType for nested
6533           types. Fixed bug #76782.
6534
6535 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
6536
6537         * anonymous.cs: Have the param code handle leaving copies on the
6538         stack etc. Allows anonymous params to take part in the assignment
6539         code (++, +=, etc). Fixes bug #76550
6540
6541         * expression.cs: Handle the prepare_for_load/leave_copy by passing
6542         it down to the anon code.
6543
6544         * iterators.cs: Use dummy var here
6545
6546         * codegen.cs: Handle new vars
6547
6548 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6549
6550         Fix #76849.
6551         * class.cs (MethodData.Define): Set proper Obsolete context.
6552
6553         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
6554         obsolete context.
6555         (FieldExpr.DoResolve): Ditto.
6556
6557 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6558
6559         Fix #76849.
6560         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
6561         parent is not obsolete.
6562
6563 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
6564
6565         * doc.cs : (FindDocumentedMember) find parameterless members first
6566           and get CS0419 in the early stage. Fixed first case of bug #76727.
6567
6568 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
6569
6570         Fix #76859.
6571         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
6572         no error was reported.
6573
6574         *expression.cs (Binary.DoResolve): left can be null.
6575
6576 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
6577
6578         Fix #76783.
6579         * class.cs (MethodData.Emit): Parameters should be labeled first.
6580
6581 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
6582
6583         Fix #76761.
6584         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
6585
6586 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
6587
6588         * attribute.cs (AreParametersCompliant): Moved to Parameter.
6589
6590         * class.cs (MethodCore): Parameter clean up.
6591         (IMethodData): Added ParameterInfo.
6592         (MethodData): Parameter clean up.
6593         (Indexer.Define): Parameter clean up.
6594
6595         * anonymous.cs,
6596         * codegen.cs,
6597         * cs-parser.jay,
6598         * decl.cs,
6599         * doc.cs,
6600         * ecore.cs,
6601         * flowanalysis.cs,
6602         * iterators.cs,
6603         * pending.cs,
6604         * statement.cs,
6605         * typemanager.cs: Parameter clean up.
6606
6607         * delegate.cs (Define): Get rid of duplicated code.
6608
6609         * expression.cs (ParameterReference): Removed useless parameters
6610         and simplified.
6611         (Invocation): Ditto.
6612
6613         * parameter.cs (ParamsParameter): New class, params specialization.
6614         (ArglistParameter): Attemp to separate arglist.
6615         (Parameter): Refactored to be reusable and faster.
6616         (Parameter.Modifier): Made understandable.
6617         (Parameters): Changed to be used as a class for `this' assembly
6618         parameters. Refactored to use new specialized classes.
6619
6620         * support.cs (ParameterData): Added Types property.
6621         (InternalParameters): Deleted.
6622
6623 2005-08-20  Martin Baulig  <martin@ximian.com>
6624
6625         Merging this patch from GMCS to fix #75867.
6626
6627         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6628         scope if we don't already have it.
6629
6630 2005-11-17  Martin Baulig  <martin@ximian.com>
6631
6632         * anonymous.cs
6633         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
6634         inherit the scope from our parent.  Fixes #76653.
6635
6636 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6637
6638         * doc.cs : the previous patch does not actually fix the bug.
6639           PropertyInfo override check is now implemented and really fixed it.
6640         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
6641
6642 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6643
6644         * doc.cs : apply "override filter" also to properties.
6645           Fixed bug #76730.
6646
6647 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6648
6649         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
6650           no need to check overrides. For classes, omit those results from 
6651           interfaces since they must exist in the class. Fixed bug #76726.
6652
6653 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6654
6655         * typemanager.cs : (GetFullNameSignature) differentiate indexers
6656           with different parameters. Fixed the second problem in #76685.
6657
6658 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6659
6660         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
6661           get expected 'protected' access in CheckValidFamilyAccess()).
6662           Fixed bug #76692.
6663
6664 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6665
6666         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
6667           Fixed bug #76705.  CS1569 was incorrectly commented out.
6668
6669 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6670
6671         * doc.cs : use Invocation.IsOverride() to do real override check.
6672         * expression.cs : made Invocation.IsOverride() internal.
6673
6674 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6675
6676         * doc.cs : use TypeManager.FindMembers() instead of (possible)
6677           TypeBuilder.FindMembers() and filter overriden base members out.
6678           Fixed bug #76990.
6679
6680 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6681
6682         * doc.cs : ref/out parameters are represented as '@' (instead of
6683           '&' in type FullName). Fixed bug #76630 (additionally crefs).
6684
6685 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6686
6687         * doc.cs : when there was no '.' in cref to methods in doc comment,
6688           then parameters were missing in the output. Fixed bug #76691.
6689
6690 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6691
6692         * driver.cs : don't output docs when there is an error.
6693           Fixed bug #76693.
6694
6695 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6696
6697         * doc.cs :
6698           Now it should detect indexers. Fixed primary concern in bug #76685.
6699           Fixed CS0419 message to not show the identical member signature in
6700           the message.
6701
6702 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6703
6704         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
6705           instead of Type.FindMembers() since it does not handle events.
6706           Fixed bug #71604.
6707
6708 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
6709
6710         * codegen.cs: Fixed typo (speficied -> specified).
6711
6712 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6713
6714         Fix #76369.
6715         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
6716
6717 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6718
6719         * attribute.cs: Changed error message.
6720
6721         * cs-tokenizer.cs: One more check.
6722
6723 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6724
6725         * statement.cs (Block.Resolve): Ignore empty statement.
6726
6727 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6728
6729         * report.cs: Made error/warning methods more strict to avoid
6730         their misuse.
6731
6732         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
6733         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
6734         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
6735         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
6736
6737 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
6738
6739         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
6740         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
6741
6742         * class.cs (TypeContainer.IsComImport): New property.
6743         (Constructor.Define): Create proper ctor for ComImport types.
6744
6745         * expression.cs (New.CheckComImport): Fixed.
6746
6747 2005-11-07  Miguel de Icaza  <miguel@novell.com>
6748
6749         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
6750         that a parameter has been captured does not mean that we do not
6751         have to do the rest of the processing.  This fixes the second part
6752         of #76592.  If there was another anonymous method capturing
6753         values in the past, the Scope would never be set for the second
6754         method that captured the same parameter.
6755
6756         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
6757         properly manipulate the stack.   Second part of fix for #76592.
6758
6759         * expression.cs (New): Add support for invoking "new" on
6760         interfaces that have been flagged with the ComImport attribute and
6761         the CoClass.  Fixes #76637 
6762
6763         * statement.cs (Try.DoEmit): When a variable is captured, do not
6764         try to emit the vi.LocalBuilder variable as it has been captured.
6765         Create a temporary variable and store the results on the
6766         FieldBuilder.  Fixes #76642
6767
6768 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
6769
6770         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
6771
6772         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
6773
6774         * expression.cs (Binary.DoResolve): Added && optimalization.
6775     
6776         * typemanager.cs (AddUserType): Removed useless argument.
6777
6778 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
6779
6780         * statement.cs (Block.variables): Uses ListDictionary.
6781
6782 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6783
6784         Fix #75969.
6785         * class.cs (PartialContainer.EmitType): Customized to emit
6786         security attributes.
6787         (ClassPart.ApplyAttributeBuilder): Transform security attribute
6788         for partial classes.
6789
6790 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6791
6792         Fix #76599.
6793         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
6794         access has to be fixed.
6795         
6796         * typemanager.cs (IsUnmanagedType): Wrong common field type.
6797
6798 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
6799
6800         Fix #76590.
6801         * ecore.cs (NullCast.Reduce): Implemented.
6802
6803         * expression.cs (ArrayCreation.CheckIndices): Correcly check
6804         constant type.
6805         
6806         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
6807         properly.
6808         (Foreach.Resolve): Catch null properly.
6809
6810 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6811  
6812         * cs-tokenizer.cs: Warning text fix.
6813
6814         * driver.cs: AllWarningNumbers exposed on public interface.
6815
6816         * report.cs (): Reviewed warning numbers.
6817         (IsValidWarning): Use binary search.
6818
6819 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6820  
6821         * driver.cs: Implemeted resource visibility.
6822         (Resources): New class for code sharing between /res: and
6823         /linkres:
6824  
6825 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
6826
6827         Fix #76568.
6828         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
6829         folding.
6830         
6831         * convert (Convert.ImplicitReferenceConversion): NullCast holds
6832         contants only.
6833         
6834         * ecore.cs (NullCast): Child is contant only.
6835         
6836         * literal.cs (NullLiteral.Reduce): null can be converted to any
6837         reference type.
6838
6839 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
6840
6841         * driver.cs: Use Encoding.Default as default code page instead
6842           of ISO-28591.
6843
6844 2005-10-27  Raja R Harinath  <rharinath@novell.com>
6845
6846         Fix #76085.
6847         * expression.cs (Invocation.Error_InvalidArguments): Handle
6848         __arglist parameters.
6849         (Invocation.VerifyArgumentsCompat): Likewise.
6850         * support.cs (ReflectionParameters.GetSignatureForError): Print
6851         __arglist parameters.
6852         (InternalParamters.GetSignatureForError): Likewise.
6853         * parameter.cs (Parameters.GetSignatureForError): Likewise.
6854
6855 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
6856
6857         * attribute.cs (GetPropertyValue): Made public.
6858
6859         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
6860         Resolve.
6861         Add new property WrapNonExceptionThrows to handle 2.0 assembly
6862         attribute.
6863         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
6864         is not defined.
6865         
6866         * driver.cs: Reflect method name change.
6867         
6868         * statement.cs (Try.Resolve): Warn when try has both general
6869         exception handlers.
6870         
6871         * typemanager.cs: runtime_compatibility_attr_type new predefined
6872         type.
6873
6874 2005-10-26  Raja R Harinath  <harinath@gmail.com>
6875
6876         Fix #76419.
6877         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
6878         treat it as an empty parameter list.
6879
6880 2005-10-26  Raja R Harinath  <rharinath@novell.com>
6881
6882         Fix #76271.     
6883         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
6884         ResolveAsTypeStep silent.
6885         * statement.cs (Block.AddConstant): Mark block as used.
6886         (Block.ResolveMeta): Avoid piling on error messages
6887         if a constant initializer resolution fails.
6888
6889 2005-10-25  Raja R Harinath  <rharinath@novell.com>
6890
6891         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
6892         Remove.
6893         (NamespaceEntry.VerifyAllUsing): New.
6894         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
6895         behaviour.  Delegates actual resolution of alias to ...
6896         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
6897         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
6898         Update.
6899         * driver.cs (Driver.MainDriver): Update.
6900         
6901         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
6902         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
6903         property.
6904         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
6905         Remove.
6906         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
6907         RootNamespace.DefineNamespacesForAll.
6908
6909 2005-10-24  Raja R Harinath  <harinath@gmail.com>
6910
6911         * typemanager.cs (assemblies, external_aliases, modules)
6912         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
6913         (ComputeNamespaces, GetRootNamespace): Remove extra staging
6914         overhead.  Move resposibility ...
6915         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
6916         * driver.cs, attribute.cs, codegen.cs: Update to changes.
6917
6918 2005-10-23  Raja R Harinath  <harinath@gmail.com>
6919
6920         * namespace.cs (RootNamespace.all_namespaces): Renamed from
6921         cached_namespaces.  Improve usage.
6922         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
6923         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
6924         Move from GlobalRootNamespace and simplify.
6925         (RootNamespace.Global): Make instance variable.
6926         (RootNamespace.RootNamespace): Add "alias name" parameter.
6927         (GlobalRootNamespace): Simplify drastically.
6928         (Namespace.Lookup): Don't use GetNamespace.
6929         * typemanager.cs (GetRootNamespace): Rename from
6930         ComputeNamespaceForAlias.
6931         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
6932
6933 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6934
6935         * anonymous.cs (AnonymousContainer): Don't crash when container
6936         doesn't exist.
6937
6938 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6939
6940         * expression.cs (Binary.DoResolve): Warn when comparing same
6941         values.
6942
6943 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6944
6945         Fix #76486.
6946         * expression.cs (Binary.DoResolve): It looks like there are no
6947         convetsion rules in enum context.
6948
6949 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
6950
6951         Add support for extern alias qualifiers.
6952         * typemanager.cs: Move some LookupTypeReflection code
6953         to namespace.cs, to have cleaner code. Added some methods
6954         to help us keep track of the extern aliased references.
6955         * driver.cs: Add suport for extern alias assemblies on command
6956         line and check for their warnings/errors. Also keep track of the
6957         extern aliased assemblies.
6958         * namespace.cs: Move the global functionality of Namespace
6959         to GlobalRootNamespace/RootNamespace. Now the global namespace
6960         is GlobalRootNamespace.Globa. Also the code moved from 
6961         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
6962         Finally added LocalAliasEntry (AliasEntry before) and
6963         ExternAliasEntry, to handle alias statements.
6964         * cs-parser.jay: Add support in the grammar for extern alias
6965         statement.
6966         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
6967         Update callings to Namespace (now in GlobalRootNamespace).
6968
6969 2005-10-18  Raja R Harinath  <rharinath@novell.com>
6970
6971         Fix #76371.
6972         * class.cs (TypeContainer.DefineType): Move updating of
6973         topological sort earlier in the code.
6974         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
6975
6976 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
6977
6978         Fix #76273.
6979         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
6980         
6981         * constant.cs (Constant.TryReduce): Moved from Cast class.
6982         (Reduce): Made little bit more OO and fixed missing conversions.
6983         
6984         * ecore.cs (Reduce): Implemented.
6985         (Binary.EnumLiftUp): New method to upgrade values to enum values.
6986         
6987         * literal.cs (Reduce): Implemented.
6988         
6989         * class.cs: Reverted Miguel's wrong commit.
6990
6991 2005-10-14  Miguel de Icaza  <miguel@novell.com>
6992
6993         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
6994
6995 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
6996
6997         * cs-parser.jay, expression.cs : CS0214 was missing error location
6998           for constants. Fixed bug #76404.
6999
7000 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
7001
7002         Fix #76370.
7003         * convert.cs (ExplicitConversionCore): Fixed object->enum
7004         conversion.
7005
7006 2005-10-10  Raja R Harinath  <rharinath@novell.com>
7007
7008         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
7009         InstanceExpression.
7010         (PropertyExpr.EmitCall): Likewise.
7011         * expression.cs (Invocation.EmitArguments): Handle case where
7012         arguments == null.
7013         (Invocation.EmitCall): Avoid allocating temporary variable if
7014         there are no arguments.
7015
7016 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7017
7018         Fix #76323.
7019         * convert.cs (ImplicitConversionStandard): Move conversion of
7020         void* to arbitrary pointer types ...
7021         (ExplicitConversionStandard): .. here.
7022         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
7023         error to always print typenames.
7024
7025 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7026
7027         * convert.cs (GetConversionOperator): Rename from
7028         GetConversionOperators.  Move operator selection code from ...
7029         (UserDefinedConversion): ... here.
7030
7031 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
7032
7033         * convert.cs (ExplicitConversionCore): Removed duplicate enum
7034         conversion.
7035
7036 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
7037
7038         * assign.cs (Assign.DoResolve): Error method changed.
7039
7040         * cfold.cs (DoConstantNumericPromotions): Error method changed.
7041         
7042         * const.cs (ResolveValue): Reset in_transit immediately.
7043         
7044         * constant.cs: Error method changed.
7045         
7046         * convert.cs: Removed useless location parameter.
7047         (ExplicitNumericConversion): Don't do double enum check.
7048         (ExplicitConversionCore): Renamed from ExplicitConversion.
7049         (ExplicitUnsafe): Extracted from ExplicitConversion.
7050         (ExplicitConversion): Uses for error reporting.
7051         
7052         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
7053         error messages.
7054         (ResolveBoolean): Uses common error method.
7055         (CastToDecimal): Get rid of ec.
7056         (CastFromDecimal): Optimized.
7057         (ConvCast): Get rid of ec.
7058         
7059         * enum.cs (ResolveValue): Reset in_transit immediately.
7060         (Emit): Return after first error.
7061         
7062         * expression.cs: Convert changes.
7063         
7064         * literal.cs: Error method changed.
7065         
7066         * statement.cs: Error method changed.
7067
7068 2005-10-03  Raja R Harinath  <rharinath@novell.com>
7069
7070         * support.cs (SeekableStreamReader.Position): Don't error out when
7071         the requested position is just beyond the end of the current
7072         buffered data.
7073
7074 2005-09-28  Raja R Harinath  <rharinath@novell.com>
7075
7076         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
7077         try to keep in sync with the byte count of the underlying Stream.
7078         However, this limits us to a window size of 2048 characters: i.e.,
7079         the maximum lookahead of our lexer/parser can be 2048 characters.
7080
7081 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
7082
7083         Fix #76255.
7084         * driver.cs: Fix compilation files with full root path.
7085
7086 2005-09-25  Miguel de Icaza  <miguel@novell.com>
7087
7088         * report.cs (SymbolRelatedToPreviousError): Format the output so
7089         it does not use an open parenthesis that is never closed. 
7090
7091         * driver.cs: Follow coding guidelines
7092
7093 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
7094
7095         Fix #72930.
7096         * const.cs (Const.ResolveValue): Check for assigning non-null
7097         value to reference type.
7098
7099 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
7100
7101         * anonymous.cs: Implemented ExprClassName.
7102         
7103         * assign.cs (Assign.DoResolve): Don't chrash when type is not
7104         delegate.
7105         
7106         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
7107         check.
7108         
7109         * class.cs (StaticClass.DefineContainerMembers): Report protected
7110         members as error.
7111         
7112         * codegen.cs: if(ed) PRODUCTION.
7113         
7114         * convert.cs (Error_CannotImplicitConversion): Better error
7115         distinction.
7116         
7117         * cs-parser.jay: More error checks.
7118         
7119         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
7120         
7121         * driver.cs (CSCParseOption): Enabled wrong option check.
7122         
7123         * ecore.cs (Expression.ExprClassName): Turned to property.
7124         (MemberExpr.CheckIntermediateModification): For checking boxed
7125         value types     modification.
7126         
7127         * statement.cs (Fixed.Resolve): Expression type must be
7128         convertible to fixed type.
7129         (CollectionForeach.GetEnumeratorFilter,TryType):
7130         Small refactoring for easier error checking.
7131
7132 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
7133
7134         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
7135         attributes.
7136         
7137         * class.cs (GeneratedBaseInitializer): New class for customization
7138         compiler generated initializers.
7139         (MemberBase.DoDefine): Check Obsolete attribute here.
7140         (FieldMember.DoDefine): Ditto.
7141         
7142         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
7143         constants.
7144         
7145         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
7146         (MemberCore.GetObsoleteAttribute): Removed argument.
7147         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
7148         (MemberCore.CheckObsoleteType): New helper.
7149         
7150         * delegate.cs,
7151         * enum.cs,
7152         * statement.cs: Updates after MemberCore changes.
7153         
7154         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
7155         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
7156         
7157         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
7158         obsolete attribute for compiler construct.
7159         (As.DoResolve): Cache result.
7160         
7161         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
7162
7163 2005-09-26  Raja R Harinath  <rharinath@novell.com>
7164
7165         Fix #76133.
7166         * expression.cs (This.VerifyFixed): In a value type T, the type of
7167         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
7168         value type R, 'this' is treated as a value parameter.
7169
7170 2005-09-22  Miguel de Icaza  <miguel@novell.com>
7171
7172         * statement.cs (Lock): Use the TemporaryVariable class instead of
7173         manually using local variables as those do not work when variables
7174         are captured.
7175
7176         * ecore.cs: Moved the TemporaryVariable class from being a nested
7177         class inside Foreach to be a public class that can be employed in
7178         other places. 
7179
7180 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
7181
7182         * cs-parser.jay: interface_accessors replaced by
7183         accessor_declarations.
7184
7185         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
7186         location.
7187         
7188         * statement.cs (GotoCase.Resolve): Convert null constant to
7189         null case.
7190         (SwitchLabel.ResolveAndReduce): Ditto.
7191         (SwitchLabel.NullStringCase): Custom null stamp.
7192         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
7193         
7194         typemanager.cs (CSharpSignature): Don't skip first argument
7195         for full names.
7196
7197 2005-09-18  Miguel de Icaza  <miguel@novell.com>
7198
7199         * driver.cs: Set InEmacs based on the environment variable EMACS. 
7200
7201         * location.cs (InEmacs): in this mode, do not report column
7202         location as it confuses Emacs.
7203
7204 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
7205
7206         * cfold.cs, constant.cs, convert.cs, ecore.cs,
7207         expression.cs, iterators.cs, literal.cs: Store constants and
7208         literals location.
7209         
7210         * class.cs (MemberBase.ShortName): Pass location.
7211         
7212         * cs-parser.jay: Some location fixes.
7213         
7214         * ecore.cs (Expression.Location): Made virtual.
7215
7216 2005-09-05  Miguel de Icaza  <miguel@novell.com>
7217
7218         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
7219         if the underlying types are the same, otherwise we need to produce
7220         code that will do the proper cast.
7221
7222         This was exposed by Marek's constant rewrite which produced
7223         invalid code for the call site:
7224
7225         enum X : long { a }
7226         void Method (X v) {}
7227
7228         Method ((X) 5)
7229
7230         This fixes test-49.cs
7231
7232 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7233
7234         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
7235           Type/Object should be allowed as well. Fixed bug #75968.
7236
7237 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7238
7239         * expression.cs : (Binary.DoResolve): when one is enum constant and
7240           another is constant 0, then return enum one *as enum type*.
7241           Fixed bug 74846.
7242
7243 2005-09-02  Raja R Harinath  <rharinath@novell.com>
7244
7245         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
7246         internal.
7247
7248         Fix #75941.
7249         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
7250         flow-branching for LocalVariableReferences in case we were invoked
7251         from a MemberAccess.
7252         * expression.cs (LocalVariableReference.VerifyAssigned): New.
7253         Carved out of ...
7254         (LocalVariableReference.DoResolveBase): ... this.
7255         (MemberAccess.Resolve): Do the check that was disabled during
7256         SimpleNameResolve.
7257
7258 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7259
7260         * class.cs :
7261           (PartialContainer.Create): check abstract/sealed/static strictly
7262           but abstract/sealed can exist only at one side. Fixed bug #75883.
7263
7264 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
7265
7266         Fix #75945.
7267         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
7268         specified, don't default to UnmanagedType.I4.
7269
7270 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7271
7272         * expression.cs : conditional operator should check possibly
7273           incorrect assign expression. Fixed bug #75946.
7274
7275 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7276
7277         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
7278           Reverting the change. gmcs is much complex than mcs on this matter.
7279
7280 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7281
7282         * cs-tokenizer.cs : To read another token ahead of the actual 
7283           consumption, use new SavedToken and cache token instead of moving
7284           back the stream with SeekableStreamReader (it seemed problematic).
7285         * cs-parser.jay,
7286           driver.cs : Thus use StreamReader directly.
7287         * support.cs : Thus removed SeekableStreamReader.
7288
7289 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7290
7291         Fix #75934.
7292         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
7293         (ScopeInfo.EmitScopeType): Use it to construct field names from
7294         names of captured locals.
7295
7296         Fix #75929.
7297         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
7298         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
7299         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
7300         (ExplicitConversion): Remove enum cases already handled by
7301         implicit conversion.  Move implicit conversion check to the beginning.
7302         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
7303         * expression.cs (ArrayCreation.EmitDynamicInitializers):
7304         Don't treat System.Enum as a struct.
7305
7306 2005-08-30  Jb Evain  <jbevain@gmail.com>
7307
7308         * attribute.cs: handles as expression in parameters.
7309
7310 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7311
7312         Fix #75802.
7313         * class.cs (TypeContainer.VerifyClsName): Don't use a
7314         PartialContainer when verifying CLS compliance.
7315         (AbstractPropertyEventMethod): Set Parent here, ...
7316         (PropertyMethod): ... not here.
7317
7318 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
7319
7320         * attribute.cs : escaped attribute name should not be allowed to be
7321           resolved (e.g. @class as classAttribute). Fixed bug #75930.
7322
7323 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7324
7325         Fix #75927.
7326         * convert.cs (ImplicitStandardConversionExists): Allow zero also
7327         when converting a long constant to unsigned long.
7328         * expression.cs (Invocation.OverloadResolve): Add sanity check to
7329         detect where IsApplicable and VerifyArgumentsCompat disagree.
7330
7331 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7332         and Carlos Alberto Cortez  <carlos@unixmexico.org>
7333
7334         Fix #75848.
7335         * class.cs (TypeContainer.CanElideInitializer): New helper.
7336         (TypeContainer.EmitFieldInitializers): Use it to determine if we
7337         can safely emitting the initializer of a field.
7338
7339 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7340
7341         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
7342           allowed inside a switch (without loop). Fixed bug #75433.
7343
7344 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
7345
7346         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
7347         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
7348
7349 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7350
7351         * driver.cs : kinda reverting the default encoding changes (not exact 
7352           revert since I noticed that "codepage:reset" might not work fine).
7353
7354 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7355
7356         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
7357           Location. Now getter and setter store location correctly.
7358           (errors/cs0111-12.cs now reports the expected location.)
7359
7360 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7361
7362         * driver.cs : Use default encoding on the environment.
7363           Removed (now that) extra parameter for SeekableStreamReader.
7364         * support.cs : (SeekableStreamReader) third .ctor() argument for
7365           StreamReader is not required (always true). preamble size could
7366           be acquired in simpler and safe way.
7367
7368 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
7369
7370         * cs-parser.jay: report CS0642 at warning level 3
7371           and report CS0642 for an if else statement also
7372           fixes bug #74745. Patch by John Luke (and a bit
7373           modified by me).
7374           Removed extra CS0642 warning check for "while",
7375           "for" and "fixed".
7376         * statement.cs: In Block.Resolve(), CS0642 check
7377           is reimplemented to check a sequence of an empty
7378           statement and a block.
7379
7380           Both fix bug #66777.
7381
7382 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
7383
7384         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
7385         detection until I fix it.
7386         
7387         * cs-tokenizer.cs: Changed error message.
7388         
7389         * cs-parser.jay: Fixed 2 error locations.
7390         
7391         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
7392         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
7393         properties.
7394         
7395         * enum.cs (GetSignatureForError): Fixed.
7396         
7397         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
7398         method detection.
7399         
7400         * class.cs,
7401         * typemanager.cs (RegisterProperty): Removed.
7402         
7403         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
7404
7405 2005-08-24  Raja R Harinath  <rharinath@novell.com>
7406
7407         Fix #75874.
7408         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
7409         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
7410
7411 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7412
7413         * expression.cs : tiny fix is required for not warning positive ulong.
7414           See test-441.cs.
7415
7416 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7417
7418         * expression.cs : add CS0652 check for constant and integral
7419           expression. Fixed bug #53974.
7420
7421 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7422
7423         * expression.cs : in DoNumericPromotions(), check if there is implicit
7424           conversion overload for string (to check CS0034). Fixed bug #52492.
7425
7426 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7427
7428         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
7429
7430 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7431
7432         * ecore.cs : report location when it is *not* Null.
7433
7434 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7435
7436         * codegen.cs,
7437           ecore.cs,
7438           flowanalysis.cs,
7439           expression.cs:
7440           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
7441           correctly. Fixed bug #75721.
7442
7443 2005-08-23  Raja R Harinath  <rharinath@novell.com>
7444
7445         * support.cs (SeekableStreamReader.Position): Avoid an expensive
7446         loop that performs 'min (pos, char_count)'.
7447
7448         Fix #75862.
7449         * expression.cs (Unary.ResolveOperator): Don't discard implicit
7450         converted value in Operator.OnesComplement.
7451
7452 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
7453
7454         * anonymous.cs: If the anon method is pulled into a helper class,
7455         it needs to be `internal' not `private'. Fixes runtime behavior on
7456         msft. bug #75704
7457
7458 2005-08-20  Martin Baulig  <martin@ximian.com>
7459
7460         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
7461         scope if we don't already have it.
7462
7463         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
7464         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
7465         fixes #75867.
7466
7467 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
7468
7469         Fix #75803
7470         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
7471         is a partial class.
7472
7473 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
7474
7475         The big constants rewrite
7476         Fix #75746, #75685 and more
7477         As a side effect saved 1MB for MWF ;-)
7478         
7479         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
7480         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
7481         enum based for corlib compilation.
7482         
7483         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
7484         subtractions.
7485         
7486         * class.cs (FixedField.Define): Use ResolveAsConstant.
7487         
7488         * const.cs (IConstant): Interface constants and enums.
7489         (Const.ResolveValue): New method for constant resolvning.
7490         (ExternalConstant): Constants from imported assemblies.
7491         
7492         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
7493         conversion; like enums.
7494         (Constant.ToType): Converts this constant to different type.
7495         (Constant.Increment): Adds 1.
7496         
7497         * convert.cs (ImplicitConversionRequired): Simplified.
7498         
7499         * cs-parser.jay: Create EnumMember directly.
7500         
7501         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
7502         
7503         * doc.cs (GenerateEnumDocComment): Removed.
7504         
7505         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
7506         (ConvertIntLiteral): Removed.
7507         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
7508         
7509         * enum.cs (EnumMember): Implement IConstant.
7510         (Enum.IsValidEnumConstant): Removed.
7511         (Enum.GetNextDefaultValue): Removed.
7512         (Enum.FindMembers): Updated.
7513         (Enum.GenerateDocComment): Iterate enum members.
7514         
7515         * expression.cs (Cast.TryReduce): Handle enums correctly.
7516         (New.Constantify): Made public.
7517         (MemberAccess.DoResolve): Removed contant specific if(s).
7518         
7519         * literal.cs (NullLiteral): Implement new abstract methods.
7520         
7521         * statement.cs (GotoCase.Resolve): Use new constant methods.
7522         (SwitchLabel.ResolveAndReduce): Use new constant methods.
7523         
7524         * typemanager.cs (LookupEnum): Removed.
7525         (IsEnumType): Fixed to work with corlib.
7526         (RegisterConstant): Removed.
7527         (LookupConstant): Removed.
7528         (GetConstant): Changed to work with IConstant.
7529
7530 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
7531
7532         * location.cs : Fixed overflown (>255) column number.
7533
7534 2005-08-03  Raja R Harinath  <rharinath@novell.com>
7535
7536         First cut of the qualified-alias-member feature.
7537         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
7538         token.
7539         * cs-parser.jay (DOUBLE_COLON): New token.
7540         (namespace_or_type_name): Add rule for recognizing
7541         qualified-alias-members.
7542         (primary_expression): Likewise.
7543         (element_access): Allow QualifiedAliasMember as a possible
7544         type-bearing expression.
7545         (local_variable_type, local_variable_pointer_type): Likewise.
7546         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
7547         aliases in the current and enclosing namespace declarations.
7548         (NamespaceEntry.UsingAlias): Add CS0440 warning.
7549         * decl.cs (MemberName.is_double_colon): New.
7550         (MemberName.MemberName): Add new constructor for alias-member.
7551         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
7552         * expression.cs (QualifiedAliasMember): New expression type.
7553
7554 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7555
7556         * location.cs : it borked when no argument was specified.
7557
7558 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7559
7560         * location.cs : tiny ToString() format fix.
7561
7562 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7563
7564         * statement.cs : oops, it was missing.
7565
7566 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7567
7568         A set of fixes for precise line/column location.
7569
7570         * location.cs :
7571           "token" field now holds a file/line "delta", a line number offset 
7572           from the segment, and a column number. See also:
7573           http://lists.ximian.com/pipermail/mono-devel-list/2004-
7574           December/009508.html
7575           Removed static IsNull. Use instance IsNull property instead.
7576         * cs-tokenizer.cs :
7577           For some tokens it stores Location. For Identifier it stores
7578           LocatedToken which is a pair of string name and location.
7579           Column numbers are adjusted only at getChar().
7580         * report.cs :
7581           Use Location.ToString() for reporting (it now contains column).
7582         * cs-parser.jay :
7583           Largely modified to use LocatedToken instead of
7584           string (IDENTIFIER), and to acquire Location from some tokens.
7585         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
7586           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
7587           codegen.cs :
7588           Now MemberName holds Location. DeclSpace.ctor() receives Location
7589           as a parameter. Removed extra parameters to all derived classes.
7590           Replaced Location.IsNull() with instance property.
7591         * assign.cs, expression.cs :
7592           Added .ctor() overload that omits Location.
7593         * attribute.cs :
7594           Added "nameEscaped" flag that indicates the identifier was escaped
7595           in the source file. This fixes bug #57047.
7596
7597 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
7598
7599         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
7600         New method, looking for lo-case imported cls type.
7601
7602         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
7603         here.
7604
7605         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
7606
7607         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
7608
7609         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
7610         all_imported_types.
7611         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
7612
7613         Optimized to save 3.5 MB for SWF compilation.
7614
7615 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7616
7617         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
7618         (PartialContainer.Create): Moved logic AddToContainer.
7619         (PartialContainer.MarkForDuplicationCheck): Shares name.
7620         
7621         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
7622         place.
7623         
7624         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
7625         initialization.
7626         (Namespace.GetSignatureForError): New method.
7627         
7628         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
7629         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
7630
7631 2005-08-01  Raja R Harinath  <rharinath@novell.com>
7632
7633         Fix #75669.
7634         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
7635         member lookup rather than qualifier_type, since qualifier_type can
7636         be null.
7637
7638 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7639
7640         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
7641         enum member.
7642
7643 2005-07-31  Miguel de Icaza  <miguel@novell.com>
7644
7645         * statement.cs: Copy the local exception into the exception
7646         captured local.  Fixes 75674
7647
7648 2005-07-31  Raja R Harinath  <harinath@gmail.com>
7649
7650         Fix #75658.
7651         * expression.cs (Invocation.OverloadResolve): Don't report error
7652         CS1501 if error CS1502 has been reported.
7653         (New.DoResolve): Delegate CS1501 reporting to
7654         Invocation.OverloadResolve.
7655
7656         Fix #75656.
7657         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
7658         invariant-meaning-in-block property in an enclosing block if
7659         necessary.
7660
7661 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
7662
7663         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
7664         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
7665         (Switch.CheckSwitch): Just save 50kb for SWF.
7666
7667 2005-07-27  Martin Baulig  <martin@ximian.com>
7668
7669         * anonymous.cs (CaptureContext.AddField): Added
7670         `AnonymousContainer am' argument; compute its toplevel scope if
7671         it's not already computed.  Fixes #75649.
7672
7673 2005-07-26  Raja R Harinath  <rharinath@novell.com>
7674
7675         Fix #75628.
7676         * class.cs (Constructor.Emit): Reset block to null if the block
7677         resolve fails.
7678
7679 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7680
7681         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
7682
7683 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7684
7685         * class.cs (MethodData.Define): Check whether accessor implementing
7686         interface is public.
7687
7688         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
7689
7690 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
7691
7692         Fix #57245
7693         * namespace.cs (LookupType): Moved same type check to...
7694         
7695         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
7696         with the same name.
7697
7698 2005-07-21  Raja R Harinath  <rharinath@novell.com>
7699
7700         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
7701         already found a typebuilder.
7702         * class.cs (MethodCore.IsDuplicateImplementation): Compare
7703         MemberNames, not strings.
7704
7705         * const.cs (Error_ExpressionMustBeConst): 
7706         Rename from Error_EpressionMustBeConst.
7707         * const.cs, class.cs, statement.cd: Update.
7708
7709 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
7710
7711         Fix #65573
7712
7713         * const.cs (Const.LookupConstantValue): Report missing contant expression
7714         everytime.
7715         (Error_EpressionMustBeConstant): Only one error method.
7716
7717         * class.cs, statement.c: Updated.
7718
7719 2005-07-20  Raja R Harinath  <rharinath@novell.com>
7720
7721         * statement.cs (Block.Flags): Add back HasVarargs.
7722         (Block.flags): Make protected.
7723         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
7724
7725         * typemanager.cs (types, typecontainers, user_types): Remove.
7726         (UserTypes, TypeContainers): Likewise.
7727         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
7728         (CleanUp, Reset): Update.
7729         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
7730         (GetNestedType): Use Type.GetNestedType.
7731         (CoreLookupType): Take two arguments, the namespace and the
7732         basename of the type.  Update to use the Namespace.Lookup
7733         mechanism.
7734         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
7735         (RealMemberLookup): Use IsNestedChildOf instead of playing with
7736         string concatenation and substring matches.
7737         * class.cs, enum.cs, delegate.cs: Update to changes.
7738
7739 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
7740
7741         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
7742         Expression and made virtual.
7743
7744         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
7745         (ImplicitStandardConversionExists): Fixed `byte' typo ?
7746
7747         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
7748
7749         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
7750         error message.
7751
7752         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
7753         change.
7754
7755 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
7756
7757         Fix #57707
7758         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
7759         AssemblyCultureAttribute is not used on executable.
7760
7761         * rootcontext.cs,
7762         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
7763
7764 2005-07-16  Raja R Harinath  <rharinath@novell.com>
7765
7766         Fix #60638.
7767         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
7768         New.  Reports CS0252/CS0253.
7769         Mostly taken from preliminary patch by Duncak Mak.
7770         (Binary.DoResolveOperator): Store results of operator lookup.
7771         Use them to detect if we need to warn about unintended reference
7772         comparisons.
7773
7774 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7775
7776         Fix #72969.
7777         * namespace.cs (Namespace.Lookup): Add back location parameter.
7778         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
7779         * delegate.cs, ecore.cs, expression.cs: Update to changes.
7780
7781         * codegen.cs (EmitContext.DeclSpace): Make readonly.
7782         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
7783         (Namespace.LookupType): ... this.
7784         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
7785         of namespaces.
7786         * typemanager.cs (LookupTypeReflection): Remove buggy code that
7787         purported to handle pointers.
7788         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
7789         CoreLookupType.
7790
7791 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
7792
7793         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
7794         type as namespace.
7795
7796 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7797
7798         * namespace.cs (Namespace.Lookup): Drop location parameter.
7799         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
7800         (NamespaceEntry.Lookup): ... this.
7801         (NamespaceEntry.Error_AmbiguousTypeReference):
7802         Move here from DeclSpace.
7803         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
7804         names ...
7805         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
7806         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
7807         Move to NamespaceEntry.
7808         * delegate.cs, expression.cs: Update to changes.
7809
7810 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
7811
7812         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
7813         CheckAttributeType and refactored.
7814         (Attribute.ResolvePossibleAttributeType): Changed to reuse
7815         ResolveAsTypeTerminal error handling.
7816         (ResolveAsTypeTerminal): Introduced because of global attributes extra
7817         handling.
7818         (GetSignatureForError): Print errors in same way.
7819
7820         * class.cs,
7821         * codegen.cs: Reflect attribute GetSignatureForError change.
7822
7823         * ecore.cs,
7824         * expression.cs: Add silent parameter to ResolveAsTypeStep.
7825
7826         * namespace.cs (UsingEntry): Refactored to make fields private.
7827
7828         * assign.cs,
7829         statement.cs: Error_UnexpectedKind has extra parameter.
7830
7831 2005-07-14  Raja R Harinath  <rharinath@novell.com>
7832
7833         * ecore.cs (IAlias): Remove.
7834         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
7835         that implement the interface.
7836         * namespace.cs (Namespace): Likewise.
7837         (Namespace.declspaces): Renamed from 'defined_names'.
7838         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
7839         DeclSpace instead of an IAlias.
7840         * tree.cs (Tree.AddDecl): Update.
7841
7842 2005-07-12  Raja R Harinath  <rharinath@novell.com>
7843
7844         * statement.cs (Block.Flags); Remove HasVarargs.
7845         (Block.HasVarargs): Move to ToplevelBlock.
7846         (Block.ThisVariable, Block.AddThisVariable): Likewise.
7847         (Block.Variables): Make protected.  Initialize variable hashtable
7848         if necessary.
7849         (Block.AddVariable): Update.
7850         (Block.Resolve): Update to changes.
7851         (ToplevelBlock.HasVarargs): New boolean.
7852         (ToplevelBlock.ThisVariable): Move here from Block.
7853         (ToplevelBlock.AddThisVariable): Likewise.
7854         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
7855         * expression.cs (This.ResolveBase): Update to changes.
7856         (ArglistAccess.DoResolve): Likewise.
7857
7858 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7859
7860         Fix #75321
7861         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
7862
7863         * class.cs (TypeContainer.VerifyMembers): Distinguish between
7864         not used and not used & assigned.
7865         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
7866
7867 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7868
7869         Fix #75053
7870         * expression.cs (Is.DoResolve): null is never provided type.
7871
7872 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
7873
7874         Fix #52496
7875         * cs-parser.jay: Less strict event error rule to catch more errors.
7876
7877 2005-07-08  Martin Baulig  <martin@ximian.com>
7878
7879         Fix test-iter-10.cs - distinguish whether we `yield' in a property
7880         gettter (allowed) or setter (not allowed).
7881
7882         * class.cs (Accessor): Implement IIteratorContainer.
7883         (Accessor.Yields): New public field.
7884         (PropertyBase.PropertyMethod.Define): Handle iterators on a
7885         per-accessor basis.
7886
7887         * cs-parser.jay
7888         (get_accessor_declaration, set_accessor_declaration): Set the
7889         `yields' flag on the accessor, not the property.
7890         (property_declaration): Do the iterators check on a per-accessor
7891         basis and not for the whole property.
7892
7893 2005-07-08  Martin Baulig  <martin@ximian.com>
7894
7895         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
7896         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
7897
7898 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
7899
7900         Fix #74975
7901         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
7902         (ExtractSecurityPermissionSet): Cope with self referencing security
7903         attributes properly.
7904
7905         * driver.cs (SetOutputFile): Made public property OutputFile.
7906
7907 2005-07-07  Raja R Harinath  <rharinath@novell.com>
7908
7909         Fix #75486.
7910         * class.cs (TypeContainer.first_nonstatic_field): Rename from
7911         has_nonstatic_fields.  Make into a FieldBase pointer.
7912         (TypeContainer.AddField): Add CS0282 check.
7913         (TypeContainer.EmitType): Update.
7914
7915 2005-07-06  Miguel de Icaza  <miguel@novell.com>
7916
7917         * cs-tokenizer.cs (consume_identifier): Do not create strings to
7918         compare if they start with __.
7919
7920 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7921
7922         * statement.cs (Switch.SwitchGoverningType): Only look at
7923         UserCasts that don't need implicit standard conversions to one of
7924         the allowed switch types (Fixes test-322.cs).
7925         (LocalInfo.Resolve): Re-enable sanity-test.
7926
7927 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
7928
7929         * cs-tokenizer.cs (consume_identifier): Detect double undescores
7930         
7931         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
7932         
7933         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
7934
7935 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7936
7937         Fix #75472.
7938         * ecore.cs (SimpleName.GetSignatureForError): Add.
7939         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
7940         (MemberAccess.GetSignatureForError): Add.
7941
7942 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
7943  
7944         The big error and warning messages review.
7945         
7946         * anonymous.cs,
7947         * assign.cs,
7948         * attribute.cs,
7949         * class.cs,
7950         * codegen.cs,
7951         * convert.cs,
7952         * cs-parser.jay,
7953         * cs-tokenizer.cs,
7954         * decl.cs,
7955         * delegate.cs,
7956         * doc.cs,
7957         * driver.cs,
7958         * ecore.cs,
7959         * enum.cs,
7960         * expression.cs,
7961         * flowanalysis.cs,
7962         * iterators.cs,
7963         * literal.cs,
7964         * location.cs,
7965         * modifiers.cs,
7966         * namespace.cs,
7967         * parameter.cs,
7968         * pending.cs,
7969         * report.cs,
7970         * rootcontext.cs,
7971         * statement.cs,
7972         * support.cs,
7973         * tree.cs,
7974         * typemanager.cs: Updated.
7975         
7976         * class.cs: (MethodCore.SetYields): Moved here to share.
7977         (PropertyMethod.Define): Moved iterator setup here.
7978         
7979         * iterators.cs: Add orig_method to have full access to parent
7980         container.
7981
7982 2005-07-05  Raja R Harinath  <rharinath@novell.com>
7983
7984         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
7985         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
7986         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
7987         variable of struct type.
7988         * expression.cs (Unary.ResolveOperator): Update to change.
7989         (Indirection.VerifyFixed): Likewise.
7990         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
7991         (ParameterReference.VerifyFixed): Value parameters are fixed.
7992         (This.VerifyFixed): Treat 'this' as a value parameter.
7993         * statement.cs (LocalInfo.IsFixed): Remove.
7994
7995 2005-07-01  Martin Baulig  <martin@ximian.com>
7996
7997         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
7998         `ec.EmitThis ()' to get the correct scope.
7999
8000 2005-07-01  Martin Baulig  <martin@ximian.com>
8001
8002         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
8003         instance is a ParameterReference; fixes #75299.
8004
8005 2005-07-01  Martin Baulig  <martin@ximian.com>
8006
8007         Reverted Marek's latest patch (r46725):
8008         - it contains structural changes which are neither mentioned in
8009           the ChangeLog nor explained anywhere; for example the additional
8010           argument of EmitContext's and Iterator's .ctor's and the
8011           TypeContainer.DefineMembers() change.
8012         - structural changes like this should go in in seperate patches
8013           and not be hidden in a huge patch which just seems to affect
8014           warnings and errors.
8015           a big and hard to understand patch.
8016         - it breaks iterators and causes regressions, for instance in
8017           test-iter-03.cs.      
8018
8019 2005-06-30  Raja R Harinath  <rharinath@novell.com>
8020
8021         Fix #75412.
8022         * expression.cs (Indexers.map): Remove.
8023         (Indexers.Append): Filter out inaccessible setters and getters.
8024         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
8025
8026         Fix #75283.
8027         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
8028         Refactored from ...
8029         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
8030         (FieldExpr.Emit, PropertyExpr.Emit): Update.
8031         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
8032         * expression.cs (Invocation.EmitCall): Add CS0120 check.
8033
8034 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
8035
8036         Fix #75322
8037         * class.cs (FieldBase.GetInitializerExpression): One more field
8038         for backup.
8039
8040 2005-06-28  Miguel de Icaza  <miguel@novell.com>
8041
8042         * pending.cs: Do not define a proxy if the base method is virtual,
8043         it will be picked up by the runtime (bug 75270).
8044
8045 2005-06-08  Martin Baulig  <martin@ximian.com>
8046
8047         The big Iterators rewrite :-)
8048
8049         * iterators.cs: Rewrite this to use the anonymous methods framework.
8050
8051         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
8052         before the TypeContainers; see 2test-21.cs.
8053
8054         * class.cs
8055         (TypeContainer.DefineType): Don't create a new EmitContext if we
8056         already have one (this only happens if we're an Iterator).
8057         (TypeContainer.Define): Also call Define() on all our iterators.
8058         (Method.CreateEmitContext): Added support for iterators.
8059
8060         * anonymous.cs
8061         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
8062         (AnonymousContainer.CreateMethodHost): Moved here from
8063         AnonymousMethod and made abstract.
8064         (AnonymousContainer.CreateScopeType): New abstract method.
8065         (AnonymousContainer.IsIterator): New public property.
8066         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
8067         get the ScopeTypeBuilder rather than manually defining it here. 
8068         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
8069         iterators here.
8070
8071         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
8072         before RootContext.DefineTypes().
8073
8074         * codegen.cs (EmitContext.RemapToProxy): Removed.
8075         (EmitContext.CurrentAnonymousMethod): Changed type from
8076         AnonymousMethod -> AnonymousContainer.
8077         (EmitContext.ResolveTopBlock): Protect from being called twice.
8078         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
8079         (EmitContext.EmitThis): Removed the iterators hacks; use the
8080         anonymous methods framework for that.
8081
8082         * statement.cs
8083         (ToplevelBlock.Container): Make this a property, not a field.
8084         (ToplevelBlock.ReParent): New public method; move the
8085         ToplevelBlock into a new container.
8086         (Foreach.TemporaryVariable): Simplify.
8087
8088 2005-06-05  Martin Baulig  <martin@ximian.com>
8089
8090         * statement.cs (LocalInfo.CompilerGenerated): New flag.
8091         (Block.AddTemporaryVariable): New public method; creates a new
8092         `LocalInfo' for a temporary variable.
8093         (Block.EmitMeta): Create the LocalBuilders for all the temporary
8094         variables here.
8095         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
8096         non-iterator variables.
8097
8098 2005-06-05  Martin Baulig  <martin@ximian.com>
8099
8100         * statement.cs (Foreach.TemporaryVariable): Create the
8101         LocalBuilder in the Emit phase and not in Resolve since in some
8102         situations, we don't have an ILGenerator during Resolve; see
8103         2test-19.cs for an example.
8104
8105 2005-06-04  Martin Baulig  <martin@ximian.com>
8106
8107         **** Merged r45395 from GCS ****
8108
8109         The big Foreach rewrite - Part II.
8110
8111         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
8112         with `PropertyInfo ienumerator_getcurrent'.
8113
8114         * codegen.cs (VariableStorage): Removed.
8115
8116         * statement.cs
8117         (Foreach): Derive from Statement, not ExceptionStatement.
8118         (Foreach.CollectionForeach): New nested class.  Moved all the code
8119         dealing with collection foreach here.
8120         (Foreach.ForeachHelperMethods): Removed.
8121         (Foreach.TemporaryVariable): Implement IMemoryLocation.
8122
8123 2005-05-23  Martin Baulig  <martin@ximian.com>
8124
8125         * statement.cs (Try.DoResolve): Don't create a `finally' if we
8126         don't need to.  Fix #75014.
8127
8128 2005-05-20  Martin Baulig  <martin@ximian.com>
8129
8130         Merged r44808 from GMCS.
8131
8132         * class.cs (TypeContainer.CircularDepException): Removed.
8133         (TypeContainer.DefineType): Removed the `InTransit' stuff.
8134         (TypeContainer.CheckRecursiveDefinition): Check for circular class
8135         (CS0146) and interface (CS0529) dependencies here.
8136
8137 2005-06-21  Raja R Harinath  <rharinath@novell.com>
8138
8139         * expression.cs (Invocation.EmitCall): Fix initialization
8140         'this_call' to reflect current behaviour.  Fix indentation.
8141
8142         * convert.cs (FindMostEncompassedType): Add two trivial special
8143         cases (number_of_types == 0 || number_of_types == 1).
8144         (FindMostEncompasingType): Likewise.
8145
8146 2005-06-17  Raja R Harinath  <rharinath@novell.com>
8147
8148         Some cleanups preparing for the fix of #75283.
8149         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
8150         error testing.
8151         (EventExpr.InstanceResolve): Likewise.
8152         (EventExpr.DoResolve): Remove redundant checks.
8153
8154 2005-06-10  Duncan Mak  <duncan@novell.com>
8155
8156         * cs-tokenizer.cs (process_directives): New flag for controlling
8157         the processing of preprocessor directives.
8158         (x_token): After seeing a '#', return Token.NONE instead of going
8159         to handle_preprocessing_directive() when not processing
8160         directives. This avoids unnecessary processing during the token peek in
8161         is_punct().
8162
8163         This fixes #74939.
8164
8165         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
8166         the existing error reporting methods instead of Report.Error.
8167
8168         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
8169         after Raja's rewrite.
8170
8171 2005-06-08  Miguel de Icaza  <miguel@novell.com>
8172
8173         * class.cs: Small fix.
8174
8175 2005-06-08  Raja R Harinath  <rharinath@novell.com>
8176
8177         Fix #75160.
8178         * class.cs (GetPartialBases): Fix return value check of
8179         part.GetClassBases.
8180
8181 2005-06-07  Raja R Harinath  <rharinath@novell.com>
8182
8183         Ensure that partial classes are registered in their enclosing
8184         namespace.  Initial part of fix of #75160.
8185         * tree.cs (Tree.RecordDecl): Add new namespace argument.
8186         Register declspace with namespace here, not in
8187         DeclSpace.RecordDecl.
8188         * cs-parser.jay: Pass namespace to RecordDecl.
8189         * class.cs (PartialContainer.Create): Likewise.
8190         (ClassPart.DefineType): New sanity-check.  Throws an exception if
8191         called.
8192         * decl.cs (Declspace.RecordDecl): Remove.
8193         * namespace.cs (NamespaceEntry.DefineName): Remove.
8194
8195 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
8196
8197         * rootcontext.cs: Reset TargetExt as well.
8198
8199 2005-06-03  Raja R Harinath  <rharinath@novell.com>
8200
8201         * ecore.cs (Expression.Resolve): Emit CS0654 error when
8202         -langversion:ISO-1.
8203
8204 2005-06-02  Raja R Harinath  <rharinath@novell.com>
8205
8206         Fix #75080, cs0119.cs.
8207         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
8208         of ...
8209         (Expression.Resolve): ... this.  Use it.  Remove bogus code
8210         allowing ExprClass.Type and ExprClass.Namespace for
8211         ResolveFlags.VariableOrValue.
8212         (Expression.Resolve) [1-argument variant]: Change default resolve
8213         flags based on language version.
8214         (Expression.Error_UnexpectedKind): Use a simple string array
8215         rather than an ArrayList.
8216         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
8217         not ExprClass.Type.
8218         (TypeOfVoid.DoResolve): Likewise.
8219         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
8220         flags argument -- it always has the same value.
8221
8222 2005-05-31  Raja R Harinath  <rharinath@novell.com>
8223
8224         Fix #75081.
8225         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
8226         Use it in the error message.
8227         * assign.cs, expression.cs, statement.cs: Update.
8228
8229 2005-05-30  Raja R Harinath  <rharinath@novell.com>
8230
8231         Fix #75088.
8232         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
8233         the "almostMatchedMember" case too.
8234         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
8235         that failed the accessibility checks to 'almost_match'.
8236
8237 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
8238
8239         * attribute.cs: Use internal MethodBuilder methods to set
8240         ExactSpelling and SetLastError on PInvoke methods, instead
8241         of passing them via charset.  Fixes #75060.
8242
8243 2005-05-27  Raja R Harinath  <rharinath@novell.com>
8244
8245         * parameter.cs (Parameter): Remove TODO comment.
8246         (Parameter.DefineParameter): Remove Location parameter.
8247         (Parameters.LabelParameters): Likewise.
8248         * class.cs (Constructor.Emit): Update to change.
8249         (MethodData.Emit): Likewise.
8250         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
8251         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
8252
8253 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
8254
8255         * parameter.cs,
8256           Removed Parameters.Location and added Parameter.Location instead.
8257           Removed Location parameter from Emit() and GetSignature().
8258         * anonymous.cs,
8259           class.cs,
8260           cs-parser.jay,
8261           delegate.cs,
8262           iterators.cs,
8263           statement.cs :
8264           Modified all related calls.
8265
8266 2005-05-26  Raja R Harinath  <rharinath@novell.com>
8267
8268         Improve user-defined conversion handling.
8269         * convert.cs (GetConversionOperators): Rewrite.  Return only the
8270         applicable operators.
8271         (AddConversionOperators): New.  Helper for GetConversionOperators.
8272         (FindMostEncompassedType, FindMostEncompassingType): Verify that
8273         there is only one most encompassed/encompassing type.
8274         (FindMostSpecificSource, FindMostSpecificTarget): Remove
8275         "applicable operator" handling.
8276         (UserConversion): Move cache here from GetConversionOperators.
8277         Directly cache the chosen operator, rather than the whole
8278         MethodGroup.
8279         (ExplicitNumericConversion): Fix buggy implementation of Decimal
8280         case.  Allow conversion of decimal to sbyte and byte too.
8281         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8282         New static methods.  Used to avoid allocating EmptyExpressions in
8283         convert.cs.
8284
8285 2005-05-24  Duncan Mak  <duncan@novell.com>
8286
8287         * ecore.cs (CastFromDecimal): New class for casting a decimal to
8288         another class, used in Convert.ExplicitNumericConversion.
8289         (CastToDecimal): New class, similar to above, but casts to
8290         System.Decimal, used in Convert.ImplicitNumericConversion and also
8291         in explicit convesion from double/float to decimal.
8292
8293         * convert.cs (ImplicitNumericConversion): Handle implicit
8294         conversions to System.Decimal.
8295         (ExplicitNumericConversion): handle explicit conversions to
8296         System.Decimal.
8297
8298         This fixes #68711.
8299         
8300 2005-05-20  Miguel de Icaza  <miguel@novell.com>
8301
8302         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
8303         know the type at this stage, just break through.   Fixes #75008 
8304
8305 2005-05-19  Martin Baulig  <martin@ximian.com>
8306
8307         * delegate.cs
8308         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
8309         to disable error reporting.
8310
8311         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
8312         here since we don't want to report an error; see the new test-336.cs.
8313
8314 2005-05-19  Raja R Harinath  <rharinath@novell.com>
8315
8316         * statement.cs (ToplevelBlock.GetParameterReference)
8317         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
8318         Move here from class Block.
8319         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
8320         * expression.cs (ParameterReference.DoResolveBase): Likewise.
8321
8322 2005-05-18  Martin Baulig  <martin@ximian.com>
8323
8324         Fix #74978.
8325
8326         * flowanalysis.cs
8327         (FlowBranching.Reachability): Add non-static public And() and Or()
8328         methods.
8329         (FlowBranchingSwitch): New class; do the `break_origins' thing
8330         like in FlowBranchingLoop.
8331         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
8332         reachability, not just locals and parameters.
8333         (FlowBranching.MergeChild): Remove some of the hacks for loop and
8334         switch; MergeBreakOrigins() now takes care of that.
8335
8336 2005-05-18  Martin Baulig  <martin@ximian.com>
8337
8338         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
8339         a loop and may leave it, reset the barrier; fixes #74974.
8340
8341 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
8342         
8343         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
8344         is back.
8345         
8346         * cs-parser.jay: Catch more lexical errors.
8347         
8348         * report.cs: Add one more Error method.
8349         
8350         * rootcontext.cs,
8351         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
8352
8353 2005-05-17  Martin Baulig  <martin@ximian.com>
8354
8355         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
8356         #70970. 
8357
8358 2005-05-16  Raja R Harinath  <rharinath@novell.com>
8359
8360         Fix test-382.cs.  Emit values of decimal constants.
8361         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
8362         Carved out of ...
8363         (TypeContainer.AddField): ... this.
8364         (TypeContainer.EmitFieldInitializers): Allow the list of fields
8365         with initializers to include 'Const's.
8366         (ClassPart.RegisterFieldForInitialization): Forward to
8367         PartialContainer.
8368         * const.cs (Const.Const): Pass initializer to base class.
8369         (Const.Define): In case of decimal constants, register them for
8370         initialization in a static constructor.
8371
8372 2005-05-14  Martin Baulig  <martin@ximian.com>
8373
8374         * statement.cs (Block.Resolve): Correctly handle unreachable code;
8375         do not call ResolveUnreachable() on unreachable statements in
8376         here, see the comment in the source code.
8377
8378 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8379
8380         Fix #74934.
8381         * expression.cs (BinaryResolveOperator): If one of the operands of
8382         an equality comparison is 'null' and the other is a pointer type,
8383         convert the null to a NullPointer.
8384         * convert.cs (ImplicitReferenceConversion): If the expression is a
8385         NullLiteral and the target type is a pointer type, return a
8386         NullPointer instead.
8387         (ImplicitConversionStandard): Likewise.
8388
8389 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
8390         
8391         * cs-parser.jay: Set readonly context based on special constructs.
8392         
8393         * expression.cs (LocalVariableReference.DoResolveBase): Improved
8394         readonly variable error handling.
8395         
8396         * rootcontext.cs (EmitCode): Don't verify members when error
8397         occurred.
8398         
8399         * statement.cs (LocalInfo): Add reaodnly context information.
8400         (SetReadOnlyContext, GetReadOnlyContext): New methods.
8401
8402 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8403
8404         * statement.cs (Block.Resolve): Revert change below.  Modify fix
8405         for #74041 to initialize 'resolved' to false only for explicit
8406         blocks.  Fixes #74873.
8407
8408 2005-05-12  Raja R Harinath  <harinath@gmail.com>
8409
8410         Fix #74920.
8411         * typemanager.cs (unmanaged_enclosing_types): New.
8412         (IsUnmanagedType): Avoid infloops by using
8413         'unmanaged_enclosing_types' to talk with recursive invocations.
8414
8415 2005-05-13  Martin Baulig  <martin@ximian.com>
8416
8417         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
8418         instance variable, not a local.  Fix #74873.
8419         (Block.ResolveUnreachable): Set it to true here.
8420
8421 2005-05-11  Duncan Mak  <duncan@novell.com>
8422
8423         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
8424         continuing to process for 'arg'.
8425         (handle_preprocessing_directive): Check the argument of the #endif
8426         directive and report error CS1025 if there are any trailing
8427         characters.
8428
8429         According to the C# spec, having even whitespace after the #endif
8430         directive is illegal; however, because we call arg.TrimEnd ()
8431         beforehand, we have the same behavior as csc, allowing whitespace
8432         after the directive.
8433
8434         Fixes #74892.
8435
8436 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
8437
8438         Fix #74863.
8439         
8440         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
8441         (Constructor.GetObsoleteAttribute): Implemented correctly.
8442
8443 2005-05-10  Martin Baulig  <martin@ximian.com>
8444
8445         * support.cs (ReflectionParameters.ParameterModifier): Use
8446         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
8447         and `ParameterAttributes.In'.  Fixes #74884.
8448
8449 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
8450
8451         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
8452         
8453         * expression.cs (Argument.GetParameterModifier): Turned to property.
8454         (Invocation.Error_InvalidArguments): Add more descriptive errors.
8455         
8456         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
8457         its C# equivalent.
8458         
8459 2005-05-09  Raja R Harinath  <rharinath@novell.com>
8460
8461         Fix #74852.
8462         * decl.cs (MemberCache.AddMethods): Register override methods,
8463         rather than non-override methods.
8464         * typemanager.cs (RegisterOverride): New.
8465         (IsOverride): Update.
8466
8467 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
8468
8469         Fix #73105.
8470         
8471         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
8472         recursive declaration.
8473         
8474         * statement.cs (Block.ResolveMeta): Report any error in resolving.
8475         
8476 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
8477
8478         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
8479         
8480         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
8481
8482 2005-05-05  Raja R Harinath  <rharinath@novell.com>
8483
8484         Fix #74797.
8485         * decl.cs (DeclSpace.FamilyAccessible): 
8486         Use TypeManager.IsNestedFamilyAccessible.
8487
8488         Fix reopened #64812.
8489         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
8490         internal'.
8491
8492 2005-05-04  Raja R Harinath  <rharinath@novell.com>
8493             Abin Thomas  <projectmonokochi@rediffmail.com>
8494             Anoob V E  <projectmonokochi@rediffmail.com>
8495             Harilal P R  <projectmonokochi@rediffmail.com>
8496
8497         Fix #64812.
8498         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
8499         allow access to all static members.
8500
8501 2005-05-04  Martin Baulig  <martin@ximian.com>
8502
8503         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
8504
8505 2005-05-04  Martin Baulig  <martin@ximian.com>
8506
8507         Fix #74655.
8508
8509         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
8510         section at the end; make things work if `default' is not the last
8511         section.        
8512
8513 2005-05-04  Martin Baulig  <martin@ximian.com>
8514
8515         Fix #70400.
8516
8517         * statement.cs (Switch): Replaced the `got_default' field with a
8518         `default_section' one.
8519         (Switch.CheckSwitch): Set `default_section' here.
8520         (Switch.Resolve): If we're a constant switch and the constant is
8521         not found, use the default section.
8522
8523 2005-05-03  Martin Baulig  <martin@ximian.com>
8524
8525         * expression.cs (ArrayAccess.EmitGetLength): New public method.
8526
8527         * statement.cs (Foreach.ArrayForeach): New nested class.
8528         (Foreach.TemporaryVariable): New nested class.
8529         (Foreach.EmitArrayForeach): Removed; this is now in the new
8530         ArrayForeach class.
8531
8532 2005-05-03  Raja R Harinath  <rharinath@novell.com>
8533
8534         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
8535         more conservative.
8536         (VerifyPendingMethods): Revert change below.
8537
8538         * typemanager.cs (IsOverride, RegisterNonOverride): New.
8539         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
8540         that used to trigger warning -28.  Remove warning -28.
8541         * expression.cs (Invocation.OverloadResolve): Use
8542         TypeManager.IsOverride to distinguish override methods.
8543
8544         Fix #74773.
8545         * pending.cs (VerifyPendingMethods): If a base type implements the
8546         requested interface, don't bother checking individual methods of
8547         the base type.  As a side-effect, this prevents the creation of
8548         unnecessary proxies.
8549
8550 2005-05-02  Martin Baulig  <martin@ximian.com>
8551
8552         Fix #70182.
8553
8554         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
8555         Also `And' the locals if the old vector is null.
8556         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
8557         null; in this case we basically reset all the variables.        
8558
8559 2005-05-02  Martin Baulig  <martin@ximian.com>
8560
8561         Fix #74529.
8562
8563         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
8564         Added `FlowBranching branching' argument; always `and' the
8565         variables instead of `or'ing them unless we're an infinite loop.
8566
8567         * statement.cs (While.Resolve): Create a new sibling unless we're
8568         infinite.       
8569
8570 2005-05-02  Martin Baulig  <martin@ximian.com>
8571
8572         Fix #70140.
8573
8574         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
8575         arguments; use it instead of creating a new TopLevelBlock.
8576         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
8577         our ConstructorInitializer.
8578
8579         * statement.cs
8580         (TopLevelBlock.TopLevelBranching): New public property.
8581         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
8582         and create our `TopLevelBranching'.
8583
8584         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
8585         anonymous method host, use `block.TopLevelBranching' rather than
8586         creating a new branching.
8587
8588 2005-04-20  Miguel de Icaza  <miguel@novell.com>
8589
8590         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
8591         a ScopeInfo, if any of the current children is a child of the new
8592         entry, move those children there.
8593
8594 2005-04-30  Martin Baulig  <martin@ximian.com>
8595
8596         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
8597         at the beginning of a SwitchSection.  Fix #73335.
8598
8599 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
8600
8601         Fix #74378
8602         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
8603         
8604         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
8605         (FieldExpr.DoResolve): Obsolete members are ignored for field
8606         initializers.
8607         
8608 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
8609
8610         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
8611         of arrays detection.
8612
8613         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
8614         verification.
8615         (Field.VerifyClsCompliance): Volatile fields are not compliant.
8616
8617         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
8618         arrays report.
8619
8620 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
8621
8622         * cs-parser.jay: Use the prefered version of -unsafe in error
8623         message.
8624
8625 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
8626
8627         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
8628         circumstances.
8629
8630 2005-04-20  John Luke  <john.luke@gmail.com>
8631
8632         * driver.cs: fix typo in error message, --outout to --output
8633
8634 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
8635
8636         * codegen.cs (InRefOutArgumentResolving): New field.
8637         
8638         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
8639         fields outside contructor.
8640         
8641         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
8642         
8643 2005-04-19  Miguel de Icaza  <miguel@novell.com>
8644
8645         * anonymous.cs (CaptureContext.EmitParameterInstance): The
8646         parameter code was not completed ever, so it was not as up-to-date
8647         as local variables.  Must finish it.
8648
8649         The bug fix was to compare the Toplevel of the block, not the
8650         current block.  Thanks for Ben for pointing this out. 
8651
8652 2005-04-19  Raja R Harinath  <rharinath@novell.com>
8653
8654         * decl.cs (AddMethods): Use the declaring type of the problem
8655         method to determine if we want to squash a warning.
8656
8657 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
8658
8659         * attribute.cs: Removed debug output.
8660
8661         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
8662         
8663         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
8664         Report.Stderr.
8665         
8666 2005-04-18  Raja R Harinath  <rharinath@novell.com>
8667
8668         Fix #74481.
8669         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
8670         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
8671         all null comparisons against reference types.
8672
8673 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
8674
8675         Fix# 74565
8676         * class.cs (TypeContainer.CircularDepException) New nested
8677         exception class.
8678         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
8679         (TypeContainer.DefineType): Removed error, reset InTransit before
8680         exit.
8681         (Class.DefineType): Throw exception when is in Transit.
8682         Catch exception and report error.
8683         (Struct.DefineType): Throw exception when is in Transit.
8684         Catch exception and report error.
8685         (Interface.DefineType): Throw exception when is in Transit.
8686         Catch exception and report error.
8687
8688         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
8689         handle nested exception handlers.
8690
8691         * flowanalysis.cs (InTryWithCatch): New method, search for try with
8692         a catch.
8693
8694         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
8695         InFinally and InCatch storage.
8696
8697         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
8698         (Catch.Resolve): Set and Restore ec.InCatch.
8699         (Try.Resolve): Set and Restore ec.InFinally.
8700         (Try.HasCatch): True when try has catch.
8701
8702 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
8703
8704         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
8705           for the same event member, so exclude such cases from warning 419.
8706           Fixed bug #74633.
8707
8708 2005-04-16  Miguel de Icaza  <miguel@novell.com>
8709
8710         * expression.cs (Binary.ResolveOperator): Apply patch from John
8711         Luke to fix bug 59864: operators &, | and ^ on enumerations
8712         require that the same enum type on both sides.
8713
8714         * driver.cs: Add warnings to old flag usage, this is to assist
8715         people who produce Makefiles and hope that the Makefiles will be
8716         used on Windows.
8717
8718         * class.cs (TypeContainer.EmitType): Moved the definition of the
8719         special $PRIVATE$ field from the resolve phase to the Emit phase.
8720         During resolve we do not know if we are a struct with
8721         HasExplicitLayout, we know this only after the attributes for the
8722         type are emitted.
8723
8724         Set the FieldOffset to zero on the dummy field that we create for
8725         the class.   Fixes 74590.
8726
8727 2005-04-16  Raja R Harinath  <rharinath@novell.com>
8728
8729         Fix #73834.
8730         * ecore.cs (PropertyExpr.resolved): New.
8731         (DoResolve): Use it to handle a case of double resolution here.
8732         Handle a case of identical-name-and-type-name.
8733         * expression.cs (ArrayCreation.CheckIndices): Avoid double
8734         resolution by storing the results of expression resolution back
8735         into the "probes" array.
8736
8737 2005-04-15  Raja R Harinath  <rharinath@novell.com>
8738
8739         Fix cs0208-7.cs and cs0208-8.cs.
8740         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
8741         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
8742         error reporting to point out the reason a struct is not unmanaged.
8743
8744 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8745
8746         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
8747           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
8748
8749 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8750
8751         Fix #74528.
8752         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
8753         IdenticalNameAndTypeName here.
8754         (EventExpr.InstanceResolve): Likewise.
8755
8756 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
8757
8758         C# 2.0 DefaultCharSetAttribute implementation
8759         
8760         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
8761         which allows us to set GlobalNamespace for every resolve.
8762         (Attribute.ResolveArguments): Cut from Resolve.
8763         (Attribute.GetCharSetValue): Returns CharSet named argument.
8764         (Attribute.DefinePInvokeMethod): Gets default charset from
8765         module settings.
8766         (GlobalAttribute.ResolveAsTypeStep): Override.
8767         (GlobalAttribute.ResolveArguments): Override.
8768         
8769         * class.cs (TypeAttr): Is protected.
8770         
8771         * codegen.cs (ModuleClass.DefaultCharSet): New member.
8772         (ModuleClass.DefaultCharSetType): New memeber.
8773         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
8774         
8775         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
8776         charset from module.
8777         
8778         * delegate.cs (TypeAttr): Override.
8779         (Delegate.DefineType): Use this TypeAttr.
8780         
8781         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
8782         at very early stage (before types are defined) to resolve model
8783         module attributes. It will probably not work with corlib but it
8784         should be ok.
8785         
8786         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
8787         charset from module.
8788         
8789         * typemanager.cs (default_charset_type): New type.
8790
8791 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8792
8793         * decl.cs (MemberCache.AddMethods): Don't warn if
8794         System.Object.Finalize has buggy MethodAttributes.
8795
8796         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
8797         removed below.
8798
8799 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8800
8801         * doc.cs : detect ambiguous reference to overloaded members.
8802           Fixed bug #71603. MS 1.1 csc does not detect it.
8803
8804 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8805
8806         * doc.cs : delegates must not be referenced with parameters.
8807           Fixed bug #71605.
8808
8809 2005-04-12  Miguel de Icaza  <miguel@novell.com>
8810
8811         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
8812
8813 2005-04-10  Miguel de Icaza  <miguel@novell.com>
8814
8815         * driver.cs (MainDriver): Stop processing if the CLS stage found
8816         errors. 
8817
8818         (CompilerCallableEntryPoint.InvokeCompiler): Always
8819         reset after execution;   Take a TextWriter argument for the
8820         output.
8821
8822         * report.cs: Use the error stream instead of hardcoding stderr. 
8823
8824 2005-04-09  Miguel de Icaza  <miguel@novell.com>
8825
8826         * class.cs: Reduce code paths to test, too small of an
8827         optimization to make it worth the extra testing.  Always perform
8828         it. 
8829
8830 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8831
8832         Fix #74510.
8833         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
8834         operators that had errors reported on them.
8835
8836 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
8837
8838         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
8839         argument types.
8840         (Attribute.Resolve): Add named argument type checking.
8841         
8842         * class.cs (FixedField.Define): Use IsPrimitiveType
8843         
8844         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
8845         
8846         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
8847         unsafe parameter types.
8848         
8849         * statement.cs (Using.ResolveExpression): Add better error description.
8850         
8851         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
8852         
8853 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8854
8855         Fix #74484.
8856         * attribute.cs (Attribute.GetAttributeUsage): Resolve
8857         AttributeUsageAttribute in the emitcontext of the attribute class,
8858         not in the emitcontext of the attributable entity it was attached to.
8859         * cs-parser.jay: Use 'current_class', not 'current_container',
8860         when creating a GlobalAttribute.
8861
8862 2005-04-08  Alp Toker  <alp@atoker.com>
8863
8864         * pending.cs: The fix to #58413 failed to compile methods implementing
8865         interfaces with/without params modifiers and vice versa, even though
8866         params modifiers aren't part of the signature. Make the modifier check
8867         less strict as in csc.
8868
8869 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
8870             Anoob V E  <projectmonokochi@rediffmail.com>
8871             Harilal P R  <projectmonokochi@rediffmail.com>
8872
8873         Fix #58413.
8874         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
8875         modifiers of pending methods.
8876         (PendingImplementation.PendingImplementation): Initialize it.
8877         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
8878         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
8879         with ParameterData.  Add check for modifiers.
8880         * class.cs (MethodData.Define): Update to changes.
8881
8882 2005-04-07  Raja R Harinath  <rharinath@novell.com>
8883
8884         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
8885
8886 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
8887
8888         * class.cs (PropertyMethod.Define): Check private accessor in abstract
8889         property.
8890         
8891         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
8892         
8893         * rootcontext.cs,
8894         * typemanager.cs: Registered RequiredAttributeAttribute.
8895         
8896 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
8897
8898         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
8899         Warning CS0169 is back at level 3.
8900         (IMethodData.SetMemberIsUsed): New method.
8901         
8902         * decl.cs (IsUsed): New value; moved from FieldBase.Status
8903         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
8904         
8905         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
8906
8907         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
8908         contants.
8909         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
8910         is used.
8911         
8912         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
8913         is used.
8914         
8915         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
8916         to avoid the problems with nested types.
8917
8918 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
8919             Anoob V.E  <projectmonokochi@rediffmail.com>
8920             Harilal P.R  <projectmonokochi@rediffmail.com>
8921             Raja R Harinath  <rharinath@novell.com>
8922
8923         Fix #73820.
8924         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
8925         attribute.
8926         * typemanager (GetConstructor): Make public.
8927
8928 2005-04-05  John Luke  <john.luke@gmail.com>
8929             Raja R Harinath  <rharinath@novell.com>
8930
8931         Fix #62232.
8932         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
8933         struct too.  Return false quicker in a few cases.
8934         (VerifyUnManaged): Use it.
8935
8936 2005-04-05  Raja R Harinath  <rharinath@novell.com>
8937
8938         Fix #74041.
8939         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
8940         not 'unreachable_seen'.
8941
8942 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
8943
8944         * attribute.cs (Attribute.GetValue): Removed unused.
8945         
8946         * codegen.cs (CodeGen.TrimExt): Removed unused.
8947         
8948         * cs-parser.jay (output): Removed unused.
8949         
8950         * cs-tokenizer.cs (hex_digits): Removed unused.
8951         
8952         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
8953         
8954         * expression.cs (Indirection.LoadExprValue): Removed unused.
8955         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
8956         
8957         * iterators.cs (Iterator.param_types): Removed unused.
8958         
8959         * statement.cs (Goto.block): Removed unused.
8960         (ToplevelBlock.did): Removed unused.
8961         (Switch.ResolveConstantSwitch): Removed unused.
8962
8963 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
8964
8965         * rootcontext.cs: Allow mcs to bootstrap with the compilation
8966         resetting thingy.
8967
8968 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8969
8970         Fix #74232 and cs0208-3.cs.
8971         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
8972         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
8973         unmanaged type.  Don't use FieldBuilders when 't' is a
8974         TypeBuilder.  Use ModFlags and MemberType fields.
8975         * class.cs (MemberBase.member_type): Rename from MemberType.
8976         (MemberBase.MemberType): New property.  Determines member_type on
8977         demand.
8978         (MemberBase.DoDefine): Don't initialize MemberType here.
8979         (FieldMember.Define): Likewise.
8980
8981 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
8982
8983         Fix #74241
8984         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
8985         Attributes are emitted there.
8986         
8987 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8988
8989         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
8990         keyword in 'partial enum' too.
8991         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
8992         is not allowed).
8993         Report from Kamil Skalski <nazgul@omega.pl>.
8994
8995         Fix #74309.
8996         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
8997         have partial containers too.
8998
8999         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
9000         in block' checks to Block.CheckInvariantMeaningInBlock.
9001         * statement.cs (Block.GetKnownVariableInfo): Make private.
9002         (Block.IsVariableUsedInChildBlock): Remove.
9003         (Block.IsVariableUsedInBlock): Likewise.
9004         (Block.CheckInvariantMeaningInBlock): New.  Show location of
9005         conflicting declaration.
9006         (Block.AddVariable): Make error messages less long-winded and more
9007         specific.  Show location of conflicting declaration.
9008         * parameter.cs (Parameters.Location): New readonly property.
9009
9010 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9011
9012         Clean up semantics of invoking ResolveMemberAccess.
9013         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
9014         can have an instance, ensure that we pass in a non-TypeExpression
9015         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
9016         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
9017         argument.  Update to changes and simplify.
9018         (FieldExpr.Emitinstance): Remove CS0120 check.
9019         (PropertyExpr.EmitInstance): Likewise.
9020         * expression.cs (Argument.Resolve): Likewise.
9021         (Invocation.DoResolve): Update to changes in semantics of
9022         InstanceExpression.
9023
9024 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
9025
9026         Fix #74241
9027         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
9028         customization.
9029         
9030         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
9031
9032 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9033
9034         Fix difference in behaviour with commandline invocation.
9035         * driver.cs (Driver.Reset): New.
9036         (CompilerCallableEntryPoint): Call it.
9037
9038         * statement.cs (If.Resolve): Avoid spurious "uninitialized
9039         variable" warnings if the boolean expression failed to resolve.
9040
9041 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
9042
9043         * attribute.cs: Fix the union of several permissions when some of them
9044         are unrestricted (so the result isn't an unrestricted permission set).
9045         Fix #74036.
9046
9047 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9048
9049         * ecore.cs (MemberExpr): New class.  Convert from interface
9050         IMemberExpr.
9051         (MemberExpr.ResolveMemberAccess): Refactor and move here from
9052         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
9053         error checks.
9054         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
9055         (MethodGroupExpr.IsExplicitImpl): Remove.
9056         (Expression.GetFieldFromEvent): Remove.
9057         (SimpleName.MemberStaticCheck): Remove.
9058         (SimpleName.DoSimpleNameResolve): Update to changes.
9059         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
9060         (MemberAccess.IdenticalNameAndTypeName): Remove.
9061         (MemberAccess.error176): Move to MemberExpr.
9062         (MemberAccess.DoResolve): Update to changes.
9063         (BaseAccess.DoResolve): Likewise.
9064
9065 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
9066
9067         C# 2.0 Conditional attribute class implementation
9068         
9069         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
9070         Analyzes class whether it has attribute which has ConditionalAttribute
9071         and its condition is not defined.
9072         
9073         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
9074         (Class.IsExcluded): New method. Search for at least one defined
9075         condition in ConditionalAttribute of attribute class.
9076
9077 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9078
9079         * ecore.cs (PropertyExpr): Derive from Expression, not
9080         ExpressionStatement.
9081         (PropertyExpr.EmitStatement): Remove.
9082
9083 2005-03-29  Raja R Harinath  <rharinath@novell.com>
9084
9085         Fix #74060.
9086         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
9087         internal field "value__" of an enum be private.  The examples for
9088         "value__" that I found on MSDN all used FieldAttributes.Private.
9089
9090         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
9091         Don't mention IL method attribute names.
9092
9093         Fix #47991.  Remove a TODO.
9094         * statement.cs (Block.Toplevel): Make into a field.
9095         (Block.Parameters): Move into ToplevelBlock.
9096         (Block.known_variables): Rename from child_variable_names.
9097         (Block.Block): Remove variants that take Parameters.  Initialize
9098         'Toplevel' with the immediately surrounding toplevel block.
9099         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
9100         LocalInfo parameter.
9101         (Block.GetKnownVariableInfo): New.
9102         (Block.IsVariableNameUsedInChildBlock): Update.
9103         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
9104         the block, even though it may not be in scope.
9105         (Block.AddVariable): Remove Parameters parameter.  Use
9106         Toplevel.Parameters instead.
9107         (Block.AddConstant): Remove Parameters parameter.
9108         (Block.GetParameterReference): Update to use Toplevel.Parameters.
9109         (Block.IsParamaterReference): Likewise.
9110         (Block.IsLocalParameter): Likewise.  Simplify a lot.
9111         (ToplevelBlock.Parameters): New.  Moved from Block.
9112         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
9113         initialize Parameters to a non-null value.
9114         * cs-parser.jay: Update to changes.
9115         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
9116         simple names that mean different things in the same block.  Use
9117         Block.IsVariableNameUsedInBlock.
9118
9119 2005-03-28  Raja R Harinath  <rharinath@novell.com>
9120
9121         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
9122         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
9123         GetTypeHandle.  It is possible for a reflected type to derive from
9124         a TypeBuilder (e.g., int[] derives from the TypeBuilder
9125         System.Array during mscorlib compilation).
9126         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
9127         contain a method_hash, don't create one either.  Don't create a
9128         deep copy of the base cache's method_hash.
9129         (MemberCache.SetupCache): Rename back from DeepCopy.
9130         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
9131         already initialized.  If we see an override function, add its
9132         underlying base virtual function to the member_hash too.
9133
9134         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
9135
9136 2005-03-26  Raja R Harinath  <harinath@acm.org>
9137
9138         Fix #73038.
9139         * assign.cs (Assign.DoResolve): When the RHS of an assignment
9140         fails to resolve, ensure that the LHS is still resolved as an
9141         lvalue.
9142
9143 2005-03-25  Raja R Harinath  <harinath@acm.org>
9144
9145         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
9146         ec.ContainerType.
9147         (Enum.current_ec): Remove.
9148         (Enum.LookupEnumValue): Remove EmitContext argument.
9149         Just uses the one created during DefineType.
9150         (Enum.FindMembers): Update.
9151         * expression.cs (MemberAccess.DoResolve): Update.
9152
9153 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
9154
9155         * assign.cs (Assign.DoResolve): Check for CS1717 when
9156         source and target are same (uses Equals).
9157
9158         * expression.cs (LocalVariableReference, ParameterReference,
9159         This): Implemented Equals, GetHashCode.
9160
9161         * statement.cs (Block.GetParameterReference): Removed useless
9162         local variable.
9163
9164 2005-03-22  Raja R Harinath  <rharinath@novell.com>
9165
9166         Fix cs0128.cs
9167         * statement.cs (Block.AddVariable): Ensure that we skip implicit
9168         blocks before deciding whether the error is cs0136 or cs0128.
9169
9170         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
9171         (using_alias_directive, using_namespace_directive): Pass
9172         MemberName, not an expression to Namespace.UsingAlias and
9173         Namespace.Using.
9174         (MakeName): Use the MemberName of the namespace.
9175         * namespace.cs (Namespace.MemberName): New.
9176         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
9177         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
9178         Likewise.
9179         * decl.cs (MemberName.Name): Make readonly.
9180         (MemberName.FromDotted): New "constructor".
9181         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
9182         (MemberCore.Name): Compute from MemberName on demand.
9183         (MemberCore.SetMemberName): Provide a way to change the
9184         MemberName.
9185         (MemberCore.AddToContainer): Don't take a fullname parameter.
9186         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
9187         fully qualified name of the container to the member name.
9188         (TypeContainer.AddToTypeContainer): Use a fully qualified name
9189         only if the type is a member of the root container.
9190         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
9191         MemberName.Left rather than searching for an embedded ".".
9192         (PartialContainer.CreatePart): Update to changes in RootContext.
9193         (MemberBase.ShortName): Turn into a property.  Use
9194         MemberCore.SetMemberName.
9195         (MemberBase.ExplicitInterfaceName): Remove.
9196         (MemberBase.UpdateMemberName): Remove.
9197         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
9198         (PropertyBase.SetMemberName): New override.
9199         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
9200         (Tree.GetDecl): New.
9201         (Tree.AllDecls): Rename from Decls.
9202         * attribute.cs, enum.cs, report.cs: Update to changes.
9203         * driver.cs (MainDriver): Use MemberName.FromDotted on
9204         RootContext.MainClass.
9205
9206 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
9207
9208         * class.cs (FixedField.Define): Check for CS1664 and more sanity
9209         checks.
9210
9211         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
9212
9213 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
9214
9215         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
9216         property accessor modifiers.
9217
9218         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
9219         fixed buffer attribute (CS1716).
9220         (PropertyMethod.HasCustomAccessModifier): When property accessor
9221         has custom modifier.
9222
9223         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
9224         modifiers.
9225         (PropertyExpr.DoResolveLValue): Add CS0272.
9226
9227 2005-03-17  Miguel de Icaza  <miguel@novell.com>
9228
9229         * convert.cs: When converting to a pointer, use the proper Conv.U
9230         or Conv.I depending on the source data type.
9231
9232         * cs-tokenizer.cs: Make the size for large decimal constants,
9233         fixes #72957.
9234
9235 2005-03-17  Martin Baulig  <martin@ximian.com>
9236
9237         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
9238         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
9239
9240 2005-03-17  Martin Baulig  <martin@ximian.com>
9241
9242         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
9243         to bool so we can return an error condition.
9244         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
9245         returned an error.
9246
9247 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
9248
9249         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
9250         attributes.
9251
9252 2005-03-16  Raja R Harinath  <rharinath@novell.com>
9253
9254         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
9255         Refactor to avoid traversing the list of assemblies, and to avoid
9256         string concatenation.
9257         * typemanager.cs (guid_attr_type): Remove.
9258         (negative_hits, pointers, references): Remove hashes.
9259         (type_hash): New.
9260         (GetConstructedType): New.  Uses type_hash to handle constructed
9261         types (arrays, references, pointers).
9262         (GetReferenceType, GetPointerType): Use it.
9263         (GetNestedType): New.  Uses type_hash to handle nested types of
9264         reflected types.
9265         (LookupType, LookupTypeDirect): Remove.
9266         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
9267         'types' hash and LookupTypeReflection directly.
9268         (params_string, params_object): Use GetConstructedType.
9269         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
9270         top-level types.
9271         (Namespace.Lookup): Use cached_types.
9272         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
9273         provided by old TypeManager.LookupType.
9274         * rootcontext.cs (MakeFQN): Remove.
9275         * decl.cs (DeclSpace.MakeFQN): Likewise.
9276         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
9277         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
9278         TypeManager.GetConstructedType.
9279         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
9280
9281 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
9282
9283         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
9284         indexers.
9285
9286         * cs-parser.jay: Reports CS1527 for any namespace element.
9287
9288         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
9289         Added CS0407.
9290
9291         * expression.cs (ParameterReference.IsAssigned): Changed error to
9292         CS0269.
9293         (Error_WrongNumArguments): Moved CS0245 detection here.
9294
9295         * statement.cs (Return.Resolve): Add CS1622 report.
9296
9297 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
9298
9299         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
9300
9301 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
9302
9303         * attribute.cs expression.cs: Get rid of some allocations.
9304
9305 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
9306
9307         * doc.cs : just eliminate the latest change.
9308
9309 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9310
9311         * doc.cs : commented out the latest change. It breaks xml-030.cs
9312
9313 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9314
9315         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
9316           fail. So invoke CreateType() in FindDocumentedType().
9317
9318 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9319
9320         * cs-tokenizer.cs : added IsKeyword().
9321         * doc.cs : Detect keyword incorrectly used as identifier.
9322           Allow identifiers prefixed by @.
9323
9324 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
9325
9326         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
9327         It caused exception in namespace resolving (again!).
9328         
9329         * class.cs (Class.ctor): Removed exit.
9330         (PropertyMethod.ctor): ditto.
9331         
9332         * codegen.cs (Codegen.Reset): Reset static data.
9333         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
9334         
9335         * cs-tokenizer.cs (Cleanup): Removed.
9336         
9337         * driver.cs (GetSystemDir): Rewrote to one line command.
9338         It caused problem with unloaded dynamic modules.
9339         (UnixParseOption): Removed Exit.
9340         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
9341         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
9342         Now can be mcs used as library.
9343         
9344         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
9345         empty location.
9346         
9347         * location.cs (Reset): Reset static data.
9348         
9349         * namespace.cs (Reset): Reset static data.
9350         
9351         * report.cs (Report.Reset): Reset static data.
9352         
9353         * rootcontext.cs (RootContext.Reset): Reset static data.
9354         
9355         * tree.cs (RootTypes.ctor): Use Location.Null
9356         
9357         * typemanager.cs (TypeManager.Reset): Reset static data.
9358         (CoreLookupType): Removed Exit.
9359         (TypeHandle.Reset): Reset static data.
9360         
9361 2005-03-10  Raja R Harinath  <rharinath@novell.com>
9362
9363         Fix #73516.
9364         * typemanager.cs (ComputeNamespaces): Import namespaces from
9365         referenced modules too.
9366
9367 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9368
9369         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
9370         than '.'.
9371
9372 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9373
9374         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
9375         enclosing DeclSpace.  This ensures that a name-lookup populates
9376         more caches and there are fewer 'TypeExpression's.  Carve out
9377         nested type lookup into ...
9378         (LookupNestedTypeInHierarchy): ... this.
9379
9380 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9381
9382         Clean up a few partial-class semantics.  
9383         Fixes test-357.cs and cs1618-2.cs.
9384         * cs-parser.jay (struct_declaration): Use 'current_class' as
9385         parent of newly-created struct.  Remove call to Register ().
9386         Use 'pop_current_class' to complete handing the current struct.
9387         (interface_declaration): Likewise.
9388         (class_declaration): Likewise.
9389         (enum_declaration): Use 'current_class' as parent of newly created
9390         enum.
9391         (delegate_declaration): Likewise.
9392         (pop_current_class): New function.  This is used to handle closing
9393         up the 'current_class' and 'current_container', and pointing them
9394         to the enclosing class/container.
9395         (CSharpParser): Initialize 'current_class' too.
9396         * decl.cs (MemberCore): Add check for invariant: a partial
9397         container is not a parsed entity, and thus does not enclose any
9398         parsed members.
9399         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
9400         (DeclSpace.BaseTypeExpr): Use it.
9401         (DeclSpace.LookupType): Add check for invariant.
9402         * class.cs (TypeContainer): Add check for invariant: a nested
9403         class should have the same NamespaceEntry as its enclosing class.
9404         (TypeContainer.EmitFieldInitializers): Make virtual.
9405         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
9406         MemberCore.
9407         (TypeContainer.Register): Remove.
9408         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
9409         null.  Use TypeResolveEmitContext for resolving base types and
9410         interfaces.  Move initialization of Parts.TypeBuilder here from
9411         ...
9412         (TypeContainer.DefineNestedTypes): ... here.
9413         (PartialContainer): Take a Namespace not a NamespaceEntry.
9414         (PartialContainer.Create): Don't use Register.  Call the
9415         appropriate Add... function directly.
9416         (ClassPart): Take both the PartialContainer and the enclosing
9417         class as constructor arguments.
9418         (ClassPart.EmitFieldInitializers): Override.
9419         (ClassPart.PartFindNestedTypes): Remove.
9420         (FieldBase.GetInitializerExpression): Resolve the initializer
9421         expression in the emit context of the enclosing class.
9422         * tree.cs (RootTypes): Remove Register ().
9423         
9424 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
9425
9426         * cs-parser.jay: Removed CS0134.
9427         
9428         * driver.cs: Removed CS1901.
9429         
9430         * expression.cs (SizeOf.DoResolve): Don't report CS0233
9431         for predefined types.
9432
9433 2005-03-07  Duncan Mak  <duncan@novell.com>
9434
9435         * codegen.cs (Save):  Catch UnauthorizedAccessException as
9436         well. Fixes bug #73454.
9437
9438 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
9439
9440         * cs-tokenizer.cs (xtoken): Add CS1035.
9441         
9442         * class.cs (MethodData.Define): Add CS0683.
9443         (FieldMember.ctor): Add CS0681.
9444
9445 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9446
9447         * ecore.cs (SimpleName.DoResolve): Rename from
9448         SimpleName.DoResolveAllowStatic.
9449         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
9450         Pass 'intermediate' flag to MemberStaticCheck.
9451         (SimpleName.MemberStaticCheck): Skip "static check" only in case
9452         of "intermediate" lookups via MemberAccess.
9453         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
9454         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
9455
9456 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9457
9458         Fix #73394.
9459         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
9460         slipped in because of variable names that are identical to a
9461         builtin type's BCL equivalent ('string String;', 'int Int32;').
9462         (PropertyExpr.EmitInstance): Likewise.
9463
9464 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
9465
9466         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
9467         
9468         * report.cs (warning_ignore_table): Made public.
9469
9470 2005-03-04  Raja R Harinath  <rharinath@novell.com>
9471
9472         Fix #73282.
9473         * class.cs (MethodData.Emit): Pass 'container' to
9474         container.GetObsoleteAttribute instead of 'container.Parent'.
9475
9476 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
9477
9478         * cs-parser.jay: Add 1534 error test.
9479
9480         * iterators.cs (Yield.CheckContext): Add error 1629.
9481         (Iterator.ctor): Save unsafe modifier.
9482         (MoveNextMethod.DoEmit): Restore unsafe context.
9483
9484         * namespace.cs (UsingAlias): Better error message.
9485
9486 2005-03-03  Dan Winship  <danw@novell.com>
9487
9488         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
9489         the warning message [#73219]
9490
9491 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9492
9493         Fix compile with MCS 1.0.0.0.
9494         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
9495         w_restore to not depend on string constant folding.
9496
9497 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9498
9499         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
9500         CS0246 check to users who passed 'silent = false'.
9501         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
9502         check.
9503         (SimpleName.SimpleNameResolve): Update.
9504         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
9505         (MemberAccess.IdenticalNameAndTypeName): Update.
9506         * doc.cs (FindDocumentedTypeNonArray): Update.
9507
9508 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
9509
9510         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
9511         * parameters.cs (ComputeAndDefineParameters): Remove.
9512         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
9513         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
9514         Use GetParameterInfo.
9515
9516 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
9517
9518         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
9519
9520 2005-03-02  Raja R Harinath  <rharinath@novell.com>
9521
9522         Unify DeclSpace.LookupType and DeclSpace.FindType.
9523         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
9524         is in charge of defining nested types on demand.
9525         (DeclSpace.LookupType): Use it when the current_type is a
9526         TypeBuilder.  Use LookupTypeDirect for reflected types.
9527         (DeclSpace.FindType): Remove.
9528         (DeclSpace.LookupInterfaceOrClass): Likewise.
9529         (DeclSpace.DefineTypeAndParents): Likewise.
9530         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
9531         DeclSpace.LookupType.
9532         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
9533         * typemanager.cs (LookupType): Simplify.
9534         (AddUserType): Remove type from negative_hits.
9535         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
9536         * class.cs (TypeContainer.FindMembers): Move handling of nested
9537         types ...
9538         (TypeContainer.FindMembers_NestedTypes): ... here.
9539         (TypeContainer.FindNestedType): Implement override.
9540         (ClassPart.FindNestedType): Delegate to PartialContainer.
9541         (ClassPart.PartFindNestedType): Looks up the nested types of the
9542         part alone.
9543
9544 2005-03-02  Martin Baulig  <martin@ximian.com>
9545
9546         * class.cs (TypeContainer.DoDefineMembers): We also need a default
9547         static constructor in static classes.
9548
9549 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
9550
9551         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
9552         sizeParamIndex is not specified.
9553
9554 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
9555
9556         Fix #73117
9557         * report.cs (WarningMessage.IsEnabled): Missing null check.
9558
9559 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9560
9561         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
9562         in the fields and not in the properties.
9563
9564 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
9565
9566         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
9567         fields as well.
9568
9569 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9570
9571         * attribute.cs: Small refactoring (improved robustness).
9572         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
9573         (ValidateGuid): Removed.
9574         (Resolve): Removed referenced to above mentioned.
9575         (GetAttributeUsage): Made private and changed to work without
9576         class assistance.
9577         (GetIndexerAttributeValue): Don't crash.
9578         (GetConditionalAttributeValue): Ditto.
9579         (GetClsCompliantAttributeValue): Ditto.
9580         (ExtractSecurityPermissionSet): All attributes exceptions are
9581         error 648.
9582         (GetPropertyValue): New helper.
9583         (GetMethodImplOptions): New method.
9584         (DefinePInvokeMethod): Reuse common code. Implemented handling of
9585         some missing properties.
9586         
9587         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
9588         (Method.ApplyAttributeBuilder): Updated.
9589         
9590         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
9591         exception.
9592
9593 2005-02-28  Raja R Harinath  <rharinath@novell.com>
9594
9595         Fix #73052.
9596         * report.cs (Report.SymbolRelatedToPreviousError): Handle
9597         non-simple types (array, pointer, reference).
9598
9599 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9600
9601         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
9602
9603         * class.cs (MethodCore.IsDuplicateImplementation): Special error
9604         for operators.
9605         (Method.CheckBase): Catch wrong destructor here.
9606         (MethodData.Define): Add errors 550, 668.
9607
9608         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
9609
9610         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
9611
9612         * pending.cs (VerifyPendingMethods): Add error 551.
9613
9614         * typemanager.cs (CSharpName): Next error report helper.
9615
9616 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
9617
9618         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
9619         attributes. Removed useless attribute double check.
9620         It saves almost 2MBs for corlib.
9621
9622 2005-02-25  Raja R Harinath  <rharinath@novell.com>
9623
9624         Fix #72924.
9625         * statement.cs (ExpressionStatement.Resolve): Make robust to being
9626         called twice in case of error.
9627
9628 2005-02-23  Chris Toshok  <toshok@ximian.com>
9629
9630         Fix compiler portions of #72827.
9631         * statement.cs (Block.Emit): call Begin/EndScope on the
9632         EmitContext instead of the ILGenerator.
9633
9634         * codegen.cs (EmitContext.BeginScope): new method, call
9635         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
9636         we have one.)
9637         (EmitContext.BeginScope): same, but EndScope and CloseScope
9638
9639         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
9640         offset and call the superclass's OpenScope(int) with it.
9641         (SymbolWriter.CloseScope): get the current il
9642         offset and call superclass's CloseScope(int) with it.
9643
9644 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
9645
9646         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
9647         CS1677 for out and ref as well.
9648
9649         * class.cs (Method.Define): Add error CS1599 detection.
9650         
9651         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
9652         
9653         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
9654         
9655         * delegate.cs (Delegate.Define): Add error CS1599 detection.
9656         
9657         * support.cs.cs (ModifierDesc): New helper method.
9658
9659 2005-02-23  Raja R Harinath  <rharinath@novell.com>
9660             Abin Thomas  <projectmonokochi@rediffmail.com>
9661             Anoob V E  <projectmonokochi@rediffmail.com>
9662             Harilal P R  <projectmonokochi@rediffmail.com>
9663
9664         Fix #57851, #72718.
9665         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
9666         MemberLookup (used for error reporting) actually returns a result.
9667         Fix error report number (122, not 112).
9668
9669 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
9670             Anoob V E  <projectmonokochi@rediffmail.com>
9671             Harilal P R  <projectmonokochi@rediffmail.com>
9672
9673         Fix #71134.
9674         * pending.cs (PendingImplementation.GetAbstractMethods):
9675         Find NonPublic members too.
9676
9677 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
9678
9679         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
9680         Fixed error 217.
9681         
9682         * class.cs (MethodCore.CheckMethodAgainstBase):
9683         Add error 239 report.
9684
9685 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9686
9687         Fix #68955.
9688         * expression.cs (Invocation.IsApplicable): Make public.
9689         (Invocation.IsParamsMethodApplicable): Likewise.
9690         * delegate.cs (Delegate.VerifyApplicability): Don't use
9691         Invocation.VerifyArgumentCompat for parameter applicability
9692         testing.  Use Invocation.IsApplicable and
9693         Invocation.IsParamsMethodApplicable.
9694
9695 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9696
9697         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
9698         
9699         * class.cs (Operator.Define): Add error 217 report.
9700         
9701 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9702
9703         * namespace.cs (UsingEntry.Resolve): Undo change below.
9704
9705 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9706
9707         Fix #72756.
9708         * ecore.cs (Expression.MemberLookupFailed): Add argument to
9709         disable the error message when the extended MemberLookup also
9710         fails.
9711         (Expression.MemberLookupFinal): Update.
9712         (SimpleName.DoSimpleNameResolve): Update.
9713         * expression.cs (MemberAccess.ResolveNamespaceOrType):
9714         Don't use MemberLookupFinal.
9715         (New.DoResolve): Update.
9716         (BaseAccess.CommonResolve): Update.
9717
9718 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9719
9720         Fix #72732.
9721         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
9722         occured previously, don't resolve again.
9723
9724 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9725
9726         Fix #69949
9727         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
9728         argument. Call ResolveAttributeUsage for unresolved.
9729         when types doesn't match ctor arguments.
9730         
9731         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
9732         for nested attribute classes.
9733         (Class.attribute_usage): Removed.
9734         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
9735         for attribute class.
9736         
9737         * ecore.cs (IsAttribute): Removed.
9738         
9739         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
9740         
9741         * rootcontext.cs (RegisterAttribute): Removed, attributes are
9742         now normal types.
9743         (attribute_types): Removed.
9744         (EmitCode): Global attributes are emited as the latest.
9745
9746 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
9747
9748         * class.cs (EmitFieldInitializers): Don't emit field initializer
9749         for default values when optimilization is on.
9750         
9751         * constant.cs (Constant.IsDefaultValue): New property.
9752         
9753         * driver.cs: Add /optimize handling.
9754         
9755         * constant.cs,
9756         * ecore.cs,
9757         * literal.cs: Implement new IsDefaultValue property.
9758         
9759         * rootcontext.cs (Optimize): New field, holds /optimize option.
9760
9761 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9762
9763         Fix crasher in re-opened #72347.
9764         * namespace.cs (Namespace.Lookup): Return null if
9765         DeclSpace.DefineType returns null.
9766
9767         Fix #72678.
9768         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
9769
9770 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9771
9772         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
9773         now returns null if it cannot resolve to an lvalue.
9774         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
9775         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
9776         returned null.  Remove check for SimpleName.
9777         (EventExpr.DoResolveLValue): New.
9778         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
9779         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
9780         error from ...
9781         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
9782         avoid CS0131 error.
9783         (Unary.ResolveOperator): Move CS0211 check ...
9784         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
9785         CS0131 error.
9786         (Unary.DoResolveLValue): Simplify.
9787         (AddressOf.DoResolveLValue): New.
9788         (ArrayAccess.DoResolveLValue): New.
9789
9790 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
9791
9792         * attribute.cs (Attribute.Resolve): Add arguments casting for
9793         when types doesn't match ctor arguments.
9794
9795 2005-02-16  Raja R Harinath  <rharinath@novell.com>
9796
9797         Fix parts of #63202.
9798         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
9799         lookup of operator in base type.  Ensure that all checks happen
9800         when the operator resolves to an "op_..." method.
9801
9802 2005-02-15  Raja R Harinath  <rharinath@novell.com>
9803
9804         Fix #71992.
9805         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
9806         'ignore_cs0104' parameter.  Pass it to ...
9807         (NamespaceEntry.Lookup): ... this.
9808         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
9809         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
9810         (TypeLookupExpression.DoResolveAsTypeStep): Update.
9811         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
9812         Update.  Request that cs0104 errors be ignored.
9813         (ComposedCast.ResolveAsTypeStep): Update.
9814
9815 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9816
9817         Fix #59209.
9818         * expression.cs (Invocation.BetterFunction): Remove support for
9819         comparing virtual functions and their overrides.
9820         (Invocation.IsOverride): New.
9821         (Invocation.OverloadResolve): Don't consider 'override' functions
9822         during candidate selection.  Store them in a lookaside list.
9823         If the selected method is a 'virtual' function, use the list to
9824         find any overrides that are closer to the LHS type.
9825
9826 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
9827
9828         * expression.cs (New.DoResolve): Add complex core type reduction.
9829         (New.Constantify): Converts complex core type syntax like 'new int ()'
9830         to simple constant.
9831         
9832 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9833
9834         * decl.cs (EntryType.EntryType): New constructor to create an
9835         updated copy of a cache entry.
9836         (MemberCache.AddMethods): Use it.
9837         (MemberCache.ClearDeclaredOnly): Remove.
9838         (MemberCache.MemberCache): Update.
9839
9840 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9841
9842         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
9843         variable.  This one is represents the actual low-level declaration
9844         of the method, as opposed to the semantic level `IsStatic'.   
9845
9846         An anonymous method which is hosted into a static method might be
9847         actually an instance method.  IsStatic would reflect the
9848         container, while MethodIsStatic represents the actual code
9849         generated.
9850
9851         * expression.cs (ParameterReference): Use the new MethodIsStatic
9852         instead of IsStatic.
9853
9854         * anonymous.cs (AnonymousMethod.Compatible): Pass the
9855         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
9856         set on the current EmitContext. 
9857
9858         * expression.cs (Cast): Overload DoResolveLValue so we can pass
9859         resolve our casted expression as an LValue.  This triggers the
9860         proper LValue processing that is later required by Assign.
9861
9862         This fixes 72347.
9863
9864         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
9865
9866 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
9867
9868         C# 2.0 Fixed buffer implementation
9869
9870         * anonymous.cs: Update after RegisterHelperClass renaming.
9871
9872         * attribute.cs (AttributeTester.fixed_buffer_cache):
9873         Cache of external fixed buffers.
9874         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
9875         implementation if field is fixed buffer else null.
9876
9877         * class.cs
9878         (TypeContainer.AddField): Accept FieldMember instead of Field.
9879         (FieldBase.IsFieldClsCompliant): Extracted code from
9880         VerifyClsCompliance descendant customization.
9881         (FixedField): New class handles fixed buffer fields.
9882         (FixedFieldExternal): Keeps information about imported fixed
9883         buffer.
9884         (IFixedField): Make access to internal or external fixed buffer
9885         same.
9886
9887         * cs-parser.jay: Add fixed buffer parsing.
9888
9889         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
9890         buffer.
9891
9892         * expression.cs (Indirection): Extended implementation to accept
9893         fixed buffer field.
9894         (PointerArithmetic.Emit): Get element from fixed buffer as well.
9895         (ElementAccess.MakePointerAccess): Get type as parameter.
9896         (DoResolve): Add fixed buffer field expression conversion.
9897         (DoResolveLValue): Ditto.
9898         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
9899         (ArrayPtr): Derives from FixedBufferPtr.
9900         (ArrayPtr.Emit): Add extra emit for array elements.
9901
9902         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
9903
9904         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
9905         for compiler generated types.
9906         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
9907
9908         * statement.cs (Fixed): Refactored to be easier add fixed buffer
9909         and consume less memory.
9910         (Fixed.Resolve): Add fixed buffer case.
9911
9912         * typemanager.cs (compiler_generated_attr_ctor,
9913         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
9914         (HasElementType): Add our own implementation to work on every
9915         runtime.
9916
9917 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9918
9919         * anonymous.cs (CaptureContext): Track whether `this' has been
9920         referenced.   
9921
9922         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
9923         only captured `this' if it was implicitly done (instance
9924         methods/variables were used). 
9925
9926         * codegen.cs (EmitContext.CaptureThis): New method to flag that
9927         `this' must be captured.
9928
9929 2005-01-30  Miguel de Icaza  <miguel@novell.com>
9930  
9931         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
9932         is null it means that there has been no need to capture anything,
9933         so we just create a sibling.
9934
9935         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
9936
9937         Just a partial fix.  The other half is fairly elusive.
9938         
9939 2005-02-10  Raja R Harinath  <rharinath@novell.com>
9940
9941         Fix #52586, cs0121-4.cs.
9942         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
9943         and return a hashtable.
9944         (MemberCache.ClearDeclaredOnly): New.
9945         (MemberCache.MemberCache): Update to change.  Make a deep copy of
9946         the method_hash of a base type too.
9947         (MemberCache.AddMethods): Adapt to having a deep copy of the base
9948         type methods.  Overwrite entries with the same MethodHandle so
9949         that the ReflectedType is correct.  The process leaves in base
9950         virtual functions and their overrides as distinct entries.
9951         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
9952         matters since it was boxed in a ArrayList before.
9953         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
9954         modifier.
9955         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
9956         case of a virtual function and its override (choose the overload
9957         as better).
9958         (Invocation.OverloadResolve): Avoid 'override' members during
9959         'applicable_type' calculation.
9960
9961 2005-02-09  Raja R Harinath  <rharinath@novell.com>
9962
9963         Combine two near-redundant caches.
9964         * typemanager.cs (method_params): Rename from method_internal_params.
9965         (TypeManager.GetParameterData): New.  Replace
9966         Invocation.GetParameterData.
9967         (TypeManager.LookupParametersByBuilder): Remove.
9968         * expression.cs (Invocation.method_parameter_cache): Remove.
9969         (Invocation.GetParameterData): Remove.
9970         Update to changes.
9971         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
9972         Update to changes.
9973
9974 2005-02-08  Raja R Harinath  <rharinath@novell.com>
9975
9976         Fix #72015.
9977         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
9978         TypeManager.multicast_delegate_type is null, resolve it by looking
9979         up "System.MulticastDelegate".
9980         * rootcontext.cs (RootContext.ResolveCore): Simplify.
9981
9982 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
9983             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
9984             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
9985
9986         Fix cs0164.cs.
9987         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
9988         (LabeledStatement.AddReference): New.  Set 'referenced'.
9989         (Goto.Resolve): Use it.
9990
9991 2005-02-05  John Luke  <john.luke@gmail.com>
9992
9993         * driver.cs: remove duplicate -doc line in Usage ()
9994
9995 2005-02-04  Raja R Harinath  <rharinath@novell.com>
9996
9997         * location.cs (Location.AddFile): Fix CS2002 error report.
9998
9999 2005-02-02  Martin Baulig  <martin@ximian.com>
10000
10001         * delegate.cs (Delegate.DefineType): Report an internal error if
10002         TypeManager.multicast_delegate_type is null.  See bug #72015 for
10003         details.        
10004
10005 2005-02-02  Raja R Harinath  <rharinath@novell.com>
10006
10007         Fix a crasher in a variant of #31984.
10008         * const.cs (Constant.CheckBase): New override that defers the
10009         new-or-override check in case the base type hasn't been populated
10010         yet.
10011         (Constant.Define): Ensure the new-or-override check is performed.
10012
10013 2005-02-01  Duncan Mak  <duncan@ximian.com>
10014
10015         * const.cs (LookupConstantValue): Check that `ce' is not null
10016         before calling GetValue ().
10017
10018 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10019
10020         Fix test-334.cs (#69519).
10021         * cs-parser.jay (using_alias_directive): Pass in an expression to
10022         NamespaceEntry.UsingAlias.
10023         (using_namespace_directive): Pass in an expression to
10024         NamespaceEntry.Using.
10025         (namespace_name): Don't flatten to a string.
10026         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
10027         (NamespaceEntry.AliasEntry.Resolve): Lookup using
10028         ResolveAsTypeStep.
10029         (NamespaceEntry.UsingEntry): Likewise.
10030         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
10031         changes.
10032         (NamespaceEntry.LookupForUsing): Remove.
10033         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
10034         names.
10035         (NamespaceEntry.Lookup): Remove support for dotted names.
10036
10037 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10038
10039         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
10040         split into two.
10041         (NamespaceEntry.ImplicitParent): Compute on demand.
10042         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
10043         parallels the current.
10044         (NamespaceEntry.LookupForUsing): Use it.
10045         (NamespaceEntry.Lookup): If the current namespace-entry is
10046         implicit, don't search aliases and using tables.
10047
10048 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10049
10050         Fix #31984.
10051         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
10052         BaseCache here.
10053         (TypeContainer.BaseCache): Compute on demand.
10054         (TypeContainer.FindMembers): Define constants and types if they're
10055         not already created.
10056         (FieldMember.Define): Move resetting of ec.InUnsafe before error
10057         check.
10058         * const.cs (Constant.Define): Make idempotent.
10059
10060 2005-01-29  Miguel de Icaza  <miguel@novell.com>
10061
10062         * pending.cs: Produce better code (no nops produced by using Ldarg
10063         + value).
10064         
10065         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
10066         i - 1' it should be arg + 1.
10067
10068         Fixes bug #71819.
10069
10070 2005-01-28  Raja R Harinath  <rharinath@novell.com>
10071
10072         * attribute.cs (Attribute.CheckAttributeType): Make private
10073         non-virtual.
10074         (Attribute.ResolveType): Make virtual.
10075         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
10076         handling of RootContext.Tree.Types.
10077
10078 2005-01-27  Raja R Harinath  <rharinath@novell.com>
10079
10080         Update attribute-handling to use the SimpleName/MemberAccess
10081         mechanisms.
10082         * cs-parser.jay (attribute): Pass in an expression to the
10083         constructors of Attribute and GlobalAttribute.
10084         * attribute.cs (Attribute): Take an expression for the name.
10085         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
10086         passed in attribute name expression.
10087         (Attribute.CheckAttributeType): Use it.
10088         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
10089         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
10090         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
10091         argument to prevent error messages if the lookup fails.
10092
10093 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
10094
10095         * expression.cs (Indirection): Implemented IVariable interface
10096         to support indirection in AddressOf operator.
10097         (PointerArithmetic.Emit): Add optimalization for case where
10098         result can be precomputed.
10099
10100 2005-01-26  Martin Baulig  <martin@ximian.com>
10101
10102         * class.cs (TypeContainer.AttributeTargets): Return the correct
10103         AttributeTargets depending on our `Kind' instead of throwing an
10104         exception; fixes #71632.
10105
10106 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
10107
10108         Fix #71257
10109         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
10110         constant members.
10111
10112 2005-01-25  Raja R Harinath  <rharinath@novell.com>
10113
10114         Fix #71602.
10115         * expression.cs (MemberAccess.DoResolve): Don't complain with
10116         cs0572 when the LHS of a member access has identical name and type
10117         name.
10118
10119 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
10120
10121         Fix #71651, #71675
10122         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
10123         CreatePermission.
10124         Create custom PermissionSet only for PermissionSetAttribute.
10125
10126 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
10127
10128         Fix #71649
10129         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
10130         delegates in static class.
10131
10132 2005-01-24  Martin Baulig  <martin@ximian.com>
10133
10134         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
10135         merging an implicit block, just use its reachability.
10136
10137         * statement.cs (Block.Resolve): Make the unreachable code check
10138         work wrt. implicit blocks; see test-337 from #63842.
10139
10140 2005-01-21  Alp Toker  <alp@atoker.com>
10141  
10142         * cs-parser.jay: destructor_declaration's container is PartialContainer
10143         not Class when partial types are used, so use Kind prop instead of
10144         'is'.
10145         
10146 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
10147
10148         * cs-parser.jay: Improve error reporting when an interface
10149         declares new types.
10150
10151 2005-01-20  Dick Porter  <dick@ximian.com>
10152
10153         * support.cs: SeekableStreamReader fix from Sandor Dobos
10154         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
10155         chars are read.  Fixes bug 70369.
10156
10157 2005-01-20  Raja R Harinath  <rharinath@novell.com>
10158
10159         * cs-parser.jay (catch_clause): Simplify current_block handling
10160         somewhat.
10161
10162 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
10163
10164         * convert.cs (ImplicitStandardConversionExists): Synchronize the
10165         code with ImplicitStandardConversion to handle the implicit
10166         conversion of method groups into valid delegate invocations. 
10167
10168         The problem is that in parameter handling we were using this code
10169         path.  Fixes bug #64698
10170
10171 2005-01-19  Raja R Harinath  <rharinath@novell.com>
10172
10173         * cs-parser.jay: Fix several infelicities.
10174         - Avoid assigning to the parser value stack.  Code like 
10175           '$3 = null' is unclean.  Synthesize a value for the code block
10176           instead. 
10177         - Avoid using oob_stack for storing location information.  Use ...
10178         (_mark_): ... this.  New (empty) rule.  Saves the current location
10179         in $$.
10180         (foreach_statement): Avoid using oob_stack for current_block
10181         handling.  Use technique used in for_statement and
10182         using_statement.  Synthesize a value for the code block to store
10183         additional intermediate information.
10184
10185 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
10186
10187         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
10188         of a different type is only allowed to private fields of a
10189         containing type, not on fields of a base class.
10190
10191         See test-174.cs and error cs0122-9.cs
10192
10193 2005-01-13  Raja R Harinath  <rharinath@novell.com>
10194
10195         Fix test-335.cs (bug #58126).
10196         * cs-parser.jay (argument): Split out non-expression parts of the
10197         rule into 'non_simple_argument'.
10198         (invocation_expression): Support parenthesized invocations with
10199         multiple arguments, and with single non-simple arguments.
10200
10201 2005-01-13  Raja R Harinath  <rharinath@novell.com>
10202
10203         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
10204         places.
10205
10206 2005-01-12  Raja R Harinath  <rharinath@novell.com>
10207
10208         Fix cs0038-1.cs, cs1640-6.cs.
10209         * ecore.cs (Expression.Resolve): Remove special-case for
10210         SimpleName in error-handling.
10211         (Expression.almostMatchedMembers): Relax access permission to
10212         protected.
10213         (Expression.MemberLookupFailed): Handle duplicates in
10214         almostMatchedMembers list.
10215         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
10216         * expression.cs (New.DoResolve): Report CS1540 for more cases.
10217         * typemanager.cs (GetFullNameSignature): Use the MethodBase
10218         overload if the passed in MemberInfo is a MethodBase.
10219
10220 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
10221
10222         Fix #70749
10223         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
10224         for non-CAS & merge permission sets properly.
10225
10226 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10227
10228         Improve standard-compliance of simple name and member access 
10229         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
10230         * ecore.cs (FullNamedExpression): New abstract base class 
10231         for Namespaces and TypeExpressions.
10232         (ResolveFlags.SimpleName): Remove.
10233         (SimpleName): Remove support for dotted names.
10234         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
10235         DeclSpace.FindType and DeclSpace.LookupType.
10236         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
10237         (Expression.ExprClassName): Make member function.
10238         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
10239         a namespace.  Remove creation of dotted "SimpleName"s.
10240         (MemberAccess.DoResolve): Likewise.
10241         * decl.cs (DeclSpace.Cache): Make private.
10242         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
10243         (DeclSpace.FindType): Update.
10244         (DeclSpace.LookupType): Move here from RootContext.  Return a 
10245         FullNamedExpression.
10246         * namespace.cs (Namespace): Derive from FullNamedExpression
10247         so that it can be part of expression resolution.
10248         (Namespace.Lookup): Return an FullNamedExpression.
10249         (NamespaceEntry.LookupAlias): Lookup aliases only in current
10250         namespace.
10251         * rootcontext.cs (NamespaceLookup): Remove.
10252         (LookupType): Move to DeclSpace.
10253         * attribute.cs (CheckAttributeType): Update.
10254         * doc.cs (FindDocumentedType): Remove allowAlias argument.
10255         (FindDocumentedTypeNonArray): Likewise.
10256
10257 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10258
10259         Fix cs0509.cs, cs1632.cs.
10260         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
10261         is the same as IsInterface.
10262         (TypeContainer.GetClassBases): Likewise.
10263         * statement.cs (LabeledStatement.ig): New field.
10264         (LabeledStatement.LabelTarget): Save ILGenerator which created the
10265         label.
10266         (LabeledStatement.DoEmit): Check that the label was created with
10267         the same ILGenerator.
10268
10269 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10270
10271         Fix #71058
10272         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
10273         accessors to its properties.
10274
10275         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
10276         from accessors to property.
10277         
10278 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10279
10280         Fix #70722
10281         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
10282         only for overrides.
10283         
10284 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
10285
10286         * attribute.cs: Check for null and empty strings.  
10287
10288         I have lost another battle to Paolo.
10289
10290 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
10291
10292         Fix #70942
10293         * class.cs (PropertyMethod): Set Parent field in ctors.
10294         (SetMethod.InternalParameters): Add unsafe switch hack.
10295         Override MarkForDuplicationCheck where it is appropriate.
10296
10297         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
10298         It says whether container allows members with the same name.
10299         Base default is no.
10300         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
10301         Removed is_method parameter.
10302
10303 2005-01-06  Duncan Mak  <duncan@ximian.com>
10304
10305         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
10306         because the previous change led to incorrect reporting of CS1032
10307         ("Cannot define/undefine preprocessor symbols after first token in
10308         file"). Instead of using `tokens_seen' as the only flag that
10309         triggers CS1040, introduce `comments_seen'. This new flag is used
10310         to signify having seen comments on the current line, so it is
10311         unset after a newline.
10312
10313 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10314
10315         * doc.cs : When searching for a type, find nested type too.
10316           This fixes bug #71040.
10317
10318 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10319
10320         * doc.cs :
10321           - Warn missing member comment on those classes which also does not
10322             have doc comments. Fixed bug #71041.
10323           - Don't warn missing doc comment on default constructor.
10324             Fixed bug #71042.
10325
10326 2005-01-06  Duncan Mak  <duncan@ximian.com>
10327
10328         * cs-tokenizer.cs (xtoken): After handling traditional C-style
10329         comments, set `tokens_seen' to true. This allows us to detect
10330         misplaced preprocessor directives (i.e. not at the beginning of
10331         the a line, nor after whitespaces). In that case, report error
10332         CS1040. This fixes bug #56460.
10333
10334         * cs-parser.jay (interface_member_declaration): Add checks for
10335         IsExplicitImpl, and report CS0541 error if an interface member is
10336         defined as an explicit interface declaration.
10337
10338 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
10339
10340         Fix #70817
10341         * class.cs (PropertyMethod): Set Parent field in ctors.
10342         (SetMethod.InternalParameters): Add unsafe switch hack.
10343         
10344         * decl.cs (MemberCore.Parent): Cannot be readonly.
10345
10346 2005-01-06  Raja R Harinath  <rharinath@novell.com>
10347
10348         * decl.cs (DeclSpace.ResolveType): Remove.
10349         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
10350         Merge in code from ...
10351         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
10352         * class.cs, enum.cs: Update to changes.
10353
10354 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
10355
10356         * anonymous.cs: Ensure that we init the scope of our parent if it
10357         has not been initialized yet.
10358
10359 2004-12-30  Duncan Mak  <duncan@ximian.com>
10360
10361         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
10362         if field.FieldBuilder is null. Fixes #70758.
10363
10364         * convert.cs: Fixed some typos and updated some of the comments.
10365         (ImplicitStandardConversionExists):
10366         (TryImplicitIntConversion): If `target_type' is an interface and
10367         the type of `ic' implements this interface, return true or a new
10368         BoxedCast instead of null. This fixes #70468.
10369
10370 2004-12-29  Duncan Mak  <duncan@ximian.com>
10371
10372         * expression.cs (Argument.Emit): Check that Expr is
10373         IMemoryLocation before casting to it, and report CS1510 otherwise.
10374
10375         This fixes #70402.
10376
10377 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
10378
10379         * statement.cs (Block.ThisVariable): remove the recursion here, to
10380         make the --profile more sane.
10381
10382 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
10383
10384         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
10385         assembly, by JB Evain.
10386
10387 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10388
10389         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
10390           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
10391         "parent" refers to enclosing type/class.  "base" refers to superclass.
10392
10393 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10394
10395         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10396         Ensure that we only have GlobalAttributes.
10397         * attribute.cs (Attribute.Emit): Make non-virtual.
10398         (GlobalAttribute.Emit): Remove.
10399         (Attribute.Resolve): Make virtual.
10400         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
10401         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
10402         the argument. Don't create one.
10403         (Attribute.GetObsoleteAttribute): Likewise.
10404         (Attribute.GetClsCompliantAttributeValue): Likewise.
10405         * class.cs, decl.cs: Update to changes.
10406
10407 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
10408
10409         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
10410         
10411         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
10412         
10413         * statement.cs (Foreach.Resolve): Add error 186 report.
10414
10415 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
10416
10417         * expression.cs (Conditional.DoResolve): Add warning 429.
10418         
10419         * statement.cs (If.Resolve): Add warning 665.
10420
10421 2004-12-16  Raja R Harinath  <rharinath@novell.com>
10422
10423         New invariant: RootContext.Tree.Types.NamespaceEntry == null
10424         except when in the parser, and in GlobalAttribute.
10425         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
10426         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
10427         RootContext.Tree.Types.NamespaceEntry once work is done.
10428         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
10429         and resets RootContext.Tree.Types.NamespaceEntry.
10430
10431 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
10432
10433         * cs-parser.jay: Don't create a block for every variable.
10434
10435 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
10436
10437         * location.cs: Provide extra information.
10438
10439         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
10440         variables from the captured environment, it is the ldarg_0.
10441
10442 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10443
10444         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
10445         find a conclusion.
10446         
10447         * class.cs: Changed warning level for 169 to avoid developer
10448         displeasure from warning flooding. It will be changed back when they
10449         fix most of current BCL warnings.
10450         
10451         * RootContext.cs: Pushed default WarningLevel to 3.
10452         
10453         * statement.cs: Removed unused variable.
10454
10455 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10456
10457         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
10458         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
10459         Add error 502 report.
10460         (StaticClass.DefineType): Add error 441 report.
10461         (Class.AllowedModifiersProp): New virtual property as temporary
10462         extension to AllowedModifiers.
10463         (Class.DefineType): Add error 418 report. Moved ModFlags check here
10464         to share implementation with StaticClass and don't call virtual
10465         methods from ctor.
10466         
10467         * driver.cs (MainDriver): Add error 1558 test.
10468
10469         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
10470         report. Moved error 36 test here.
10471
10472         * statement.cs (Throw.Resolve): Add error 724 report.
10473
10474         * typemanager.cs: Add out_attribute_type core type.
10475         
10476 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
10477
10478         * class.cs (TypeContainer.VerifyClsCompliance): Add error
10479         3018 report.
10480         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
10481
10482         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
10483         3017 report.
10484         
10485         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
10486
10487         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
10488         Add error 3023 report.
10489         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
10490
10491         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
10492         implementation.
10493
10494 2004-12-12  John Luke  <john.luke@gmail.com>
10495
10496         * driver.cs (AddArgs): take -- into account when
10497         adding arguments, fixes bug 65710 
10498
10499 2004-12-12  Martin Baulig  <martin@ximian.com>
10500
10501         * expression.cs (Unary.TryReduceNegative): Added support for
10502         SByteConstant and ByteConstant.
10503         (Unary.Reduce): Check error values from TryReduceNegative().
10504
10505 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
10506
10507         * attributes.cs (Attribute.Resolve): Avoid multiple error report
10508         and report exception as error 182.
10509
10510 2004-12-10  Raja R Harinath  <rharinath@novell.com>
10511
10512         * driver.cs (Main): Fix message when there are warnings.
10513
10514 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
10515
10516         * delegate.cs: Fixed my fix from yesterday, sorry about that.
10517
10518 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
10519
10520         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
10521         Reduced number of warnings.
10522         
10523         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
10524
10525 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
10526
10527         * driver.cs: Removed message.
10528
10529         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
10530
10531 2004-12-08    <vargaz@freemail.hu>
10532
10533         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
10534
10535 2004-12-08  Martin Baulig  <martin@ximian.com>
10536
10537         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
10538         instead of a CS3002 for properties and indexer.
10539
10540 2004-12-08  Martin Baulig  <martin@ximian.com>
10541
10542         * decl.cs (MemberName.ToString): Make this work again.
10543
10544 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
10545
10546         * attribute.cs (Resolve): Add error 591 detection.
10547
10548         * class.cs (FieldMember.Define): Add error 1547 detection.
10549         (Indexer.Define): Add error 620 detection.
10550         (Operator.Define): Add error 590 detection.
10551
10552         * ecore.cs: Missing argument for error 79.
10553
10554         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
10555         detection.
10556
10557 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
10558
10559         Fix #70106
10560         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
10561         only.
10562
10563 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
10564
10565         * cs-parser.jay : handle doc comments on implicit/explicit operators.
10566           Some operator comments were suppressed.
10567         * doc.cs : Implicit/explicit operator name in doc comments are like
10568           "op_Explicit(type)~returnType", so added suffix handling.
10569
10570 2004-12-07  Martin Baulig  <martin@ximian.com>
10571
10572         * decl.cs
10573         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
10574         (MemberCore.GetClsCompliantAttributeValue): Likewise.
10575         (DeclSpace.ec): New protected field; store the EmitContext here.
10576         (DeclSpace.EmitContext): New public property; moved here from
10577         `TypeContainer'.
10578         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
10579         EmitContext.
10580
10581         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
10582         (Enum.Emit): Don't create a new EmitContext.
10583
10584         * delegate.cs (Delegate.DefineType): Always create the
10585         EmitContext.
10586
10587         * iterators.cs (Iterators.DefineIterator): Create a new
10588         EmitContext and store it in `ec'.
10589
10590 2004-08-24  Martin Baulig  <martin@ximian.com>
10591
10592         * typemanager.cs
10593         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10594         this for accessibility checks.
10595         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10596         IsNestedFamilyAccessible.
10597         (TypeManager.IsSubclassOf): New method, do what the name actually
10598         says.   
10599
10600 2004-12-06  Raja R Harinath  <rharinath@novell.com>
10601
10602         Fix crash on cs0657-17.cs.
10603         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10604         Use RootContext.Tree.Types, not 'new RootTypes ()'.
10605         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
10606         the case where the NamespaceEntry gets overwritten.
10607
10608 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
10609
10610         Fixed #69195, #56821
10611         * ecore.cs (ResolveBoolean): Tiny refactoring.
10612
10613         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
10614         of right expression resolving when left is false constant and
10615         operator is LogicalAnd OR true constant and operator is LogicalOr.
10616
10617         * statement.cs (ResolveUnreachable): Always reports warning.
10618
10619 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
10620
10621         * class.cs: Distinguish between 1721 and 1722 (just a little help
10622         for the programmer).
10623
10624 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
10625
10626         * delegate.cs: Only allow this on new versions of the language. 
10627
10628 2004-12-02  Duncan Mak  <duncan@ximian.com>
10629
10630         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
10631         Expression class.
10632         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
10633         here as a static method. Take an additional bool out parameter
10634         `must_do_cs1540_check' for signaling to InstanceResolve.
10635         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
10636         member field from PropertyExpr class and made it an argument of
10637         the method instead.
10638         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
10639         check for MarshalByRefObject, and report CS0122 instead of CS1540.
10640         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
10641         and `remove_accessor' as well as InstanceResolve: report CS0122
10642         where applicable.
10643
10644         Fixes #70129.
10645
10646 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10647
10648         Fix test-327.cs, test-328.cs, and put in early infrastructure
10649         for eventually fixing #52697.
10650         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
10651         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
10652         from other methods.
10653         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
10654         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
10655         (VerifyUsing, error246): Update.
10656         * rootcontext.cs (RootContext.NamespaceLookup): Just use
10657         'NamespaceEntry.LookupNamespaceOrType'.
10658
10659 2004-12-03  Martin Baulig  <martin@ximian.com>
10660
10661         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10662         method as our child, call AnonymousMethod.Compatible() on it.
10663
10664 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10665
10666         Disable XML documentation support in 'basic' profile.
10667         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
10668         Redirect XmlElement to System.Object.
10669         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
10670         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
10671         * mcs.exe.sources: Add doc-bootstrap.cs.
10672         * doc-bootstrap.cs: New file.  Contains empty stub implementation
10673         of doc.cs.
10674
10675 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
10676
10677         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
10678           comments are allowed.
10679
10680 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10681
10682         * delegate.cs: Add checks for subtypes in paramaters and return values
10683         in VerifyMethod () to add support for Covariance/Contravariance
10684         in delegates.
10685         
10686 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
10687
10688         * report.cs: Remove extra closing parenthesis.
10689
10690         * convert.cs (Error_CannotImplicitConversion): If the name of the
10691         types are the same, provide some extra information.
10692
10693         * class.cs (FieldBase): Use an unused bit field from the field to
10694         encode the `has_offset' property from the FieldMember.  This saves
10695         a couple of Ks on bootstrap compilation.
10696
10697         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10698         method as our child, return the AnonymousMethod resolved
10699         expression.
10700
10701         * expression.cs (New.DoResolve): Allow return values from
10702         NewDelegate to also include AnonymousMethods.
10703
10704         Fixes #70150.
10705
10706 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
10707
10708         Fix bug #70102
10709         * attribute.cs (Resolve): Improved implementation of params
10710         attribute arguments.
10711
10712         * support.cs (ParameterData): Add HasParams to be faster.
10713
10714 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
10715
10716         all things are for /doc support:
10717
10718         * doc.cs: new file that supports XML documentation generation.
10719         * mcs.exe.sources: added doc.cs.
10720         * driver.cs:
10721           Handle /doc command line option.
10722           Report error 2006 instead of 5 for missing file name for /doc.
10723           Generate XML documentation when required, after type resolution.
10724         * cs-tokenizer.cs:
10725           Added support for picking up documentation (/// and /** ... */),
10726           including a new XmlCommentState enumeration.
10727         * cs-parser.jay:
10728           Added lines to fill Documentation element for field, constant,
10729           property, indexer, method, constructor, destructor, operator, event
10730           and class, struct, interface, delegate, enum.
10731           Added lines to warn incorrect comment.
10732         * rootcontext.cs :
10733           Added Documentation field (passed only when /doc was specified).
10734         * decl.cs:
10735           Added DocComment, DocCommentHeader, GenerateDocComment() and
10736           OnGenerateDocComment() and some supporting private members for
10737           /doc feature to MemberCore.
10738         * class.cs:
10739           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
10740         * delegate.cs:
10741           Added overriden DocCommentHeader.
10742         * enum.cs:
10743           Added overriden DocCommentHeader and GenerateDocComment().
10744
10745 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
10746
10747         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
10748         unwrapping the enumeration values, chain to
10749         DoConstantNumericPromotions again, so we can promote things to the
10750         fundamental types (takes care of enums that are bytes, sbytes).
10751
10752         Fixes bug #62054.
10753
10754 2004-12-01  Raja R Harinath  <rharinath@novell.com>
10755
10756         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
10757         Fix long-standing bug in type-lookup.  Use FindType instead of
10758         LookupType when ec.ResolvingTypeTree.
10759         (Attribute.ResolveType, Attribute.Resolve)
10760         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
10761         Update to changes.
10762         (Attributes.Search): Remove internal version.  Update.
10763         (Attributes.SearchMulti): Update.
10764         (Attributes.GetClsCompliantAttribute): Remove.
10765         (Attributes.GetIndexerNameAttribute): Remove.
10766         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
10767         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
10768         * class.cs (Indexer.Define): Likewise.
10769
10770 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
10771
10772         Fix bug #68790
10773         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
10774         MarshallByReference members access.
10775
10776         * expression.cs: Use CheckMarshallByRefAccess;
10777         Better error CS0197 message.
10778
10779         * report.cs: Print whole related error message.
10780
10781 2004-11-30  Raja R Harinath  <rharinath@novell.com>
10782
10783         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
10784         the current directory to help debugging.
10785
10786 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10787
10788         * class (GetClassBases): Better error 60 report.
10789         (EventProperty): Disabled warning 67 detection.
10790
10791 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10792
10793         Fix bug #60324
10794         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
10795
10796         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
10797         precise values.
10798
10799 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10800
10801         Fix bug #49488
10802         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
10803
10804         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
10805
10806 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
10807
10808         * attribute.cs (Attribute.Resolve): Refine error reporting and
10809         report a cs0117 if the identifier does not exist, to distinguish
10810         from 0617 which is a miss-use of the actual identifier.
10811
10812         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
10813         between cs0070 and cs0079.
10814
10815         * class.cs (MemberBase.DoDefine): When reporting a wrong
10816         accessibility level, we use MethodCore to compare instead of
10817         Method (this was a regression in some refactoring effort).
10818
10819         So now we correctly report cs0056 again.
10820
10821         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
10822         testing the target_type (which was known to be object_type) and
10823         not the source type (which is anonymous_method).
10824
10825         Fixed reporting of error cs1660.
10826
10827         * expression.cs (UserCast.Source): Expose the underlying cast.
10828
10829         * statement.cs (Switch.SwitchGoverningType): Sort the list of
10830         allowed types to find a match to int32 first (most common).
10831
10832         In addition, it ignores any ImplicitUserConversions that did an
10833         internal implicit conversion (as the switch statement allows only
10834         one integral conversion to exist).
10835
10836         * class.cs (PartialContainer.Create): rename `name' to
10837         `member_name' for clarity.  Then replace the string calls with a
10838         call to MemberName.GetPartialName, as now using
10839         MemberName.ToString is an error (this is due to the side effects
10840         it had, that were fixed in the past).
10841
10842         This will restore the error reporting on a number of partial class
10843         errors that were missusing this (and getting an exception as a
10844         results, which is now just a plain textual warning, because
10845         yyparse debug output would crash otherwise).
10846
10847 2004-11-26  Raja R Harinath  <rharinath@novell.com>
10848
10849         * Makefile (PROGRAM_INSTALL_DIR): Remove.
10850
10851 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10852
10853         * rootcontext.cs (LookupType): Make sure to cache lookups that
10854         don't give us a negative result. This saves about 5% of corlib
10855         compilation time.
10856
10857 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10858
10859         * report.cs (AbstractMessage.Print): messages are sent to stderr
10860
10861         * class.cs (TypeContainer.GetClassBases): It is an error to have a
10862         non-interface in the list of interfaces (at this point, either
10863         parent was properly set, or a base class is being listed in the
10864         interfaces section).
10865
10866         This flags error 1722, and resolves the crash from bug 69259.
10867
10868 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10869
10870         * statement.cs (Using.EmitExpressionFinally): make this work right
10871         for valuetypes. Fixes 69926.
10872
10873 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10874
10875         * const.cs (Const.ChangeType): Cope with the "0 literal can be
10876         converted to an enum" here, before we try to change the underlying
10877         type.  This code exists, but it is a different code path than the
10878         one used while encoding constants.
10879
10880         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
10881         old bug: when converting from the null literal to a pointer,
10882         return an EmptyCast, not the NullLiteral.
10883
10884         This fixes #69921, the recent null_type changes probably made this
10885         bug more prominent.
10886
10887         (ImplicitReferenceConversionExists): In addition, resynchronized
10888         the code here, so it matches the same code in
10889         ImplicitReferenceConversionExists for the `from any class-type S
10890         to any interface-type T'.
10891         
10892
10893 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
10894
10895         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
10896
10897 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
10898
10899         * cs-parser.jay: Use verbosity accordingly. 
10900
10901 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10902
10903         * expression.cs (Unary.ResolveOperator): Do not report warning;
10904         AddressOf reads from variable.
10905         
10906         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
10907
10908 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10909
10910         Fix bug #69462
10911
10912         * attribute.cs (Attributable): Removed CheckTargets.
10913         (Attributes.Emit): Explicit attribute targets are tested here.
10914
10915         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
10916         not enabled for interfaces.
10917
10918         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
10919         (GetAssemblyName): Ouch next bug there.
10920
10921 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10922
10923         * expression.cs: Error 275 added.
10924         
10925 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
10926
10927         Fix bug #69177 (Implemented decimal constant support)
10928
10929         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
10930         (BinaryFold): Add DecimalConstant.
10931
10932         * const.cs (Define): Decimal constant 
10933         (is not constant.
10934         (ChangeType): Add decimal type handling.
10935         (LookupConstantValue): Don't set value for decimal type but
10936         emit DecimalConstantAttribute. Needed for constant optimization.
10937
10938         * constant.cs (ToDecimal): New method.
10939         (ConvertToDecimal): New method.
10940         (IntConstant): Implemented ConvertToDecimal.
10941         (DecimalConstant.Emit): Emit optimized version for decimals in
10942         int range.
10943
10944         * expression.cs (ResolveOperator): Changed order of constant
10945         reduction to work correctly with native types which have
10946         overloaded operators.
10947         (ResolveMemberAccess): Extract constant value from attribute
10948         for decimal type.
10949
10950         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
10951
10952         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
10953         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
10954         (ChangeType): Decimal is special.
10955         (TypeToCoreType): Add decimal type.
10956
10957 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10958
10959         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
10960         decimal types.
10961
10962 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10963
10964         * class.cs (EventField.ApplyAttributeBuilder): Fix error
10965         test cs1667-5.cs.
10966
10967 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10968
10969         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
10970
10971         * pending.cs (PendingImplementation): Grab only interfaces.
10972
10973 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10974
10975         * statement.cs (ForeachHelperMethods): Add location member and
10976         error 202 detection.
10977
10978 2004-11-19  Raja R Harinath  <rharinath@novell.com>
10979
10980         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
10981         automatically handled by executable.make.
10982         (PROGRAM): Make profile-specific.
10983
10984 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
10985
10986         * expression.cs (DoResolveBase): Fixed wrong warning for out
10987         variables.
10988
10989 2004-11-18  Martin Baulig  <martin@ximian.com>
10990
10991         Merged latest changes into gmcs.  Please keep this comment in
10992         here, it makes it easier for me to see what changed in MCS since
10993         the last time I merged.
10994
10995 2004-11-17  Raja R Harinath  <rharinath@novell.com>
10996
10997         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
10998         (TypeHandle.GetMemberCache): New.
10999         (TypeHandle.TypeHandle): Update.
11000         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
11001         (TypeManager.LookupParentInterfacesCache):
11002         Rename from LookupInterfaceCache.  Optimize slightly.
11003         (TypeManager.MemberLookup_FindMembers): Update.
11004         * decl.cs (MemberCache.MemberCache): Set Container to null in the
11005         multi-type variant.
11006         (AddCacheContents): Rename from AddHashtable.
11007         * class.cs (TypeContainer.parent_container): Remove.
11008         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
11009         (TypeContainer.DoDefineMembers): Don't initialize it.
11010         Update to name changes.
11011         
11012 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
11013
11014         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
11015         that factors the code to check access modifiers on override.  
11016
11017         (PropertyBase): Use the code here.
11018
11019         Patch from Lluis S'anchez, fixes bug #69361.
11020
11021 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
11022
11023         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
11024         routine that is used to report the use of a captured variable
11025         whose address has been taken.
11026
11027         There are two checks: one when variables are being captured and
11028         the other check is when the address of a variable is taken. 
11029         
11030         (because an anonymous methods might be resolved before *or* after
11031         the address has been taken) and 
11032
11033         * expression.cs (Conditional.DoResolve): Remove the special
11034         casing that Martin added to trueExpr and falseExpr being both
11035         NullLiteral.  We get the right behavior now just by introducing
11036         the null_type into the compiler. 
11037
11038         * convert.cs (ExplicitConversion): Change the code to use
11039         null_type instead of testing `expr is NullLiteral'.
11040         (ImplicitConversionStandard): use null_type too.
11041         (ImplicitReferenceConversionExists): use null_type too.
11042         (ImplicitReferenceConversion): use null_type too.
11043
11044         * literal.cs: The type of `NullLiteral' is now null_type instead
11045         of object_type. 
11046         (Resolve): Set the type here.
11047
11048         * typemanager.cs: Introduce null_type.
11049
11050 2004-11-17  Martin Baulig  <martin@ximian.com>
11051
11052         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
11053         direction, like FindMembers() does.  Fixes #69546, testcase is in
11054         test-315.cs.    
11055
11056 2004-11-16  Martin Baulig  <martin@ximian.com>
11057
11058         This is based on a patch from Marek Safar, see bug #69082.
11059         Fixes bugs #63705 and #67130.
11060
11061         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
11062         method; create a MemberCache for an interface type and cache the
11063         result.
11064
11065         * decl.cs (IMemberContainer.ParentContainer): Removed.
11066         (IMemberContainer.ParentCache): New property.
11067         (MemberCache.SetupCacheForInterface): Removed.
11068         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
11069         to create a cache for an interface's "parent".
11070
11071         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
11072         interfaces too.
11073
11074 2004-11-16  Martin Baulig  <martin@ximian.com>
11075
11076         Merged back from gmcs; these changes already went into gmcs a
11077         couple of weeks ago.
11078
11079         * typemanager.cs
11080         (TypeManager.AddUserType): Removed the `ifaces' argument.
11081         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
11082         `TypeExpr []'.
11083         (TypeManager.AddUserInterface): Removed.
11084         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
11085         `TypeExpr []'.
11086         (TypeManager.GetInterfaces): Likewise.
11087         (TypeManager.GetExplicitInterfaces): Likewise.
11088
11089         * ecore.cs (TypeExpr.GetInterfaces): Removed.
11090
11091         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
11092         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
11093
11094 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
11095
11096         * statement.cs: Avoid adding bools to a hashtable.
11097
11098 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
11099
11100         * expression.cs (Invocation.OverloadResolve): Flag error if we are
11101         calling an unsafe method from a safe location.
11102
11103 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
11104
11105         Fix #69167
11106         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
11107
11108 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
11109
11110         * namespace.cs (VerifyUsing): use GetPartialName instead of
11111         ToString. 
11112
11113 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
11114
11115         * statement.cs (Return.Resolve): Fix regression in typo: if
11116         `in_exc', we have to request a NeedReturnLabel, this was a typo
11117         introduced in the anonymous method check-in.  Fixes #69131.
11118
11119         * Indexers were using the ShortName when defining themselves,
11120         causing a regression in the compiler bootstrap when applying the
11121         patch from 2004-11-02 (first part), now they use their full name
11122         and the bug is gone.
11123
11124 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
11125
11126         * driver.cs: Strip the path from the names of embedded resources. Fixes
11127         #68519.
11128
11129 2004-11-04  Raja R Harinath  <rharinath@novell.com>
11130
11131         Fix error message regression: cs0104-2.cs.
11132         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
11133         (AliasEntry.Resolve): Update.
11134         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
11135         'silent' flag.
11136         (RootContext.LookupType): Update.
11137
11138 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
11139
11140         * cs-parser.jay: Add support for handling accessor modifiers
11141         * class: Add support port accessor modifiers and error checking,
11142         define PropertyMethod.Define as virtual (not abstract anymore)
11143         * ecore.cs: Add checking for proeprties access with access modifiers
11144         * iterators.cs: Modify Accessor constructor call based in the modified
11145         constructor
11146 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
11147
11148         * expression.cs (StringConcat): Handle being called twice,
11149         as when we have a concat in a field init with more than two
11150         ctors in the class
11151
11152 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
11153
11154         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
11155         special case explicit implementations, we should always produce
11156         the .property or .event declaration.
11157         
11158         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
11159         since it will not return correct data if people use this
11160         unresolved in the presence of using statements (see test-313).
11161
11162         * class.cs (MethodData.Define): If we are an explicit interface
11163         implementation, set the method name to the full name of the
11164         interface plus the name of the method.  
11165
11166         Notice that using the method.MethodName.GetFullName() does not
11167         work, as it will only contain the name as declared on the source
11168         file (it can be a shorthand in the presence of using statements)
11169         and not the fully qualifed type name, for example:
11170
11171         using System;
11172
11173         class D : ICloneable {
11174                 object ICloneable.Clone ()  {
11175                 }
11176         }
11177
11178         Would produce a method called `ICloneable.Clone' instead of
11179         `System.ICloneable.Clone'.
11180
11181         * namespace.cs (Alias.Resolve): Use GetPartialName.
11182         
11183 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
11184
11185         * cs-parser.jay: Add error 1055 report.
11186
11187 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
11188
11189         * assign.cs (Assign.DoResolve): Only do the transform of
11190         assignment into a New if the types are compatible, if not, fall
11191         through and let the implicit code deal with the errors and with
11192         the necessary conversions. 
11193
11194 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
11195
11196         * cs-parser.jay: Add error 1031 report.
11197
11198         * cs-tokenizer.cs: Add location for error 1038.
11199
11200 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11201
11202         * cs-parser.jay: Add error 1016 report.
11203
11204 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11205
11206         * cs-parser.jay: Add errors 1575,1611 report.
11207
11208 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11209
11210         * cs-parser.jay: Add error 1001 report.
11211
11212 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11213
11214         Fix #68850
11215         * attribute.cs (GetMarshal): Add method argument for
11216         caller identification.
11217
11218         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
11219         agument for GetMarshal and RuntimeMissingSupport.
11220
11221 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11222
11223         * attribute.cs (ExtractSecurityPermissionSet): Removed
11224         TypeManager.code_access_permission_type.
11225
11226         * typemanager.cs: Removed TypeManager.code_access_permission_type.
11227
11228 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
11229
11230         * expression.cs (LocalVariableReference.DoResolveLValue): Check
11231         for obsolete use of a variable here.   Fixes regression on errors
11232         cs0619-25 and cs0619-26.
11233
11234 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
11235
11236         Fix #62358, implemented security attribute encoding.
11237
11238         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
11239         Tests permitted SecurityAction for assembly or other types.
11240         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
11241         data from SecurityPermissionAttribute to PermisionSet class.
11242
11243         * class.cs (ApplyAttributeBuilder): Added special handling
11244         for System.Security.Permissions.SecurityAttribute based types.
11245
11246         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
11247         special handling for System.Security.Permissions.SecurityAttribute
11248         based types.
11249
11250         * enum.cs (ApplyAttributeBuilder): Added special handling
11251         for System.Security.Permissions.SecurityAttribute based types.
11252
11253         * parameter.cs (ApplyAttributeBuilder): Added special handling
11254         for System.Security.Permissions.SecurityAttribute based types.
11255
11256         * rootcontext.cs: Next 2 core types.
11257
11258         * typemanager.cs (TypeManager.security_permission_attr_type):
11259         Built in type for the SecurityPermission Attribute.
11260         (code_access_permission_type): Build in type.
11261
11262 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
11263
11264         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
11265         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
11266         all of this information into
11267         EmitContext.EmitCapturedVariableInstance.
11268         
11269         * codegen.cs (EmitCapturedVariableInstance): move here the
11270         funcionality of emitting an ldarg.0 in the presence of a
11271         remapping.   This centralizes the instance emit code.
11272
11273         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
11274         then emit a load of this: it means that we have reached the
11275         topmost ScopeInfo: the one that contains the pointer to the
11276         instance of the class hosting the anonymous method.
11277
11278         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
11279         captures to the topmost CaptureContext.
11280
11281 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
11282
11283         * expression.cs (LocalVariableReference): Move the knowledge about
11284         the iterators into codegen's EmitCapturedVariableInstance.
11285
11286 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
11287
11288         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
11289         all code paths return a value from an anonymous method (it is the
11290         same as the 161 error, but for anonymous methods).
11291
11292 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
11293
11294         The introduction of anonymous methods in the compiler changed
11295         various ways of doing things in the compiler.  The most
11296         significant one is the hard split between the resolution phase
11297         and the emission phases of the compiler.
11298
11299         For instance, routines that referenced local variables no
11300         longer can safely create temporary variables during the
11301         resolution phase: they must do so from the emission phase,
11302         since the variable might have been "captured", hence access to
11303         it can not be done with the local-variable operations from the runtime.
11304         
11305         * statement.cs 
11306
11307         (Block.Flags): New flag `IsTopLevel' to indicate that this block
11308         is a toplevel block.
11309
11310         (ToplevelBlock): A new kind of Block, these are the blocks that
11311         are created by the parser for all toplevel method bodies.  These
11312         include methods, accessors and anonymous methods.
11313
11314         These contain some extra information not found in regular blocks:
11315         A pointer to an optional CaptureContext (for tracking captured
11316         local variables and parameters).  A pointer to the parent
11317         ToplevelBlock.
11318         
11319         (Return.Resolve): Catch missmatches when returning a value from an
11320         anonymous method (error 1662).
11321         Invoke NeedReturnLabel from the Resolve phase instead of the emit
11322         phase.
11323
11324         (Break.Resolve): ditto.
11325
11326         (SwitchLabel): instead of defining the labels during the
11327         resolution phase, we now turned the public ILLabel and ILLabelCode
11328         labels into methods called GetILLabelCode() and GetILLabel() that
11329         only define the label during the Emit phase.
11330
11331         (GotoCase): Track the SwitchLabel instead of the computed label
11332         (its contained therein).  Emit the code by using
11333         SwitchLabel.GetILLabelCode ().
11334
11335         (LocalInfo.Flags.Captured): A new flag has been introduce to track
11336         whether the Local has been captured or not.
11337
11338         (LocalInfo.IsCaptured): New property, used to tell whether the
11339         local has been captured.
11340         
11341         * anonymous.cs: Vastly updated to contain the anonymous method
11342         support.
11343
11344         The main classes here are: CaptureContext which tracks any
11345         captured information for a toplevel block and ScopeInfo used to
11346         track the activation frames for various local variables.   
11347
11348         Each toplevel block has an optional capture context associated
11349         with it.  When a method contains an anonymous method both the
11350         toplevel method and the anonymous method will create a capture
11351         context.   When variables or parameters are captured, they are
11352         recorded on the CaptureContext that owns them, for example:
11353
11354         void Demo () {
11355              int a;
11356              MyDelegate d = delegate {
11357                  a = 1;
11358              }
11359         }
11360
11361         Here `a' will be recorded as captured on the toplevel
11362         CapturedContext, the inner captured context will not have anything
11363         (it will only have data if local variables or parameters from it
11364         are captured in a nested anonymous method.
11365
11366         The ScopeInfo is used to track the activation frames for local
11367         variables, for example:
11368
11369         for (int i = 0; i < 10; i++)
11370                 for (int j = 0; j < 10; j++){
11371                    MyDelegate d = delegate {
11372                         call (i, j);
11373                    }
11374                 }
11375
11376         At runtime this captures a single captured variable `i', but it
11377         captures 10 different versions of the variable `j'.  The variable
11378         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
11379         recorded on a child.  
11380
11381         The toplevel ScopeInfo will also track information like the `this'
11382         pointer if instance variables were referenced (this is necessary
11383         as the anonymous method lives inside a nested class in the host
11384         type of the method). 
11385
11386         (AnonymousMethod): Expanded to track the Toplevel, implement
11387         `AnonymousMethod.Compatible' to tell whether an anonymous method
11388         can be converted to a target delegate type. 
11389
11390         The routine now also produces the anonymous method content
11391
11392         (AnonymousDelegate): A helper class that derives from
11393         DelegateCreation, this is used to generate the code necessary to
11394         produce the delegate for the anonymous method that was created. 
11395
11396         * assign.cs: API adjustments for new changes in
11397         Convert.ImplicitStandardConversionExists.
11398
11399         * class.cs: Adjustments to cope with the fact that now toplevel
11400         blocks are of type `ToplevelBlock'. 
11401
11402         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
11403         insteda of standard blocks.
11404
11405         Flag errors if params arguments are passed to anonymous methods.
11406
11407         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
11408         `CurrentAnonymousMethod' which points to the current Anonymous
11409         Method.  The variable points to the AnonymousMethod class that
11410         holds the code being compiled.  It is set in the new EmitContext
11411         created for the anonymous method.
11412
11413         (EmitContext.Phase): Introduce a variable and an enumeration to
11414         assist in enforcing some rules about when and where we are allowed
11415         to invoke certain methods (EmitContext.NeedsReturnLabel is the
11416         only one that enfonces this right now).
11417
11418         (EmitContext.HaveCaptureInfo): new helper method that returns
11419         whether we have a CapturedContext initialized.
11420
11421         (EmitContext.CaptureVariable): New method used to register that a
11422         LocalInfo must be flagged for capturing. 
11423
11424         (EmitContext.CapturedParameter): New method used to register that a
11425         parameters must be flagged for capturing. 
11426         
11427         (EmitContext.CapturedField): New method used to register that a
11428         field must be flagged for capturing. 
11429
11430         (EmitContext.HaveCapturedVariables,
11431         EmitContext.HaveCapturedFields): Return whether there are captured
11432         variables or fields. 
11433
11434         (EmitContext.EmitMethodHostInstance): This is used to emit the
11435         instance for the anonymous method.  The instance might be null
11436         (static methods), this (for anonymous methods that capture nothing
11437         and happen to live side-by-side with the current method body) or a
11438         more complicated expression if the method has a CaptureContext.
11439
11440         (EmitContext.EmitTopBlock): Routine that drives the emission of
11441         code: it will first resolve the top block, then emit any metadata
11442         and then emit the code.  The split is done so that we can extract
11443         any anonymous methods and flag any captured variables/parameters.
11444         
11445         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
11446         during this phase, the ILGenerator should not be used as labels
11447         and local variables declared here might not be accessible to any
11448         code that is part of an anonymous method.  
11449
11450         Exceptions to this include the temporary variables that are
11451         created by some statements internally for holding temporary
11452         variables. 
11453         
11454         (EmitContext.EmitMeta): New routine, in charge of emitting all the
11455         metadata for a cb
11456
11457         (EmitContext.TemporaryReturn): This method is typically called
11458         from the Emit phase, and its the only place where we allow the
11459         ReturnLabel to be defined other than the EmitMeta.  The reason is
11460         that otherwise we would have to duplicate a lot of logic in the
11461         Resolve phases of various methods that today is on the Emit
11462         phase. 
11463
11464         (EmitContext.NeedReturnLabel): This no longer creates the label,
11465         as the ILGenerator is not valid during the resolve phase.
11466
11467         (EmitContext.EmitThis): Extended the knowledge in this class to
11468         work in anonymous methods in addition to iterators. 
11469
11470         (EmitContext.EmitCapturedVariableInstance): This emits whatever
11471         code is necessary on the stack to access the instance to a local
11472         variable (the variable will be accessed as a field).
11473
11474         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
11475         EmitContext.EmitAddressOfParameter): Routines to support
11476         parameters (not completed at this point). 
11477         
11478         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
11479         will also remove the parameters.
11480
11481         * convert.cs (Convert): Define a `ConstantEC' which points to a
11482         null.  This is just to prefity some code that uses
11483         ImplicitStandardConversion code and do not have an EmitContext
11484         handy.
11485
11486         The idea is to flag explicitly that at that point in time, it is
11487         known that the conversion will not trigger the delegate checking
11488         code in implicit conversions (which requires a valid
11489         EmitContext). 
11490
11491         Everywhere: pass new EmitContext parameter since
11492         ImplicitStandardConversionExists now requires it to check for
11493         anonymous method conversions. 
11494
11495         (Convert.ImplicitStandardConversionExists): If the type of an
11496         expression is the anonymous_method_type, and the type is a
11497         delegate, we invoke the AnonymousMethod.Compatible method to check
11498         whether an implicit conversion is possible. 
11499
11500         (Convert.ImplicitConversionStandard): Only do implicit method
11501         group conversions if the language level is not ISO_1.
11502
11503         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
11504         MethodInfo for the Invoke method.  used by Delegate and
11505         AnonymousDelegate.
11506
11507         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
11508         method conversions if the target type is a delegate.
11509
11510         Removed extra debugging nops.
11511
11512         (LocalVariableReference): Turn the `local_info' into a public
11513         field. 
11514
11515         Add `prepared' field, the same hack used for FieldExprs to cope
11516         with composed assignments, as Local variables do not necessarily
11517         operate purely on the stack as they used to: they can be captured
11518         fields. 
11519
11520         Add `temp' for a temporary result, like fields.
11521
11522         Refactor DoResolve and DoResolveLValue into DoResolveBase.
11523
11524         It now copes with Local variables that are captured and emits the
11525         proper instance variable to load it from a field in the captured
11526         case. 
11527
11528         (ParameterReference.DoResolveBase): During the resolve phase,
11529         capture parameters if we are in an anonymous method.
11530
11531         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
11532         anonymous method, use the EmitContext helper routines to emit the
11533         parameter reference.
11534
11535         * iterators.cs: Set RemapToProxy to true/false during the
11536         EmitDispose class.
11537
11538         * parameters.cs (GetParameterByName): New helper method. 
11539
11540         * typemanager.cs (anonymous_method_type) a new type that
11541         represents an anonyous method.  This is always an internal type,
11542         used as a fencepost to test against the anonymous-methodness of an
11543         expression. 
11544         
11545 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
11546
11547         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
11548         561 report.
11549         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
11550
11551 2004-10-18  Martin Baulig  <martin@ximian.com>
11552
11553         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
11554         `Type' directly, but call ResolveType() on it.
11555         (Catch.Resolve): Likewise.
11556         (Foreach.Resolve): Likewise.
11557
11558 2004-10-18  Martin Baulig  <martin@ximian.com>
11559
11560         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
11561         `Type' directly, but call ResolveType() on it.
11562         (Probe.DoResolve): Likewise.
11563         (ArrayCreation.LookupType): Likewise.
11564         (TypeOf.DoResolve): Likewise.
11565         (SizeOf.DoResolve): Likewise.
11566
11567 2004-10-18  Martin Baulig  <martin@ximian.com>
11568
11569         * expression.cs (Invocation.BetterFunction): Put back
11570         TypeManager.TypeToCoreType().
11571
11572 2004-10-18  Raja R Harinath  <rharinath@novell.com>
11573
11574         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
11575         the ResolveType.
11576
11577 2004-10-18  Martin Baulig  <martin@ximian.com>
11578
11579         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
11580         `Type' directly, but call ResolveType() on it.
11581
11582 2004-10-18  Martin Baulig  <martin@ximian.com>
11583
11584         * class.cs (FieldMember.Define): Don't access the TypeExpr's
11585         `Type' directly, but call ResolveType() on it.
11586         (MemberBase.DoDefine): Likewise.
11587
11588         * expression.cs (New.DoResolve): Don't access the TypeExpr's
11589         `Type' directly, but call ResolveType() on it.
11590         (ComposedCast.DoResolveAsTypeStep): Likewise.
11591
11592         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
11593         `Type' directly, but call ResolveType() on it.
11594
11595 2004-10-17  John Luke  <john.luke@gmail.com>
11596
11597         * class.cs (Operator.GetSignatureForError): use CSharpName
11598
11599         * parameter.cs (Parameter.GetSignatureForError): Returns
11600         correct name even if was not defined.
11601
11602 2004-10-13  Raja R Harinath  <rharinath@novell.com>
11603
11604         Fix #65816.
11605         * class.cs (TypeContainer.EmitContext): New property.
11606         (DefineNestedTypes): Create an emitcontext for each part.
11607         (MethodCore.DoDefineParameters): Use container's emitcontext.
11608         Pass type array to InternalParameters.
11609         (MemberBase.DoDefine): Use container's emitcontext.
11610         (FieldMember.Define): Likewise.
11611         (Event.Define): Likewise.
11612         (SetMethod.GetParameterInfo): Change argument to EmitContext.
11613         Pass type array to InternalParameters.
11614         (SetIndexerMethod.GetParameterInfo): Likewise.
11615         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
11616         * delegate.cs (Define): Pass emitcontext to
11617         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
11618         array to InternalParameters.
11619         * expression.cs (ParameterReference.DoResolveBase): Pass
11620         emitcontext to GetParameterInfo.
11621         (ComposedCast.DoResolveAsTypeStep): Remove check on
11622         ec.ResolvingTypeTree.
11623         * parameter.cs (Parameter.Resolve): Change argument to
11624         EmitContext.  Use ResolveAsTypeTerminal.
11625         (Parameter.GetSignature): Change argument to EmitContext.
11626         (Parameters.ComputeSignature): Likewise.
11627         (Parameters.ComputeParameterTypes): Likewise.
11628         (Parameters.GetParameterInfo): Likewise.
11629         (Parameters.ComputeAndDefineParameterTypes): Likewise.
11630         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
11631         * support.cs (InternalParameters..ctor): Remove variant that takes
11632         a DeclSpace.
11633         * typemanager.cs (system_intptr_expr): New.
11634         (InitExpressionTypes): Initialize it.
11635
11636 2004-10-12  Chris Toshok  <toshok@ximian.com>
11637
11638         * cs-parser.jay: fix location for try_statement and catch_clause.
11639
11640 2004-10-11  Martin Baulig  <martin@ximian.com>
11641
11642         * report.cs: Don't make --fatal abort on warnings, we have
11643         -warnaserror for that.
11644
11645 2004-10-07  Raja R Harinath  <rharinath@novell.com>
11646
11647         More DeclSpace.ResolveType avoidance.
11648         * decl.cs (MemberCore.InUnsafe): New property.
11649         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
11650         with newly created EmitContext.
11651         (FieldMember.Define): Likewise.
11652         * delegate.cs (Delegate.Define): Likewise.
11653         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
11654         only if normal name-lookup fails.
11655         (TypeExpr.DoResolve): Enable error-checking.
11656         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
11657         (SizeOf.DoResolve): Likewise.
11658         (ComposedCast.DoResolveAsTypeStep): Likewise.
11659         (StackAlloc.DoResolve): Likewise.
11660         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
11661         (Block.Unsafe): New property.
11662         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
11663         (Unsafe): Set 'unsafe' flag of contained block.
11664         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
11665         (Fixed.Resolve): Likewise.
11666         (Catch.Resolve): Likewise.
11667         (Using.ResolveLocalVariableDecls): Likewise.
11668         (Foreach.Resolve): Likewise.
11669
11670 2004-10-05  John Luke <john.luke@gmail.com>
11671
11672         * cs-parser.jay: add location to error CS0175
11673
11674 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
11675
11676         * ecore.cs (Expression.Constantity): Add support for turning null
11677         into a constant.
11678
11679         * const.cs (Const.Define): Allow constants to be reference types
11680         as long as the value is Null.
11681
11682 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
11683
11684         * namespace.cs (NamespaceEntry.Using): No matter which warning
11685         level is set, check if this namespace name has already been added.
11686
11687 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
11688
11689         * expression.cs: reftype [!=]= null should always use br[true,false].
11690         # 67410
11691
11692 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
11693
11694         Fix #67108
11695         * attribute.cs: Enum conversion moved to 
11696         GetAttributeArgumentExpression to be applied to the all
11697         expressions.
11698
11699 2004-10-01  Raja R Harinath  <rharinath@novell.com>
11700
11701         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
11702         * class.c (TypeContainer.DefineType): Flag error if
11703         base types aren't accessible due to access permissions.
11704         * decl.cs (DeclSpace.ResolveType): Move logic to
11705         Expression.ResolveAsTypeTerminal.
11706         (DeclSpace.ResolveTypeExpr): Thin layer over
11707         Expression.ResolveAsTypeTerminal.
11708         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
11709         Refactor code into NestedAccess.  Use it.
11710         (DeclSpace.NestedAccess): New.
11711         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
11712         argument to silence errors.  Check access permissions.
11713         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
11714         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
11715         (Cast.DoResolve): Likewise.
11716         (New.DoResolve): Likewise.
11717         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
11718         (TypeOf.DoResolve): Likewise.
11719
11720         * expression.cs (Invocation.BetterConversion): Return the Type of
11721         the better conversion.  Implement section 14.4.2.3 more faithfully.
11722         (Invocation.BetterFunction): Make boolean.  Make correspondence to
11723         section 14.4.2.2 explicit.
11724         (Invocation.OverloadResolve): Update.
11725         (Invocation): Remove is_base field.
11726         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
11727         (Invocation.Emit): Likewise.
11728
11729 2004-09-27  Raja R Harinath  <rharinath@novell.com>
11730
11731         * README: Update to changes.
11732
11733 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
11734
11735         * cs-parser.jay: Reverted 642 warning fix.
11736
11737 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11738
11739         Fix bug #66615
11740         * decl.cs (FindMemberWithSameName): Indexer can have more than
11741         1 argument.
11742
11743 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11744
11745         * expression.cs (LocalVariableReference.DoResolveLValue):
11746         Do not report warning 219 for out values.
11747         (EmptyExpression.Null): New member to avoid extra allocations.
11748
11749 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11750
11751         * cs-parser.jay: Fix wrong warning 642 report.
11752
11753         * cs-tokenizer.cs (CheckNextToken): New helper;
11754         Inspect next character if is same as expected.
11755
11756 2004-09-23  Martin Baulig  <martin@ximian.com>
11757
11758         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
11759         (Convert.ImplicitReferenceConversionExists): Likewise.
11760
11761 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11762
11763         * class.cs (Operator.Define): Add error 448 and 559 report.
11764
11765 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11766
11767         * class.cs (MemberBase.IsTypePermitted): New protected
11768         method for checking error CS0610.
11769
11770 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11771
11772         * class.cs (TypeContainer.HasExplicitLayout): New property
11773         Returns whether container has StructLayout attribute set Explicit.
11774         (FieldMember): New abstract class for consts and fields.
11775         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
11776         (Field): Reuse FieldMember.
11777
11778         * const.cs (Const): Reuse FieldMember.
11779
11780         * rootcontext.cs: EmitConstants call moved to class.
11781
11782 2004-09-22  Martin Baulig  <martin@ximian.com>
11783
11784         Thanks to Peter Sestoft for this bug report.
11785
11786         * expression.cs (Conditional): If both the `trueExpr' and the
11787         `falseExpr' is a NullLiteral, return a NullLiteral.
11788
11789 2004-09-22  Martin Baulig  <martin@ximian.com>
11790
11791         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
11792         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
11793         for the "get_Current" call.
11794
11795 2004-09-22  Martin Baulig  <martin@ximian.com>
11796
11797         Marek and me just fixed one of our oldest bugs: #28562 :-)
11798
11799         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
11800
11801         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
11802         we're an EnumConstant, just return that.
11803         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
11804         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
11805         to get the value which'll actually be written into the attribute.
11806         However, we have to use GetValue() to access the attribute's value
11807         in the compiler.        
11808
11809 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11810
11811         * constant.cs (Constant.IsNegative): New abstract property
11812         IsNegative.
11813
11814         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
11815         (StackAlloc.DoResolve): Reused IsNegative.
11816
11817 2004-09-21  Martin Baulig  <martin@ximian.com>
11818
11819         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
11820         if we're used in an iterator, we may be called from different
11821         methods.
11822
11823         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
11824         we actually have an exception block.
11825
11826 2004-09-20  John Luke <jluke@cfl.rr.com>
11827
11828         * class.cs, cs-parser.jay: Improve the error report for 1520:
11829         report the actual line where the error happens, not where the
11830         class was declared.
11831
11832         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
11833         Pass location information that was available elsewhere.
11834
11835 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
11836
11837         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
11838         runtime to delay sign assemblies.
11839
11840 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11841
11842         * cs-parser.jay: Do not report the stack trace, this is barely
11843         used nowadays.
11844
11845 2004-08-22  John Luke  <john.luke@gmail.com>
11846  
11847         * driver.cs : check that a resource id is not already used
11848         before adding it, report CS1508 if it is, bug #63637
11849
11850 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11851
11852         * ecore.cs: Removed dead code.
11853
11854 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
11855
11856         * class.cs: Do not report warning CS0067 on the interfaces.
11857
11858 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11859
11860         * cs-parser.jay: Add error 504 report.
11861
11862 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11863
11864         * rootcontext.cs: WarningLevel is 4 by default now.
11865
11866         * statement.cs (Fixed.Resolve): Do not null
11867         VariableInfo.
11868
11869 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11870
11871         Fixed bug #55780
11872         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
11873         deep search when property is not virtual.
11874         (PropertyExpr.ResolveAccessors): Make one call for both
11875         accessors.
11876
11877 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11878
11879         Fixed bug #65766
11880         * statement.cs: Error 152 report constains also location.
11881
11882 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11883
11884         Fixed bug #65766
11885         * const.cs: Explicitly set constant as static.
11886
11887 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11888
11889         Fixed bug #64226
11890         * cs-parser.jay: Add error 1017 report.
11891
11892 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11893
11894         Fixed bug #59980, #64224
11895         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
11896
11897         * typemanager.cs (IsSpecialMethod): Simplified
11898
11899 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11900
11901         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
11902         condition with better params.
11903
11904 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11905
11906         Fixed bug #65238
11907         * attribute.cs (Resolve): Property has to have both
11908         accessors.
11909
11910 2004-09-14  Martin Baulig  <martin@ximian.com>
11911
11912         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
11913
11914 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11915
11916         Fixed bug #61902
11917         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
11918         called and is obsolete then this member suppress message
11919         when call is inside next [Obsolete] method or type.
11920
11921         * expression.cs: Use TestObsoleteMethodUsage member.
11922
11923 2004-09-14  Martin Baulig  <martin@ximian.com>
11924
11925         * cs-parser.jay: Sync a bit with the GMCS version.
11926
11927 2004-09-14  Martin Baulig  <martin@ximian.com>
11928
11929         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
11930         (CSharpParser.yacc_verbose_flag): New public field.
11931
11932         * genericparser.cs: Removed.
11933
11934 2004-09-14  Raja R Harinath  <rharinath@novell.com>
11935
11936         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
11937
11938 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
11939
11940         * class.cs (MethodCore.CheckBase): Fix bug #65757.
11941
11942 2004-09-10  Martin Baulig  <martin@ximian.com>
11943
11944         Backported my MemberName changes from GMCS into MCS.
11945
11946         - we are now using a special `MemberName' class instead of using
11947         strings; in GMCS, the `MemberName' also contains the type
11948         arguments.
11949
11950         - changed the grammar rules a bit:
11951           * the old `member_name' is now a `namespace_or_type_name':
11952             The rule is that we use `namespace_or_type_name' everywhere
11953             where we expect either a "member name" (GetEnumerator) or a
11954             "member name" with an explicit interface name
11955             (IEnumerable.GetEnumerator).
11956             In GMCS, the explicit interface name may include type arguments
11957             (IEnumerable<T>.GetEnumerator).
11958           * we use `member_name' instead of just `IDENTIFIER' for
11959             "member names":
11960             The rule is that we use `member_name' wherever a member may
11961             have type parameters in GMCS.       
11962
11963         * decl.cs (MemberName): New public class.
11964         (MemberCore.MemberName): New public readonly field.
11965         (MemberCore.ctor): Take a `MemberName' argument, not a string.
11966         (DeclSpace): Likewise.
11967
11968         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
11969         * enum.cs (Enum.ctor): Likewise.
11970
11971         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
11972         MemberName.     
11973         (AliasEntry.ctor): Take a MemberName, not an Expression.
11974         (AliasEntry.UsingAlias): Likewise.
11975
11976         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
11977         (IMethodData.MemberName): Changed type from string to MemberName.
11978         (MemberBase.ExplicitInterfaceName): Likewise.
11979         (AbstractPropertyEventMethod.SetupName): Make this private.
11980         (AbstractPropertyEventMethod.ctor): Added `string prefix'
11981         argument; compute the member name here.
11982         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
11983         on the `member.MemberName' and the `prefix'.
11984
11985         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
11986         not `type_name'.
11987         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
11988         thus, we get a `MemberName' instead of a `string'.  These
11989         declarations may have type parameters in GMCS.
11990         (interface_method_declaration, delegate_declaration): Likewise.
11991         (class_declaration, interface_declaration): Likewise.
11992         (method_header): Use `namespace_or_type_name' instead of
11993         `member_name'.  We may be an explicit interface implementation.
11994         (property_declaration, event_declaration): Likewise.
11995         (member_name): This is now just an `IDENTIFIER', not a
11996         `namespace_or_type_name'.
11997         (type_name, interface_type): Removed.
11998         (namespace_or_type_name): Return a MemberName, not an Expression.
11999         (primary_expression): Use `member_name' instead of `IDENTIFIER';
12000         call GetTypeExpression() on the MemberName to get an expression.
12001         (IndexerDeclaration.interface_type): Changed type from string to
12002         MemberName.
12003         (MakeName): Operate on MemberName's instead of string's.
12004
12005 2004-09-13  Raja R Harinath  <rharinath@novell.com>
12006
12007         Fix bug #55770.
12008         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
12009         (NamespaceEntry.Lookup): Add new argument to flag if we want the
12010         lookup to avoid symbols introduced by 'using'.
12011         * rootcontext.cs (NamespaceLookup): Update.
12012
12013 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12014
12015         * class.cs (TypeContainer.DoDefineMembers): Do not call
12016         DefineDefaultConstructor for static classes.
12017
12018 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12019
12020         * attribute.cs (Attribute.Resolve): Add error 653 report.
12021
12022         * class.cs (Class.ApplyAttributeBuilder): Add error 641
12023         report.
12024         (Method.ApplyAttributeBuilder): Add error 685 report.
12025         (Operator.Define): Add error 564 report.
12026
12027         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
12028
12029         * expression.cs (Invocation.DoResolve): Add error
12030         245 and 250 report.
12031
12032         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
12033         error 674 report.
12034
12035 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12036
12037         * class.cs (ConstructorInitializer.Resolve):
12038         Wrong error number (515->516).
12039
12040 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12041
12042         * class.cs (Indexer.Define): Add error 631 report.
12043
12044 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12045
12046         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
12047
12048 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12049
12050         * expression.cs (Probe.DoResolve): Add error CS0241 report.
12051
12052 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
12053
12054         * cs-parser.jay: Added error CS0241 report.
12055
12056 2004-09-10  Raja R Harinath  <rharinath@novell.com>
12057
12058         * cs-parser.jay (fixed_statement): Introduce a scope for the
12059         declaration in the 'fixed' statement.
12060
12061 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12062
12063         * cs-parser.jay: Added CS0230 error report.
12064
12065 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12066
12067         * cs-parser.jay: Added errors CS0231 and CS0257 report.
12068
12069 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12070
12071         * expression.cs (Argument.Resolve): Added error CS0192 and
12072         CS0199 report.
12073
12074 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12075
12076         C# 2.0 #pragma warning feature
12077
12078         * cs-tokenizer.cs (PreProcessPragma): New method; 
12079         Handles #pragma directive.
12080
12081         * report.cs (WarningRegions): New class; Support
12082         class for #pragma warning directive. It tests whether
12083         warning is enabled for a given line.
12084
12085 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
12086
12087         * const.cs: Add more descriptive error report, tahnks to
12088         Sebastien. 
12089
12090 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
12091
12092         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
12093
12094 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
12095
12096         * expression.cs: Apply patch from Ben: Remove dead code from
12097         ArrayCreation, and remove the TurnintoConstant call in const.cs,
12098         as that code just threw an exception anwyays.
12099
12100         * const.cs: Remove the call to the turnintoconstant, for details
12101         see bug: #63144
12102         
12103         * literal.cs: The type of the null-literal is the null type;  So
12104         we use a placeholder type (literal.cs:System.Null, defined here)
12105         for it.
12106
12107         * expression.cs (Conditional.DoResolve): Remove some old code that
12108         is no longer needed, conversions have been fixed.
12109
12110         (ArrayCreationExpression.DoResolve): Return false if we fail to
12111         resolve the inner expression.
12112
12113 2004-09-07  Raja R Harinath  <rharinath@novell.com>
12114
12115         Fix test-290.cs.
12116         * cs-parser.jay (delegate_declaration): Record a delegate
12117         declaration as a type declaration.
12118         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
12119
12120 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
12121
12122         * parameter.cs: Do not crash if the type can not be resolved. 
12123
12124         * expression.cs: Report errors with unsafe pointers, fixes #64896
12125
12126 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
12127
12128         * expression.cs: Pointer arith always needs to do a conv.i
12129         if the operand is a long. fix 65320
12130
12131 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
12132
12133         Fixed cs0619-37.cs, cs0619-38.cs
12134
12135         * enum.cs (GetObsoleteAttribute): Removed.
12136
12137         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
12138         on Enum member is double staged. The first is tested member
12139         and then enum.
12140
12141 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
12142
12143         Fixed #56986, #63631, #65231
12144
12145         * class.cs: (TypeContainer.AddToMemberContainer): New method,
12146         adds member to name container.
12147         (TypeContainer.AddToTypeContainer): New method, adds type to
12148         name container.
12149         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
12150         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
12151         AddOperator): Simplified by reusing AddToMemberContainer.
12152         (TypeContainer.UserDefinedStaticConstructor): Changed to property
12153         instead of field.
12154         (Method.CheckForDuplications): Fixed implementation to test all
12155         possibilities.
12156         (MemberBase): Detection whether member is explicit interface
12157         implementation is now in constructor.
12158         (MemberBase.UpdateMemberName): Handles IndexerName.
12159         (Accessor): Changed to keep also location information.
12160         (AbstractPropertyEventMethod): Is derived from MemberCore.
12161         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
12162         will be emited or not.
12163         (PropertyBase.AreAccessorsDuplicateImplementation):
12164         Tests whether accessors are not in collision with some method.
12165         (Operator): Is derived from MethodCore to simplify common
12166         operations.
12167
12168         * decl.cs (Flags.TestMethodDuplication): Test for duplication
12169         must be performed.
12170         (DeclSpace.AddToContainer): Adds the member to defined_names
12171         table. It tests for duplications and enclosing name conflicts.
12172
12173         * enum.cs (EnumMember): Clean up to reuse the base structures
12174
12175 2004-09-03  Martin Baulig  <martin@ximian.com>
12176
12177         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
12178         into TypeContainer, to make partial classes work again.
12179
12180 2004-09-03  Martin Baulig  <martin@ximian.com>
12181
12182         * rootcontext.cs (RootContext.V2): Removed.
12183
12184 2004-03-23  Martin Baulig  <martin@ximian.com>
12185
12186         * expression.cs (Invocation.OverloadResolve): Added `bool
12187         may_fail' argument and use it instead of the Location.IsNull() hack.
12188
12189 2004-09-03  Martin Baulig  <martin@ximian.com>
12190
12191         Merged latest changes into gmcs.  Please keep this comment in
12192         here, it makes it easier for me to see what changed in MCS since
12193         the last time I merged.
12194
12195 2004-09-03  Raja R Harinath  <rharinath@novell.com>
12196
12197         Fix #61128.
12198         * expression.cs (BetterConversion): Don't allow either conversion 
12199         to be null.  Remove redundant implicit conversion test when 'q ==
12200         null' -- when this function is invoked, we already know that the
12201         implicit conversion exists.
12202         (BetterFunction): Assume that 'best' is non-null.  Remove
12203         redundant reimplementation of IsApplicable when 'best' is null.
12204         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
12205         number of arguments.
12206         (IsAncestralType): Extract from OverloadResolve.
12207         (OverloadResolve): Make robust to the MethodGroupExpr being
12208         unsorted.  Implement all the logic of Section 14.5.5.1, and
12209         support overloading of methods from multiple applicable types.
12210         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
12211
12212         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
12213         (RealError, Warning): Append type of report to related symbol.
12214
12215 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
12216
12217         * enum.cs: Fixed CLS-Compliance checks for enum members.
12218         Error tests cs3008-8.cs, cs3014-8.cs
12219
12220 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12221
12222         Fixed bug #62342, #63102
12223         * class.cs: ImplementIndexer uses member.IsExplicitImpl
12224         like ImplementMethod.
12225
12226 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12227
12228         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12229         Fixed bug #65170.
12230
12231 2004-09-02  Martin Baulig  <martin@ximian.com>
12232
12233         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
12234         TypeManager.GetArgumentTypes() rather than calling GetParameters()
12235         on the MethodBase.
12236
12237 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
12238
12239         C# 2.0 Static classes implemented
12240
12241         * class.cs (TypeContainer): instance_constructors,
12242         initialized_fields, initialized_static_fields,
12243         default_constructor, base_inteface_types are protected to be
12244         accessible from StaticClass.
12245         (TypeContainer.DefineDefaultConstructor): New virtual method
12246         for custom default constructor generating
12247         (StaticClass): New class to handle "Static classes" feature.
12248
12249         * cs-parser.jay: Handle static keyword on class like instance
12250         of StaticClass.
12251
12252         * driver.cs: Added "/langversion" command line switch with two
12253         options (iso-1, default).
12254
12255 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
12256
12257         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
12258
12259 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
12260
12261         * delegate.cs: Style.
12262
12263 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12264
12265         * delegate.cs: Add seperate instance expr field for miguel.
12266
12267 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12268
12269         * PointerArithmetic (Resolve): make sure we are not doing
12270         pointer arith on void*. Also, make sure we are resolved
12271         by not setting eclass until resolve.
12272
12273         All callers: Make sure that PointerArithmetic gets resolved.
12274
12275 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12276
12277         * ArrayCreation (LookupType): If the type does not resolve 
12278         to an array, give an error.
12279
12280 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
12281
12282         * statement.cs (Try.Resolve): Fixed bug #64222
12283
12284 2004-08-27  Martin Baulig  <martin@ximian.com>
12285
12286         * class.cs
12287         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
12288         crash here.     
12289
12290 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12291
12292         * ecore.cs (Constantify): Get underlying type via
12293         System.Enum.GetUnderlyingType to avoid StackOverflow on the
12294         Windows in special cases.
12295
12296 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12297
12298         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
12299         for obtaining also private methods.
12300         (GetRemoveMethod): Used GetRemoveMethod (true)
12301         for obtaining also private methods.
12302
12303 2004-08-24  Martin Baulig  <martin@ximian.com>
12304
12305         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
12306         MethodAttributes.HideBySig for operators.
12307
12308 2004-08-23  Martin Baulig  <martin@ximian.com>
12309
12310         Back to the old error reporting system :-)
12311
12312         * report.cs (Message): Removed.
12313         (Report.MessageData, ErrorData, WarningData): Removed.
12314         (Report.Error, Warning): Back to the old system.
12315
12316 2004-08-23  Martin Baulig  <martin@ximian.com>
12317
12318         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
12319
12320         * class.cs (TypeContainer.ParentContainer): New public virtual
12321         method; replaces the explicit interface implementation.
12322         (ClassPart.ParentContainer): Override.
12323
12324 2004-08-23  Martin Baulig  <martin@ximian.com>
12325
12326         * statement.cs (Switch): Added support for constant switches; see
12327         #59428 or test-285.cs.
12328
12329 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12330
12331         Fixed bug #62740.
12332         * statement.cs (GetEnumeratorFilter): Removed useless
12333         logic because C# specs is strict. GetEnumerator must be
12334         public.
12335
12336 2004-08-22  Martin Baulig  <martin@ximian.com>
12337
12338         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12339         a switch and may break, reset the barrier.  Fixes #59867.
12340
12341 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12342
12343         CLS-Compliance speed up (~5% for corlib)
12344
12345         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
12346         New method. Tests container for CLS-Compliant names
12347
12348         * class.cs (TypeContainer.VerifyClsName): New method.
12349         Checks whether container name is CLS Compliant.
12350         (Constructor): Implements IMethodData.
12351
12352         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
12353         low-case table for CLS Compliance test.
12354         (MemberCache.VerifyClsParameterConflict): New method.
12355         Checks method parameters for CS3006 error.
12356
12357         * enum.cs (EnumMember): Is derived from MemberCore.
12358         (Enum.VerifyClsName): Optimized for better performance.
12359
12360 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12361
12362         * report.cs: Renamed Error_T to Error and changed all
12363         references.
12364
12365 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12366
12367         * class.cs (TypeContainer.IndexerArrayList): New inner class
12368         container for indexers.
12369         (TypeContainer.DefaultIndexerName): New constant for default
12370         indexer name. Replaced all "Item" with this constant.
12371         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
12372
12373         * typemanager.cs (TypeManager.default_member_ctor): Cache here
12374         DefaultMemberAttribute constructor.
12375
12376 2004-08-05  Martin Baulig  <martin@ximian.com>
12377
12378         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12379         Fix bug #59429.
12380
12381 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
12382
12383         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
12384         multi platforms problem.
12385
12386         * compiler.csproj: Included shared files.
12387
12388 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12389
12390         Fix bug 60333, 55971 in the more general way
12391         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12392         Added arg_type argument for constant conversion.
12393         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
12394
12395 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12396
12397         Fix bug #59760
12398         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
12399         OperatorArrayList, MethodCoreArrayList for typecontainer
12400         containers. Changed class member types to these new types.
12401         (MethodArrayList.DefineMembers): Added test for CS0659.
12402
12403 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
12404
12405         * cfold.cs: Synchronize the folding with the code in expression.cs
12406         Binary.DoNumericPromotions for uint operands.
12407
12408         * attribute.cs: Revert patch from Raja, it introduced a regression
12409         while building Blam-1.2.1 (hard to isolate a test case).
12410
12411 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12412
12413         Fix for #55382
12414         * class.cs:
12415         (TypeContainer.Define): Renamed to DefineContainerMembers because of
12416         name collision.
12417         (MethodCore.parent_method): New member. The method we're overriding
12418         if this is an override method.
12419         (MethodCore.CheckBase): Moved from Method class and made common.
12420         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
12421         private.
12422         (MethodCore.CheckForDuplications): New abstract method. For custom
12423         member duplication search in a container
12424         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
12425         method and its return type.
12426         (Event.conflict_symbol): New member. Symbol with same name in the
12427         parent class.
12428
12429         * decl.cs:
12430         (MemberCache.FindMemberWithSameName): New method. The method
12431         is looking for conflict with inherited symbols.
12432
12433 2004-08-04  Martin Baulig  <martin@ximian.com>
12434
12435         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
12436
12437         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
12438
12439 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12440
12441         * report.cs (Message): New enum for better error, warning reference in
12442         the code.
12443         (MessageData): New inner abstract class. It generally handles printing of
12444         error and warning messages.
12445         Removed unused Error, Warning, Message methods.
12446
12447 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12448
12449         Fix for cs0592-8.cs test
12450         * attribute.cs
12451         (Attributable.ValidAttributeTargets): Made public.
12452         (Attribute.ExplicitTarget): New member for explicit target value.
12453         (Attribute.CheckTargets): Now we translate explicit attribute
12454         target to Target here.
12455
12456 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
12457
12458         * ecore.cs (MethodGroupExpr): new IsBase property.
12459
12460         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
12461
12462         * delegate.cs (DelegateCreation): store a MethodGroupExpr
12463         rather than an instance expr.
12464
12465         (DelegateCreation.Emit): Use the method group rather than
12466         the instance expression. Also, if you have base.Foo as the
12467         method for a delegate, make sure to emit ldftn, not ldftnvirt.
12468
12469         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
12470
12471         (NewDelegate.DoResolve): Only check for the existance of Invoke
12472         if the method is going to be needed. Use MethodGroupExpr.
12473
12474         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
12475
12476         * expression.cs: For pointer arith., make sure to use
12477         the size of the type, not the size of the pointer to
12478         the type.
12479
12480 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12481
12482         Fix for #60722
12483         * class.cs (Class): Added error CS0502 test.
12484
12485 2004-08-03  John Luke  <jluke@cfl.rr.com>
12486             Raja R Harinath  <rharinath@novell.com>
12487
12488         Fix for #60997.
12489         * attribute.cs (Attribute.complained_before): New flag.
12490         (Attribute.ResolveType, Attribute.Resolve),
12491         (Attribute.DefinePInvokeMethod): Set it.
12492         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
12493         
12494 2004-08-03  Martin Baulig  <martin@ximian.com>
12495
12496         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
12497         use a user-defined operator; we still need to do numeric
12498         promotions in case one argument is a builtin type and the other
12499         one has an implicit conversion to that type.  Fixes #62322.
12500
12501 2004-08-02  Martin Baulig  <martin@ximian.com>
12502
12503         * statement.cs (LocalInfo.Flags): Added `IsThis'.
12504         (LocalInfo.IsThis): New public property.
12505         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
12506
12507 2004-08-01  Martin Baulig  <martin@ximian.com>
12508
12509         * class.cs (TypeContainer.GetClassBases): Don't set the default
12510         here since we may get called from GetPartialBases().
12511         (TypeContainer.DefineType): If GetClassBases() didn't return a
12512         parent, use the default one.
12513
12514 2004-07-30  Duncan Mak  <duncan@ximian.com>
12515
12516         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
12517
12518 2004-07-30  Martin Baulig  <martin@ximian.com>
12519
12520         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
12521
12522         * class.cs (SourceMethod): New public class, derive from the
12523         symbol writer's ISourceMethod.
12524         (Method): Use the new symbol writer API.
12525
12526         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
12527         as argument and use the new symbol writer.
12528
12529         * location.cs
12530         (SourceFile): Implement the symbol writer's ISourceFile.
12531         (Location.SymbolDocument): Removed.
12532         (Location.SourceFile): New public property.
12533
12534         * symbolwriter.cs: Use the new symbol writer API.
12535
12536 2004-07-30  Raja R Harinath  <rharinath@novell.com>
12537
12538         * Makefile (install-local): Remove.  Functionality moved to
12539         executable.make.
12540
12541 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
12542
12543         * Makefile: Install mcs.exe.config file together with mcs.exe.
12544         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
12545         correct runtime version.
12546         
12547 2004-07-25  Martin Baulig  <martin@ximian.com>
12548
12549         * class.cs
12550         (TypeContainer.RegisterOrder): Removed, this was unused.
12551         (TypeContainer, interface_order): Removed.
12552         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
12553         TypeContainer as argument since we can also be called with a
12554         `PartialContainer' for a partial class/struct/interface.
12555         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
12556         of checking whether we're an `Interface' - we could be a
12557         `PartialContainer'.
12558         (PartialContainer.Register): Override; call
12559         AddClass()/AddStruct()/AddInterface() on our parent.
12560
12561         * cs-parser.jay (interface_member_declaration): Add things to the
12562         `current_container', not the `current_class'.
12563
12564         * rootcontext.cs (RegisterOrder): The overloaded version which
12565         takes an `Interface' was unused, removed.
12566
12567         * typemanager.cs (TypeManager.LookupInterface): Return a
12568         `TypeContainer', not an `Interface'.
12569         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
12570         contain a `PartialContainer' for an interface, so check it's
12571         `Kind' to figure out what it is.
12572
12573 2004-07-25  Martin Baulig  <martin@ximian.com>
12574
12575         * class.cs (Class.DefaultTypeAttributes): New public constant.
12576         (Struct.DefaultTypeAttributes): Likewise.
12577         (Interface.DefaultTypeAttributes): Likewise.
12578         (PartialContainer.TypeAttr): Override this and add the
12579         DefaultTypeAttributes.
12580
12581 2004-07-25  Martin Baulig  <martin@ximian.com>
12582
12583         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
12584         we can just use the `Parent' field instead.
12585
12586 2004-07-25  Martin Baulig  <martin@ximian.com>
12587
12588         * class.cs (TypeContainer.Emit): Renamed to EmitType().
12589
12590 2004-07-25  Martin Baulig  <martin@ximian.com>
12591
12592         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
12593         our parts before defining any methods.
12594         (TypeContainer.VerifyImplements): Make this virtual.
12595         (ClassPart.VerifyImplements): Override and call VerifyImplements()
12596         on our PartialContainer.
12597
12598 2004-07-25  Martin Baulig  <martin@ximian.com>
12599
12600         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
12601
12602         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
12603         argument, we can just use the `Parent' field instead.
12604
12605         * class.cs
12606         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
12607         (MemberBase.DoDefine): Likewise.
12608
12609 2004-07-24  Martin Baulig  <martin@ximian.com>
12610
12611         * decl.cs (MemberCore.Parent): New public field.
12612         (DeclSpace.Parent): Moved to MemberCore.
12613
12614         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
12615         (MemberBase.ctor): Added TypeContainer argument, pass it to our
12616         parent's .ctor.
12617         (FieldBase, Field, Operator): Likewise.
12618         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
12619         (EventField, Event): Likewise.
12620
12621 2004-07-23  Martin Baulig  <martin@ximian.com>
12622
12623         * class.cs (PartialContainer): New public class.
12624         (ClassPart): New public class.
12625         (TypeContainer): Added support for partial classes.
12626         (TypeContainer.GetClassBases): Splitted some of the functionality
12627         out into GetNormalBases() and GetPartialBases().
12628
12629         * cs-tokenizer.cs (Token.PARTIAL): New token.
12630         (Tokenizer.consume_identifier): Added some hacks to recognize
12631         `partial', but only if it's immediately followed by `class',
12632         `struct' or `interface'.
12633
12634         * cs-parser.jay: Added support for partial clases.
12635
12636 2004-07-23  Martin Baulig  <martin@ximian.com>
12637
12638         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
12639         a `DeclSpace' and also made it readonly.
12640         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
12641         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
12642         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
12643
12644         * cs-parser.jay: Pass the `current_class', not the
12645         `current_container' (at the moment, this is still the same thing)
12646         to a new Method, Property, Event, Indexer or Constructor.
12647
12648 2004-07-23  Martin Baulig  <martin@ximian.com>
12649
12650         * cs-parser.jay (CSharpParser): Added a new `current_class' field
12651         and removed the `current_interface' one.
12652         (struct_declaration, class_declaration, interface_declaration):
12653         Set `current_class' to the newly created class/struct/interface;
12654         set their `Bases' and call Register() before parsing their body.
12655
12656 2004-07-23  Martin Baulig  <martin@ximian.com>
12657
12658         * class.cs (Kind): New public enum.
12659         (TypeContainer): Made this class abstract.
12660         (TypeContainer.Kind): New public readonly field.
12661         (TypeContainer.CheckDef): New public method; moved here from
12662         cs-parser.jay.
12663         (TypeContainer.Register): New public abstract method.
12664         (TypeContainer.GetPendingImplementations): New public abstract
12665         method.
12666         (TypeContainer.GetClassBases): Removed the `is_class' and
12667         `is_iface' parameters.
12668         (TypeContainer.DefineNestedTypes): Formerly known as
12669         DoDefineType().
12670         (ClassOrStruct): Made this class abstract.
12671
12672         * tree.cs (RootTypes): New public type. 
12673
12674 2004-07-20  Martin Baulig  <martin@ximian.com>
12675
12676         * tree.cs (Tree.RecordNamespace): Removed.
12677         (Tree.Namespaces): Removed.
12678
12679         * rootcontext.cs (RootContext.IsNamespace): Removed.
12680
12681         * cs-parser.jay (namespace_declaration): Just create a new
12682         NamespaceEntry here.
12683
12684 2004-07-20  Martin Baulig  <martin@ximian.com>
12685
12686         * statement.cs (ExceptionStatement): New abstract class.  This is
12687         now used as a base class for everyone who's using `finally'.
12688         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
12689         our local variables before using them.
12690
12691         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
12692         virtual method.  This is used by Yield.Resolve() to "steal" an
12693         outer block's `finally' clauses.
12694         (FlowBranchingException): The .ctor now takes an ExceptionStatement
12695         argument.
12696
12697         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
12698         version which takes an ExceptionStatement.  This version must be
12699         used to create exception branchings.
12700
12701         * iterator.cs
12702         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
12703         (Iterator.EmitMoveNext): Added exception support; protect the
12704         block with a `fault' clause, properly handle 'finally' clauses.
12705         (Iterator.EmitDispose): Run all the `finally' clauses here.
12706
12707 2004-07-20  Martin Baulig  <martin@ximian.com>
12708
12709         * iterator.cs: This is the first of a set of changes in the
12710         iterator code.  Match the spec more closely: if we're an
12711         IEnumerable, then GetEnumerator() must be called.  The first time
12712         GetEnumerator() is called, it returns the current instance; all
12713         subsequent invocations (if any) must create a copy.
12714
12715 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
12716
12717         * expression.cs: Resolve the constant expression before returning
12718         it. 
12719
12720 2004-07-19  Martin Baulig  <martin@ximian.com>
12721
12722         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
12723         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
12724         the return type of the new EmitContext.
12725
12726 2004-07-18  Martin Baulig  <martin@ximian.com>
12727
12728         * class.cs (Property.Define): Fix iterators.
12729
12730         * iterators.cs (Iterator.Define): Moved the
12731         `container.AddInterator (this)' call here from the .ctor; only do
12732         it if we resolved successfully.
12733
12734 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
12735
12736         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
12737         `true' for preprocessing directives that we parse.  The return
12738         value indicates whether we should return to regular tokenizing or
12739         not, not whether it was parsed successfully.
12740
12741         In the past if we were in: #if false ... #line #endif, we would
12742         resume parsing after `#line'.  See bug 61604.
12743
12744         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
12745         building: IsEnumType should return true only for enums, not for
12746         enums or System.Enum itself.  This fixes #61593.
12747
12748         Likely what happened is that corlib was wrong: mcs depended on
12749         this bug in some places.  The bug got fixed, we had to add the
12750         hack, which caused bug 61593.
12751
12752         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
12753         that was a workaround for the older conditions.
12754
12755 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
12756
12757         * assign.cs: IAssignMethod has a new interface, as documented
12758         inline. All assignment code now uses this new api.
12759
12760         * ecore.cs, expression.cs: All classes which implement
12761         IAssignMethod now use the new interface.
12762
12763         * expression.cs (Invocation): add a hack to EmitCall so that
12764         IndexerAccess can be the target of a compound assignment without
12765         evaluating its arguments twice.
12766
12767         * statement.cs: Handle changes in Invocation api.
12768
12769 2004-07-16  Martin Baulig  <martin@ximian.com>
12770
12771         * iterators.cs: Rewrote this.  We're now using one single Proxy
12772         class for both the IEnumerable and the IEnumerator interface and
12773         `Iterator' derives from Class so we can use the high-level API.
12774
12775         * class.cs (TypeContainer.AddIterator): New method.
12776         (TypeContainer.DoDefineType): New protected virtual method, which
12777         is called from DefineType().
12778         (TypeContainer.DoDefineMembers): Call DefineType() and
12779         DefineMembers() on all our iterators.
12780         (TypeContainer.Emit): Call Emit() on all our iterators.
12781         (TypeContainer.CloseType): Call CloseType() on all our iterators.
12782
12783         * codegen.cs (EmitContext.CurrentIterator): New public field.
12784
12785 2004-07-15  Martin Baulig  <martin@ximian.com>
12786
12787         * typemanager.cs
12788         (TypeManager.not_supported_exception_type): New type.   
12789
12790 2004-07-14  Martin Baulig  <martin@ximian.com>
12791
12792         * iterators.cs: Use real error numbers.
12793
12794 2004-07-14  Martin Baulig  <martin@ximian.com>
12795
12796         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
12797         requires this to be a System.Collection.IEnumerable and not a
12798         class implementing that interface.
12799         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
12800
12801 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
12802
12803         * class.cs: Fixed previous fix, it broke some error tests.
12804
12805 2004-07-12  Martin Baulig  <martin@ximian.com>
12806
12807         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
12808         Fixes #61293.
12809
12810 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
12811
12812         * assign.cs (LocalTemporary): Add new argument: is_address,If
12813         `is_address' is true, then the value that we store is the address
12814         to the real value, and not the value itself.
12815         
12816         * ecore.cs (PropertyExpr): use the new local temporary
12817         stuff to allow us to handle X.Y += z (where X is a struct)
12818
12819 2004-07-08  Martin Baulig  <martin@ximian.com>
12820
12821         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
12822         not always return, just like we're doing in Using.Resolve().
12823
12824 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
12825
12826         * cs-parser.jay (fixed_statement): flag this as Pinned.
12827
12828 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
12829
12830         * typemanager.cs (TypeManager): Removed MakePinned method, this
12831         mechanism is replaced with the .NET 2.x compatible mechanism of
12832         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
12833
12834         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
12835         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
12836         `IsFixed' property which has a different meaning.
12837
12838 2004-07-02  Raja R Harinath  <rharinath@novell.com>
12839
12840         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
12841         visible from inside a nested class, not just the names of the
12842         immediately enclosing class.
12843         Fix for bug #60730.
12844
12845 2004-06-24  Raja R Harinath  <rharinath@novell.com>
12846
12847         * expression.cs (BetterConversion): Remove buggy special-case
12848         handling of "implicit constant expression conversions".  At this
12849         point, we already know that the conversion is possible -- we're
12850         only checking to see which is better.
12851
12852 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12853
12854         * cs-parser.jay: Added error CS0210 test.
12855
12856 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12857
12858         * cs-parser.jay: Added error CS0134 test.
12859
12860 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12861
12862         Fix bug #52507
12863         * cs-parser.jay: Added error CS0145 test.
12864
12865 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12866
12867         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
12868
12869 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
12870         
12871         * expression.cs (StackAlloc.Resolve): The argument may not
12872         be a constant; deal with this case.
12873         
12874 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
12875
12876         * attribute.cs (IndexerName_GetIndexerName): Renamed to
12877         GetIndexerAttributeValue.
12878         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
12879
12880         * class.cs (Indexer.Define): Added error tests for CS0415,
12881         CS0609.
12882
12883 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
12884
12885         * attribute.cs (Attribute.Resolve): Keep field code in sync with
12886         property code.
12887
12888 2004-06-23  Martin Baulig  <martin@ximian.com>
12889
12890         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
12891         neither return nor throw, reset the barrier as well.  Fixes #60457.
12892
12893 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
12894
12895         * class.cs : EventAttributes is now set to None by default.
12896           This fixes bug #60459.
12897
12898 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12899
12900         Fix bug #60219
12901         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12902         Don't throw exception but return null (it's sufficient now).
12903
12904 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12905
12906         * typemanager.cs (GetArgumentTypes): Faster implementation.
12907
12908 2004-06-18  Martin Baulig  <martin@ximian.com>
12909
12910         * attribute.cs (Attribute.Resolve): Check whether we're an
12911         EmptyCast which a Constant child.  Fixes #60333.
12912
12913 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
12914
12915         * statement.cs (EmitCollectionForeach): Account for the fact that
12916         not all valuetypes are in areas which we can take the address of.
12917         For these variables, we store to a temporary variable. Also, make
12918         sure that we dont emit a `callvirt' on a valuetype method.
12919
12920 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12921
12922         * expression.cs (StackAlloc.DoReSolve): Added test for
12923         negative parameter (CS0247).
12924
12925 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12926
12927         Fix bug #59792
12928         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
12929
12930 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12931
12932         Fix bug #59781
12933         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
12934         ulong.
12935
12936 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12937
12938         Fix bug #58254 & cs1555.cs, cs1556.cs
12939         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
12940
12941 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12942
12943         * cs-parser.jay: Added error CS1669 test for indexers.
12944
12945 2004-06-11  Martin Baulig  <martin@ximian.com>
12946
12947         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
12948         call this twice: for params and varargs methods.
12949
12950 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12951
12952         * class.cs:
12953         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
12954
12955 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12956
12957         * attribute.cs (Attribute.GetValidTargets): Made public.
12958
12959         * class.cs: 
12960         (AbstractPropertyEventMethod): New class for better code sharing.
12961         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
12962         CS1667 report.
12963         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
12964
12965 2004-06-11  Raja R Harinath  <rharinath@novell.com>
12966
12967         Fix bug #59477.
12968         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
12969         that the call to Resolve is part of a MemberAccess.
12970         (Expression.Resolve): Use it for SimpleName resolution.
12971         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
12972         Add 'intermediate' boolean argument.
12973         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
12974         error message when the SimpleName can be resolved ambiguously
12975         between an expression and a type.
12976         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
12977         public.
12978         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
12979         call on the left-side.
12980
12981 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12982
12983         * class.cs:
12984         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
12985
12986 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12987
12988         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
12989
12990 2004-06-11  Martin Baulig  <martin@ximian.com>
12991
12992         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
12993         varargs methods if applicable.
12994
12995 2004-06-11  Martin Baulig  <martin@ximian.com>
12996
12997         * expression.cs (Invocation.EmitCall): Don't use
12998         `method.CallingConvention == CallingConventions.VarArgs' since the
12999         method could also have `CallingConventions.HasThis'.
13000
13001 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13002
13003         * class.cs (Event.GetSignatureForError): Implemented.
13004         Fixed crash in error test cs3010.cs
13005
13006 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
13007
13008         * cs-tokenizer.cs: Change the way we track __arglist to be
13009         consistent with the other keywords.
13010
13011 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
13012
13013         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
13014         tomorrow.
13015
13016 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
13017
13018         * codegen.cs: Check that all referenced assemblies have a strongname
13019         before strongnaming the compiled assembly. If not report error CS1577.
13020         Fix bug #56563. Patch by Jackson Harper.
13021         * typemanager.cs: Added a method to return all referenced assemblies.
13022         Fix bug #56563. Patch by Jackson Harper.
13023
13024 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13025
13026         * class.cs:
13027         (Method.ApplyAttributeBuilder): Moved and added conditional
13028         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
13029
13030         * delegate.cs:
13031         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
13032
13033 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13034
13035         Fixed #59640
13036         * class.cs: (EventField.attribute_targets): Changed default target.
13037
13038 2004-06-08  Martin Baulig  <martin@ximian.com>
13039
13040         * expression.cs (Invocation.EmitCall): Enable varargs methods.
13041
13042 2004-06-08  Martin Baulig  <martin@ximian.com>
13043
13044         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
13045
13046 2004-06-07  Martin Baulig  <martin@ximian.com>
13047
13048         Added support for varargs methods.
13049
13050         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
13051         keyword.
13052
13053         * cs-parser.jay: Added support for `__arglist'.
13054
13055         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
13056
13057         * expression.cs (Argument.AType): Added `ArgList'.
13058         (Invocation): Added support for varargs methods.
13059         (ArglistAccess): New public class.
13060         (Arglist): New public class.
13061
13062         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
13063
13064         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
13065         a method's top-level block if the method has varargs.
13066
13067         * support.cs (ReflectionParameters, InternalParameters): Added
13068         support for varargs methods.    
13069
13070 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
13071
13072         * class.cs: Provide location in indexer error report.
13073
13074         * driver.cs: Use standard names.
13075
13076         * namespace.cs: Catch the use of using after a namespace has been
13077         declared also on using aliases.
13078
13079 2004-06-03  Raja R Harinath  <rharinath@novell.com>
13080
13081         Bug #50820.
13082         * typemanager.cs (closure_private_ok, closure_invocation_type)
13083         (closure_qualifier_type, closure_invocation_assembly)
13084         (FilterWithClosure): Move to ...
13085         (Closure): New internal nested class.
13086         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
13087         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
13088         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
13089         (MemberLookup, MemberLookupFailed): Use it.
13090         * expression.cs (New.DoResolve): Treat the lookup for the
13091         constructor as being qualified by the 'new'ed type.
13092         (Indexers.GetIndexersForTypeOrInterface): Update.
13093
13094 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
13095
13096         * attribute.cs
13097         (GetConditionalAttributeValue): New method. Returns
13098         condition of ConditionalAttribute.
13099         (SearchMulti): New method.  Returns all attributes of type 't'.
13100         Use it when attribute is AllowMultiple = true.
13101         (IsConditionalMethodExcluded): New method.
13102
13103         * class.cs
13104         (Method.IsExcluded): Implemented. Returns true if method has conditional
13105         attribute and the conditions is not defined (method is excluded).
13106         (IMethodData): Extended interface for ConditionalAttribute support.
13107         (PropertyMethod.IsExcluded): Implemented.
13108
13109         * decl.cs
13110         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
13111
13112         * expression.cs
13113         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
13114         on the method.
13115
13116 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13117
13118         * expression.cs (ArrayCreationExpression): Make this just an
13119         `expression'. It can't be a statement, so the code here was
13120         dead.
13121
13122 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
13123
13124         Fixed #59072
13125         * typemanager.cs (GetFullNameSignature): New method for
13126         MethodBase types.
13127
13128 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
13129
13130         Fixed #56452
13131         * class.cs (MemberBase.GetSignatureForError): New virtual method.
13132         Use this method when MethodBuilder is null.
13133         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
13134         Added test for error CS0626 (MONO reports error for this situation).
13135         (IMethodData.GetSignatureForError): Extended interface.
13136
13137 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
13138
13139         * attribute.cs
13140         (AttributeTester.GetObsoleteAttribute): Returns instance of
13141         ObsoleteAttribute when type is obsolete.
13142
13143         * class.cs
13144         (TypeContainer.VerifyObsoleteAttribute): Override.
13145         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
13146         (MethodCode.VerifyObsoleteAttribute): Override.
13147         (MemberBase.VerifyObsoleteAttribute): Override.
13148
13149         * decl.cs
13150         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
13151         and report proper error.
13152
13153         *delegate.cs
13154         Delegate.VerifyObsoleteAttribute): Override.
13155
13156         * ecore.cs
13157         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
13158         and report proper error.
13159         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
13160
13161         * enum.cs
13162         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
13163         and enum member.
13164
13165         * expression.cs
13166         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
13167         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
13168         Added test for ObsoleteAttribute.
13169
13170         * statement.cs
13171         (Catch): Derived from Statement.
13172
13173 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
13174  
13175         Fixed bug #59071 & cs0160.cs
13176  
13177         * statement.cs (Try.Resolve): Check here whether order of catch
13178         clauses matches their dependencies.
13179
13180 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
13181
13182         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
13183         caused a regression: #59343.  Referencing nested classes from an
13184         assembly stopped working.
13185
13186 2004-05-31  Martin Baulig  <martin@ximian.com>
13187
13188         MCS is now frozen for beta 2.
13189
13190 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13191
13192         * convert.cs: add a trivial cache for overload operator resolution.
13193
13194 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13195
13196         * decl.cs: If possible, use lookuptypedirect here. We can only do
13197         this if there is no `.' after the namespace. Avoids using
13198         LookupType, which does lots of slow processing.
13199         (FindNestedType) New method, does what it says :-).
13200         * namespace.cs: use LookupTypeDirect.
13201         * rootcontext.cs: use membercache, if possible.
13202         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
13203
13204 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13205
13206         * expression.cs:
13207         According to the spec, 
13208
13209         In a member access of the form E.I, if E is a single identifier,
13210         and if the meaning of E as a simple-name (§7.5.2) is a constant,
13211         field, property, localvariable, or parameter with the same type as
13212         the meaning of E as a type-name (§3.8), then both possible
13213         meanings of E are permitted.
13214
13215         We did not check that E as a simple-name had the same type as E as
13216         a type name.
13217
13218         This trivial check gives us 5-7% on bootstrap time.
13219
13220 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13221
13222         * expression.cs (Invocation.OverloadResolve): Avoid the
13223         use of hashtables and boxing here by allocating on demand.
13224
13225 2004-05-30  Martin Baulig  <martin@ximian.com>
13226
13227         * rootcontext.cs (RootContext.LookupType): Don't cache things if
13228         we're doing a silent lookup.  Don't try to lookup nested types in
13229         TypeManager.object_type (thanks to Ben Maurer).
13230
13231 2004-05-30  Martin Baulig  <martin@ximian.com>
13232
13233         Committing a patch from Ben Maurer.
13234
13235         * rootcontext.cs (RootContext.LookupType): Cache negative results.
13236
13237 2004-05-29  Martin Baulig  <martin@ximian.com>
13238
13239         * class.cs (IMethodData.ShouldIgnore): New method.
13240
13241         * typemanager.cs (TypeManager.MethodFlags): Don't take a
13242         `Location' argument, we don't need it anywhere.  Use
13243         `IMethodData.ShouldIgnore ()' instead of
13244         `MethodData.GetMethodFlags ()'.
13245         (TypeManager.AddMethod): Removed.
13246         (TypeManager.AddMethod2): Renamed to AddMethod.
13247
13248 2004-05-29  Martin Baulig  <martin@ximian.com>
13249
13250         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
13251
13252         * convert.cs (Convert.ImplicitReferenceConversion): If we're
13253         converting from a class type S to an interface type and we already
13254         have an object on the stack, don't box it again.  Fixes #52578.
13255
13256 2004-05-29  Martin Baulig  <martin@ximian.com>
13257
13258         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
13259         Added support for `params' parameters.  Fixes #59267.
13260
13261 2004-05-29  Martin Baulig  <martin@ximian.com>
13262
13263         * literal.cs (NullPointer): Provide a private .ctor which sets
13264         `type' to TypeManager.object_type.  Fixes #59048.
13265
13266 2004-05-29  Martin Baulig  <martin@ximian.com>
13267
13268         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
13269         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
13270
13271         * ecore.cs (EventExpr.instance_expr): Make the field private.
13272
13273 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
13274
13275         Fixed bug #50080 & cs0214-2.cs
13276         * expression.cs (Cast.DoResolve): Check unsafe context here.
13277         
13278         * statement.cs (Resolve.DoResolve): Likewise.
13279
13280 2004-05-26  Martin Baulig  <martin@ximian.com>
13281
13282         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
13283
13284         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
13285         (RootContext.LookupType): Pass down the `silent' flag.
13286
13287 2004-05-25  Martin Baulig  <martin@ximian.com>
13288
13289         * expression.cs
13290         (MethodGroupExpr.IdenticalTypeName): New public property.
13291         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
13292         expression actually refers to a type.
13293
13294 2004-05-25  Martin Baulig  <martin@ximian.com>
13295
13296         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
13297         for #56176 and made it actually work.
13298
13299 2004-05-25  Martin Baulig  <martin@ximian.com>
13300
13301         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
13302         (FieldExpr, PropertyExpr): Override and implement
13303         CacheTemporaries.  Fixes #52279.
13304
13305 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
13306
13307         * location.cs: In the new compiler listing a file twice is a
13308         warning, not an error.
13309
13310 2004-05-24  Martin Baulig  <martin@ximian.com>
13311
13312         * enum.cs (Enum.DefineType): For the `BaseType' to be a
13313         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
13314
13315 2004-05-24  Martin Baulig  <martin@ximian.com>
13316
13317         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
13318         walking the `using' list.  Fixes #53921.
13319
13320 2004-05-24  Martin Baulig  <martin@ximian.com>
13321
13322         * const.cs (Const.LookupConstantValue): Added support for
13323         EmptyCast's; fixes #55251.
13324
13325 2004-05-24  Martin Baulig  <martin@ximian.com>
13326
13327         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
13328         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
13329         which does the CS0135 check.  The reason is that we first need to
13330         check whether the variable actually exists.
13331
13332 2004-05-24  Martin Baulig  <martin@ximian.com>
13333
13334         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
13335         than RootContext.LookupType() to find the explicit interface
13336         type.  Fixes #58584.
13337
13338 2004-05-24  Raja R Harinath  <rharinath@novell.com>
13339
13340         * Makefile: Simplify.  Use executable.make.
13341         * mcs.exe.sources: New file.  List of sources of mcs.exe.
13342
13343 2004-05-24  Anders Carlsson  <andersca@gnome.org>
13344
13345         * decl.cs:
13346         * enum.cs:
13347         Use the invariant culture when doing String.Compare for CLS case
13348         sensitivity.
13349         
13350 2004-05-23  Martin Baulig  <martin@ximian.com>
13351
13352         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
13353         don't have any dots.  Fixes #52622, added cs0246-8.cs.
13354
13355         * namespace.cs (NamespaceEntry.Lookup): Likewise.
13356         
13357 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13358
13359         * class.cs (MemberBase.Define): Reuse MemberType member for 
13360         resolved type. Other methods can use it too.
13361
13362 2004-05-23  Martin Baulig  <martin@ximian.com>
13363
13364         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
13365         the variable also exists in the current block (otherwise, we need
13366         to report a CS0103).  Fixes #58670.
13367
13368 2004-05-23  Martin Baulig  <martin@ximian.com>
13369
13370         * flowanalysis.cs (Reachability.Reachable): Compute this
13371         on-the-fly rather than storing it as a field.
13372
13373 2004-05-23  Martin Baulig  <martin@ximian.com>
13374
13375         * flowanalysis.cs (Reachability.And): Manually compute the
13376         resulting `barrier' from the reachability.      
13377        
13378 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13379
13380         Fix bug #57835
13381         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
13382         instance of ObsoleteAttribute when symbol is obsolete.
13383
13384         * class.cs
13385         (IMethodData): Extended interface for ObsoleteAttribute support.
13386
13387 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13388
13389         * attribute.cs: Fix bug #55970
13390
13391 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13392
13393         Fix bug #52705
13394         * attribute.cs
13395         (GetObsoleteAttribute): New method. Creates the instance of
13396         ObsoleteAttribute.
13397         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
13398         ObsoleteAttribute when member is obsolete.
13399         (AttributeTester.Report_ObsoleteMessage): Common method for
13400         Obsolete error/warning reporting.
13401
13402         * class.cs
13403         (TypeContainer.base_classs_type): New member for storing parent type.
13404
13405         * decl.cs
13406         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
13407         for this MemberCore.
13408
13409 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13410
13411         * attribute.cs, const.cs: Fix bug #58590
13412
13413 2004-05-21  Martin Baulig  <martin@ximian.com>
13414
13415         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
13416         out parameters if the end of the method is unreachable.  Fixes
13417         #58098. 
13418
13419 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13420
13421         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
13422         Hari was right, why extra method.
13423
13424 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13425
13426         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
13427
13428 2004-05-20  Martin Baulig  <martin@ximian.com>
13429
13430         Merged this back from gmcs to keep the differences to a minumum.
13431
13432         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
13433         instead of a Declspace.
13434         (Attribute.ResolveType): Likewise.
13435         (Attributes.Search): Likewise.
13436         (Attributes.Contains): Likewise.
13437         (Attributes.GetClsCompliantAttribute): Likewise.
13438
13439         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
13440         argument.
13441         (MethodData.ApplyAttributes): Take an EmitContext instead of a
13442         DeclSpace.
13443
13444 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
13445
13446         Fix bug #58688 (MCS does not report error when the same attribute
13447         is assigned twice)
13448
13449         * attribute.cs (Attribute.Emit): Distinction between null and default.
13450
13451 2004-05-19  Raja R Harinath  <rharinath@novell.com>
13452
13453         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
13454         of a top-level attribute without an attribute target.
13455         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
13456         Make non-static.
13457         (Attribute.Conditional_GetConditionName), 
13458         (Attribute.Obsolete_GetObsoleteMessage): Update.
13459         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
13460         part of ScanForIndexerName.
13461         (Attribute.CanIgnoreInvalidAttribute): New function.
13462         (Attribute.ScanForIndexerName): Move to ...
13463         (Attributes.ScanForIndexerName): ... here.
13464         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
13465         (Attributes.Search): New internal variant that can choose not to
13466         complain if types aren't resolved.  The original signature now
13467         complains.
13468         (Attributes.GetClsCompliantAttribute): Use internal variant, with
13469         complaints suppressed.
13470         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
13471         only if it not useful.
13472         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
13473         top-level for attributes that are shared between the assembly
13474         and a top-level class.
13475         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
13476         * class.cs: Update to reflect changes.
13477         (DefineIndexers): Fuse loops.
13478         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
13479         a couple more variants of attribute names.
13480
13481 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
13482
13483         Fix bug #52585 (Implemented explicit attribute declaration)
13484
13485         * attribute.cs:
13486         (Attributable.ValidAttributeTargets): New abstract method. It gets
13487         list of valid attribute targets for explicit target declaration.
13488         (Attribute.Target): It holds target itself.
13489         (AttributeSection): Removed.
13490         (Attribute.CheckTargets): New method. It checks whether attribute
13491         target is valid for the current element.
13492
13493         * class.cs:
13494         (EventProperty): New class. For events that are declared like
13495         property (with add and remove accessors).
13496         (EventField): New class. For events that are declared like field.
13497         class.cs
13498
13499         * cs-parser.jay: Implemented explicit attribute target declaration.
13500
13501         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
13502         Override ValidAttributeTargets.
13503
13504         * parameter.cs:
13505         (ReturnParameter): Class for applying custom attributes on 
13506         the return type.
13507         (ParameterAtribute): New class. Class for applying custom
13508         attributes on the parameter type.
13509
13510 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
13511
13512         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
13513         definitions. 
13514
13515         (Method): Allow UNSAFE here.
13516
13517         * modifiers.cs: Support unsafe reporting.
13518
13519 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
13520
13521         * decl.cs: Fix bug #58478.
13522
13523 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13524
13525         * statement.cs: When checking for unreachable code on an EmptyStatement,
13526         set the location. Fixes bug #58488.
13527
13528 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
13529
13530         * driver.cs: Add -pkg handling.
13531
13532         From Gonzalo: UseShelLExecute=false
13533
13534 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
13535
13536         * attribute.cs:
13537         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
13538         for attribute.
13539         (Attribute.IsClsCompliaceRequired): Moved to base for better
13540         accesibility.
13541         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
13542         when attribute is AttributeUsageAttribute.
13543         (Attribute.GetValidTargets): Simplified.
13544         (Attribute.GetAttributeUsage): New method returns AttributeUsage
13545         attribute for this type.
13546         (Attribute.ApplyAttributes): Method renamed to Emit and make
13547         non-static.
13548         (GlobalAttributeSection): New class for special handling of global
13549         attributes (assembly, module).
13550         (AttributeSection.Emit): New method.
13551
13552         * class.cs: Implemented Attributable abstract methods.
13553         (MethodCore.LabelParameters): Moved to Parameter class.
13554         (Accessor): Is back simple class.
13555         (PropertyMethod): Implemented Attributable abstract class.
13556         (DelegateMethod): Implemented Attributable abstract class.
13557         (Event): New constructor for disctintion between normal Event
13558         and Event with accessors.
13559
13560         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
13561
13562         * codegen.cs, const.cs, decl.cs, delegate.cs:
13563         (CommonAssemblyModulClass): Implemented Attributable abstract class
13564         and simplified.
13565
13566         * enum.cs: Implement IAttributeSupport interface.
13567         (EnumMember): New class for emum members. Implemented Attributable
13568         abstract class
13569
13570         * parameter.cs:
13571         (ParameterBase): Is abstract.
13572         (ReturnParameter): New class for easier [return:] attribute handling.
13573
13574         * typemanager.cs: Removed builder_to_attr.
13575
13576 2004-05-11  Raja R Harinath  <rharinath@novell.com>
13577
13578         Fix bug #57151.
13579         * attribute.cs (Attribute.GetPositionalValue): New function.
13580         * class.cs (TypeContainer.VerifyMembers): New function.
13581         (TypeContainer.Emit): Use it.
13582         (ClassOrStruct): New base class for Class and Struct.
13583         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
13584         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
13585         class.
13586         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
13587         then each non-static field should have a FieldOffset attribute.
13588         Otherwise, none of the fields should have a FieldOffset attribute.
13589         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
13590         and FieldOffset attributes.
13591         * typemanager.cs (TypeManager.struct_layout_attribute_type)
13592         (TypeManager.field_offset_attribute_type): New core types.
13593         (TypeManager.InitCoreTypes): Initialize them.
13594
13595 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
13596
13597         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
13598         Return correct type.
13599         From bug #58270.
13600
13601 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
13602
13603         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
13604         be implicitly converted to ulong.
13605         
13606         * expression.cs: The logic for allowing operator &, | and ^ worked
13607         was wrong, it worked before because we did not report an error in
13608         an else branch.  Fixes 57895.
13609
13610         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
13611         allow volatile fields to be reference types.
13612
13613 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
13614
13615         * driver.cs: Add support for /debug-
13616
13617 2004-05-07  Raja R Harinath  <rharinath@novell.com>
13618
13619         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
13620         Add a 'complain' parameter to silence errors.
13621         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
13622         silently overlooked type-resolutions.
13623         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
13624         to reflect changes.
13625         (Attributes.Search): New function.
13626         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
13627         (Attributes.GetAttributeFullName): Remove hack.
13628         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
13629         Update to reflect changes.
13630         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
13631         Use Attributes.Search instead of nested loops.
13632
13633 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
13634
13635         * decl.cs:
13636         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
13637         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
13638         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
13639
13640         * report.cs: (Report.Warning): Renamed to Warning_T because of
13641         parameter collision.
13642
13643 2004-05-05  Raja R Harinath  <rharinath@novell.com>
13644
13645         * expression.cs (MemberAccess.ResolveMemberAccess):
13646         Exit with non-zero status after Report.Error.
13647         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
13648         Likewise.
13649         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
13650
13651 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13652
13653         * support.cs: Don't hang when the file is empty.
13654
13655 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13656
13657         * support.cs: In SeekableStreamReader, compute the preamble size of the
13658           underlying stream. Position changes should take into account that initial
13659           count of bytes.
13660
13661 2004-05-03  Todd Berman  <tberman@sevenl.net>
13662
13663         * driver.cs: remove unused GetSysVersion function.
13664
13665 2004-05-03  Todd Berman  <tberman@sevenl.net>
13666
13667         * driver.cs: Remove the hack from saturday, as well as the hack
13668         from jackson (LoadAssemblyFromGac), also adds the CWD to the
13669         link_paths to get that bit proper.
13670
13671 2004-05-01  Todd Berman  <tberman@sevenl.net>
13672
13673         * driver.cs: Try a LoadFrom before a Load, this checks the current
13674         path. This is currently a bug in mono that is be fixed, however, this
13675         provides a workaround for now. This will be removed when the bug
13676         is fixed.
13677
13678 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
13679
13680         * CryptoConvert.cs: Updated to latest version. Fix issue with 
13681         incomplete key pairs (#57941).
13682
13683 2004-05-01  Todd Berman  <tberman@sevenl.net>
13684
13685         * driver.cs: Remove '.' from path_chars, now System.* loads properly
13686         from the GAC
13687
13688 2004-04-30  Jackson Harper  <jackson@ximian.com>
13689
13690         * codegen.cs: Open keys readonly.
13691         
13692 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13693
13694         * typemanager.cs: don't report cyclic struct layout when a struct
13695         contains 2 or more fields of the same type. Failed for Pango.AttrShape
13696         which has 2 Pango.Rectangle fields.
13697
13698 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13699
13700         * expression.cs: Handle IntPtr comparisons with IL code
13701         rather than a method call.
13702
13703 2004-04-29  Martin Baulig  <martin@ximian.com>
13704
13705         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
13706         the list of PropertyInfo's in class hierarchy and find the
13707         accessor.  Fixes #56013.
13708
13709 2004-04-29  Martin Baulig  <martin@ximian.com>
13710
13711         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
13712
13713 2004-04-29  Martin Baulig  <martin@ximian.com>
13714
13715         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13716
13717         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
13718
13719 2004-04-29  Martin Baulig  <martin@ximian.com>
13720
13721         * class.cs (ConstructorInitializer.Resolve): Check whether the
13722         parent .ctor is accessible.  Fixes #52146.
13723
13724 2004-04-29  Martin Baulig  <martin@ximian.com>
13725
13726         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13727
13728         * statement.cs (Using.EmitLocalVariableDecls): Use
13729         TypeManager.idisposable_type, not typeof (IDisposable).
13730         (Foreach.EmitCollectionForeach): Added support for valuetypes.
13731
13732 2004-04-29  Martin Baulig  <martin@ximian.com>
13733
13734         * class.cs (Event.Define): Don't emit the field and don't set
13735         RTSpecialName and SpecialName for events on interfaces.  Fixes
13736         #57703. 
13737
13738 2004-04-29  Raja R Harinath  <rharinath@novell.com>
13739
13740         Refactor Attribute.ApplyAttributes.
13741         * attribute.cs (Attributable): New base class for objects that can
13742         have Attributes applied on them.
13743         (Attribute): Make AttributeUsage fields public.
13744         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
13745         (Attribute.IsInternalCall): New property.
13746         (Attribute.UsageAttr): Convert to a public read-only property.
13747         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
13748         (Attribute.ResolveType, Attribute.Resolve)
13749         (Attribute.ScanForIndexerName): Update to reflect changes.
13750         (Attribute.CheckAttributeTarget): Re-format.
13751         (Attribute.ApplyAttributes): Refactor, to various
13752         Attributable.ApplyAttributeBuilder methods.
13753         * decl.cs (MemberCore): Make Attributable.
13754         * class.cs (Accessor): Make Attributable.
13755         (MethodData.ApplyAttributes): Use proper attribute types, not
13756         attribute names.
13757         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
13758         (TypeContainer.ApplyAttributeBuilder)
13759         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
13760         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
13761         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
13762         (Operator.ApplyAttributeBuilder): New factored-out methods.
13763         * const.cs (Const.ApplyAttributeBuilder): Likewise.
13764         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
13765         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
13766         * parameter.cs (ParameterBase): New Attributable base class
13767         that can also represent Return types.
13768         (Parameter): Update to the changes.
13769
13770 2004-04-29  Jackson Harper  <jackson@ximian.com>
13771
13772         * driver.cs: Prefer the corlib system version when looking for
13773         assemblies in the GAC. This is still a hack, but its a better hack
13774         now.
13775         
13776 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
13777
13778         * decl.cs, enum.cs: Improved error 3005 reporting.
13779   
13780         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
13781         (related_symbols): New private member for list of symbols
13782         related to reported error/warning.
13783         
13784         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
13785
13786 2004-04-29  Martin Baulig  <martin@ximian.com>
13787
13788         * ecore.cs (Expression.Constantify): If we're an enum and
13789         TypeManager.TypeToCoreType() doesn't give us another type, use
13790         t.UnderlyingSystemType.  Fixes #56178.  
13791
13792 2004-04-29  Martin Baulig  <martin@ximian.com>
13793
13794         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
13795         interfaces and for each interface, only add members directly
13796         declared in that interface.  Fixes #53255.
13797
13798 2004-04-28  Martin Baulig  <martin@ximian.com>
13799
13800         * expression.cs (ConditionalLogicalOperator): Use a temporary
13801         variable for `left' to avoid that we evaluate it more than once;
13802         bug #52588.
13803
13804 2004-04-28  Martin Baulig  <martin@ximian.com>
13805
13806         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
13807         `void[]' (CS1547).
13808
13809 2004-04-28  Martin Baulig  <martin@ximian.com>
13810
13811         * statement.cs (LocalInfo.Resolve): Check whether the type is not
13812         void (CS1547).
13813
13814         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
13815         whether the type is not void (CS1547).
13816
13817 2004-04-28  Martin Baulig  <martin@ximian.com>
13818
13819         * expression.cs (Unary.DoResolveLValue): Override this and report
13820         CS0131 for anything but Operator.Indirection.
13821
13822 2004-04-28  Martin Baulig  <martin@ximian.com>
13823
13824         Committing a patch from Ben Maurer; see bug #50820.
13825
13826         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13827         check for classes.
13828
13829         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13830         classes.        
13831
13832 2004-04-28  Martin Baulig  <martin@ximian.com>
13833
13834         Committing a patch from Ben Maurer; see bug #50820.
13835
13836         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13837         check for classes.
13838
13839         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13840         classes.        
13841
13842 2004-04-28  Martin Baulig  <martin@ximian.com>
13843
13844         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
13845         (Block.AddLabel): Call DoLookupLabel() to only search in the
13846         current block.
13847
13848 2004-04-28  Martin Baulig  <martin@ximian.com>
13849
13850         * cfold.cs (ConstantFold.BinaryFold): Added special support for
13851         comparing StringConstants and NullLiterals in Equality and Inequality.
13852
13853 2004-04-28  Jackson Harper  <jackson@ximian.com>
13854
13855         * driver.cs: Attempt to load referenced assemblies from the
13856         GAC. This is the quick and dirty version of this method that
13857         doesnt take into account versions and just takes the first
13858         canidate found. Will be good enough for now as we will not have more
13859         then one version installed into the GAC until I update this method.
13860
13861 2004-04-28  Martin Baulig  <martin@ximian.com>
13862
13863         * typemanager.cs (TypeManager.CheckStructCycles): New public
13864         static method to check for cycles in the struct layout.
13865
13866         * rootcontext.cs (RootContext.PopulateTypes): Call
13867         TypeManager.CheckStructCycles() for each TypeContainer.
13868         [Note: We only need to visit each type once.]
13869
13870 2004-04-28  Martin Baulig  <martin@ximian.com>
13871
13872         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
13873
13874         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
13875         success and added `out object value'.  Use a `bool resolved' field
13876         to check whether we've already been called rather than
13877         `ConstantValue != null' since this breaks for NullLiterals.
13878
13879 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13880
13881         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
13882         setting of this flag, since the 'set' method may be non-public.
13883
13884 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13885
13886         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
13887         check on current_vector.Block.
13888
13889 2004-04-27  Martin Baulig  <martin@ximian.com>
13890
13891         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
13892         a field initializer.  Fixes #56459.
13893
13894 2004-04-27  Martin Baulig  <martin@ximian.com>
13895
13896         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
13897         we're not attempting to use an indexer.  Fixes #52154.
13898
13899 2004-04-27  Martin Baulig  <martin@ximian.com>
13900
13901         * statement.cs (Return): Don't create a return label if we don't
13902         need it; reverts my change from January 20th.  Thanks to Ben
13903         Maurer for this.
13904
13905 2004-04-27  Martin Baulig  <martin@ximian.com>
13906
13907         According to the spec, `goto' can only leave a nested scope, but
13908         never enter it.
13909
13910         * statement.cs (Block.LookupLabel): Only lookup in the current
13911         block, don't recurse into parent or child blocks.
13912         (Block.AddLabel): Check in parent and child blocks, report
13913         CS0140/CS0158 if we find a duplicate.
13914         (Block): Removed this indexer for label lookups.
13915         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
13916         this already does the error reporting for us.
13917
13918         * flowanalysis.cs
13919         (FlowBranching.UsageVector.Block): New public variable; may be null.
13920         (FlowBranching.CreateSibling): Added `Block' argument.
13921         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
13922         label for the target of a `goto' and check whether we're not
13923         leaving a `finally'.
13924
13925 2004-04-27  Martin Baulig  <martin@ximian.com>
13926
13927         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13928         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
13929         just for returns).
13930
13931 2004-04-27  Martin Baulig  <martin@ximian.com>
13932
13933         * statement.cs (Block.AddLabel): Also check for implicit blocks
13934         and added a CS0158 check.
13935
13936 2004-04-27  Martin Baulig  <martin@ximian.com>
13937
13938         * flowanalysis.cs (FlowBranchingLoop): New class.
13939         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
13940         UsageVector's instead of an ArrayList.
13941         (FlowBranching.Label): Likewise.
13942         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
13943         (FlowBranching.AddBreakVector): New method.
13944
13945 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
13946
13947         * attribute.cs: Small regression fix: only convert the type if we
13948         the type is different, fixes System.Drawing build.
13949
13950 2004-04-27  Martin Baulig  <martin@ximian.com>
13951
13952         * attribute.cs (Attribute.Resolve): If we have a constant value
13953         for a named field or property, implicity convert it to the correct
13954         type.
13955
13956 2004-04-27  Raja R Harinath  <rharinath@novell.com>
13957
13958         * statement.cs (Block.Block): Implicit blocks share
13959         'child_variable_names' fields with parent blocks.
13960         (Block.AddChildVariableNames): Remove.
13961         (Block.AddVariable): Mark variable as "used by a child block" in
13962         every surrounding block.
13963         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
13964         been used in a child block, complain about violation of "Invariant
13965         meaning in blocks" rule.
13966         * cs-parser.jay (declare_local_variables): Don't use
13967         AddChildVariableNames.
13968         (foreach_statement): Don't create an implicit block: 'foreach'
13969         introduces a scope.
13970
13971 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
13972
13973         * convert.cs (ImplicitNumericConversion): 0 is also positive when
13974         converting from 0L to ulong.  Fixes 57522.
13975
13976 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13977
13978         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
13979         derived class hides via 'new' keyword field from base class (test-242.cs).
13980         TODO: Handle this in the more general way.
13981         
13982         * class.cs (CheckBase): Ditto.
13983
13984 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13985
13986         * decl.cs (caching_flags): New member for storing cached values
13987         as bit flags.
13988         (MemberCore.Flags): New enum where bit flags for caching_flags
13989         are defined.
13990         (MemberCore.cls_compliance): Moved to caching_flags.
13991         (DeclSpace.Created): Moved to caching_flags.
13992
13993         * class.cs: Use caching_flags instead of DeclSpace.Created
13994         
13995 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
13996
13997         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
13998         if we are only a derived class, not a nested class.
13999
14000         * typemanager.cs: Same as above, but do this at the MemberLookup
14001         level (used by field and methods, properties are handled in
14002         PropertyExpr).   Allow for the qualified access if we are a nested
14003         method. 
14004
14005 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
14006
14007         * class.cs: Refactoring.
14008         (IMethodData): New inteface; Holds links to parent members
14009         to avoid member duplication (reduced memory allocation).
14010         (Method): Implemented IMethodData interface.
14011         (PropertyBase): New inner classes for get/set methods.
14012         (PropertyBase.PropertyMethod): Implemented IMethodData interface
14013         (Event): New inner classes for add/remove methods.
14014         (Event.DelegateMethod): Implemented IMethodData interface.
14015
14016         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
14017         EmitContext (related to class.cs refactoring).
14018
14019 2004-04-21  Raja R Harinath  <rharinath@novell.com>
14020
14021         * delegate.cs (Delegate.VerifyApplicability): If the number of
14022         arguments are the same as the number of parameters, first try to
14023         verify applicability ignoring  any 'params' modifier on the last
14024         parameter.
14025         Fixes #56442.
14026
14027 2004-04-16  Raja R Harinath  <rharinath@novell.com>
14028
14029         * class.cs (TypeContainer.AddIndexer): Use
14030         'ExplicitInterfaceName' to determine if interface name was
14031         explicitly specified.  'InterfaceType' is not initialized at this time.
14032         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
14033         Indexers array is already in the required order.  Initialize
14034         'IndexerName' only if there are normal indexers.
14035         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
14036         (TypeContainer.Emit): Emit DefaultMember attribute only if
14037         IndexerName is initialized.
14038         Fixes #56300.
14039
14040 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
14041
14042         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
14043         Fixes #57007
14044
14045 2004-04-15  Raja R Harinath  <rharinath@novell.com>
14046
14047         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
14048         attributes.
14049         Fix for #56456.
14050
14051         * attribute.cs (Attribute.Resolve): Check for duplicate named
14052         attributes.
14053         Fix for #56463.
14054
14055 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
14056
14057         * iterators.cs (MarkYield): track whether we are in an exception,
14058         and generate code accordingly.  Use a temporary value to store the
14059         result for our state.
14060
14061         I had ignored a bit the interaction of try/catch with iterators
14062         since their behavior was not entirely obvious, but now it is
14063         possible to verify that our behavior is the same as MS .NET 2.0
14064
14065         Fixes 54814
14066
14067 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
14068
14069         * iterators.cs: Avoid creating temporaries if there is no work to
14070         do. 
14071
14072         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
14073         Enumerations, use TypeManager.EnumToUnderlying and call
14074         recursively. 
14075
14076         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
14077         bug #57013
14078
14079         (This.Emit): Use EmitContext.EmitThis to emit our
14080         instance variable.
14081
14082         (This.EmitAssign): Ditto.
14083
14084         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
14085         codepaths, we will move all the functionality into
14086         Mono.CSharp.This 
14087
14088         (FieldExpr.EmitAssign): Ditto.
14089
14090         This fixes several hidden bugs that I uncovered while doing a code
14091         review of this today.
14092
14093         * codegen.cs (EmitThis): reworked so the semantics are more clear
14094         and also support value types "this" instances.
14095
14096         * iterators.cs: Changed so that for iterators in value types, we
14097         do not pass the value type as a parameter.  
14098
14099         Initialization of the enumerator helpers is now done in the caller
14100         instead of passing the parameters to the constructors and having
14101         the constructor set the fields.
14102
14103         The fields have now `assembly' visibility instead of private.
14104
14105 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
14106
14107         * expression.cs (Argument.Resolve): Check if fields passed as ref
14108         or out are contained in a MarshalByRefObject.
14109
14110         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
14111         another compiler type.
14112
14113 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
14114
14115         * class.cs (Indexer.Define): use the new name checking method.
14116         Also, return false on an error.
14117         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
14118         (is_identifier_[start/part]_character): make static.
14119
14120 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
14121
14122         * expression.cs (Binary.ResolveOperator): Do no append strings
14123         twice: since we can be invoked more than once (array evaluation)
14124         on the same concatenation, take care of this here.  Based on a fix
14125         from Ben (bug #56454)
14126
14127 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
14128
14129         * codegen.cs: Fix another case where CS1548 must be reported (when 
14130         delay-sign isn't specified and no private is available #56564). Fix
14131         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
14132         error when MCS is used on the MS runtime and we need to delay-sign 
14133         (which seems unsupported by AssemblyBuilder - see #56621).
14134
14135 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
14136
14137         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
14138         (TypeManager.ComputeNamespaces): Faster implementation for
14139         Microsoft runtime.
14140
14141         * compiler.csproj: Updated AssemblyName to mcs.
14142
14143 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
14144
14145         * rootcontext.cs: Add new types to the boot resolution.
14146
14147         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
14148         MulticastDelegate is not allowed.
14149
14150         * typemanager.cs: Add new types to lookup: System.TypedReference
14151         and ArgIterator.
14152
14153         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
14154         check for TypedReference or ArgIterator, they are not allowed. 
14155
14156         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
14157         makes us properly catch 1510 in some conditions (see bug 56016 for
14158         details). 
14159
14160 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
14161
14162         * CryptoConvert.cs: update from corlib version
14163         with endian fixes.
14164
14165 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
14166
14167         * class.cs (Indexer.Define): Check indexername declaration
14168
14169 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
14170
14171         * attribute.cs (IsClsCompliant): Fixed problem with handling
14172         all three states (compliant, not-compliant, undetected).
14173
14174 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
14175
14176         * attribute.cs (Attribute): Location is now public.
14177         (Resolve): Store resolved arguments (pos_values) in attribute class.
14178         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
14179         (GetClsCompliantAttributeValue): New method that gets
14180         CLSCompliantAttribute value.
14181         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
14182         if exists else null.
14183         (AttributeTester): New class for CLS-Compliant verification routines.
14184
14185         * class.cs (Emit): Add CLS-Compliant verification.
14186         (Method.GetSignatureForError): Implemented.
14187         (Constructor.GetSignatureForError): Implemented
14188         (Constructor.HasCompliantArgs): Returns if constructor has
14189         CLS-Compliant arguments.
14190         (Constructor.Emit): Override.
14191         (Construcor.IsIdentifierClsCompliant): New method; For constructors
14192         is needed to test only parameters.
14193         (FieldBase.GetSignatureForError): Implemented.
14194         (TypeContainer): New member for storing base interfaces.
14195         (TypeContainer.FindMembers): Search in base interfaces too.
14196
14197         * codegen.cs (GetClsComplianceAttribute): New method that gets
14198         assembly or module CLSCompliantAttribute value.
14199         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
14200         for assembly.
14201         (ModuleClass.Emit): Add error 3012 test.
14202
14203         * const.cs (Emit): Override and call base for CLS-Compliant tests.
14204
14205         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
14206         state for all decl types.
14207         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
14208         if CLS-Compliant tests are required.
14209         (IsClsCompliaceRequired): New method. Analyze whether code
14210         must be CLS-Compliant.
14211         (IsExposedFromAssembly): New method. Returns true when MemberCore
14212         is exposed from assembly.
14213         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
14214         value or gets cached value.
14215         (HasClsCompliantAttribute): New method. Returns true if MemberCore
14216         is explicitly marked with CLSCompliantAttribute.
14217         (IsIdentifierClsCompliant): New abstract method. This method is
14218         used to testing error 3005.
14219         (IsIdentifierAndParamClsCompliant): New method. Common helper method
14220         for identifier and parameters CLS-Compliant testing.
14221         (VerifyClsCompliance): New method. The main virtual method for
14222         CLS-Compliant verifications.
14223         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
14224         null. I don't know why is null (too many public members !).
14225         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
14226         and get value of first CLSCompliantAttribute that found.
14227
14228         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
14229         (VerifyClsCompliance): Override and add extra tests.
14230
14231         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
14232         clscheck- disable CLS-Compliant verification event if assembly is has
14233         CLSCompliantAttribute(true).
14234
14235         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
14236         ApllyAttribute is now called in emit section as in the other cases.
14237         Possible future Emit integration.
14238         (IsIdentifierClsCompliant): New override.
14239         (VerifyClsCompliance): New override.
14240         (GetEnumeratorName): Returns full enum name.
14241
14242         * parameter.cs (GetSignatureForError): Implemented.
14243
14244         * report.cs (WarningData): New struct for Warning message information.
14245         (LocationOfPreviousError): New method.
14246         (Warning): New method. Reports warning based on the warning table.
14247         (Error_T): New method. Reports error based on the error table.
14248
14249         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
14250         verifications are done here.
14251
14252         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
14253
14254         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
14255         CLSCompliantAttribute.
14256         (all_imported_types): New member holds all imported types from other
14257         assemblies.
14258         (LoadAllImportedTypes): New method fills static table with exported types
14259         from all referenced assemblies.
14260         (Modules): New property returns all assembly modules.
14261
14262 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
14263
14264         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
14265         throwing a parser error.
14266
14267         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
14268         which removes the hardcoded get_/set_ prefixes for properties, as
14269         IL allows for the properties to be named something else.  
14270
14271         Bug #56013
14272
14273         * expression.cs: Do not override operand before we know if it is
14274         non-null.  Fix 56207
14275
14276 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14277
14278         * typemanager.cs: support for pinned variables.
14279
14280 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14281
14282         * decl.cs, typemanager.cs: Avoid using an arraylist
14283         as a buffer if there is only one result set.
14284
14285 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14286
14287         * expression.cs: Make sure you cant call a static method
14288         with an instance expression, bug #56174.
14289
14290 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
14291
14292         * class.cs (IsDuplicateImplementation): Improve error reporting to
14293         flag 663 (method only differs in parameter modifier).
14294
14295         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
14296         in preprocessor directives.
14297
14298         * location.cs (LookupFile): Allow for the empty path.
14299
14300         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
14301         better approach for some of that patch, but its failing with the
14302         CharSet enumeration.  For now try/catch will do.
14303
14304         * typemanager.cs: Do not crash if a struct does not have fields.
14305         Fixes 56150.
14306
14307 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14308
14309         * expression.cs: cs0213, cant fix a fixed expression.
14310         fixes 50231.
14311
14312 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14313
14314         * cs-parser.jay: detect invalid embeded statements gracefully.
14315         bug #51113.
14316
14317 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14318
14319         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
14320         As a regex:
14321         s/
14322         the invocation type may not be a subclass of the tye of the item/
14323         The type of the item must be a subclass of the invocation item.
14324         /g
14325
14326         Fixes bug #50820.
14327
14328 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
14329
14330         * attribute.cs: Added methods to get a string and a bool from an
14331         attribute. Required to information from AssemblyKeyFileAttribute,
14332         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
14333         * codegen.cs: Modified AssemblyName creation to include support for
14334         strongnames. Catch additional exceptions to report them as CS1548.
14335         * compiler.csproj: Updated include CryptoConvert.cs.
14336         * compiler.csproj.user: Removed file - user specific configuration.
14337         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
14338         Mono.Security assembly. The original class is maintained and tested in
14339         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
14340         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
14341         like CSC 8.0 (C# v2) supports.
14342         * Makefile: Added CryptoConvert.cs to mcs sources.
14343         * rootcontext.cs: Added new options for strongnames.
14344
14345 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
14346
14347         * driver.cs: For --expect-error, report error code `2'
14348         if the program compiled with no errors, error code `1' if
14349         it compiled with an error other than the one expected.
14350
14351 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
14352
14353         * compiler.csproj: Updated for Visual Studio .NET 2003.
14354         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
14355         * compiler.sln: Updated for Visual Studio .NET 2003.
14356
14357 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
14358
14359         * expression.cs: Fix bug #47234. We basically need to apply the
14360         rule that we prefer the conversion of null to a reference type
14361         when faced with a conversion to 'object' (csc behaviour).
14362
14363 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14364
14365         * statement.cs: Shorter form for foreach, eliminates
14366         a local variable. r=Martin.
14367
14368 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14369
14370         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
14371         checks if we can use brtrue/brfalse to test for 0.
14372         * expression.cs: use the above in the test for using brtrue/brfalse.
14373         cleanup code a bit.
14374
14375 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14376
14377         * expression.cs: Rewrite string concat stuff. Benefits:
14378
14379         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
14380         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
14381         rather than a concat chain.
14382
14383         * typemanager.cs: Add lookups for more concat overloads.
14384
14385 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14386
14387         * expression.cs: Emit shorter il code for array init.
14388
14389         newarr
14390         dup
14391         // set 1
14392
14393         // set 2
14394
14395         newarr
14396         stloc.x
14397
14398         ldloc.x
14399         // set 1
14400
14401         ldloc.x
14402         // set 2
14403
14404 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
14405
14406         * statement.cs: Before, two switch blocks would be merged if the
14407         total size of the blocks (end_item - begin_item + 1) was less than
14408         two times the combined sizes of the blocks.
14409
14410         Now, it will only merge if after the merge at least half of the
14411         slots are filled.
14412
14413         fixes 55885.
14414
14415 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
14416
14417         * class.cs : csc build fix for GetMethods(). See bug #52503.
14418
14419 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
14420
14421         * expression.cs: Make sure fp comparisons work with NaN.
14422         This fixes bug #54303. Mig approved this patch a long
14423         time ago, but we were not able to test b/c the runtime
14424         had a related bug.
14425
14426 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
14427
14428         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
14429
14430 2004-03-19  Martin Baulig  <martin@ximian.com>
14431
14432         * class.cs (MemberCore.IsDuplicateImplementation): Report the
14433         error here and not in our caller.
14434
14435 2004-03-19  Martin Baulig  <martin@ximian.com>
14436
14437         * interface.cs: Completely killed this file.
14438         (Interface): We're now a TypeContainer and live in class.cs.
14439
14440         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
14441         argument; we're now also called for interfaces.
14442         (TypeContainer.DefineMembers): Allow this method being called
14443         multiple times.
14444         (TypeContainer.GetMethods): New public method; formerly known as
14445         Interface.GetMethod().  This is used by PendingImplementation.
14446         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
14447         it's now private and non-static.
14448         (Interface): Moved this here; it's now implemented similar to
14449         Class and Struct.
14450         (Method, Property, Event, Indexer): Added `bool is_interface'
14451         argument to their .ctor's.
14452         (MemberBase.IsInterface): New public field.
14453
14454         * cs-parser.jay: Create normal Method, Property, Event, Indexer
14455         instances instead of InterfaceMethod, InterfaceProperty, etc.
14456         (opt_interface_base): Removed; we now use `opt_class_base' instead.
14457         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
14458
14459 2004-03-19  Martin Baulig  <martin@ximian.com>
14460
14461         * class.cs (MethodCore.IsDuplicateImplementation): New private
14462         method which does the CS0111 checking.
14463         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
14464         Use IsDuplicateImplementation().
14465
14466 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
14467
14468         * decl.cs (FindMemberToOverride): New method to find the correct
14469         method or property to override in the base class.
14470         * class.cs
14471             - Make Method/Property use the above method to find the
14472               version in the base class.
14473             - Remove the InheritableMemberSignatureCompare as it is now
14474               dead code.
14475
14476         This patch makes large code bases much faster to compile, as it is
14477         O(n) rather than O(n^2) to do this validation.
14478
14479         Also, it fixes bug 52458 which is that nested classes are not
14480         taken into account when finding the base class member.
14481
14482         Reviewed/Approved by Martin.
14483
14484 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
14485
14486         * interface.cs: In all interface classes removed redundant
14487         member initialization.
14488
14489 2004-03-16  Martin Baulig  <martin@ximian.com>
14490
14491         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
14492
14493 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
14494
14495         * decl.cs (DefineTypeAndParents): New helper method to define a
14496         type's containers before the type itself is defined;  This is a
14497         bug exposed by the recent changes to Windows.Forms when an
14498         implemented interface was defined inside a class that had not been
14499         built yet.   
14500
14501         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
14502
14503         (Check): Loop correctly to report errors modifiers
14504         (UNSAFE was not in the loop, since it was the same as TOP).
14505
14506         * interface.cs: Every interface member now takes a ModFlags,
14507         instead of a "is_new" bool, which we set on the base MemberCore. 
14508
14509         Every place where we called "UnsafeOk" in the interface, now we
14510         call the proper member (InterfaceMethod.UnsafeOK) instead to get
14511         the unsafe settings from the member declaration instead of the
14512         container interface. 
14513
14514         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
14515
14516         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
14517         `set_indexer_name' to the pending bits (one per type).
14518
14519         We fixed a bug today that was picking the wrong method to
14520         override, since for properties the existing InterfaceMethod code
14521         basically ignored the method name.  Now we make sure that the
14522         method name is one of the valid indexer names.
14523
14524 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
14525  
14526         * support.cs (SeekableStreamReader): Keep track of stream byte
14527         positions and don't mix them with character offsets to the buffer.
14528
14529         Patch from Gustavo Giráldez
14530
14531 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
14532
14533         * interface.cs (InterfaceSetGetBase): Removed double member
14534         initialization, base class does it as well.
14535
14536 2004-03-13  Martin Baulig  <martin@ximian.com>
14537
14538         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
14539         when compiling corlib.
14540
14541 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
14542
14543         * convert.cs (ExplicitConversion): We were reporting an error on
14544         certain conversions (object_type source to a value type, when the
14545         expression was `null') before we had a chance to pass it through
14546         the user defined conversions.
14547
14548         * driver.cs: Replace / and \ in resource specifications to dots.
14549         Fixes 50752
14550
14551         * class.cs: Add check for duplicate operators.  Fixes 52477
14552
14553 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
14554
14555         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
14556         that are in the middle of the statements, not only at the end.
14557         Fixes #54987
14558
14559         * class.cs (TypeContainer.AddField): No longer set the
14560         `HaveStaticConstructor' flag, now we call it
14561         `UserDefineStaticConstructor' to diferentiate the slightly
14562         semantic difference.
14563
14564         The situation is that we were not adding BeforeFieldInit (from
14565         Modifiers.TypeAttr) to classes that could have it.
14566         BeforeFieldInit should be set to classes that have no static
14567         constructor. 
14568
14569         See:
14570
14571         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
14572
14573         And most importantly Zoltan's comment:
14574
14575         http://bugzilla.ximian.com/show_bug.cgi?id=44229
14576
14577         "I think beforefieldinit means 'it's ok to initialize the type sometime 
14578          before its static fields are used', i.e. initialization does not need
14579          to be triggered by the first access to the type. Setting this flag
14580          helps the JIT to compile better code, since it can run the static
14581          constructor at JIT time, and does not need to generate code to call it
14582          (possibly lots of times) at runtime. Unfortunately, mcs does not set
14583          this flag for lots of classes like String. 
14584          
14585          csc sets this flag if the type does not have an explicit static 
14586          constructor. The reasoning seems to be that if there are only static
14587          initalizers for a type, and no static constructor, then the programmer
14588          does not care when this initialization happens, so beforefieldinit
14589          can be used.
14590          
14591          This bug prevents the AOT compiler from being usable, since it 
14592          generates so many calls to mono_runtime_class_init that the AOT code
14593          is much slower than the JITted code. The JITted code is faster, 
14594          because it does not generate these calls if the vtable is type is
14595          already initialized, which is true in the majority of cases. But the
14596          AOT compiler can't do this."
14597
14598 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
14599
14600         * class.cs (MethodData.Emit): Refactor the code so symbolic
14601         information is generated for destructors;  For some reasons we
14602         were taking a code path that did not generate symbolic information
14603         before. 
14604
14605 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14606
14607         * class.cs: Create a Constructor.CheckBase method that
14608         takes care of all validation type code. The method
14609         contains some code that was moved from Define.
14610
14611         It also includes new code that checks for duplicate ctors.
14612         This fixes bug #55148.
14613
14614 2004-03-09  Joshua Tauberer <tauberer@for.net>
14615
14616         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
14617         a { ... }-style array creation invokes EmitStaticInitializers
14618         which is not good for reference-type arrays.  String, decimal
14619         and now null constants (NullCast) are not counted toward
14620         static initializers.
14621
14622 2004-03-05  Martin Baulig  <martin@ximian.com>
14623
14624         * location.cs (SourceFile.HasLineDirective): New public field;
14625         specifies whether the file contains or is referenced by a "#line"
14626         directive.
14627         (Location.DefineSymbolDocuments): Ignore source files which
14628         either contain or are referenced by a "#line" directive.        
14629
14630 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
14631
14632         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
14633         direct access to our parent, so check the method inline there.
14634
14635 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14636
14637         * expression.cs (Invocation.EmitCall): Miguel's last commit
14638         caused a regression. If you had:
14639
14640             T t = null;
14641             t.Foo ();
14642
14643         In Foo the implict this would be null.
14644
14645 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
14646
14647         * expression.cs (Invocation.EmitCall): If the method is not
14648         virtual, do not emit a CallVirt to it, use Call.
14649
14650         * typemanager.cs (GetFullNameSignature): Improve the method to
14651         cope with ".ctor" and replace it with the type name.
14652
14653         * class.cs (ConstructorInitializer.Resolve): Now the method takes
14654         as an argument the ConstructorBuilder where it is being defined,
14655         to catch the recursive constructor invocations.
14656
14657 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
14658
14659         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
14660         routines to check if a type is an enumerable/enumerator allow
14661         classes that implement the IEnumerable or IEnumerator interfaces.
14662
14663         * class.cs (Property, Operator): Implement IIteratorContainer, and
14664         implement SetYields.
14665
14666         (Property.Define): Do the block swapping for get_methods in the
14667         context of iterators.   We need to check if Properties also
14668         include indexers or not.
14669
14670         (Operator): Assign the Block before invoking the
14671         OperatorMethod.Define, so we can trigger the Iterator code
14672         replacement. 
14673
14674         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
14675         Property and Operator classes are not created when we parse the
14676         declarator but until we have the block completed, so we use a
14677         singleton SimpleIteratorContainer.Simple to flag whether the
14678         SetYields has been invoked.
14679
14680         We propagate this setting then to the Property or the Operator to
14681         allow the `yield' to function.
14682
14683 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
14684
14685         * codegen.cs: Implemented attribute support for modules.
14686         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
14687         Assembly/Module functionality.
14688
14689         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
14690         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
14691         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
14692
14693 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
14694
14695         * interface.cs (FindMembers): The operation is performed on all base
14696         interfaces and not only on the first. It is required for future CLS Compliance patch.
14697
14698 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14699
14700         * statement.cs, codegen.cs:
14701         This patch deals with patterns such as:
14702
14703         public class List : IEnumerable {
14704
14705                 public MyEnumerator GetEnumerator () {
14706                         return new MyEnumerator(this);
14707                 }
14708
14709                 IEnumerator IEnumerable.GetEnumerator () {
14710                         ...
14711                 }
14712                 
14713                 public struct MyEnumerator : IEnumerator {
14714                         ...
14715                 }
14716         }
14717
14718         Before, there were a few things we did wrong:
14719         1) we would emit callvirt on a struct, which is illegal
14720         2) we emited ldarg when we needed to emit ldarga
14721         3) we would mistakenly call the interface methods on an enumerator
14722         type that derived from IEnumerator and was in another assembly. For example:
14723
14724         public class MyEnumerator : IEnumerator
14725
14726         Would have the interface methods called, even if there were public impls of the
14727         method. In a struct, this lead to invalid IL code.
14728
14729 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
14730
14731         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
14732           renamed to Emit.
14733
14734         * delegate.cs (Define): Fixed crash when delegate type is undefined.
14735
14736 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
14737
14738         * cs-parser.jay: Fix small regression: we were not testing V2
14739         compiler features correctly.
14740
14741         * interface.cs: If the emit context is null, then create one
14742
14743 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
14744
14745         * decl.cs (GetSignatureForError): New virtual method to get full name
14746           for error messages.
14747
14748         * attribute.cs (IAttributeSupport): New interface for attribute setting.
14749           Now it is possible to rewrite ApplyAttributes method to be less if/else.
14750
14751         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
14752           Duplicated members and code in these classes has been removed.
14753           Better encapsulation in these classes.
14754
14755 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
14756
14757         * assign.cs (Assign.DoResolve): When dealing with compound
14758         assignments, there is a new rule in ECMA C# 2.4 (might have been
14759         there before, but it is documented here) that states that in:
14760
14761         a op= b;
14762
14763         If b is of type int, and the `op' is a shift-operator, then the
14764         above is evaluated as:
14765
14766         a = (int) a op b 
14767
14768         * expression.cs (Binary.ResolveOperator): Instead of testing for
14769         int/uint/long/ulong, try to implicitly convert to any of those
14770         types and use that in pointer arithmetic.
14771
14772         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
14773         method to print information for from the type, not from the
14774         null-method we were given.
14775
14776 2004-02-01  Duncan Mak  <duncan@ximian.com>
14777
14778         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
14779         parsing for cmd, fixes bug #53694.
14780
14781 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
14782
14783         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
14784         in the member name duplication tests. Property and operator name duplication
14785         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
14786
14787 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
14788
14789         * interface.cs (PopulateMethod): Fixed crash when interface method
14790         returns not existing type (error test cs0246-3.cs).
14791
14792 2004-02-02  Ravi Pratap M <ravi@ximian.com>
14793
14794         * cs-parser.jay (interface_accessors): Re-write actions to also
14795         store attributes attached to get and set methods. Fix spelling
14796         while at it.
14797
14798         (inteface_property_declaration): Modify accordingly.
14799
14800         (InterfaceAccessorInfo): New helper class to store information to pass
14801         around between rules that use interface_accessors.
14802
14803         * interface.cs (Emit): Apply attributes on the get and set
14804         accessors of properties and indexers too.
14805
14806         * attribute.cs (ApplyAttributes): Modify accordingly to use the
14807         right MethodBuilder when applying attributes to the get and set accessors.
14808
14809 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
14810
14811         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
14812
14813 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
14814
14815         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
14816
14817 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
14818
14819         * cs-parser.jay: Remove YIELD token, instead use the new grammar
14820         changes that treat `yield' specially when present before `break'
14821         or `return' tokens.
14822
14823         * cs-tokenizer.cs: yield is no longer a keyword.
14824
14825 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
14826
14827         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
14828         setting for default constructors.
14829         For default constructors are almost every time set wrong Modifier. The
14830         generated IL code has been alright. But inside mcs this values was
14831         wrong and this was reason why several of my CLS Compliance tests
14832         failed.
14833
14834 2004-01-22  Martin Baulig  <martin@ximian.com>
14835
14836         * cs-parser.jay (namespace_or_type_name): Return an Expression,
14837         not a QualifiedIdentifier.  This is what `type_name_expression'
14838         was previously doing.
14839         (type_name_expression): Removed; the code is now in
14840         `namespace_or_type_name'.
14841         (qualified_identifier): Removed, use `namespace_or_type_name'
14842         instead.
14843         (QualifiedIdentifier): Removed this class.      
14844
14845 2004-01-22  Martin Baulig  <martin@ximian.com>
14846
14847         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
14848         not a string as alias name.
14849
14850 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
14851
14852         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
14853         #52730 bug, and instead compute correctly the need to use a
14854         temporary variable when requesting an address based on the
14855         static/instace modified of the field and the constructor.
14856  
14857 2004-01-21  Martin Baulig  <martin@ximian.com>
14858
14859         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
14860         class and namespace before looking up aliases.  Fixes #52517.
14861
14862 2004-01-21  Martin Baulig  <martin@ximian.com>
14863
14864         * flowanalysis.cs (UsageVector.Merge): Allow variables being
14865         assinged in a 'try'; fixes exception4.cs.
14866
14867 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14868         * class.cs : Implemented parameter-less constructor for TypeContainer
14869
14870         * decl.cs: Attributes are now stored here. New property OptAttributes
14871
14872         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
14873
14874         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
14875
14876 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14877
14878         * typemanager.cs (CSharpSignature): Now reports also inner class name.
14879           (CSharpSignature): New method for indexer and property signature.
14880
14881 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14882
14883         * pending.cs (IsVirtualFilter): Faster implementation.
14884
14885 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14886
14887         * typemanager.cs: Avoid inclusion of same assembly more than once.
14888
14889 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14890
14891         * cs-parser.jay: Fixed problem where the last assembly attribute
14892           has been applied also to following declaration (class, struct, etc.)
14893           
14894 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14895
14896         * class.cs: Added error CS0538, CS0539 reporting.
14897         Fixed crash on Microsoft runtime when field type is void.
14898
14899         * cs-parser.jay: Added error CS0537 reporting.
14900
14901         * pending.cs: Added error CS0535 reporting.
14902         Improved error report for errors CS0536, CS0534.
14903
14904 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
14905
14906         Merge a few bits from the Anonymous Method MCS tree.
14907
14908         * statement.cs (ToplevelBlock): New class for toplevel methods,
14909         will hold anonymous methods, lifted variables.
14910
14911         * cs-parser.jay: Create toplevel blocks for delegates and for
14912         regular blocks of code. 
14913
14914 2004-01-20  Martin Baulig  <martin@ximian.com>
14915
14916         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
14917         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
14918         and `NeedExplicitReturn'; added `IsLastStatement'.
14919         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
14920         have a `ReturnLabel' or we're not unreachable.
14921
14922         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
14923         child's reachability; don't just override ours with it.  Fixes
14924         #58058 (lluis's example).
14925         (FlowBranching): Added public InTryOrCatch(), InCatch(),
14926         InFinally(), InLoop(), InSwitch() and
14927         BreakCrossesTryCatchBoundary() methods.
14928
14929         * statement.cs (Return): Do all error checking in Resolve().
14930         Unless we are the last statement in a top-level block, always
14931         create a return label and jump to it.
14932         (Break, Continue): Do all error checking in Resolve(); also make
14933         sure we aren't leaving a `finally'.
14934         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
14935         statement in a top-level block.
14936         (Block.Flags): Added `IsDestructor'.
14937         (Block.IsDestructor): New public property.
14938
14939 2004-01-20  Martin Baulig  <martin@ximian.com>
14940
14941         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
14942
14943 2004-01-20  Martin Baulig  <martin@ximian.com>
14944
14945         * statement.cs (Statement.ResolveUnreachable): New public method.
14946         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
14947         (Block.Resolve): Resolve unreachable statements.
14948
14949 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14950
14951         * expression.cs: We need to fix the case where we do
14952         not have a temp variable here.
14953
14954         * assign.cs: Only expression compound assignments need
14955         temporary variables.
14956
14957 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14958
14959         * flowanalysis.cs: Reduce memory allocation in a few ways:
14960           - A block with no variables should not allocate a bit
14961             vector for itself.
14962           - A method with no out parameters does not need any tracking
14963             for assignment of the parameters, so we need not allocate
14964             any data for it.
14965           - The arrays:
14966                 public readonly Type[] VariableTypes;
14967                 public readonly string[] VariableNames;
14968             Are redundant. The data is already stored in the variable
14969             map, so we need not allocate another array for it.
14970           - We need to add alot of checks for if (params | locals) == null
14971             due to the first two changes.
14972
14973 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
14974
14975         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
14976         implement IMemoryLocation, we store a copy on a local variable and
14977         take the address of it.  Patch from Benjamin Jemlich
14978
14979         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
14980         to use a special "type_name_expression" rule which reduces the
14981         number of "QualifiedIdentifier" classes created, and instead
14982         directly creates MemberAccess expressions.
14983
14984 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
14985
14986         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
14987         that fixes #52853.  Null literal assignment to ValueType
14988
14989         * class.cs (MethodData.Emit): Instead of checking the name of the
14990         method to determine if its a destructor, create a new derived
14991         class from Method called Destructor, and test for that.  
14992
14993         * cs-parser.jay: Create a Destructor object instead of a Method.  
14994
14995         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
14996
14997         Fixes: 52933
14998
14999 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
15000
15001         * expression.cs (Binary.ResolveOperator): Perform an implicit
15002         conversion from MethodGroups to their delegate types on the
15003         Addition operation.
15004
15005         * delegate.cs: Introduce a new class DelegateCreation that is the
15006         base class for `NewDelegate' and `ImplicitDelegateCreation',
15007         factor some code in here.
15008
15009         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
15010         conversion from MethodGroups to compatible delegate types. 
15011
15012         * ecore.cs (Expression.Resolve): Do not flag error 654
15013         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
15014         we allow conversions from MethodGroups to delegate types now.
15015
15016         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
15017         assignments in v2 either.
15018
15019 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
15020
15021         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
15022         static read-only fields in ctors.
15023
15024         Applied patch from Benjamin Jemlich 
15025
15026         * expression.cs (UnaryMutator): Avoid leaking local variables. 
15027
15028 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
15029
15030         * cs-tokenizer.cs (IsCastToken): Allow the various native types
15031         here to return true, as they can be used like this:
15032
15033                 (XXX) int.MEMBER ()
15034
15035         Fixed 49836 and all the other dups
15036
15037 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
15038
15039         * driver.cs: Implement /win32res and /win32icon.
15040
15041 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
15042
15043         * cs-parser.jay: Add a rule to improve error handling for the
15044         common mistake of placing modifiers after the type.
15045
15046 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
15047
15048         * cs-parser.jay (interface_event_declaration): Catch
15049         initialization of events on interfaces, and report cs0068
15050
15051         * cs-parser.jay (interface_event_declaration): Catch
15052         initialization of events. 
15053
15054         * ecore.cs: Better report missing constructors.
15055
15056         * expression.cs (Binary.ResolveOperator): My previous bug fix had
15057         the error reporting done in the wrong place.  Fix.
15058
15059         * expression.cs (Binary.ResolveOperator): Catch the 
15060         operator + (E x, E y) error earlier, and later allow for implicit
15061         conversions in operator +/- (E e, U x) from U to the underlying
15062         type of E.
15063
15064         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
15065         52596, if the container class is abstract, the default constructor
15066         is protected otherwise its public (before, we were always public).
15067
15068         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
15069         fixed statement.
15070
15071         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
15072         Jemlich that fixes bug #52597, MCS was generating invalid code for
15073         idisposable structs.   Thanks to Ben for following up with this
15074         bug as well.
15075
15076 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
15077
15078         * driver.cs: Allow assemblies without code to be generated, fixes
15079         52230.
15080
15081 2004-01-07  Nick Drochak <ndrochak@gol.com>
15082
15083         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
15084
15085 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
15086
15087         * cs-parser.jay: Add rules to improve error reporting if fields or
15088         methods are declared at the namespace level (error 116)
15089
15090         * Add rules to catch event add/remove
15091
15092 2004-01-04  David Sheldon <dave-mono@earth.li>
15093
15094   * expression.cs: Added matching ")" to error message for 
15095   CS0077
15096
15097 2004-01-03 Todd Berman <tberman@gentoo.org>
15098
15099         * ecore.cs, attribute.cs:
15100         Applying fix from #52429.
15101
15102 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15103
15104         * ecore.cs, expression.cs, statement.cs:
15105         Total rewrite of how we handle branching. We
15106         now handle complex boolean expressions with fewer
15107         jumps. As well if (x == 0) no longer emits a ceq.
15108
15109         if (x is Foo) is much faster now, because we generate
15110         better code.
15111
15112         Overall, we get a pretty big improvement on our benchmark
15113         tests. The code we generate is smaller and more readable.
15114
15115         I did a full two-stage bootstrap. The patch was reviewed
15116         by Martin and Miguel.
15117
15118 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15119
15120         * cs-parser.jay: Make primary_expression not take a QI.
15121         we dont need this because the member_access rule covers
15122         us here. So we replace the rule with just IDENTIFIER.
15123
15124         This has two good effects. First, we remove a s/r conflict.
15125         Second, we allocate many fewer QualifiedIdentifier objects.
15126
15127 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15128
15129         * attribute.cs: Handle MarshalAs attributes as pseudo, and
15130         set the correct information via SRE. This prevents
15131         hanging on the MS runtime. Fixes #29374.
15132
15133 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15134
15135         * convert.cs: correctly handle conversions to value types
15136         from Enum and ValueType as unboxing conversions.
15137
15138         Fixes bug #52569. Patch by Benjamin Jemlich.
15139
15140 2004-01-02  Ravi Pratap  <ravi@ximian.com>
15141
15142         * expression.cs (BetterConversion): Prefer int -> uint
15143         over int -> ulong (csc's behaviour). This fixed bug #52046.
15144
15145 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15146
15147         * decl.cs (MemberCache.FindMembers): now returns a
15148         MemberInfo [].
15149
15150         * typemanager.cs: In general, go with with ^^.
15151         (CopyNewMethods): take an IList.
15152         (RealMemberLookup): Only allocate an arraylist
15153         if we copy from two sets of methods.
15154
15155         This change basically does two things:
15156         1) Fewer array lists allocated due to CopyNewMethods.
15157         2) the explicit cast in MemberList costed ALOT.
15158
15159 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
15160
15161         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
15162         a hashtable to avoid needless string allocations when an identifier is
15163         used more than once (the common case).
15164
15165 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
15166
15167         * pending.cs: MS's TypeBuilder.GetInterfaces ()
15168         is broken, it will not return anything. So, we
15169         have to use the information we have in mcs to
15170         do the task.
15171
15172         * typemanager.cs: Add a cache for GetInterfaces,
15173         since this will now be used more often (due to ^^)
15174
15175         (GetExplicitInterfaces) New method that gets the
15176         declared, not effective, interfaces on a type
15177         builder (eg, if you have interface IFoo, interface
15178         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
15179         { IBar }.
15180
15181         This patch makes MCS able to bootstrap itself on
15182         Windows again.
15183
15184 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
15185
15186         * expression.cs: Remove the Nop's that Miguel put
15187         in by mistake.
15188
15189 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15190
15191         * report.cs, codegen.cs: Give the real stack trace to
15192         the error when an exception is thrown.
15193
15194 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15195
15196         * decl.cs: only allocate hashtables for ifaces if 
15197         it is an iface!
15198
15199 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15200
15201         * expression.cs: fix the error from cs0121-2.cs
15202         (a parent interface has two child interfaces that
15203         have a function with the same name and 0 params
15204         and the function is called through the parent).
15205
15206 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
15207
15208         * class.cs, rootcontext.cs, typmanager.cs: do not
15209         leak pointers.
15210
15211 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
15212
15213         * codegen.cs: remove stack for the ec flow branching.
15214         It is already a linked list, so no need.
15215
15216 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
15217
15218         * Makefile: Allow custom profiler here.
15219
15220 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15221
15222         * typemanager.cs (LookupType):
15223           - Use a static char [], because split takes
15224             a param array for args, so it was allocating
15225             every time.
15226           - Do not store true in a hashtable, it boxes.
15227
15228 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15229
15230         * flowanalysis.cs: bytify common enums.
15231
15232 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15233
15234         * modifiers.cs: Add a new set of flags for the
15235         flags allowed on explicit interface impls.
15236         * cs-parser.jay: catch the use of modifiers in
15237         interfaces correctly.
15238         * class.cs: catch private void IFoo.Blah ().
15239
15240         All related to bug #50572.
15241
15242 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15243
15244         * decl.cs: Rewrite the consistant accessability checking.
15245         Accessability is not linear, it must be implemented in
15246         a tableish way. Fixes #49704.
15247
15248 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15249
15250         * expression.cs: Handle negation in a checked context.
15251         We must use subtraction from zero. Fixes #38674.
15252
15253 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15254
15255         * class.cs: Ignore static void main in DLLs.
15256         * rootcontext.cs: Handle the target type here,
15257         since we are have to access it from class.cs
15258         * driver.cs: account for the above.
15259
15260 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15261
15262         * report.cs: Give line numbers and files if available.
15263
15264 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
15265
15266         * driver.cs: Implement /addmodule.
15267
15268         * typemanager.cs:  Change 'modules' field so it now contains Modules not
15269         ModuleBuilders.
15270
15271 2003-12-20  Martin Baulig  <martin@ximian.com>
15272
15273         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
15274         (FieldBase.IsAssigned): Removed this field.
15275         (FieldBase.SetAssigned): New public method.
15276         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
15277
15278 2003-12-20  Martin Baulig  <martin@ximian.com>
15279
15280         * expression.cs (LocalVariableReference.DoResolve): Don't set
15281         `vi.Used' if we're called from DoResolveLValue().
15282
15283         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
15284         returns the usage vector it just merged into the current one -
15285         pass this one to UsageWarning().
15286         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
15287         of the `EmitContext', don't call this recursively on our children.
15288
15289 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
15290
15291         * driver.cs: Implement /target:module.
15292
15293 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
15294
15295         * support.cs (CharArrayHashtable): New helper class.
15296
15297         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
15298         char arrays, not strings, so we can avoid creating a string in
15299         consume_identifier if the identifier is a keyword.
15300
15301 2003-12-16  Martin Baulig  <martin@ximian.com>
15302
15303         * statement.cs (LocalInfo.Assigned): Removed this property.
15304         (LocalInfo.Flags): Removed `Assigned'.
15305         (LocalInfo.IsAssigned): New public method; takes the EmitContext
15306         and uses flow analysis.
15307         (Block.UsageWarning): Made this method private.
15308         (Block.Resolve): Call UsageWarning() if appropriate.
15309
15310         * expression.cs (LocalVariableReference.DoResolve): Always set
15311         LocalInfo.Used here.
15312
15313 2003-12-13  Martin Baulig  <martin@ximian.com>
15314
15315         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
15316         any value here; we're now using flow analysis to figure out
15317         whether a statement/block returns a value.
15318
15319 2003-12-13  Martin Baulig  <martin@ximian.com>
15320
15321         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
15322         working again.
15323         (FlowBranching.MergeFinally): Don't call
15324         `branching.CheckOutParameters()' here, this is called in
15325         MergeTopBlock().
15326         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
15327         when adding the `finally' vector.       
15328
15329 2003-12-13  Martin Baulig  <martin@ximian.com>
15330
15331         * flowanalysis.cs
15332         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
15333         actually work and also fix #48962.
15334
15335 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
15336
15337         * decl.cs: Do not check System.Object for nested types,
15338         since we know it does not have any. Big bang for buck:
15339
15340         BEFORE:
15341            Run 1:   8.35 seconds
15342            Run 2:   8.32 seconds
15343            corlib:  17.99 seconds
15344         AFTER:
15345            Run 1:   8.17 seconds
15346            Run 2:   8.17 seconds
15347            corlib:  17.39 seconds
15348
15349 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
15350
15351         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
15352         time we are returning 0 members, so we save alot here.
15353
15354 2003-12-11  Martin Baulig  <martin@ximian.com>
15355
15356         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
15357         `MergeChild()', also just take the `FlowBranching' as argument;
15358         call Merge() on it and return the result.
15359         (FlowBranching.Merge): We don't need to do anything if we just
15360         have one sibling.
15361
15362 2003-12-11  Martin Baulig  <martin@ximian.com>
15363
15364         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
15365         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
15366         Maurer for this idea.
15367
15368 2003-12-11  Martin Baulig  <martin@ximian.com>
15369
15370         * flowanalysis.cs (MergeResult): This class is now gone; we now
15371         use the `UsageVector' for this.  The reason for this is that if a
15372         branching just has one sibling, we don't need to "merge" them at
15373         all - that's the next step to do.
15374         (FlowBranching.Merge): We now return a `UsageVector' instead of a
15375         `MergeResult'.
15376
15377 2003-12-11  Martin Baulig  <martin@ximian.com>
15378
15379         Reworked flow analyis and made it more precise and bug-free.  The
15380         most important change is that we're now using a special `Reachability'
15381         class instead of having "magic" meanings of `FlowReturns'.  I'll
15382         do some more cleanups and optimizations and also add some more
15383         documentation this week.
15384
15385         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
15386         largely reworked this class.
15387         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
15388         the new `Reachability' class instead of having "magic" values here.
15389         (FlowBranching): We're now using an instance of `Reachability'
15390         instead of having separate `Returns', `Breaks' etc. fields.
15391
15392         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
15393         based on flow analysis; ignore the return value of block.Emit ().
15394
15395 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
15396
15397         * driver.cs typemanager.cs: Find the mono extensions to corlib even
15398         if they are private.
15399
15400 2003-12-09  Martin Baulig  <martin@ximian.com>
15401
15402         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
15403         call them directly on the UsageVector.
15404
15405 2003-12-09  Martin Baulig  <martin@ximian.com>
15406
15407         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
15408         Changed return type from `FlowReturns' to `Reachability'.
15409
15410 2003-12-09  Martin Baulig  <martin@ximian.com>
15411
15412         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
15413         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
15414         `Reachable' fields with a single `Reachability' one.
15415
15416 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15417
15418         * class.cs (FindMembers): Remove foreach's.
15419
15420         Bootstrap times:
15421
15422         BEFORE
15423                 Run 1:   8.74 seconds
15424                 Run 2:   8.71 seconds
15425
15426         AFTER
15427                 Run 1:   8.64 seconds
15428                 Run 2:   8.58 seconds
15429
15430
15431 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15432
15433         * cs-parser.jay:
15434         * gen-treedump.cs:
15435         * statement.cs:
15436         This patch does a few things:
15437                 1. EmptyStatement is now a singleton, so it is never reallocated.
15438                 2. All blah is EmptyStatement constructs have been changed to
15439                    blah == EmptyStatement.Value, which is much faster and valid
15440                    now that EmptyStatement is a singleton.
15441                 3. When resolving a block, rather than allocating a new array for
15442                    the non-empty statements, empty statements are replaced with
15443                    EmptyStatement.Value
15444                 4. Some recursive functions have been made non-recursive.
15445         Mainly the performance impact is from (3), however (1) and (2) are needed for
15446         this to work. (4) does not make a big difference in normal situations, however
15447         it makes the profile look saner.
15448
15449         Bootstrap times:
15450
15451         BEFORE
15452         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15453         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15454         Total memory allocated: 56397 KB
15455
15456         AFTER
15457         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
15458         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
15459         Total memory allocated: 55666 KB
15460
15461 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15462
15463         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
15464         than the hashtable in a hashtable version
15465
15466         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
15467         we always end up concating a string. This results in a huge perf
15468         loss, because many strings have to be tracked by the GC. In this
15469         patch, we first use a hashtable that works with two keys, so that
15470         the strings do not need to be concat'ed.
15471
15472         Bootstrap times:
15473         BEFORE
15474                 Run 1:   8.74 seconds
15475                 Run 2:   8.71 seconds
15476
15477         AFTER
15478                 Run 1:   8.65 seconds
15479                 Run 2:   8.56 seconds
15480
15481 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15482
15483         * Makefile: Add a new target `do-time' that does a quick and simple
15484         profile, leaving easy to parse output.
15485
15486 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
15487
15488         * codegen.cs (Init): Create the dynamic assembly with 
15489         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
15490
15491 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15492
15493         * support.cs: Make the PtrHashtable use only one
15494         instance of its comparer.
15495
15496 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
15497
15498         * typemanager.cs: Fix lookup of GetNamespaces.
15499
15500 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
15501
15502         * expression.cs: Removed redundant line.
15503
15504         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
15505         ArrayLists, use for loops with bounds.  
15506
15507         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
15508         arraylist.
15509
15510         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
15511         arraylists, use for loop with bounds.
15512
15513         The above three changes give us a 0.071 second performance
15514         improvement out of 3.294 seconds down to 3.223.  On my machine
15515         the above changes reduced the memory usage by 1,387 KB during
15516         compiler bootstrap.
15517
15518         * cs-parser.jay (QualifiedIdentifier): New class used to represent
15519         QualifiedIdentifiers.  Before we created a new string through
15520         concatenation, and mostly later on, the result would be
15521         manipulated by DecomposeQI through string manipulation.
15522
15523         This reduced the compiler memory usage for bootstrapping from
15524         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
15525         compile times in 0.05 seconds.
15526
15527 2003-11-28  Dick Porter  <dick@ximian.com>
15528
15529         * support.cs: Do string compares with the Invariant culture.
15530
15531         * rootcontext.cs: 
15532         * gen-treedump.cs: 
15533         * expression.cs: 
15534         * driver.cs: 
15535         * decl.cs: 
15536         * codegen.cs: 
15537         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
15538         the comparison is done with the Invariant culture.
15539
15540 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
15541
15542         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
15543         GetEnumerator method.
15544
15545         (ProbeCollectionType): Iterate starting at the most specific type
15546         upwards looking for a GetEnumerator
15547
15548         * expression.cs: Shift count can be up to 31 for int/uint and 63
15549         for long/ulong.
15550
15551 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
15552
15553         * statement.cs (Block.LookupLabel): Also look for the label on the
15554         children blocks.  Use a hash table to keep track of visited
15555         nodes. 
15556
15557         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
15558         we actually did transform the other operand, otherwise fall back
15559         to the common codepath that casts to long.
15560
15561         * cs-tokenizer.cs: Use the same code pattern as the int case.
15562         Maybe I should do the parsing myself, and avoid depending on the
15563         Parse routines to get this done.
15564
15565 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
15566
15567         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15568         which fixes bug 51347.  This time test it.
15569
15570         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
15571         attributes for example can not tell the difference between these.
15572         The difference was only a syntax feature of the language. 
15573
15574         * attribute.cs: Apply attributes to delegates.
15575
15576         * delegate.cs: Call the apply attributes method.
15577
15578 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
15579
15580         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
15581         comparing 0 vs Byte.MinValue, not the value
15582
15583         (ImplicitConversionRequired): When reporting a conversion error,
15584         use error 31 to print out the constant error instead of the
15585         simpler 29.
15586
15587         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15588         which fixes bug 51347.
15589
15590 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
15591
15592         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
15593         which fixes the -warnaserror command line option.
15594
15595 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
15596
15597         * cfold.cs (DoNumericPromotions): During constant folding of
15598         additions on UIntConstant, special case intconstants with
15599         IntConstants like we do on the expression binary operator. 
15600
15601 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
15602
15603         * convert.cs (ImplicitReferenceConversion): We were missing a case
15604         (System.Enum are not value types or class types, so we need to
15605         classify them separatedly).
15606
15607         * driver.cs: We do not support error 2007.
15608
15609 2003-11-12 Jackson Harper <jackson@ximian.com>
15610
15611         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
15612         system directory. Also use the full file name so users can
15613         libraries names mscorlib-o-tron.dll in a non system dir.
15614
15615 2003-11-10  Martin Baulig  <martin@ximian.com>
15616
15617         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
15618         (TypeManager.InitCoreTypes): Initialize them here, but instead of
15619         calling `ResolveType()' on them, directly assign their `Type'.
15620
15621 2003-11-08  Martin Baulig  <martin@ximian.com>
15622
15623         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
15624         return value and the `out parent' parameter.
15625         (TypeContainer.DefineType): Moved the CS0644 check into
15626         GetClassBases().  Don't pass the interface types to the
15627         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
15628         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
15629
15630         * ecore.cs (TypeExpr.IsAttribute): New property.
15631         (TypeExpr.GetInterfaces): New method.
15632
15633         * interface.cs (Interface.GetInterfaceTypeByName): Return a
15634         TypeExpr instead of a Type.
15635         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
15636         (Interface.DefineType): Don't pass the interface types to the
15637         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
15638         them later and then call `TypeBulider.AddInterfaceImplementation()'.
15639
15640         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
15641         instead of a `Type[]'.
15642         (TypeManager.RegisterBuilder): Likewise.
15643         (TypeManager.AddUserInterface): Likewise.
15644         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
15645         `Type[]' and also return a `TypeExpr[]'.
15646         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
15647
15648 2003-11-08  Martin Baulig  <martin@ximian.com>
15649
15650         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
15651         Expression.     
15652
15653 2003-11-08  Martin Baulig  <martin@ximian.com>
15654
15655         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
15656         TypeManager.ResolveExpressionTypes().
15657
15658         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
15659         instead of an Expression.
15660         (TypeExpr): This is now an abstract base class for `TypeExpression'.
15661         (TypeExpression): New public class; formerly known as `TypeExpr'.
15662
15663         * expression.cs (ComposedCast): Derive from TypeExpr.
15664
15665         * typemanager.cs (TypeManager.system_*_expr): These are now
15666         TypExpr's instead of Expression's.
15667         (TypeManager.ResolveExpressionTypes): New public static function;
15668         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
15669         of them.        
15670
15671 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
15672
15673         * expression.cs (New.DoResolve): Do not dereference value that
15674         might be a null return.
15675
15676         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
15677         sure that the constant value has the right type.  Fixes an
15678         unreported bug, similar to 50425.
15679
15680         * const.cs (Const.LookupConstantValue): Call
15681         ImplicitStandardConversionExists before doing a conversion to
15682         avoid havng the TypeManager.ChangeType do conversions.
15683
15684         Reduced the number of casts used
15685
15686         (Const.ChangeType): New routine to enable reuse of the constant
15687         type changing code from statement.
15688
15689         * typemanager.cs (ChangeType): Move common initialization to
15690         static global variables.
15691
15692         Fixes #50425.
15693
15694         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
15695         every value type to go through, even if it was void.  Fix that. 
15696
15697         * cs-tokenizer.cs: Use is_identifier_start_character on the start
15698         character of the define, and the is_identifier_part_character for
15699         the rest of the string.
15700
15701 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
15702
15703         * expression.cs (UnaryMutator.EmitCode): When I updated
15704         LocalVariableReference.DoResolve, I overdid it, and dropped an
15705         optimization done on local variable references.
15706
15707 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
15708
15709         * ecore.cs: Convert the return from Ldlen into an int.
15710
15711 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
15712
15713         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
15714         the accessibility, this is a special case for toplevel non-public
15715         classes (internal for instance).
15716
15717 2003-10-20  Nick Drochak <ndrochak@gol.com>
15718
15719         * ecore.cs: Fix typo and build.  Needed another right paren.
15720
15721 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
15722
15723         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
15724         `internal' case regular and protected, but not allowing protected
15725         to be evaluated later.  Bug 49840
15726
15727 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
15728
15729         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
15730         to kb.Nlast, and not the kb.nFirst to isolate the switch
15731         statement.
15732
15733         Extract the underlying type, so enumerations of long/ulong are
15734         treated like long/ulong.
15735
15736 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
15737
15738         * expression.cs (New): Overload the meaning of RequestedType to
15739         track the possible creation of the NewDelegate type, since
15740         DoResolve is invoked more than once for new constructors on field
15741         initialization.
15742
15743         See bugs: #48800 and #37014
15744
15745         * cs-parser.jay (declare_local_constants): Take an arraylist
15746         instead of a single constant.
15747
15748         (local_constant_declaration): It should take a
15749         constant_declarators, not a constant_declarator.  Fixes 49487
15750
15751         * convert.cs: Fix error report.
15752
15753 2003-10-13 Jackson Harper <jackson@ximian.com>
15754
15755         * typemanager.cs (TypeToCoreType): Add float and double this fixes
15756         bug #49611
15757
15758 2003-10-09  Martin Baulig  <martin@ximian.com>
15759
15760         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
15761         to the .ctor.
15762         (MethodCore.DoDefineParameters): Removed the TypeContainer
15763         argument; use the DeclSpace which was passed to the .ctor instead.
15764         (MethodCore.CheckParameter): Take a DeclSpace instead of a
15765         TypeContainer; we only need a DeclSpace here.
15766
15767 2003-10-09  Martin Baulig  <martin@ximian.com>
15768
15769         * class.cs (MethodData): Added additional `DeclSpace ds' argument
15770         to the .ctor.
15771         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
15772         EmitContext's .ctor.    
15773
15774 2003-10-09  Martin Baulig  <martin@ximian.com>
15775
15776         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
15777         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
15778         AsAccessible(), moved them as well.
15779
15780         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
15781
15782 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
15783
15784         * cs-parser.jay : Renamed yyName to yyNames related to jay.
15785
15786 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
15787
15788         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
15789         generation for >=, as spotted by Paolo, bug 48679.  
15790         Patch from David Waite.
15791
15792         * cs-tokenizer.cs: Add handling for #pragma.
15793
15794         * cs-parser.jay: Allow for both yield and yield return in the
15795         syntax.  The anti-cobolization of C# fight will go on!
15796
15797         * class.cs (TypeBuilder.DefineType): Catch error condition here
15798         (Parent.DefineType erroring out and returning null).
15799
15800         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15801         coping with enumerations variables, we were mistakenly processing
15802         them as a regular value type instead of built-in types.  Fixes the
15803         bug #48063
15804
15805         * typemanager.cs (IsBuiltinOrEnum): New method.
15806
15807 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
15808
15809         * cs-parser.jay: Upgrade: yield now needs the return clause.
15810
15811 2003-09-19  Martin Baulig  <martin@ximian.com>
15812
15813         * decl.cs (MemberCache.SetupCacheForInterface): Take a
15814         `MemberCache parent' argument.  Normally, an interface doesn't
15815         have a parent type except System.Object, but we use this in gmcs
15816         for generic type parameters.
15817
15818 2003-09-18  Martin Baulig  <martin@ximian.com>
15819
15820         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
15821         on `type.IsInterface'; don't check whether the type has a parent
15822         to determine whether it's an interface.
15823
15824 2003-09-15  Martin Baulig  <martin@ximian.com>
15825
15826         * class.cs (TypeContainer.DefineType): Added an error flag to
15827         avoid reporting duplicate CS0146's ("class definition is
15828         circular.").
15829
15830         * driver.cs (Driver.MainDriver): Abort if
15831         RootContext.ResolveTree() reported any errors.
15832
15833 2003-09-07  Martin Baulig  <martin@ximian.com>
15834
15835         * report.cs (Error, Warning): Added overloaded versions which take
15836         a `params object[] args' and call String.Format().
15837
15838 2003-09-07  Martin Baulig  <martin@ximian.com>
15839
15840         * decl.cs (DeclSpace..ctor): Don't call
15841         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
15842         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
15843         (DeclSpace.RecordDecl): New method.
15844
15845         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
15846
15847 2003-09-02  Ravi Pratap  <ravi@ximian.com>
15848
15849         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
15850         value attributes to be applied to ParameterBuilders.
15851
15852         * class.cs (MethodCore.LabelParameters): Make static and more
15853         generic so that it can be used from other places - like interface
15854         methods, for instance.
15855
15856         * interface.cs (Interface.Emit): Call LabelParameters before
15857         emitting attributes on the InterfaceMethod.
15858
15859 2003-08-26  Martin Baulig  <martin@ximian.com>
15860
15861         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
15862         resolving aliases; fixes #47927.
15863
15864 2003-08-26  Martin Baulig  <martin@ximian.com>
15865
15866         * statement.cs (Using.DoResolve): This is internally emitting a
15867         try/finally clause, so we need to set ec.NeedExplicitReturn if we
15868         do not always return.  Fixes #47681.
15869
15870 2003-08-26  Martin Baulig  <martin@ximian.com>
15871
15872         * decl.cs (MemberCore): Moved WarningNotHiding(),
15873         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
15874         into MemberBase.
15875         (AdditionResult): Make this nested in DeclSpace.
15876         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
15877         argument; call NamespaceEntry.Define() unless we're nested in a
15878         class or struct.
15879
15880         * namespace.cs (Namespace.DefineName): New public function.  This
15881         is called from DeclSpace's .ctor to add 
15882         (Namespace.Lookup): Include DeclSpaces in the lookup.
15883
15884         * class.cs (Operator): Derive from MemberBase, not MemberCore.
15885
15886         * const.cs (Const): Derive from MemberBase, not MemberCore.     
15887
15888 2003-08-25  Martin Baulig  <martin@ximian.com>
15889
15890         * convert.cs (Convert.ExplicitReferenceConversion): When
15891         converting from an interface type to a class, unbox if the target
15892         type is a struct type.  Fixes #47822.
15893
15894 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15895
15896         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
15897         #47854.
15898
15899 2003-08-22  Martin Baulig  <martin@ximian.com>
15900
15901         * class.cs (TypeManager.DefineType): When defining a nested type,
15902         call DefineType() on our parent; fixes #47801.
15903
15904 2003-08-22  Martin Baulig  <martin@ximian.com>
15905
15906         * class.cs (MethodData.Define): While checking if a method is an
15907         interface implementation, improve the test a bit more to fix #47654.
15908
15909 2003-08-22  Martin Baulig  <martin@ximian.com>
15910
15911         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
15912         correctly; fixes #47722.
15913
15914 2003-08-22  Martin Baulig  <martin@ximian.com>
15915
15916         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
15917         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
15918
15919         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
15920
15921 2003-08-22  Martin Baulig  <martin@ximian.com>
15922
15923         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
15924         can only be assigned in static constructors.  Fixes #47161.
15925
15926 2003-08-22  Martin Baulig  <martin@ximian.com>
15927
15928         Rewrote and improved the flow analysis code.
15929
15930         * flowbranching.cs (FlowBranching): Make this class abstract.
15931         (FlowBranching.CreateBranching): New static function to create a
15932         new flow branching.
15933         (FlowBranchingBlock, FlowBranchingException): New classes.
15934         (FlowBranching.UsageVector.Type): New public readonly field.
15935         (FlowBranching.UsageVector.Breaks): Removed the setter.
15936         (FlowBranching.UsageVector.Returns): Removed the setter.
15937         (FlowBranching.UsageVector): Added Break(), Return(),
15938         NeverReachable() and Throw() methods to modify the reachability.
15939         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
15940         done by FlowBranching.Merge().
15941         (FlowBranching.UsageVector.MergeChild): New method; merges the
15942         merge result into the current vector.
15943         (FlowBranching.Merge): New abstract method to merge a branching.
15944
15945 2003-08-12  Martin Baulig  <martin@ximian.com>
15946
15947         * expression.cs (Indirection.CacheTemporaries): Create the
15948         LocalTemporary with the pointer type, not its element type.
15949
15950 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
15951
15952         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
15953         token was a keyword or not.
15954
15955         Add `error' options where an IDENTIFIER was expected;  Provide
15956         CheckToken and CheckIdentifierToken convenience error reporting
15957         functions. 
15958
15959         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
15960
15961         * decl.cs: Rename `NamespaceEntry Namespace' public field into
15962         NameSpaceEntry NameSpaceEntry.
15963
15964         (LookupInterfaceOrClass): Avoid creating a full qualified name
15965         from namespace and name: avoid doing lookups when we know the
15966         namespace is non-existant.   Use new Tree.LookupByNamespace which
15967         looks up DeclSpaces based on their namespace, name pair.
15968
15969         * driver.cs: Provide a new `parser verbose' to display the
15970         exception thrown during parsing.  This is turned off by default
15971         now, so the output of a failure from mcs is more graceful.
15972
15973         * namespace.cs: Track all the namespaces defined in a hashtable
15974         for quick lookup.
15975
15976         (IsNamespace): New method
15977
15978 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
15979
15980         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
15981         we know that we need to concatenate (full typename can never be
15982         null). 
15983
15984         * class.cs: ditto.
15985
15986         * statement.cs: Use a bitfield;  Do not initialize to null things
15987         which are done by the constructor by default.
15988
15989         * cs-parser.jay: bug fix, parameter was 4, not 3.
15990
15991         * expression.cs: Just use the property;
15992
15993         * statement.cs: No need for GetVariableInfo method.
15994
15995 2003-08-08  Martin Baulig  <martin@ximian.com>
15996
15997         * flowanalysis.cs (FlowReturns): This is now nested in the
15998         `FlowBranching' class.
15999         (MyBitVector): Moved this here from statement.cs.
16000         (FlowBranching.SiblingType): New enum type.
16001         (FlowBranching.CreateSibling): Added `SiblingType' argument.
16002
16003 2003-08-07  Martin Baulig  <martin@ximian.com>
16004
16005         * flowanalysis.cs (FlowBranchingType): This is now nested in the
16006         `FlowBranching' class and called `BranchingType'.
16007
16008 2003-08-07  Martin Baulig  <martin@ximian.com>
16009
16010         * flowanalysis.cs: Moved all the control flow analysis code into
16011         its own file.
16012
16013 2003-08-07  Martin Baulig  <martin@ximian.com>
16014
16015         * assign.cs (Assign.DoResolve): `target' must either be an
16016         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
16017         #37319.
16018
16019 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
16020
16021         * expression.cs (BinaryMethod): This kind of expression is created by the
16022         Binary class if it determines that the operator has to be handled
16023         by a method.
16024
16025         (BinaryDelegate): This kind of expression is created if we are
16026         dealing with a + or - operator on delegates.
16027
16028         (Binary): remove method, argumetns, and DelegateOperator: when
16029         dealing with methods, 
16030
16031         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
16032
16033         * statement.cs (Block): use bitfields for the three extra booleans
16034         we had in use.   Remove unused topblock parameter.
16035
16036         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
16037
16038         * assign.cs: Drop extra unneeded tests.
16039
16040 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
16041
16042         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
16043
16044         * statement.cs (Foreach): Use VariableStorage instead of
16045         LocalBuilders.   
16046
16047         * codegen.cs (VariableStorage): New class used by clients that
16048         require a variable stored: locals or fields for variables that
16049         need to live across yield.
16050
16051         Maybe provide a convenience api for EmitThis+EmitLoad?
16052
16053         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
16054         these bad boys.
16055
16056 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
16057
16058         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
16059         RemapParameterLValue): New methods that are used to turn a
16060         precomputed FieldInfo into an expression like this:
16061
16062                 instance.FieldInfo
16063
16064         The idea is to use this instead of making LocalVariableReference
16065         have more than one meaning.
16066
16067         * cs-parser.jay: Add error production to BASE.
16068
16069         * ecore.cs: Deal with TypeManager.GetField returning null, which
16070         is now a valid return value.
16071
16072         (FieldExprNoAddress): New expression for Fields whose address can
16073         not be taken.
16074
16075         * expression.cs (LocalVariableReference): During the resolve
16076         phases, create new expressions if we are in a remapping context.
16077         Remove code that dealt with remapping here.
16078
16079         (ParameterReference): same.
16080
16081         (ProxyInstance): New expression, like the `This' expression, but
16082         it is born fully resolved.  We know what we are doing, so remove
16083         the errors that are targeted to user-provided uses of `this'.
16084
16085         * statement.cs (Foreach): our variable is now stored as an
16086         Expression;  During resolution, follow the protocol, dont just
16087         assume it will return this.
16088
16089 2003-08-06  Martin Baulig  <martin@ximian.com>
16090
16091         * support.cs (SeekableStreamReader.cs): New public class.
16092
16093         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
16094         SeekableStreamReader instead of the normal StreamReader.
16095
16096 2003-08-04  Martin Baulig  <martin@ximian.com>
16097
16098         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
16099         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
16100         deambiguate casts and delegate invocations.
16101         (parenthesized_expression): Use the new tokens to ensure this is
16102         not a cast of method invocation.
16103
16104         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
16105         when reading a `)' and Deambiguate_CloseParens () was previously
16106         called.
16107
16108         * expression.cs (ParenthesizedExpression): New class.  This is
16109         just used for the CS0075 test.
16110         (Binary.DoResolve): Check for CS0075.   
16111
16112 2003-07-29  Ravi Pratap  <ravi@ximian.com>
16113
16114         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
16115         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
16116         reference comparison.
16117
16118         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
16119         examine the ReturnType for equality - this is necessary in the
16120         cases of implicit and explicit operators whose signature also
16121         includes the return type.
16122
16123 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
16124
16125         * namespace.cs: Cache the result of the namespace computation,
16126         instead of computing it every time.
16127
16128 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
16129
16130         * decl.cs: Use a global arraylist that we reuse over invocations
16131         to avoid excesive memory consumption.  Reduces memory usage on an
16132         mcs compile by one meg (45 average).
16133
16134         * typemanager.cs (LookupTypeReflection): In .NET pointers are
16135         private, work around that.
16136
16137 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
16138
16139         * literal.cs (IntLiteral): Define Zero and One static literals. 
16140
16141         * cs-parser.jay (integer_literal): use static literals to reduce
16142         memory usage for the most used literals (0, 1 and -1).  211kb
16143         reduced in memory usage.
16144
16145         Replace all calls to `new ArrayList' with `new
16146         ArrayList(4)' which is a good average number for most allocations,
16147         and also requires only 16 bytes of memory for its buffer by
16148         default. 
16149
16150         This reduced MCS memory usage in seven megabytes for the RSS after
16151         bootstrapping.
16152
16153 2003-07-28  Ravi Pratap  <ravi@ximian.com>
16154
16155         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
16156         handle params methods the correct way by forming only one
16157         applicable set with params and normal methods in them. Earlier we
16158         were looking at params methods only if we found no normal methods
16159         which was not the correct thing to do.
16160
16161         (Invocation.BetterFunction): Take separate arguments indicating
16162         when candidate and the best method are params methods in their
16163         expanded form.
16164
16165         This fixes bugs #43367 and #46199.
16166
16167         * attribute.cs: Documentation updates.
16168
16169         (CheckAttribute): Rename to CheckAttributeTarget.
16170         (GetValidPlaces): Rename to GetValidTargets.
16171
16172         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
16173         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
16174
16175         Fixes bug #44468.
16176
16177 2003-07-28  Martin Baulig  <martin@ximian.com>
16178
16179         * class.cs (TypeContainer.DefineMembers): Use the base type's full
16180         name when looking up the base class of a nested class.  Fixes #46977.
16181
16182 2003-07-26  Martin Baulig  <martin@ximian.com>
16183
16184         * expression.cs (Indexers.Indexer): New nested struct; contains
16185         getter, setter and the indexer's type.
16186         (Indexers.Properties): This is now an ArrayList of
16187         Indexers.Indexer's.
16188         (IndexerAccess.DoResolveLValue): Correctly set the type if the
16189         indexer doesn't have any getters.
16190
16191         * assign.cs (Assign.DoResolve): Also do the implicit conversions
16192         for embedded property and indexer assignments.
16193
16194 2003-07-26  Martin Baulig  <martin@ximian.com>
16195
16196         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
16197         preprocessor directive is not the first non-whitespace character
16198         on a line.
16199
16200 2003-07-26  Martin Baulig  <martin@ximian.com>
16201
16202         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
16203         namespace parsing, follow the spec more closely.
16204
16205         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
16206         NamespaceEntry.Lookup().
16207
16208 2003-07-25  Martin Baulig  <martin@ximian.com>
16209
16210         * MethodCore.cs (OverridesSomething): New public field; it's set
16211         from TypeContainer.DefineMembers if this method overrides
16212         something (which doesn't need to be a method).  Fix #39462.
16213
16214 2003-07-25  Ravi Pratap  <ravi@ximian.com>
16215
16216         * typemanager.cs (GetMembers): Ensure that the list of members is
16217         reversed. This keeps things in sync.
16218
16219         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
16220         find an AttributeUsage attribute.
16221
16222         * expression.cs (Invocation.OverloadResolve): Perform the check
16223         which disallows Invoke to be directly called on a Delegate.
16224
16225         (Error_InvokeOnDelegate): Report error cs1533.
16226
16227 2003-07-25  Martin Baulig  <martin@ximian.com>
16228
16229         * expression.cs (Indexers.GetIndexersForType): Only look in the
16230         interface hierarchy if the requested type is already an
16231         interface.  Fixes #46788 while keeping #46502 fixed.
16232
16233 2003-07-25  Martin Baulig  <martin@ximian.com>
16234
16235         * class.cs (TypeContainer.DefineMembers): Check whether all
16236         readonly fields have been assigned and report warning CS0649 if
16237         not.
16238
16239         * statement.cs (LocalInfo.IsFixed): Always return true if this is
16240         a valuetype.
16241
16242 2003-07-24  Ravi Pratap  <ravi@ximian.com>
16243
16244         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
16245         returned from GetMethods to make things consistent with the
16246         assumptions MCS makes about ordering of methods.
16247
16248         This should comprehensively fix bug #45127 and it does :-)
16249
16250         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
16251         ordering is actually reverse.
16252
16253         * Clean up some debug messages I left lying around.
16254
16255         * interface.cs (Populate*): Get rid of code which emits attributes
16256         since the stage in which we emit attributes is the 'Emit' stage,
16257         not the define stage.
16258
16259         (Emit): Move attribute emission for interface members here.
16260
16261 2003-07-22  Ravi Pratap  <ravi@ximian.com>
16262
16263         * expression.cs (Invocation.OverloadResolve): Follow the spec more
16264         closely: we eliminate methods in base types when we have an
16265         applicable method in a top-level type.
16266
16267         Please see section 14.5.5.1 for an exact description of what goes
16268         on. 
16269
16270         This fixes bug #45127 and a host of other related to corlib compilation.
16271
16272         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
16273         array is the method corresponding to the top-level type (this is
16274         because of the changes made to icall.c) so we change this
16275         accordingly.
16276
16277         (MethodGroupExpr.Name): This too.
16278
16279         * typemanager.cs (GetElementType): New method which does the right
16280         thing when compiling corlib. 
16281
16282         * everywhere: Make use of the above in the relevant places.
16283
16284 2003-07-22  Martin Baulig  <martin@ximian.com>
16285
16286         * cs-parser.jay (invocation_expression): Moved
16287         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
16288         `cast_expression', but create a InvocationOrCast which later
16289         resolves to either an Invocation or a Cast.
16290
16291         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
16292         method; call this before EmitStatement() to make sure that this
16293         expression can be used as a statement.
16294
16295         * expression.cs (InvocationOrCast): New class; resolves to either
16296         an Invocation or a Cast.
16297
16298         * statement.cs (StatementExpression): Call ResolveStatement() on
16299         the ExpressionStatement before emitting it.
16300
16301 2003-07-21  Martin Baulig  <martin@ximian.com>
16302
16303         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
16304         `ref' and `out' attributes match; fixes #46220.
16305         (MemberAccess.ResolveMemberAccess): You can't reference a type
16306         through an expression; fixes #33180.
16307         (Indexers.GetIndexersForType): Don't return the indexers from
16308         interfaces the class implements; fixes #46502.
16309
16310 2003-07-21  Martin Baulig  <martin@ximian.com>
16311
16312         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
16313         CS0661 checks; fixes bug #30442.
16314
16315 2003-07-21  Martin Baulig  <martin@ximian.com>
16316
16317         * decl.cs (AdditionResult): Added `Error'.
16318
16319         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
16320
16321         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
16322         makes cs0031.cs actually work.
16323
16324 2003-07-20  Martin Baulig  <martin@ximian.com>
16325
16326         * namespace.cs: Fixed that bug which caused a crash when compiling
16327         the debugger's GUI.
16328
16329 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
16330
16331         * typemanager.cs (LookupTypeReflection): Never expose types which
16332         are NotPublic, NestedPrivate, NestedAssembly, or
16333         NestedFamANDAssem.  We used to return these, and later do a check
16334         that would report a meaningful error, but the problem is that we
16335         would not get the real match, if there was a name override.
16336
16337 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
16338
16339         * namespace.cs (Namespace, Name): Do not compute the namespace
16340         name dynamically, compute it in the constructor.  This reduced
16341         memory usage by 1697 KB.
16342
16343         * driver.cs: Use --pause to pause at the end.
16344
16345 2003-07-17  Peter Williams  <peter@newton.cx>
16346
16347         * Makefile: Change the name of the test target so that it doesn't
16348         conflict with the recursive test target.
16349
16350 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
16351
16352         * expression.cs (LocalVariableReference.Emit, EmitAssign,
16353         AddressOf): Do not use EmitThis, that was wrong, use the actual
16354         this pointer.
16355
16356 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
16357
16358         * class.cs (MethodData.Define): While checking if a method is an
16359         interface implementation, improve the test: If we are not public
16360         (use new test here: use the computed MethodAttributes directly,
16361         instead of the parsed modifier flags) check if the `implementing'
16362         method comes from an interface or not.
16363
16364         * pending.cs (VerifyPendingMethods): Slightly better error
16365         message.
16366
16367         * makefile: add test target that does the mcs bootstrap.
16368
16369 2003-07-16  Ravi Pratap  <ravi@ximian.com>
16370
16371         * interface.cs (Define): Do nothing here since there are no
16372         members to populate etc. Move the attribute emission out of here
16373         since this was just totally the wrong place to put it. Attribute
16374         application happens during the 'Emit' phase, not in the 'Define'
16375         phase.
16376
16377         (Emit): Add this method and move the attribute emission here
16378
16379         * rootcontext.cs (EmitCode): Call the Emit method on interface
16380         types too.
16381
16382 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16383
16384         * expression.cs (OverloadResolve): Report error only if Location
16385         is not 'Null' which means that there was a probe going on.
16386
16387 2003-07-14  Martin Baulig  <martin@ximian.com>
16388
16389         * expression.cs (ConditionalLogicalOperator): New public class to
16390         implement user defined conditional logical operators.
16391         This is section 14.11.2 in the spec and bug #40505.
16392
16393 2003-07-14  Martin Baulig  <martin@ximian.com>
16394
16395         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
16396
16397 2003-07-14  Martin Baulig  <martin@ximian.com>
16398
16399         * codegen.cs (EmitContext.InFixedInitializer): New public field.
16400
16401         * ecore.cs (IVariable.VerifyFixed): New interface method.
16402
16403         * expression.cs (Unary.ResolveOperator): When resolving the `&'
16404         operator, check whether the variable is actually fixed.  Fixes bug
16405         #36055.  Set a variable definitely assigned when taking its
16406         address as required by the spec.
16407
16408         * statement.cs (LocalInfo.IsFixed): New field.
16409         (LocalInfo.MakePinned): Set `IsFixed' to true.
16410
16411 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16412
16413         * attribute.cs (Attribute.Resolve): While doing a Member lookup
16414         for .ctors, ensure that we only ask for members declared in the
16415         attribute type (BindingFlags.DeclaredOnly).
16416
16417         Fixes bug #43632.
16418
16419         * expression.cs (Error_WrongNumArguments): Report error 1501
16420         correctly the way CSC does.
16421
16422 2003-07-13  Martin Baulig  <martin@ximian.com>
16423
16424         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
16425         lookup on the fully qualified name, to make things like "X.X" work
16426         where "X.X" is a fully qualified type name, but we also have a
16427         namespace "X" in the using list.  Fixes #41975.
16428
16429 2003-07-13  Martin Baulig  <martin@ximian.com>
16430
16431         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
16432         function. If we're a CompoundAssign, we need to create an embedded
16433         CompoundAssign, not an embedded Assign.
16434         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
16435         Fixes #45854.
16436
16437 2003-07-13  Martin Baulig  <martin@ximian.com>
16438
16439         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
16440         work to fix bug #46088.
16441
16442 2003-07-13  Ravi Pratap <ravi@ximian.com>
16443
16444         * class.cs (Operator.Emit): Do not emit attributes here - it is
16445         taken care of by the Method class that we delegate too. This takes
16446         care of bug #45876.
16447
16448 2003-07-10  Martin Baulig  <martin@ximian.com>
16449
16450         * expression.cs (TypeOfVoid): New class.
16451         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
16452
16453 2003-07-10  Martin Baulig  <martin@ximian.com>
16454
16455         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
16456         bug #35957.
16457
16458 2003-07-10  Martin Baulig  <martin@ximian.com>
16459
16460         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
16461         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
16462
16463         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
16464
16465         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
16466
16467 2003-07-10  Martin Baulig  <martin@ximian.com>
16468
16469         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
16470         of decimal.  Fixes #42850.
16471
16472         NOTE: I also fixed the created byte blob, but this doesn't work on
16473         the MS runtime and csc never produces any byte blobs for decimal
16474         arrays.
16475
16476 2003-07-10  Martin Baulig  <martin@ximian.com>
16477
16478         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
16479         structs; fixes #32068.
16480         (Block.AddChildVariableNames): Fixed #44302.
16481
16482 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16483
16484         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
16485
16486 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16487
16488         * attribute.cs: And this test is onger needed.
16489
16490 2003-07-08  Martin Baulig  <martin@ximian.com>
16491
16492         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
16493         inaccessible types.  Fixes #36313.
16494
16495         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
16496
16497         * namespace.cs (NamespaceEntry): Create implicit entries for all
16498         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
16499         implicit entries for N1.N2 and N1.
16500
16501 2003-07-08  Martin Baulig  <martin@ximian.com>
16502
16503         Rewrote the handling of namespaces to fix a lot of the issues
16504         wrt. `using' aliases etc.
16505
16506         * namespace.cs (Namespace): Splitted this class into a
16507         per-assembly `Namespace' and a per-file `NamespaceEntry'.
16508
16509         * typemanager.cs (TypeManager.IsNamespace): Removed.
16510         (TypeManager.ComputeNamespaces): Only compute namespaces from
16511         loaded assemblies here, not the namespaces from the assembly we're
16512         currently compiling.
16513
16514 2003-07-08  Martin Baulig  <martin@ximian.com>
16515
16516         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
16517
16518 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16519
16520         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
16521         already fixed it.  
16522
16523         I thought about the memory savings here, but LookupTypeReflection
16524         is used under already very constrained scenarios.  Compiling
16525         corlib or mcs only exposes one hit, so it would not really reduce
16526         any memory consumption.
16527
16528 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16529
16530         * typemanager.cs: fixes bug #45889 by only adding public types from
16531         other assemblies to the list of known types.
16532
16533 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16534
16535         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
16536         on the type we resolved.
16537
16538 2003-07-05  Martin Baulig  <martin@ximian.com>
16539
16540         * pending.cs (PendingImplementation.ParentImplements): Don't
16541         create the proxy if the parent is abstract.
16542
16543         * class.cs (TypeContainer.DefineIndexers): Process explicit
16544         interface implementations first.  Fixes #37714.
16545
16546 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
16547
16548         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
16549         defined recursively;  but since we modify the input parameters
16550         (left is set to `this' temporarily), we reset this value if the
16551         left_is_explicit is false, which gives the original semantics to
16552         the code.  
16553
16554         * literal.cs (NullPointer): new class used to represent a null
16555         literal in a pointer context.
16556
16557         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
16558         type is a pointer, use a NullPointer object instead of a
16559         NullLiteral.   Closes 43687
16560
16561         (ExplicitConversion): Convert pointer values using
16562         the conv opcode to the proper type.
16563
16564         * ecore.cs (New): change ValueTypeVariable property into a method,
16565         that returns whether the valuetype is suitable for being used.
16566
16567         * expression.cs (Binary.DoNumericPromotions): Only return if we
16568         the int constant was a valid uint, and we can return both left and
16569         right as uints.  If not, we continue processing, to trigger the
16570         type conversion.  This fixes 39018.
16571
16572         * statement.cs (Block.EmitMeta): During constant resolution, set
16573         the CurrentBlock property on the emitcontext, so that we resolve
16574         constants propertly.
16575
16576 2003-07-02  Martin Baulig  <martin@ximian.com>
16577
16578         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
16579         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
16580
16581         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
16582         than emitting it here.
16583
16584         * statement.cs: Fixed some more flow analysis bugs.
16585
16586 2003-07-02  Martin Baulig  <martin@ximian.com>
16587
16588         * class.cs (MethodData.Define): When implementing interface
16589         methods, set Final unless we're Virtual.
16590
16591         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
16592         check work for interface methods.
16593
16594 2003-07-01  Martin Baulig  <martin@ximian.com>
16595
16596         * ecore.cs (EmitContext.This): Replaced this property with a
16597         GetThis() method which takes a Location argument.  This ensures
16598         that we get the correct error location for a CS0188.
16599
16600 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
16601
16602         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
16603         ImplicitStandardConversion.
16604
16605         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
16606
16607 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
16608
16609         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
16610         optimization.
16611
16612 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
16613
16614         * class.cs (Constructor.Define): Turn off initlocals for unsafe
16615         constructors.
16616
16617         (MethodData.Define): Turn off initlocals for unsafe methods.
16618
16619 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
16620
16621         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
16622         complete;  Fixes #37521.
16623
16624         * delegate.cs: Use Modifiers.TypeAttr to compute the
16625         TypeAttributes, instead of rolling our own.  This makes the flags
16626         correct for the delegates.
16627
16628 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
16629
16630         * class.cs (Constructor.Define): Set the private flag for static
16631         constructors as well.
16632
16633         * cs-parser.jay (statement_expression): Set the return value to
16634         null, to avoid a crash when we catch an error.
16635
16636 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
16637
16638         * cs-parser.jay: Applied patch from Jackson that adds support for
16639         extern and unsafe modifiers to destructor declarations.
16640
16641         * expression.cs: Report error 21 if the user is trying to index a
16642         System.Array.
16643
16644         * driver.cs: Add an error message, suggested by the bug report.
16645
16646         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
16647         if we do not have a ": this ()" constructor initializer.  Fixes 45149
16648
16649 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
16650
16651         * namespace.cs: Add some information to reduce FAQs.
16652
16653 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
16654
16655         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
16656         underlying enumeration types.  Fixes #43915.
16657
16658         * expression.cs: Treat ushort/short as legal values to be used in
16659         bitwise operations.
16660
16661 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
16662
16663         * delegate.cs: transfer custom attributes for paramenters from
16664         the delegate declaration to Invoke and BeginInvoke.
16665
16666 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
16667
16668         * attribute.cs: handle custom marshalers and emit marshal info
16669         for fields, too.
16670
16671 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
16672
16673         * makefile.gnu: Added anonymous.cs to the compiler sources.
16674
16675 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
16676
16677         * iterators.cs: Change the name of the proxy class to include two
16678         underscores.
16679
16680         * cs-parser.jay: Update grammar to include anonymous methods.
16681
16682         * anonymous.cs: new file.
16683
16684 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
16685
16686         * class.cs (Field.Define): Add missing test for pointers and
16687         safety. 
16688
16689 2003-05-27  Ravi Pratap  <ravi@ximian.com>
16690
16691         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
16692         we use the stobj opcode.
16693
16694         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
16695         since it wasn't the correct fix. 
16696
16697         It still is puzzling that we are required to use stobj for IntPtr
16698         which seems to be a ValueType.
16699
16700 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
16701
16702         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
16703         during regular simple name resolution.   Now, the trick is that
16704         instead of returning for processing the simplename, we do a
16705         TypeManager.LookupType (ie, a rooted lookup as opposed to a
16706         contextual lookup type).   If a match is found, return that, if
16707         not, return for further composition.
16708
16709         This fixes long-standing 30485.
16710
16711         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16712         using the address to initialize an object, do an Stobj instead of
16713         using the regular Stelem.
16714
16715         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
16716         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
16717         Because if we are a BaseIndexerAccess that value will be true.
16718         Fixes 43643.
16719
16720         * statement.cs (GotoCase.Resolve): Return after reporting an
16721         error, do not attempt to continue. 
16722
16723         * expression.cs (PointerArithmetic.Emit): If our operand is a
16724         long, convert our constants to match the operand before
16725         multiplying.  Convert to I type before adding.   Fixes 43670.
16726
16727 2003-05-14  Ravi Pratap  <ravi@ximian.com>
16728
16729         * enum.cs (ImplicitConversionExists) : Rename to
16730         ImplicitEnumConversionExists to remove ambiguity. 
16731
16732         * ecore.cs (NullCast): New type of cast expression class which
16733         basically is very similar to EmptyCast with the difference being
16734         it still is a constant since it is used only to cast a null to
16735         something else
16736         (eg. (string) null)
16737
16738         * convert.cs (ImplicitReferenceConversion): When casting a null
16739         literal, we return a NullCast.
16740
16741         * literal.cs (NullLiteralTyped): Remove - I don't see why this
16742         should be around anymore.
16743
16744         The renaming (reported was slightly wrong). Corrections:
16745
16746         ConvertImplicitStandard -> ImplicitConversionStandard
16747         ConvertExplicitStandard -> ExplicitConversionStandard
16748
16749         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
16750         before passing them in !
16751
16752         * convert.cs (ImplicitConversionStandard): When comparing for
16753         equal expr and target types, ensure that expr is not a
16754         NullLiteral.
16755
16756         In general, we must not be checking (expr_type ==
16757         target_type) in the top level conversion methods
16758         (ImplicitConversion, ExplicitConversion etc). This checking is
16759         done in the methods that they delegate to.
16760
16761 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
16762
16763         * convert.cs: Move Error_CannotConvertType,
16764         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
16765         ImplicitNumericConversion, ImplicitConversionExists,
16766         ImplicitUserConversionExists, StandardConversionExists,
16767         FindMostEncompassedType, FindMostSpecificSource,
16768         FindMostSpecificTarget, ImplicitUserConversion,
16769         ExplicitUserConversion, GetConversionOperators,
16770         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
16771         TryImplicitIntConversion, Error_CannotConvertImplicit,
16772         ConvertImplicitRequired, ConvertNumericExplicit,
16773         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
16774         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
16775         its own file.
16776
16777         Perform the following renames:
16778
16779         StandardConversionExists -> ImplicitStandardConversionExists
16780         ConvertImplicit -> ImplicitConversion
16781         ConvertImplicitStandard -> ImplicitStandardConversion
16782         TryImplicitIntConversion -> ImplicitIntConversion
16783         ConvertImplicitRequired -> ImplicitConversionRequired
16784         ConvertNumericExplicit -> ExplicitNumericConversion
16785         ConvertReferenceExplicit -> ExplicitReferenceConversion
16786         ConvertExplicit -> ExplicitConversion
16787         ConvertExplicitStandard -> ExplicitStandardConversion
16788
16789 2003-05-19  Martin Baulig  <martin@ximian.com>
16790
16791         * statement.cs (TypeInfo.StructInfo): Made this type protected.
16792         (TypeInfo): Added support for structs having structs as fields.
16793
16794         * ecore.cs (FieldExpr): Implement IVariable.
16795         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
16796         VariableInfo for the field.
16797
16798 2003-05-18  Martin Baulig  <martin@ximian.com>
16799
16800         * expression.cs (This.DoResolve): Report a CS0027 if we're
16801         emitting a field initializer.
16802
16803 2003-05-18  Martin Baulig  <martin@ximian.com>
16804
16805         * expression.cs (This.ResolveBase): New public function.
16806         (This.DoResolve): Check for CS0188.
16807
16808         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
16809         This.Resolve().
16810
16811         * ecore.cs (MethodGroupExpr.DoResolve): Set the
16812         `instance_expression' to null if we don't have any non-static
16813         methods.
16814
16815 2003-05-18  Martin Baulig  <martin@ximian.com>
16816
16817         Reworked the way how local variables and parameters are handled by
16818         the flow analysis code.
16819
16820         * statement.cs (TypeInfo, VariableMap): New public classes.
16821         (VariableInfo): New public class.  This is now responsible for
16822         checking whether a variable has been assigned.  It is used for
16823         parameters and local variables.
16824         (Block.EmitMeta): Take the InternalParameters as argument; compute
16825         the layout of the flow vectors here.
16826         (Block.LocalMap, Block.ParameterMap): New public properties.
16827         (FlowBranching): The .ctor doesn't get the InternalParameters
16828         anymore since Block.EmitMeta() now computes the layout of the flow
16829         vector.
16830         (MyStructInfo): This class is now known as `StructInfo' and nested
16831         in `TypeInfo'; we don't access this directly anymore.
16832
16833         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
16834         property and removed IsAssigned(), IsFieldAssigned(),
16835         SetAssigned() and SetFieldAssigned(); we now call them on the
16836         VariableInfo so we don't need to duplicate this code everywhere.
16837
16838         * expression.cs (ParameterReference): Added `Block block' argument
16839         to the .ctor.
16840         (LocalVariableReference, ParameterReference, This): The new
16841         VariableInfo class is now responsible for all the definite
16842         assignment stuff.
16843
16844         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
16845         IsParameterAssigned, SetParameterAssigned): Removed.
16846
16847 2003-05-18  Martin Baulig  <martin@ximian.com>
16848
16849         * typemanager.cs (InitCoreTypes): Try calling
16850         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
16851         the 3-args-version.  Corlib now also needs our `void_type'.
16852         (GetMethod): Added overloaded version which takes an optional
16853         `bool report_errors' to allow lookups of optional methods.
16854
16855 2003-05-12  Martin Baulig  <martin@ximian.com>
16856
16857         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
16858         only used for locals and not for parameters.
16859
16860 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
16861
16862         * support.cs (InternalParameters.ParameterType): Return the
16863         ExternalType of the parameter.
16864
16865         * parameter.cs (Parameter.ExternalType): drop the two arguments,
16866         they were unused.
16867
16868 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
16869
16870         * class.cs (MethodData.Define): Do not set the `newslot' on
16871         interface members, if they are also flagged as "override".
16872
16873         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
16874         better code for ++i and i++.  This only works for static fields
16875         and local variables.
16876
16877         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
16878         want to pull the DeclSpace out of the builder_to_declspace instead
16879         of the TypeBuilder (like in TypeContainer.FindMembers).
16880
16881         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
16882         instead of LookupTypeContainer.  Fixes the crash on .NET for
16883         looking up interface members.
16884
16885         * const.cs: Create our own emit context during the Definition
16886         stage, so that constants are evaluated in the proper context, when
16887         a recursive definition happens.
16888
16889 2003-05-11  Martin Baulig  <martin@ximian.com>
16890
16891         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
16892         new block for a switch section.
16893         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
16894         the adding/lookup in the switch block.  Fixes #39828.
16895
16896 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
16897
16898         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
16899         functionality: I needed to convert the data after I had performed
16900         the add/sub operation into the operands type size.
16901
16902         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
16903         pass the type for the box operation, otherwise the resulting
16904         object would have been of type object.
16905
16906         (BoxedCast): Add constructor to specify the type to box as.
16907
16908 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
16909
16910         * iterators.cs: I was reusing the `count' variable inadvertently,
16911         take steps to not allow this to happen.
16912
16913 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
16914
16915         * attribute.cs (Attribute.Resolve): Params attributes are encoded
16916         by creating an array at the point where the params starts and
16917         putting all those arguments there, then adjusting the size of the
16918         array.
16919
16920 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
16921
16922         * expression.cs (New.AddressOf): Implement interface
16923         IMemoryLocation.  This is used when the `new' operator is used in
16924         the context of an invocation to a method on a value type.
16925
16926         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
16927         example. 
16928
16929         * namespace.cs: Also check the using aliases here.
16930
16931         * driver.cs: Move the test for using validity after the types have
16932         been entered, so we do a single pass that also includes the using
16933         aliases. 
16934
16935         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
16936         in the regular case.   CreateSiblingForFinally is doing extra
16937         error checking.
16938
16939         * attribute.cs (GetAttributeArgumentExpression): Store the result
16940         on an out value, and use the return value to indicate failure
16941         instead of using null (which is a valid return for Constant.GetValue).
16942
16943         * statement.cs: Perform the analysis flow for the increment
16944         portion after the statement, because this will be the real flow of
16945         execution.  Fixes #42385
16946
16947         * codegen.cs (EmitContext.EmitArgument,
16948         EmitContext.EmitStoreArgument): New helper functions when the
16949         RemapToProxy flag is set.
16950
16951         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
16952         function.
16953
16954         Add support for remapping parameters. 
16955
16956         * iterators.cs: Propagate parameter values;  Store parameter
16957         values in the proxy classes.
16958
16959 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
16960
16961         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
16962         need a proxy reference;  I do not know what I was thinking
16963
16964         * cs-parser.jay (constructor_initializer): catch another error,
16965         and display nice message.
16966
16967         (field_declaration): catch void field declaration
16968         to flag a better error. 
16969
16970         * class.cs (MemberBase.CheckBase): Report an error instead of a
16971         warning if a new protected member is declared in a struct. 
16972         (Field.Define): catch the error of readonly/volatile.
16973
16974         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
16975
16976         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
16977         volatile variable is taken
16978
16979 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
16980
16981         * statement.cs (Fixed.Resolve): Report an error if we are not in
16982         an unsafe context.
16983
16984 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
16985
16986         * typemanager.cs: reuse the code that handles type clashes for
16987         delegates and enumerations.
16988
16989         * class.cs (Report28): Always report.
16990
16991         * expression.cs (EncodeAsAttribute): Allow nulls here.
16992
16993 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
16994
16995         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
16996         the functionality for testing whether an expression is valid for
16997         an attribute here.  Also handle the case of arrays of elements
16998         being stored. 
16999
17000         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
17001         encoding a linear array into an array of objects that are suitable
17002         to be passed to an CustomAttributeBuilder.
17003
17004         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
17005
17006         * ecore.cs: (FieldExpr): Handle field remapping here.
17007
17008         * iteratators.cs: Pass the instance variable (if the method is an
17009         instance method) to the constructors, so we can access the field
17010         variables on the class.
17011
17012         TODO: Test this with structs.  I think the THIS variable on
17013         structs might have to be a pointer, and not a refenrece
17014
17015 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
17016
17017         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
17018         local variables to fields in a proxy class.
17019
17020         * iterators.cs (PopulateProxy): Rename our internal fields to
17021         <XXX>.  
17022         Create a <THIS> field if we are an instance method, so we can
17023         reference our parent container variables.
17024         (MapVariable): Called back from the EmitContext code to enter a
17025         new variable to field mapping into the proxy class (we just create
17026         a FieldBuilder).
17027
17028         * expression.cs
17029         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
17030         for using the remapped locals to fields.
17031
17032         I placed the code here, because that gives the same semantics to
17033         local variables, and only changes the Emit code.
17034
17035         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
17036         statements inside iterators.
17037         (VariableInfo): Add a FieldBuilder for the cases when we are
17038         remapping local variables to fields in a proxy class
17039
17040         * ecore.cs (SimpleNameResolve): Avoid testing two times for
17041         current_block != null.
17042
17043         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
17044         not cope with strings, as it has been moved to the
17045         TableSwitchEmit.  Fixed bug in switch generation.
17046
17047         * expression.cs (New.DoResolve): Provide more context for the user
17048         when reporting an error.
17049
17050         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
17051         pointers. 
17052
17053         * expression.cs (MemberAccess.DoResolve): When we get a type back,
17054         check the permissions for it.  Note than in a type-resolution
17055         context the check was already present in DeclSpace.ResolveType,
17056         but was missing from the MemberAccess.
17057
17058         (ArrayCreation.CheckIndices): warn if the user has
17059         more nested levels of expressions, but there are no more
17060         dimensions specified.  Avoids crash on bug 41906.
17061
17062 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
17063
17064         * statement.cs (Block): replace Implicit bool, for a generic
17065         flags.   
17066         New flag: `Unchecked'.  This is used during the EmitMeta phase
17067         (which is out-of-line with the regular Resolve/Emit process for a
17068         statement, as this is done ahead of time, but still gets a chance
17069         to call constant resolve).
17070
17071         (Block.Flags): new enum for adding a new flag.
17072
17073         (Block.EmitMeta): track the state of unchecked.
17074
17075         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
17076         to enable constant resolution to work there as well.
17077
17078 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
17079
17080         * typemanager.cs (ienumerable_type): Also look up
17081         System.Collections.IEnumerable. 
17082
17083 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
17084
17085         TODO: Test more than one conditional per method.
17086
17087         * class.cs (Indexer.Define): Report the location where the user is
17088         referencing the unsupported feature.
17089
17090         (MethodData): Overload the use of `conditionals' to
17091         minimize the creation of needless ArrayLists.   This saves roughly
17092         212kb on my machine.
17093
17094         (Method): Implement the new IIteratorContainer interface.
17095         (Method.SetYields): Implement the method by setting the ModFlags
17096         to contain METHOD_YIELDS.
17097
17098         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
17099         which just got set to null.
17100
17101         * iterators.cs: New file.
17102
17103         (Yield, YieldBreak): New statements.
17104
17105         * statement.cs (Return.Resolve): Flag an error if we are used in
17106         an iterator method.
17107
17108         * codegen.cs (InIterator): New flag set if the code is being
17109         compiled in an iterator method.
17110
17111         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
17112         internal modifier, and we just use it to avoid adding extra
17113         fields, as this is seldom used.  
17114
17115         * cs-parser.jay: Add yield_statement (yield and yield break).
17116
17117         * driver.cs: New flag -v2 to turn on version 2 features. 
17118
17119         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
17120         hashtable when v2 is enabled.
17121
17122 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
17123
17124         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
17125         there is already a namespace defined with this name.
17126
17127         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
17128         people upgraded their corlibs.
17129
17130         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
17131         always use fully qualified types, no need to use the compiler
17132         front end.
17133
17134         (TypeManager.IsNamespace): Use binarysearch.
17135
17136         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
17137         AddDelegate): I did not quite use the new IsValid API properly: I
17138         have to pass the short-name and the fullname.  I was passing only
17139         the basename instead of the fullname sometimes. 
17140
17141         (TypeContainer.DefineType): call NamespaceClash.
17142
17143         * interface.cs (Interface.DefineType): use NamespaceClash before
17144         defining the type.
17145
17146         * delegate.cs (Delegate.DefineType): use NamespaceClash before
17147         defining the type.
17148
17149         * enum.cs: (Enum.DefineType): use NamespaceClash before
17150         defining the type.
17151
17152         * typemanager.cs (: 3-line patch that gives us some tasty 11%
17153         speed increase.  First, use the negative_hits cache when we get a
17154         negative.  Second, add the type with its full original name
17155         instead of the new . and + encoded name (reflection uses + to
17156         separate type from a nested type).  Use LookupTypeReflection
17157         directly which bypasses the type->name hashtable (that we already
17158         know does not contain the type.
17159
17160         * decl.cs (DeclSpace.ResolveTypeExpr): track the
17161         location/container type. 
17162
17163         * driver.cs: When passing utf8, use directly the UTF8Encoding.
17164
17165 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
17166
17167         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
17168
17169         * delegate.cs (NewDelegate.Resolve): Test whether an instance
17170         method is being referenced in the method group from a static
17171         context, and report error 120 if so.
17172
17173         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
17174         Error118. 
17175
17176         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
17177         is created, we create the A namespace).
17178
17179         * cs-parser.jay: A namespace also introduces a DeclarationFound.
17180         Fixes #41591
17181
17182 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
17183
17184         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
17185         invocation to ModuleBuilder.GetType with the same values will
17186         return a new type instance, so we need to cache its return
17187         values. 
17188
17189         * expression.cs (Binary.ResolveOperator): Only allow the compare
17190         operators on enums if they are of the same type.
17191
17192         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
17193         types of ValueType on their own case.  Before we were giving them
17194         the same treatment as objects.
17195
17196         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
17197         fullname.  Short name is used to compare against container name.
17198         Fullname is used to check against defined namespace names.
17199
17200         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
17201         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
17202
17203         (Method.CheckBase): Call parent.
17204         (MemberBase.CheckBase): Check for protected members on sealed
17205         classes.
17206         (PropertyBase.CheckBase): Call parent.
17207         (Field.Define): Call parent.
17208
17209         * report.cs: Negative error codes are now mapped to 8000 - code,
17210         so that the display is render more nicely.
17211
17212         * typemanager.cs: Do not use try/catch, instead report a regular
17213         error. 
17214
17215         (GetPointerType, GetReferenceType): These methods provide
17216         mechanisms to obtain the T* and T& from a T.  We had the code
17217         previously scattered around the code base, and it also used
17218         TypeManager.LookupType that would go through plenty of caches.
17219         This one goes directly to the type source.
17220
17221         In some places we did the Type.GetType followed by
17222         ModuleBuilder.GetType, but not in others, so this unifies the
17223         processing as well.
17224
17225         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
17226         statements now that we have namespace information.
17227
17228         * typemanager.cs (IsNamespace): New method, returns whether the
17229         string presented is a namespace or not.
17230
17231         (ComputeNamespaces): New public entry point, computes the list of
17232         available namespaces, using the GetNamespaces API call in Mono, or
17233         the slower version in MS.NET.   
17234
17235         Now before we start the semantic analysis phase, we have a
17236         complete list of namespaces including everything that the user has
17237         provided.
17238
17239         Deleted old code to cache namespaces in .nsc files.
17240
17241 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
17242
17243         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
17244         class/struct location definition Location for the implicit
17245         constructor location.
17246
17247         (Operator.Define): Use the location of the operator for the
17248         implicit Method definition.
17249
17250         (Constructor.Emit): use the constructor location for the implicit
17251         base initializer constructor.
17252
17253         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
17254         and the Expression class now contains two new methods:
17255
17256         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
17257         isolate type lookup from the rest of the resolution process.
17258
17259         Since we use Expressions to hold type definitions due to the way
17260         we parse the input we have historically overloaded Resolve to
17261         perform the Type lookups if a special flag is passed.  Now this is
17262         eliminated and two methods take their place. 
17263
17264         The differences in the two methods between xStep and xTerminal is
17265         that xStep is involved in our current lookup system that uses
17266         SimpleNames to compose a name, while xTerminal is used just to
17267         catch the case where the simplename lookup failed.
17268
17269 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
17270
17271         * expression.cs (ResolveMemberAccess): Remove redundant code.
17272         TypeExpr expressions are always born fully resolved.
17273
17274         * interface.cs (PopulateMethod): Do not lookup the types twice.
17275         We were doing it once during SemanticAnalysis and once during
17276         PopulateMethod.
17277
17278         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
17279         in local variable type definitions, were being returned as a
17280         SimpleName (we decomposed everything into a string), that is
17281         because primary_expression was being used instead of a type in the
17282         grammar (reduce/reduce conflicts).
17283
17284         The part that was wrong is that we converted the expression into a
17285         string (an oversimplification in one hand, compounded with primary
17286         expressions doing string concatenation).
17287
17288         So things like:
17289
17290         A.B.C [] x;
17291
17292         Would return "A.B.C[]" as a SimpleName.  This stopped things like
17293         using clauses from working on this particular context.  And a type
17294         was being matched directly against "A.B.C[]".
17295
17296         We now use the correct approach, and allow for ComposedCast to be
17297         part of the unary expression.  So the "A.B.C []" become a composed
17298         cast of "A.B.C" (as a nested group of MemberAccess with a
17299         SimpleName at the end) plus the rank composition "[]". 
17300
17301         Also fixes 35567
17302
17303 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
17304
17305         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
17306         for the access level checking.
17307
17308         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
17309         `TypeContainer container', because I kept getting confused when I
17310         was debugging this code.
17311
17312         * expression.cs (Indexers): Instead of tracking getters/setters,
17313         we now track them in parallel.  We create one arraylist less, but
17314         most importantly it is possible now for the LValue code to find a
17315         matching get for a set.
17316
17317         (IndexerAccess.DoResolveLValue): Update the code.
17318         GetIndexersForType has been modified already to extract all the
17319         indexers from a type.  The code assumed it did not.
17320
17321         Also make the code set the correct return type for the indexer.
17322         This was fixed a long time ago for properties, but was missing for
17323         indexers.  It used to be void_type.
17324
17325         (Binary.Emit): Test first for doubles instead of
17326         floats, as they are more common.
17327
17328         (Binary.EmitBranchable): Use the .un version of the branch opcodes
17329         when dealing with floats and the <=, >= operators.  This fixes bug
17330         #39314 
17331
17332         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
17333         to load the array value by emitting a load on the foreach variable
17334         type.  This was incorrect.  
17335
17336         We now emit the code to load an element using the the array
17337         variable type, and then we emit the conversion operator.
17338
17339         Fixed #40176
17340
17341 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
17342
17343         * attribute.cs: Avoid allocation of ArrayLists in the common case.
17344
17345 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
17346
17347         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
17348         test for protection before we test for signatures. 
17349
17350         (MethodSignature.ToString): implement.
17351
17352         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
17353         to the case where we reduced into a LongConstant.
17354
17355         * decl.cs (CheckAccessLevel): If the type is an array, we can not
17356         depend on whether the information is acurrate, because the
17357         Microsoft runtime will always claim that the array type is public,
17358         regardless of the real state.
17359
17360         If the type is a pointer, another problem happens: the type is
17361         reported as non-public in Microsoft.  
17362
17363         In both cases we have to call CheckAccessLevel recursively with
17364         the underlying type as the argument to be tested.
17365
17366 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
17367
17368         * assign.cs (Assign.Emit): If we are dealing with a compound
17369         assignment expression, we should use the code path that stores the
17370         intermediate result in a temporary value.  This fixes #40903.
17371
17372         *expression.cs (Indirection.ToString): Provide ToString method for
17373         debugging. 
17374
17375 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
17376
17377         * class.cs: Null out fields holding references to Block objects so
17378         they can be garbage collected.
17379
17380         * expression.cs (OverloadResolve): Remove unused local.
17381
17382 2003-04-07  Martin Baulig  <martin@ximian.com>
17383
17384         * codegen.cs (EmitContext.CurrentFile): New public field.
17385         (EmitContext.Mark): Use the CurrentFile to check whether the
17386         location is in the correct file.
17387         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
17388
17389 2003-04-07  Martin Baulig  <martin@ximian.com>
17390
17391         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
17392
17393         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
17394         location.  [FIXME: The location argument which gets passed to this
17395         method is sometimes wrong!]
17396
17397 2003-04-07  Nick Drochak <ndrochak@gol.com>
17398
17399         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
17400
17401 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
17402
17403         * expression.cs (Indirection.EmitAssign): We were using the
17404         temporary, but returning immediately instead of continuing the
17405         EmitAssing flow.
17406
17407 2003-04-06  Martin Baulig  <martin@ximian.com>
17408
17409         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
17410         if it's a nested child, but also deriving from the outer class.
17411         See test 190.cs.
17412
17413         * typemanager.cs (IsNestedChildOf): Make this work if it's a
17414         nested child, but also deriving from the outer class.  See
17415         test-190.cs.
17416         (FilterWithClosure): We may access private members of the outer
17417         class if we're a nested child and deriving from the outer class.
17418         (RealMemberLookup): Only set `closure_private_ok' if the
17419         `original_bf' contained BindingFlags.NonPublic.
17420
17421 2003-04-05  Martin Baulig  <martin@ximian.com>
17422
17423         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
17424
17425 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
17426
17427         * class.cs (Event.Define): Do not allow abstract events to have
17428         initializers. 
17429
17430 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
17431
17432         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
17433         block in event declarations.
17434
17435         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
17436         value type, get its address.
17437
17438         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
17439         leaving a class on the stack instead of a boolean value (int
17440         0/1).  Change the code so we compare against null, and then the
17441         result against zero.
17442
17443         * class.cs (TypeContainer.GetClassBases): We were checking for the
17444         parent class being sealed too late.
17445
17446         * expression.cs (Binary.Emit): For <= and >= when dealing with
17447         floating point values, use cgt.un and clt.un instead of cgt and
17448         clt alone.
17449
17450 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
17451
17452         * statement.cs: Apply the same optimization as MS: skip the 
17453         GetEnumerator returning an IEnumerator, and use the one returning a 
17454         CharEnumerator instead. This allows us to avoid the try-finally block 
17455         and the boxing.
17456
17457 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
17458
17459         * cs-parser.jay: Attributes cannot be applied to
17460                          namespaces. Fixes #40473
17461
17462 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17463
17464         * class.cs:
17465         (Add*): check if the name is valid using the full name for constants,
17466         fields, properties and events.
17467
17468 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
17469
17470         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
17471         char constants to be part of the enumeration.
17472
17473         * expression.cs (Conditional.DoResolve): Add support for operator
17474         true. Implements the missing functionality from 14.12
17475
17476         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
17477         operator true/false as required by the spec.
17478
17479         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
17480         implicit conversion to boolean.
17481
17482         * statement.cs (Statement.ResolveBoolean): A boolean expression is
17483         also one where the type implements `operator true'. 
17484
17485         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
17486         get an expression that will invoke operator true based on an
17487         expression.  
17488
17489         (GetConversionOperators): Removed the hack that called op_True
17490         here.  
17491
17492         (Expression.ResolveBoolean): Move this from Statement.
17493
17494 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
17495
17496         * ecore.cs (FieldExpr): do not allow initialization of initonly
17497         fields on derived classes
17498
17499 2003-03-13  Martin Baulig  <martin@ximian.com>
17500
17501         * statement.cs (Block.Emit): Call ig.BeginScope() and
17502         ig.EndScope() when compiling with debugging info; call
17503         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
17504
17505 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
17506
17507         * expression.cs (Indexers): Do not construct immediately, allow
17508         for new members to be appended as we go.  Fixes 38143
17509
17510 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17511
17512         * expression.cs: save/restore context when resolving an unchecked
17513         expression.
17514
17515 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
17516
17517         * cfold.cs: Catch division by zero in modulus operator during
17518         constant folding.
17519
17520 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
17521
17522         * interface.cs (Interface.DefineMembers): Avoid defining members
17523         twice. 
17524
17525 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
17526
17527         * driver.cs: handle the +/- options for -noconfig
17528
17529         * statement.cs (Unckeched.Resolve): Also track the state of
17530         unchecked in the Resolve phase.
17531
17532 2003-02-27  Martin Baulig  <martin@ximian.com>
17533
17534         * ecore.cs (Expression.MemberLookup): Don't create a
17535         MethodGroupExpr for something which is not a method.  Fixes #38291.
17536
17537 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
17538
17539         * class.cs (MemberBase.CheckParameters): Also check that the type
17540         is unmanaged if it is a pointer.
17541
17542         * expression.cs (SizeOf.Resolve): Add location information.
17543
17544         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
17545         a managed type is declared.
17546
17547         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
17548         parameter modifiers as well.  Fixes bug 38606
17549
17550         * class.cs: Very sad.  Am backing out the speed up changes
17551         introduced by the ArrayList -> Array in the TypeContainer, as they
17552         were not actually that much faster, and introduced a bug (no error
17553         reports on duplicated methods).
17554
17555         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
17556         source first, this will guarantee that we have a valid expression
17557         before calling in lower levels functions that will require a
17558         resolved object.  Then use this original_source in the
17559         target.ResolveLValue instead of the original source that was
17560         passed to us.
17561
17562         Another change.  Use target.Resolve instead of LValueResolve.
17563         Although we are resolving for LValues, we will let the Assign code
17564         take care of that (it will be called again from Resolve).  This
17565         basically allows code like this:
17566
17567         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
17568         class Y { void A (X x) { x [0] += o; }
17569
17570         The problem was that the indexer was trying to resolve for
17571         set_Item (idx, object o) and never finding one.  The real set_Item
17572         was set_Item (idx, X).  By delaying the process we get the right
17573         semantics. 
17574
17575         Fixes bug 36505
17576
17577 2003-02-23  Martin Baulig  <martin@ximian.com>
17578
17579         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
17580         while calling DoEmit ().
17581
17582         * codegen.cs (EmitContext.Mark): Don't mark locations in other
17583         source files; if you use the #line directive inside a method, the
17584         compiler stops emitting line numbers for the debugger until it
17585         reaches the end of the method or another #line directive which
17586         restores the original file.
17587
17588 2003-02-23  Martin Baulig  <martin@ximian.com>
17589
17590         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
17591
17592 2003-02-23  Martin Baulig  <martin@ximian.com>
17593
17594         * statement.cs (Block.AddChildVariableNames): We need to call this
17595         recursively, not just for our immediate children.
17596
17597 2003-02-23  Martin Baulig  <martin@ximian.com>
17598
17599         * class.cs (Event.Define): Always make the field private, like csc does.
17600
17601         * typemanager.cs (TypeManager.RealMemberLookup): Make events
17602         actually work, fixes bug #37521.
17603
17604 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
17605
17606         * delegate.cs: When creating the various temporary "Parameters"
17607         classes, make sure that we call the ComputeAndDefineParameterTypes
17608         on those new parameters (just like we do with the formal ones), to
17609         allow them to be resolved in the context of the DeclSpace.
17610
17611         This fixes the bug that Dick observed in Bugzilla #38530.
17612
17613 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
17614
17615         * expression.cs (ResolveMemberAccess): When resolving a constant,
17616         do not attempt to pull a constant if the value was not able to
17617         generate a valid constant.
17618
17619         * const.cs (LookupConstantValue): Do not report more errors than required.
17620
17621 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17622
17623         * expression.cs: fixes bug #38328.
17624
17625 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17626
17627         * class.cs: Changed all the various members that can be part of a
17628         class from being an ArrayList to be an Array of the right type.
17629         During the DefineType type_list, interface_list, delegate_list and
17630         enum_list are turned into types, interfaces, delegates and enums
17631         arrays.  
17632
17633         And during the member population, indexer_list, event_list,
17634         constant_list, field_list, instance_constructor_list, method_list,
17635         operator_list and property_list are turned into their real arrays.
17636
17637         Although we could probably perform this operation earlier, for
17638         good error reporting we need to keep the lists and remove the
17639         lists for longer than required.
17640
17641         This optimization was triggered by Paolo profiling the compiler
17642         speed on the output of `gen-sample-program.pl' perl script. 
17643
17644         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
17645         not crash in methods like MemberLookupFailed that use this field.  
17646
17647         This problem arises when the compiler fails to resolve a type
17648         during interface type definition for example.
17649
17650 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17651
17652         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
17653         inherit from System.Object, so we have to stop at null, not only
17654         when reaching System.Object.
17655
17656 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
17657
17658         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
17659         DeclaredOnly because the parent indexer might have had a different
17660         name, but did not loop until the top of the hierarchy was reached.
17661
17662         The problem this one fixes is 35492: when a class implemented an
17663         indexer from an interface, we were getting the interface method
17664         (which was abstract) and we were flagging an error (can not invoke
17665         abstract method).
17666
17667         This also keeps bug 33089 functioning, and test-148 functioning.
17668
17669         * typemanager.cs (IsSpecialMethod): The correct way of figuring
17670         out if a method is special is to see if it is declared in a
17671         property or event, or whether it is one of the predefined operator
17672         names.   This should fix correctly #36804.
17673
17674 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
17675
17676         The goal here is to remove the dependency on EmptyCast.Peel ().
17677         Killing it completely.
17678
17679         The problem is that currently in a number of places where
17680         constants are expected, we have to "probe" for an EmptyCast, and
17681         Peel, which is not the correct thing to do, as this will be
17682         repetitive and will likely lead to errors. 
17683
17684         The idea is to remove any EmptyCasts that are used in casts that
17685         can be reduced to constants, so we only have to cope with
17686         constants. 
17687
17688         This bug hunt was triggered by Bug 37363 and the desire to remove
17689         the duplicate pattern where we were "peeling" emptycasts to check
17690         whether they were constants.  Now constants will always be
17691         constants.
17692
17693         * ecore.cs: Use an enumconstant here instead of wrapping with
17694         EmptyCast.  
17695
17696         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
17697         throwing me off.  By handling this we can get rid of a few hacks.
17698
17699         * statement.cs (Switch): Removed Peel() code.
17700
17701 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
17702
17703         * class.cs: Location information for error 508
17704
17705         * expression.cs (New.DoResolve): Add a guard against double
17706         resolution of an expression.  
17707
17708         The New DoResolve might be called twice when initializing field
17709         expressions (see EmitFieldInitializers, the call to
17710         GetInitializerExpression will perform a resolve on the expression,
17711         and later the assign will trigger another resolution
17712
17713         This leads to bugs (#37014)
17714
17715         * delegate.cs: The signature for EndInvoke should contain any ref
17716         or out parameters as well.  We were not doing this in the past. 
17717
17718         * class.cs (Field.Define): Do not overwrite the type definition
17719         inside the `volatile' group.  Turns out that volatile enumerations
17720         were changing the type here to perform a validity test, which
17721         broke conversions. 
17722
17723 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
17724
17725         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
17726         and structs, we do not want to load the instance variable
17727
17728         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
17729         enum_type has to be handled like an object reference (implicit
17730         conversions exists from this to object), but the regular IsClass
17731         and IsValueType tests will never return true for this one.
17732
17733         Also we use TypeManager.IsValueType instead of type.IsValueType,
17734         just for consistency with the rest of the code (this is only
17735         needed if we ever use the construct exposed by test-180.cs inside
17736         corlib, which we dont today).
17737
17738 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
17739
17740         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
17741         just InternalCall.
17742
17743 2003-02-09  Martin Baulig  <martin@ximian.com>
17744
17745         * namespace.cs (Namespace..ctor): Added SourceFile argument.
17746         (Namespace.DefineNamespaces): New static public method; this is
17747         called when we're compiling with debugging to add all namespaces
17748         to the symbol file.
17749
17750         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
17751         pass it to the Namespace's .ctor.
17752
17753         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
17754         and MethodBase arguments; pass the namespace ID to the symwriter;
17755         pass the MethodBase instead of the token to the symwriter.
17756         (SymbolWriter.DefineNamespace): New method to add a namespace to
17757         the symbol file.
17758
17759 2003-02-09  Martin Baulig  <martin@ximian.com>
17760
17761         * symbolwriter.cs: New file.  This is a wrapper around
17762         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
17763         methods here in near future.
17764
17765 2003-02-09  Martin Baulig  <martin@ximian.com>
17766
17767         * codegen.cs (EmitContext.Mark): Just pass the arguments to
17768         ILGenerator.MarkSequencePoint() which are actually used by the
17769         symbol writer.
17770
17771 2003-02-09  Martin Baulig  <martin@ximian.com>
17772
17773         * location.cs (SourceFile): New public sealed class.  This
17774         contains the name and an index which is used in the location's token.
17775         (Location): Reserve an appropriate number of bits in the token for
17776         the source file instead of walking over that list, this gives us a
17777         really huge performance improvement when compiling with debugging.
17778
17779         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
17780         `SourceFile' argument instead of a string.
17781         (Driver.ProcessFile): Add all the files via Location.AddFile(),
17782         but don't parse/tokenize here, we need to generate the list of all
17783         source files before we do that.
17784         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
17785         the files.
17786
17787         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
17788         instead of a string.
17789
17790         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
17791         of a string.
17792
17793 2003-02-09  Martin Baulig  <martin@ximian.com>
17794
17795         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
17796         filename on `#line default'.
17797
17798 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
17799
17800         * statement.cs: don't clear the pinned var when the fixed statement
17801         returns from the method (fixes bug#37752).
17802
17803 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
17804
17805         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
17806         to IsValueType.
17807
17808 2003-02-07  Martin Baulig  <martin@ximian.com>
17809
17810         * driver.cs: Removed the `--debug-args' command line argument.
17811
17812         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
17813         automatically by the AsssemblyBuilder.
17814         (CodeGen.InitializeSymbolWriter): We don't need to call any
17815         initialization function on the symbol writer anymore.  This method
17816         doesn't take any arguments.
17817
17818 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
17819
17820         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
17821         from referenced assemblies as well.
17822
17823 2003-02-02  Martin Baulig  <martin@ximian.com>
17824
17825         * class.cs (MethodData.Emit): Generate debugging info for external methods.
17826
17827 2003-02-02  Martin Baulig  <martin@ximian.com>
17828
17829         * class.cs (Constructor.Emit): Open the symbol writer before
17830         emitting the constructor initializer.
17831         (ConstructorInitializer.Emit): Call ec.Mark() to allow
17832         single-stepping through constructor initializers.
17833
17834 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
17835
17836         * class.cs: Handle error 549: do not allow virtual methods in
17837         sealed classes. 
17838
17839 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
17840
17841         * decl.cs: Check access levels when resolving types
17842
17843 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
17844
17845         * statement.cs: Add parameters and locals set in catch blocks that might 
17846         return to set vector
17847
17848 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
17849
17850         * class.cs (Operator): Set the SpecialName flags for operators.
17851
17852         * expression.cs (Invocation.DoResolve): Only block calls to
17853         accessors and operators on SpecialName methods.
17854
17855         (Cast.TryReduce): Handle conversions from char constants.
17856
17857
17858 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
17859
17860         * statement.cs: small memory and time optimization in FlowBranching.
17861
17862 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
17863
17864         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
17865         problem that the last fix but in the other sid (Set).
17866
17867         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
17868         access when there is no indexer in the hierarchy.
17869
17870 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
17871
17872         * class.cs: Combine some if statements.
17873
17874 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17875
17876         * driver.cs: fixed bug #37187.
17877
17878 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
17879
17880         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
17881         any indexer, it's needed to build a list with all the indexers in the
17882         hierarchy (AllGetters), else we have problems. Fixes #35653.
17883
17884 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
17885
17886         * class.cs (MethodData.Define): It is wrong for an interface
17887         implementation to be static in both cases: explicit and implicit.
17888         We were only handling this in one case.
17889
17890         Improve the if situation there to not have negations.
17891
17892         * class.cs (Field.Define): Turns out that we do not need to check
17893         the unsafe bit on field definition, only on usage.  Remove the test.
17894
17895 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17896
17897         * driver.cs: use assembly.Location instead of Codebase (the latest
17898         patch made mcs fail when using MS assemblies).
17899
17900 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
17901
17902         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
17903         get the path to *corlib.dll.
17904
17905 2003-01-21  Nick Drochak <ndrochak@gol.com>
17906
17907         * cs-tokenizer.cs:
17908         * pending.cs:
17909         * typemanager.cs: Remove compiler warnings
17910
17911 2003-01-20  Duncan Mak  <duncan@ximian.com>
17912
17913         * AssemblyInfo.cs: Bump the version number to 0.19.
17914
17915 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17916
17917         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
17918
17919 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
17920
17921         * class.cs (Constructor::Emit): Emit debugging info for constructors.
17922
17923 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
17924
17925         * cs-parser.jay: Small fix: we were not comparing the constructor
17926         name correctly.   Thanks to Zoltan for the initial pointer.
17927
17928 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
17929
17930         * cs-tokenizer.cs: Set file name when specified with #line
17931
17932 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
17933
17934         * cs-parser.jay: Only perform the constructor checks here if we
17935         are named like the class;  This will help provider a better
17936         error.  The constructor path is taken when a type definition is
17937         not found, but most likely the user forgot to add the type, so
17938         report that rather than the constructor error.
17939
17940 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
17941
17942         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
17943         allocations.
17944
17945 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17946
17947         * cs-parser.jay: Add cleanup call.
17948
17949 2003-01-13  Duncan Mak  <duncan@ximian.com>
17950
17951         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
17952         consistent with other methods.
17953
17954 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17955
17956         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
17957
17958 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
17959
17960         * attribute.cs: only set GuidAttr to true when we have a
17961         GuidAttribute.
17962
17963 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17964
17965         * ecore.cs:
17966         * expression.cs:
17967         * typemanager.cs: fixes to allow mcs compile corlib with the new
17968         Type.IsSubclassOf fix.
17969
17970 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
17971
17972         * expression.cs (LocalVariableReference.DoResolve): Classify a
17973         constant as a value, not as a variable.   Also, set the type for
17974         the variable.
17975
17976         * cs-parser.jay (fixed_statement): take a type instead of a
17977         pointer_type, so we can produce a better error message later.
17978
17979         * statement.cs (Fixed.Resolve): Flag types that are not pointers
17980         as an error.  
17981
17982         (For.DoEmit): Make inifinite loops have a
17983         non-conditional branch back.
17984
17985         (Fixed.DoEmit): First populate the pinned variables, then emit the
17986         statement, then clear the variables.  Before I was emitting the
17987         code once for each fixed piece.
17988
17989
17990 2003-01-08  Martin Baulig  <martin@ximian.com>
17991
17992         * statement.cs (FlowBranching.MergeChild): A break in a
17993         SWITCH_SECTION does not leave a loop.  Fixes #36155.
17994
17995 2003-01-08  Martin Baulig  <martin@ximian.com>
17996
17997         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
17998         lives in the same number space than `param_map'.  Fixes #36154.
17999
18000 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
18001
18002         * cs-parser.jay (constructor_declaration): Set the
18003         Constructor.ModFlags before probing for it.  This makes the
18004         compiler report 514, 515 and 132 (the code was there, but got
18005         broken). 
18006
18007         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
18008         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
18009         (GotoCase.Resolve): Set `Returns' to ALWAYS.
18010
18011 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
18012
18013         * enum.cs: create the enum static fields using the enum type.
18014
18015 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
18016
18017         * class.cs: don't try to create the ParamBuilder for the return
18018         type if it's not needed (and handle it breaking for the ms runtime
18019         anyway).
18020
18021 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
18022
18023         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
18024
18025 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
18026
18027         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
18028         the command.   This showed up while compiling the JANET source
18029         code, which used \r as its only newline separator.
18030
18031 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
18032
18033         * class.cs (Method.Define): If we are an operator (because it
18034         reuses our code), then set the SpecialName and HideBySig.  #36128
18035
18036 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
18037
18038         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
18039         exception, report error 120 `object reference required'.
18040
18041         * driver.cs: Add --pause option, used during to measure the size
18042         of the process as it goes with --timestamp.
18043
18044         * expression.cs (Invocation.DoResolve): Do not allow methods with
18045         SpecialName to be invoked.
18046
18047 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
18048
18049         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
18050         number before adding it.
18051
18052 2002-12-21  Ravi Pratap  <ravi@ximian.com>
18053
18054         * ecore.cs (StandardImplicitConversion): When in an unsafe
18055         context, we allow conversion between void * to any other pointer
18056         type. This fixes bug #35973.
18057
18058 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
18059
18060         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
18061         is not thrown when extensionless outputs are used 
18062
18063 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18064
18065         * rootcontext.cs: fixed compilation of corlib.
18066
18067 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
18068
18069         * attribute.cs (Attributes.Contains): Add new method.
18070
18071         * class.cs (MethodCore.LabelParameters): if the parameter is an
18072         `out' parameter, check that no attribute `[In]' has been passed.
18073
18074         * enum.cs: Handle the `value__' name in an enumeration.
18075
18076 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
18077
18078         * decl.cs: Added special case to allow overrides on "protected
18079         internal" methods
18080
18081 2002-12-18  Ravi Pratap  <ravi@ximian.com>
18082
18083         * attribute.cs (Attributes.AddAttributeSection): Rename to this
18084         since it makes much more sense.
18085
18086         (Attributes.ctor): Don't require a Location parameter.
18087
18088         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
18089
18090         * attribute.cs (ApplyAttributes): Remove extra Location parameters
18091         since we already have that information per attribute.
18092
18093         * everywhere : make appropriate changes.
18094
18095         * class.cs (LabelParameters): Write the code which actually
18096         applies attributes to the return type. We can't do this on the MS
18097         .NET runtime so we flag a warning in the case an exception is
18098         thrown.
18099
18100 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
18101
18102         * const.cs: Handle implicit null conversions here too.
18103
18104 2002-12-17  Ravi Pratap  <ravi@ximian.com>
18105
18106         * class.cs (MethodCore.LabelParameters): Remove the extra
18107         Type [] parameter since it is completely unnecessary. Instead
18108         pass in the method's attributes so that we can extract
18109         the "return" attribute.
18110
18111 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
18112
18113         * cs-parser.jay (parse): Use Report.Error to flag errors instead
18114         of ignoring it and letting the compile continue.
18115
18116         * typemanager.cs (ChangeType): use an extra argument to return an
18117         error condition instead of throwing an exception.
18118
18119 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
18120
18121         * expression.cs (Unary.TryReduce): mimic the code for the regular
18122         code path.  Perform an implicit cast in the cases where we can
18123         implicitly convert to one of the integral types, and then reduce
18124         based on that constant.   This fixes bug #35483.
18125
18126 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18127
18128         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
18129
18130 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18131
18132         * namespace.cs: fixed bug #35489.
18133
18134 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
18135
18136         * class.cs: Remove some dead code.
18137
18138         * cs-parser.jay: Estimate the number of methods needed
18139         (RootContext.MethodCount);
18140
18141         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
18142         numbers instead of StringBuilders.
18143
18144         * support.cs (PtrHashtable): Add constructor with initial size;
18145         We can now reduce reallocations of the method table.
18146
18147 2002-12-10  Ravi Pratap  <ravi@ximian.com>
18148
18149         * attribute.cs (ApplyAttributes): Keep track of the emitted
18150         attributes on a per-target basis. This fixes bug #35413.
18151
18152 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
18153
18154         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
18155         default to the Windows 1252 encoding.
18156
18157         (UnixParseOption): Support version, thanks to Alp for the missing
18158         pointer. 
18159
18160         * AssemblyInfo.cs: Add nice assembly information.
18161
18162         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
18163         (bug 35169).
18164
18165         * cs-parser.jay: Allow a trailing comma before the close bracked
18166         in the attribute_section production.
18167
18168         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
18169         address of the instance was being taken, I will take this out,
18170         because we take the address of the object immediately here.
18171
18172 2002-12-09  Ravi Pratap  <ravi@ximian.com>
18173
18174         * typemanager.cs (AreMultipleAllowed): Take care of the most
18175         obvious case where attribute type is not in the current assembly -
18176         stupid me ;-)
18177
18178 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
18179
18180         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
18181         definitions, instead of doing that afterwards.  
18182
18183         Also we use a nice little hack, depending on the constructor, we
18184         know if we are a "composed" name or a simple name.  Hence, we
18185         avoid the IndexOf test, and we avoid 
18186
18187         * codegen.cs: Add code to assist in a bug reporter to track down
18188         the source of a compiler crash. 
18189
18190 2002-12-07  Ravi Pratap  <ravi@ximian.com>
18191
18192         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
18193         types have been emitted for a given element and flag an error
18194         if something which does not have AllowMultiple set is used more
18195         than once.
18196
18197         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
18198         attribute types and their corresponding AllowMultiple properties
18199
18200         (AreMultipleAllowed): Check the property for a given type.
18201
18202         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
18203         property in the case we have a TypeContainer.
18204
18205         (Attributes.AddAttribute): Detect duplicates and just skip on
18206         adding them. This trivial fix catches a pretty gross error in our
18207         attribute emission - global attributes were being emitted twice!
18208
18209         Bugzilla bug #33187 is now fixed.
18210
18211 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
18212
18213         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
18214         instead of pp_and).
18215
18216         * expression.cs (Binary.ResolveOperator): I can only use the
18217         Concat (string, string, string) and Concat (string, string,
18218         string, string) if the child is actually a concatenation of
18219         strings. 
18220
18221 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
18222
18223         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
18224         context where we need a 2-character lookahead.
18225
18226         * pending.cs (PendingImplementation): Rework so we can keep track
18227         of interface types all the time, and flag those which were
18228         implemented by parents as optional.
18229
18230 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
18231
18232         * expression.cs (Binary.ResolveOperator): Use
18233         String.Concat(string,string,string) or
18234         String.Concat(string,string,string,string) when possible. 
18235
18236         * typemanager: More helper methods.
18237
18238
18239 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
18240
18241         * pending.cs: remove the bogus return from GetMissingInterfaces()
18242         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
18243
18244 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18245
18246         * namespace.cs: avoid duplicated 'using xxx' being added to
18247         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
18248         when we get more than one 'using' statement for the same namespace.
18249         Report a CS0105 warning for it.
18250
18251 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
18252
18253         * cs-tokenizer.cs (consume_identifier): use read directly, instead
18254         of calling getChar/putback, uses internal knowledge of it.    
18255
18256         (xtoken): Reorder tokenizer so most common patterns are checked
18257         first.  This reduces the compilation time in another 5% (from 8.11s
18258         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
18259
18260         The parsing time is 22% of the compilation in mcs, and from that
18261         64% is spent on the tokenization process.  
18262
18263         I tried using a binary search for keywords, but this is slower
18264         than the hashtable.  Another option would be to do a couple of
18265         things:
18266
18267                 * Not use a StringBuilder, instead use an array of chars,
18268                   with a set value.  Notice that this way we could catch
18269                   the 645 error without having to do it *afterwards*.
18270
18271                 * We could write a hand-parser to avoid the hashtable
18272                   compares altogether.
18273
18274         The identifier consumption process takes 37% of the tokenization
18275         time.  Another 15% is spent on is_number.  56% of the time spent
18276         on is_number is spent on Int64.Parse:
18277
18278                 * We could probably choose based on the string length to
18279                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
18280                   computations. 
18281
18282         Another 3% is spend on wrapping `xtoken' in the `token' function.
18283
18284         Handle 0xa0 as whitespace (#34752)
18285
18286 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
18287
18288         * typemanager.cs (IsCLRType): New routine to tell whether a type
18289         is one of the builtin types.  
18290
18291         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
18292         typecode in more places instead of doing pointer comparissions.
18293         We could leverage some knowledge about the way the typecodes are
18294         laid out.
18295
18296         New code to cache namespaces in assemblies, it is currently not
18297         invoked, to be used soon.
18298
18299         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
18300
18301         * expression.cs (Binary.ResolveOperator): specially handle
18302         strings, and do not perform user-defined operator overloading for
18303         built-in types.
18304
18305 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
18306
18307         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
18308         internalcall as it is a pretty simple operation;  Avoid whenever
18309         possible to call Char.IsLetter.
18310
18311         (consume_identifier): Cut by half the number of
18312         hashtable calls by merging the is_keyword and GetKeyword behavior.
18313
18314         Do not short-circuit, because if we do, we
18315         report errors (ie, #if false && true would produce an invalid
18316         directive error);
18317
18318
18319 2002-11-24  Martin Baulig  <martin@ximian.com>
18320
18321         * expression.cs (Cast.TryReduce): If we're in checked syntax,
18322         check constant ranges and report a CS0221.  Fixes #33186.
18323
18324 2002-11-24  Martin Baulig  <martin@ximian.com>
18325
18326         * cs-parser.jay: Make this work for uninitialized variable
18327         declarations in the `for' initializer.  Fixes #32416.
18328
18329 2002-11-24  Martin Baulig  <martin@ximian.com>
18330
18331         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
18332         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
18333
18334 2002-11-24  Martin Baulig  <martin@ximian.com>
18335
18336         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
18337         argument; if true, we also check for user-defined conversions.
18338         This is only needed if both arguments are of a user-defined type.
18339         Fixes #30443, added test-175.cs.
18340         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
18341
18342         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
18343
18344 2002-11-24  Martin Baulig  <martin@ximian.com>
18345
18346         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
18347         function to get the store opcode.
18348         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
18349         only emit the Ldelema if the store opcode is Stobj.  You must run
18350         both test-34 and test-167 to test this.  Fixes #34529.
18351
18352 2002-11-23  Martin Baulig  <martin@ximian.com>
18353
18354         * ecore.cs (Expression.MemberLookup): Added additional
18355         `qualifier_type' argument which is used when we're being called
18356         from MemberAccess.DoResolve() and null if we're called from a
18357         SimpleName lookup.
18358         (Expression.MemberLookupFailed): New method to report errors; this
18359         does the CS1540 check and reports the correct error message.
18360
18361         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
18362         argument for the CS1540 check and redone the way how we're dealing
18363         with private members.  See the comment in the source code for details.
18364         (FilterWithClosure): Reverted this back to revision 1.197; renamed
18365         `closure_start_type' to `closure_qualifier_type' and check whether
18366         it's not null.  It was not this filter being broken, it was just
18367         being called with the wrong arguments.
18368
18369         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
18370         and pass it the correct `qualifier_type'; this also does the error
18371         handling for us.
18372
18373 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
18374
18375         * expression.cs (Invocation.EmitParams): If the we are dealing
18376         with a non-built-in value type, load its address as well.
18377
18378         (ArrayCreation): Use a a pretty constant instead
18379         of the hardcoded value 2.   Use 6 instead of 2 for the number of
18380         static initializers.  
18381
18382         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
18383         because they are not really value types, just glorified integers. 
18384
18385         * driver.cs: Do not append .exe, the CSC compiler does not do it.
18386
18387         * ecore.cs: Remove redundant code for enumerations, make them use
18388         the same code path as everything else, fixes the casting issue
18389         with enumerations in Windows.Forms.
18390
18391         * attribute.cs: Do only cast to string if it is a string, the
18392         validation happens later.
18393
18394         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
18395         people upgrade their corlibs.
18396
18397         * ecore.cs: Oops, enumerations were not following the entire code path
18398
18399 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
18400
18401         * typemanager.cs (FilterWithClosure): Commented out the test for
18402         1540 in typemanager.cs, as it has problems when accessing
18403         protected methods from a parent class (see test-174.cs). 
18404
18405         * attribute.cs (Attribute.ValidateGuid): new method.
18406         (Attribute.Resolve): Use above.
18407
18408 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
18409
18410         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
18411
18412         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
18413         handling for enumerations, as we only needed the TypeContainer
18414         functionality to begin with (this is required for the fix below to
18415         work for enums that reference constants in a container class for
18416         example). 
18417
18418         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
18419
18420         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
18421         a valid TypeBuilder to perform lookups on.o
18422
18423         * class.cs (InheritableMemberSignatureCompare): Use true in the
18424         call to GetGetMethod and GetSetMethod, because we are comparing
18425         the signature, and we need to get the methods *even* if they are
18426         private. 
18427
18428         (PropertyBase.CheckBase): ditto.
18429
18430         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
18431         GotoCase.Resolve): Use Peel on EmpytCasts.
18432
18433         * ecore.cs (EmptyCast): drop child, add Peel method.
18434
18435 2002-11-17  Martin Baulig  <martin@ximian.com>
18436
18437         * ecore.cs (EmptyCast.Child): New public property.
18438
18439         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
18440         label resolved to an EmptyCast.  Fixes #34162.
18441         (GotoCase.Resolve): Likewise.
18442         (Block.EmitMeta): Likewise.
18443
18444 2002-11-17  Martin Baulig  <martin@ximian.com>
18445
18446         * expression.cs (Invocation.BetterConversion): Prefer int over
18447         uint; short over ushort; long over ulong for integer literals.
18448         Use ImplicitConversionExists instead of StandardConversionExists
18449         since we also need to check for user-defined implicit conversions.
18450         Fixes #34165.  Added test-173.cs.
18451
18452 2002-11-16  Martin Baulig  <martin@ximian.com>
18453
18454         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
18455         with the `true' and `false' literals.  Fixes #33151.
18456
18457 2002-11-16  Martin Baulig  <martin@ximian.com>
18458
18459         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
18460         October 22nd; don't do the cs1540 check for static members.
18461
18462         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
18463         now using our own filter here and doing the cs1540 check again.
18464
18465 2002-11-16  Martin Baulig  <martin@ximian.com>
18466
18467         * support.cs (InternalParameters): Don't crash if we don't have
18468         any fixed parameters.  Fixes #33532.
18469
18470 2002-11-16  Martin Baulig  <martin@ximian.com>
18471
18472         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
18473         when looking up static methods to make this work on Windows.
18474         Fixes #33773.
18475
18476 2002-11-16  Martin Baulig  <martin@ximian.com>
18477
18478         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
18479         a setter rather than using PropertyInfo.CanWrite.
18480
18481 2002-11-15  Nick Drochak  <ndrochak@gol.com>
18482
18483         * class.cs: Allow acces to block member by subclasses. Fixes build
18484         breaker.
18485
18486 2002-11-14  Martin Baulig  <martin@ximian.com>
18487
18488         * class.cs (Constructor.Emit): Added the extern/block check.
18489         Fixes bug #33678.
18490
18491 2002-11-14  Martin Baulig  <martin@ximian.com>
18492
18493         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
18494         iteration while looking for indexers, this is needed because the
18495         indexer may have a different name in our base classes.  Fixed the
18496         error reporting (no indexers at all, not get accessor, no
18497         overloaded match).  Fixes bug #33089.
18498         (IndexerAccess.DoResolveLValue): Likewise.
18499
18500 2002-11-14  Martin Baulig  <martin@ximian.com>
18501
18502         * class.cs (PropertyBase.CheckBase): Make this work for multiple
18503         indexers.  Fixes the first part of bug #33089.
18504         (MethodSignature.InheritableMemberSignatureCompare): Added support
18505         for properties.
18506
18507 2002-11-13  Ravi Pratap  <ravi@ximian.com>
18508
18509         * attribute.cs (Attribute.Resolve): Catch the
18510         NullReferenceException and report it since it isn't supposed to
18511         happen. 
18512
18513 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
18514
18515         * expression.cs (Binary.EmitBranchable): Also handle the cases for
18516         LogicalOr and LogicalAnd that can benefit from recursively
18517         handling EmitBranchable.  The code now should be nice for Paolo.
18518
18519 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
18520
18521         * typemanager.cs (LookupType): Added a negative-hit hashtable for
18522         the Type lookups, as we perform quite a number of lookups on
18523         non-Types.  This can be removed once we can deterministically tell
18524         whether we have a type or a namespace in advance.
18525
18526         But this might require special hacks from our corlib.
18527
18528         * TODO: updated.
18529
18530         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
18531         and double which avoids a conversion from an integer to a double.
18532
18533         * expression.cs: tiny optimization, avoid calling IsConstant,
18534         because it effectively performs the lookup twice.
18535
18536 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
18537
18538         But a bogus return here to keep the semantics of the old code
18539         until the Mono runtime is fixed.
18540
18541         * pending.cs (GetMissingInterfaces): New method used to remove all
18542         the interfaces that are already implemented by our parent
18543         classes from the list of pending methods. 
18544
18545         * interface.cs: Add checks for calls after ResolveTypeExpr.
18546
18547 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
18548
18549         * class.cs (Class.Emit): Report warning 67: event not used if the
18550         warning level is beyond 3.
18551
18552         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
18553         being a NullLiteral.
18554
18555         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
18556         specifiers. 
18557
18558         * class.cs (TypeContainer.GetClassBases): Cover a missing code
18559         path that might fail if a type can not be resolved.
18560
18561         * expression.cs (Binary.Emit): Emit unsigned versions of the
18562         operators. 
18563
18564         * driver.cs: use error 5.
18565
18566 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
18567
18568         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
18569
18570 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
18571
18572         * cs-parser.jay (switch_section): A beautiful patch from Martin
18573         Baulig that fixed 33094.
18574
18575 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
18576
18577         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
18578         Check whether the base is abstract and report an error if so.
18579
18580         * expression.cs (IndexerAccess.DoResolveLValue,
18581         IndexerAccess.DoResolve): ditto. 
18582
18583         (Invocation.DoResolve): ditto.
18584
18585         (Invocation.FullMethodDesc): Improve the report string.
18586
18587         * statement.cs (Block): Eliminate IsVariableDefined as it is
18588         basically just a wrapper for GetVariableInfo.
18589
18590         * ecore.cs (SimpleName): Use new 
18591
18592         * support.cs (ReflectionParamter.ParameterType): We unwrap the
18593         type, as we return the actual parameter ref/unref state on a
18594         different call.
18595
18596 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
18597
18598         * support.cs: Return proper flags REF/OUT fixing the previous
18599         commit.  
18600
18601         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
18602         not used to mean `ref' but `ref or out' in ParameterReference
18603
18604         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
18605         full type signature instead of calling TypeManger.CSharpName
18606         ourselves. 
18607
18608         * support.cs (InternalParameters.ParameterDesc): Do not compare
18609         directly to the modflags, because REF/OUT will actually be bitsets
18610         if set. 
18611
18612         * delegate.cs (VerifyMethod): Check also the modifiers.
18613
18614         * cs-tokenizer.cs: Fix bug where floating point values with an
18615         exponent where a sign was missing was ignored.
18616
18617         * driver.cs: Allow multiple assemblies to be specified in a single
18618         /r: argument
18619
18620 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
18621
18622         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
18623         because identifiers after a parenthesis would end up in this kind
18624         of production, and we needed to desamiguate it for having casts
18625         like:
18626
18627                 (UserDefinedType *) xxx
18628
18629 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
18630
18631         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
18632         we should set on the Bindingflags.NonPublic, but not turn on
18633         private_ok.  private_ok controls whether a Private member is
18634         returned (this is chekced on the filter routine), while the
18635         BindingFlags.NonPublic just controls whether private/protected
18636         will be allowed.   This fixes the problem part of the problem of
18637         private properties being allowed to be used in derived classes.
18638
18639         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
18640         so we can call the children DoResolveLValue method (this will
18641         properly signal errors on lvalue assignments to base properties)
18642
18643         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
18644         getter are null, and we have a property info, we know that this
18645         happened because the lookup failed, so we report an error 122 for
18646         protection level violation.
18647
18648         We also silently return if setter and getter are null in the
18649         resolve functions, this condition only happens if we have flagged
18650         the error before.  This is the other half of the problem. 
18651
18652         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
18653         not have accessibility information, that is why we were returning
18654         true in the filter function in typemanager.cs.
18655
18656         To properly report 122 (property is inaccessible because of its
18657         protection level) correctly, we report this error in ResolveAccess
18658         by failing if both the setter and the getter are lacking (ie, the
18659         lookup failed). 
18660
18661         DoResolve and DoLResolve have been modified to check for both
18662         setter/getter being null and returning silently, the reason being
18663         that I did not want to put the knowledge about this error in upper
18664         layers, like:
18665
18666         int old = Report.Errors;
18667         x = new PropertyExpr (...);
18668         if (old != Report.Errors)
18669                 return null;
18670         else
18671                 return x;
18672
18673         So the property expr is returned, but it is invalid, so the error
18674         will be flagged during the resolve process. 
18675
18676         * class.cs: Remove InheritablePropertySignatureCompare from the
18677         class, as we no longer depend on the property signature to compute
18678         whether it is possible to implement a method or not.
18679
18680         The reason is that calling PropertyInfo.GetGetMethod will return
18681         null (in .NET, in Mono it works, and we should change this), in
18682         cases where the Get Method does not exist in that particular
18683         class.
18684
18685         So this code:
18686
18687         class X { public virtual int A { get { return 1; } } }
18688         class Y : X { }
18689         class Z : Y { public override int A { get { return 2; } } }
18690
18691         Would fail in Z because the parent (Y) would not have the property
18692         defined.  So we avoid this completely now (because the alternative
18693         fix was ugly and slow), and we now depend exclusively on the
18694         method names.
18695
18696         (PropertyBase.CheckBase): Use a method-base mechanism to find our
18697         reference method, instead of using the property.
18698
18699         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
18700         routines are gone now.
18701
18702         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
18703         names, they were incorrectly named.
18704
18705         * cs-tokenizer.cs: Return are more gentle token on failure. 
18706
18707         * pending.cs (PendingImplementation.InterfaceMethod): This routine
18708         had an out-of-sync index variable, which caused it to remove from
18709         the list of pending methods the wrong method sometimes.
18710
18711 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
18712
18713         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
18714         CanWrite, because those refer to this particular instance of the
18715         property, and do not take into account the fact that we can
18716         override single members of a property.
18717
18718         Constructor requires an EmitContext.  The resolution process does
18719         not happen here, but we need to compute the accessors before,
18720         because the resolution does not always happen for properties.
18721
18722         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
18723         subclass, before we did not update this flag, but we did update
18724         bindingflags. 
18725
18726         (GetAccessors): Drop this routine, as it did not work in the
18727         presence of partially overwritten set/get methods. 
18728
18729         Notice that this broke the cs1540 detection, but that will require
18730         more thinking. 
18731
18732 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18733
18734         * class.cs:
18735         * codegen.cs:
18736         * driver.cs: issue a warning instead of an error if we don't support
18737         debugging for the platform. Also ignore a couple of errors that may
18738         arise when trying to write the symbols. Undo my previous patch.
18739
18740 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18741
18742         * driver.cs: ignore /debug switch except for Unix platforms.
18743
18744 2002-10-23  Nick Drochak  <ndrochak@gol.com>
18745
18746         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
18747
18748 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
18749
18750         * driver.cs: Do not make mcs-debug conditional, so we do not break
18751         builds that use it.
18752
18753         * statement.cs (UsageVector.MergeChildren): I would like Martin to
18754         review this patch.  But basically after all the children variables
18755         have been merged, the value of "Breaks" was not being set to
18756         new_breaks for Switch blocks.  I think that it should be set after
18757         it has executed.  Currently I set this to the value of new_breaks,
18758         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
18759         conservative, but I do not understand this code very well.
18760
18761         I did not break anything in the build, so that is good ;-)
18762
18763         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
18764
18765 2002-10-20  Mark Crichton  <crichton@gimp.org>
18766
18767         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
18768
18769 2002-10-20  Nick Drochak  <ndrochak@gol.com>
18770
18771         * cfold.cs: Fixed compile blocker.
18772
18773 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
18774
18775         * driver.cs: I was chekcing the key, not the file.
18776
18777 2002-10-19  Ravi Pratap  <ravi@ximian.com>
18778
18779         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
18780         message that we were generating - we just need to silently return
18781         a null.
18782
18783 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
18784
18785         * class.cs (Event.Define): Change my previous commit, as this
18786         breaks the debugger.  This is a temporary hack, as it seems like
18787         the compiler is generating events incorrectly to begin with.
18788
18789         * expression.cs (Binary.ResolveOperator): Added support for 
18790         "U operator - (E x, E y)"
18791
18792         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
18793         y)".
18794
18795         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
18796         init-only variables, but this path did not take into account that
18797         there might be also instance readonly variables.  Correct this
18798         problem. 
18799
18800         This fixes bug 32253
18801
18802         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
18803         delegates as well.
18804
18805         * driver.cs: Change the extension for modules to `netmodule'
18806
18807         * cs-parser.jay: Improved slightly the location tracking for
18808         the debugger symbols.
18809
18810         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
18811         modifiers that were specified instead of the hardcoded value
18812         (FamAndAssem).  This was basically ignoring the static modifier,
18813         and others.  Fixes 32429.
18814
18815         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
18816         fixed a bug in the process (32476)
18817
18818         * expression.cs (ArrayAccess.EmitAssign): Patch from
18819         hwang_rob@yahoo.ca that fixes bug 31834.3
18820
18821 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
18822
18823         * driver.cs: Make the module extension .netmodule.
18824
18825 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
18826
18827         * driver.cs: Report an error if the resource file is not found
18828         instead of crashing.
18829
18830         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
18831         false, like Emit does.
18832
18833 2002-10-16  Nick Drochak  <ndrochak@gol.com>
18834
18835         * typemanager.cs: Remove unused private member.  Also reported mcs
18836         bug to report this as a warning like csc.
18837
18838 2002-10-15  Martin Baulig  <martin@gnome.org>
18839
18840         * statement.cs (Statement.Emit): Made this a virtual method; emits
18841         the line number info and calls DoEmit().
18842         (Statement.DoEmit): New protected abstract method, formerly knows
18843         as Statement.Emit().
18844
18845         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
18846
18847 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
18848
18849         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
18850         have fixed a remaining problem: not every AddXXXX was adding a
18851         fully qualified name.  
18852
18853         Now everyone registers a fully qualified name in the DeclSpace as
18854         being defined instead of the partial name.  
18855
18856         Downsides: we are slower than we need to be due to the excess
18857         copies and the names being registered this way.  
18858
18859         The reason for this is that we currently depend (on the corlib
18860         bootstrap for instance) that types are fully qualified, because
18861         we dump all the types in the namespace, and we should really have
18862         types inserted into the proper namespace, so we can only store the
18863         basenames in the defined_names array.
18864
18865 2002-10-10  Martin Baulig  <martin@gnome.org>
18866
18867         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
18868         from bug #31834, see the bug report for a testcase which is
18869         miscompiled.
18870
18871 2002-10-10  Martin Baulig  <martin@gnome.org>
18872
18873         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
18874         flow analysis code for this.
18875
18876         * statement.cs (Do, While, For): Tell the flow analysis code about
18877         infinite loops.
18878         (FlowBranching.UsageVector): Added support for infinite loops.
18879         (Block.Resolve): Moved the dead code elimination here and use flow
18880         analysis to do it.
18881
18882 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
18883
18884         * class.cs (Field.Define): Catch cycles on struct type
18885         definitions. 
18886
18887         * typemanager.cs (IsUnmanagedtype): Do not recursively check
18888         fields if the fields are static.  We only need to check instance
18889         fields. 
18890
18891         * expression.cs (As.DoResolve): Test for reference type.
18892
18893         * statement.cs (Using.ResolveExpression): Use
18894         ConvertImplicitRequired, not ConvertImplicit which reports an
18895         error on failture
18896         (Using.ResolveLocalVariableDecls): ditto.
18897
18898         * expression.cs (Binary.ResolveOperator): Report errors in a few
18899         places where we had to.
18900
18901         * typemanager.cs (IsUnmanagedtype): Finish implementation.
18902
18903 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
18904
18905         * expression.cs: Use StoreFromPtr instead of extracting the type
18906         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
18907
18908         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
18909         an enumeration value to a System.Enum, but System.Enum is not a
18910         value type, but an class type, so we need to box.
18911
18912         (Expression.ConvertExplicit): One codepath could return
18913         errors but not flag them.  Fix this.  Fixes #31853
18914
18915         * parameter.cs (Resolve): Do not allow void as a parameter type.
18916
18917 2002-10-06  Martin Baulig  <martin@gnome.org>
18918
18919         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
18920         if it's a class type and not a struct.  Fixes #31815.
18921
18922 2002-10-06  Martin Baulig  <martin@gnome.org>
18923
18924         * statement.cs: Reworked the flow analysis code a bit to make it
18925         usable for dead code elimination.
18926
18927 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18928
18929         * cs-parser.jay: allow empty source files. Fixes bug #31781.
18930
18931 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18932
18933         * expression.cs (ComposedCast.DoResolveType): A quick workaround
18934         to fix the test 165, will investigate deeper.
18935
18936 2002-10-04  Martin Baulig  <martin@gnome.org>
18937
18938         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
18939         finally blocks actually work.
18940         (Try.Resolve): We don't need to create a sibling for `finally' if
18941         there is no finally block.
18942
18943 2002-10-04  Martin Baulig  <martin@gnome.org>
18944
18945         * class.cs (Constructor.Define): The default accessibility for a
18946         non-default constructor is private, not public.
18947
18948 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18949
18950         * class.cs (Constructor): Make AllowedModifiers public, add
18951         EXTERN.
18952
18953         * cs-parser.jay: Perform the modifiers test here, as the
18954         constructor for the Constructor class usually receives a zero
18955         because of the way we create it (first we create, later we
18956         customize, and we were never checking the modifiers).
18957
18958         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
18959         is a version of LookupTypeReflection that includes the type-name
18960         cache.  This can be used as a fast path for functions that know
18961         the fully qualified name and are only calling into *.GetType() to
18962         obtain a composed type.
18963
18964         This is also used by TypeManager.LookupType during its type
18965         composition.
18966
18967         (LookupType): We now also track the real type name, as sometimes
18968         we can get a quey for the real type name from things like
18969         ComposedCast.  This fixes bug 31422.
18970
18971         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
18972         complete type fullname, it does not have to go through the type
18973         resolution system to obtain the composed version of the type (for
18974         obtaining arrays or pointers).
18975
18976         (Conditional.Emit): Use the EmitBoolExpression to
18977         generate nicer code, as requested by Paolo.
18978
18979         (ArrayCreation.CheckIndices): Use the patch from
18980         hwang_rob@yahoo.ca to validate the array initializers. 
18981
18982 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
18983
18984         * class.cs (ConstructorInitializer.Emit): simplify code by using
18985         Invocation.EmitCall, and at the same time, fix the bugs in calling
18986         parent constructors that took variable arguments. 
18987
18988         * ecore.cs (Expression.ConvertNumericExplicit,
18989         Expression.ImplicitNumericConversion): Remove the code that
18990         manually wrapped decimal (InternalTypeConstructor call is now gone
18991         as well).
18992
18993         * expression.cs (Cast.TryReduce): Also handle decimal types when
18994         trying to perform a constant fold on the type.
18995
18996         * typemanager.cs (IsUnmanagedtype): Partially implemented.
18997
18998         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
18999         that only turned off an error report, and did nothing else. 
19000
19001 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
19002
19003         * driver.cs: Handle and ignore /fullpaths
19004
19005 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
19006
19007         * expression.cs (Binary.ResolveOperator): Catch the case where
19008         DoNumericPromotions returns true, 
19009
19010         (Binary.DoNumericPromotions): Simplify the code, and the tests.
19011
19012 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
19013
19014         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
19015         report error 70.
19016
19017 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
19018
19019         * ecore.cs (ConvertNumericExplicit): It is not enough that the
19020         conversion exists, but it is also required that the conversion be
19021         performed.  This manifested in "(Type64Enum) 2".  
19022
19023         * class.cs (TypeManager.AddMethod): The fix is not to change
19024         AddEnum, because that one was using a fully qualified name (every
19025         DeclSpace derivative does), but to change the AddMethod routine
19026         that was using an un-namespaced name.  This now correctly reports
19027         the duplicated name.
19028
19029         Revert patch until I can properly fix it.  The issue
19030         is that we have a shared Type space across all namespaces
19031         currently, which is wrong.
19032
19033         Options include making the Namespace a DeclSpace, and merge
19034         current_namespace/current_container in the parser.
19035
19036 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
19037
19038         * cs-parser.jay: Improve error reporting when we get a different
19039         kind of expression in local_variable_type and
19040         local_variable_pointer_type. 
19041
19042         Propagate this to avoid missleading errors being reported.
19043
19044         * ecore.cs (ImplicitReferenceConversion): treat
19045         TypeManager.value_type as a target just like object_type.   As
19046         code like this:
19047
19048         ValueType v = 1;
19049
19050         Is valid, and needs to result in the int 1 being boxed before it
19051         is assigned to the value type v.
19052
19053         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
19054         to validate the enumeration name.
19055
19056         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
19057         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
19058         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
19059
19060         * ecore.cs (TryImplicitIntConversion): When doing an
19061         implicit-enumeration-conversion, check if the type is 64-bits and
19062         perform a conversion before passing to EnumConstant.
19063
19064 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
19065
19066         * decl.cs (Error_AmbiguousTypeReference); New routine used to
19067         report ambiguous type references.  Unlike the MS version, we
19068         report what the ambiguity is.   Innovation at work ;-)
19069
19070         (DeclSpace.FindType): Require a location argument to
19071         display when we display an ambiguous error.
19072
19073         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
19074
19075         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
19076
19077         * expression.cs (EmitDynamicInitializers): Apply patch from
19078         hwang_rob@yahoo.ca that fixes the order in which we emit our
19079         initializers. 
19080
19081 2002-09-21  Martin Baulig  <martin@gnome.org>
19082
19083         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
19084         delegate takes no arguments.
19085
19086 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
19087
19088         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
19089         from integers.
19090
19091         * expression.cs: Extract the underlying type.
19092
19093         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
19094
19095         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
19096
19097 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
19098
19099         * class.cs (TypeContainer.DefineType): We can not use the nice
19100         PackingSize with the size set to 1 DefineType method, because it
19101         will not allow us to define the interfaces that the struct
19102         implements.
19103
19104         This completes the fixing of bug 27287
19105
19106         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
19107         means also structs.  This fixes part of the problem. 
19108         (Expresion.ImplicitReferenceConversionExists): ditto.
19109
19110         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
19111         error if there were no errors reported during the type lookup
19112         process, to avoid duplicates or redundant errors.  Without this
19113         you would get an ambiguous errors plus a type not found.  We have
19114         beaten the user enough with the first error.  
19115
19116         (DeclSparce.FindType): Emit a warning if we have an ambiguous
19117         reference. 
19118
19119         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
19120         during the resolution process, stop the lookup, this avoids
19121         repeated error reports (same error twice).
19122
19123         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
19124
19125         * typemanager.cs (LookupType): Redo the type lookup code to match
19126         the needs of System.Reflection.  
19127
19128         The issue is that System.Reflection requires references to nested
19129         types to begin with a "+" sign instead of a dot.  So toplevel
19130         types look like: "NameSpace.TopLevelClass", and nested ones look
19131         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
19132         levels. 
19133
19134 2002-09-19  Martin Baulig  <martin@gnome.org>
19135
19136         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
19137         says that a method always returns or always throws an exception,
19138         don't report the CS0161.
19139
19140         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
19141         set `Returns = new_returns'.
19142
19143 2002-09-19  Martin Baulig  <martin@gnome.org>
19144
19145         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
19146         to an enum constant, check for a CS0176.
19147
19148 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
19149
19150         * class.cs (TypeContainer.CheckPairedOperators): Now we check
19151         for operators that must be in pairs and report errors.
19152
19153         * ecore.cs (SimpleName.DoResolveType): During the initial type
19154         resolution process, when we define types recursively, we must
19155         check first for types in our current scope before we perform
19156         lookups in the enclosing scopes.
19157
19158         * expression.cs (MakeByteBlob): Handle Decimal blobs.
19159
19160         (Invocation.VerifyArgumentsCompat): Call
19161         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
19162         I thought we were supposed to always call this, but there are a
19163         few places in the code where we dont do it.
19164
19165 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
19166
19167         * driver.cs: Add support in -linkres and -resource to specify the
19168         name of the identifier.
19169
19170 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
19171
19172         * ecore.cs (StandardConversionExists): Sync with the conversion
19173         code: allow anything-* to void* conversions.
19174
19175         (FindMostSpecificSource): Use an Expression argument
19176         instead of a Type, because we might be handed over a Literal which
19177         gets a few more implicit conversions that plain types do not.  So
19178         this information was being lost.
19179
19180         Also, we drop the temporary type-holder expression when not
19181         required.
19182
19183 2002-09-17  Martin Baulig  <martin@gnome.org>
19184
19185         * class.cs (PropertyBase.CheckBase): Don't check the base class if
19186         this is an explicit interface implementation.
19187
19188 2002-09-17  Martin Baulig  <martin@gnome.org>
19189
19190         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
19191         different `IndexerName' attributes.
19192
19193         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
19194         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
19195         virtual CommonResolve().
19196
19197 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
19198
19199         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
19200         and convert that to the UnderlyingType.
19201
19202         * statement.cs (Foreach.Resolve): Indexers are just like variables
19203         or PropertyAccesses.
19204
19205         * cs-tokenizer.cs (consume_string): Track line numbers and columns
19206         inside quoted strings, we were not doing this before.
19207
19208 2002-09-16  Martin Baulig  <martin@gnome.org>
19209
19210         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
19211         resolve it.  This is needed for the definite assignment check of the
19212         instance expression, fixes bug #29846.
19213         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
19214
19215 2002-09-16  Nick Drochak  <ndrochak@gol.com>
19216
19217         * parameter.cs: Fix compile error.  Cannot reference static member
19218         from an instance object.  Is this an mcs bug?
19219
19220 2002-09-14  Martin Baulig  <martin@gnome.org>
19221
19222         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
19223         multiple times.  Fixes bug #30295, added test-166.cs.
19224
19225 2002-09-14  Martin Baulig  <martin@gnome.org>
19226
19227         * statement.cs (Block.Emit): Don't emit unreachable code.
19228         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
19229         `break' statements.
19230         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
19231
19232 2002-09-14  Martin Baulig  <martin@gnome.org>
19233
19234         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
19235         is set.
19236
19237 2002-09-14  Martin Baulig  <martin@gnome.org>
19238
19239         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
19240         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
19241         be false on the ms runtime.
19242
19243 2002-09-13  Martin Baulig  <martin@gnome.org>
19244
19245         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
19246         the CS0038 error message.
19247
19248 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
19249
19250         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
19251         constant inside, return it.
19252
19253 2002-09-12  Martin Baulig  <martin@gnome.org>
19254
19255         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
19256         implicit conversion can be done between enum types.
19257
19258         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
19259         check whether an implicit conversion to the current enum's UnderlyingType
19260         exists and report an error if not.
19261
19262         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
19263         without debugging support.
19264
19265         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
19266         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
19267
19268 2002-09-12  Martin Baulig  <martin@gnome.org>
19269
19270         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
19271
19272         * ecore.cs (IMemberExpr.DeclaringType): New property.
19273         (SimpleName.SimpleNameResolve): Check whether we're accessing a
19274         nonstatic member of an outer type (CS0038).
19275
19276 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
19277
19278         * driver.cs: Activate the using-error detector at warning level
19279         4 (at least for MS-compatible APIs).
19280
19281         * namespace.cs (VerifyUsing): Small buglett fix.
19282
19283         * pending.cs (PendingImplementation): pass the container pointer. 
19284
19285         * interface.cs (GetMethods): Allow for recursive definition.  Long
19286         term, I would like to move every type to support recursive
19287         definitions, not the current ordering mechanism that we have right
19288         now.
19289
19290         The situation is this: Attributes are handled before interfaces,
19291         so we can apply attributes to interfaces.  But some attributes
19292         implement interfaces, we will now handle the simple cases
19293         (recursive definitions will just get an error).  
19294
19295         * parameter.cs: Only invalidate types at the end if we fail to
19296         lookup all types.  
19297
19298 2002-09-09  Martin Baulig  <martin@gnome.org>
19299
19300         * ecore.cs (PropertyExpr.Emit): Also check for
19301         TypeManager.system_int_array_get_length so this'll also work when
19302         compiling corlib.  Fixes #30003.
19303
19304 2002-09-09  Martin Baulig  <martin@gnome.org>
19305
19306         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
19307         and throw an exception if we can't get the type's size.  Fixed #30040,
19308         added test-165.cs.
19309
19310 2002-09-09  Martin Baulig  <martin@gnome.org>
19311
19312         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
19313
19314         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
19315         context.  Fixes bug #30027.
19316
19317         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
19318         virtual functions.  Fixes bug #30043, added test-164.cs.
19319
19320 2002-09-08  Ravi Pratap  <ravi@ximian.com>
19321
19322         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
19323
19324 2002-09-08  Nick Drochak  <ndrochak@gol.com>
19325
19326         * driver.cs: Use an object to get the windows codepage since it's not a
19327         static property.
19328
19329 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
19330
19331         * statement.cs (For.Emit): for infinite loops (test == null)
19332         return whether there is a break inside, not always "true".
19333
19334         * namespace.cs (UsingEntry): New struct to hold the name of the
19335         using definition, the location where it is defined, and whether it
19336         has been used in a successful type lookup.
19337
19338         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
19339         strings.
19340
19341         * decl.cs: ditto.
19342
19343 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19344
19345         * attribute.cs : Fix incorrect code which relied on catching
19346         a NullReferenceException to detect a null being passed in
19347         where an object was expected.
19348
19349 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
19350
19351         * statement.cs (Try): flag the catch variable as assigned
19352
19353         * expression.cs (Cast): Simplified by using ResolveType instead of
19354         manually resolving.
19355
19356         * statement.cs (Catch): Fix bug by using ResolveType.
19357
19358 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19359
19360         * expression.cs (BetterConversion): Special case for when we have
19361         a NullLiteral as the argument and we have to choose between string
19362         and object types - we choose string the way csc does.
19363
19364         * attribute.cs (Attribute.Resolve): Catch the
19365         NullReferenceException and report error #182 since the Mono
19366         runtime no more has the bug and having this exception raised means
19367         we tried to select a constructor which takes an object and is
19368         passed a null.
19369
19370 2002-09-05  Ravi Pratap  <ravi@ximian.com>
19371
19372         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
19373         message (1502, 1503) when we can't locate a method after overload
19374         resolution. This is much more informative and closes the bug
19375         Miguel reported.
19376
19377         * interface.cs (PopulateMethod): Return if there are no argument
19378         types. Fixes a NullReferenceException bug.
19379
19380         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
19381         expressions too. Previously we were checking only in one place for
19382         positional arguments leaving out named arguments.
19383
19384         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
19385         type to the enum type is not allowed. Remove code corresponding to
19386         that.
19387
19388         (ConvertNumericExplicit): Allow explicit conversions from
19389         the underlying type to enum type. This precisely follows the spec
19390         and closes a bug filed by Gonzalo.
19391
19392 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19393
19394         * compiler.csproj:
19395         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
19396
19397 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
19398
19399         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
19400         it was important that we stored the right value after the
19401         reduction in `converted'.
19402
19403 2002-09-04  Martin Baulig  <martin@gnome.org>
19404
19405         * location.cs (Location.SymbolDocument): Use full pathnames for the
19406         source files.
19407
19408 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
19409
19410         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
19411         of the expression resolve mechanism, because that will catch the
19412         SimpleName error failures.
19413
19414         (Conditional): If we can not resolve the
19415         expression, return, do not crash.
19416
19417 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19418
19419         * cs-tokenizer.cs:
19420         (location): display token name instead of its number.
19421
19422 2002-08-28  Martin Baulig  <martin@gnome.org>
19423
19424         * expression.cs (Binary.ResolveOperator): Don't silently return
19425         but return an error if an operator cannot be applied between two
19426         enum types.
19427
19428 2002-08-28  Martin Baulig  <martin@gnome.org>
19429
19430         * class.cs (Constructor.Define): Set the permission attributes
19431         correctly instead of making all constructors public.
19432
19433 2002-08-28  Martin Baulig  <martin@gnome.org>
19434
19435         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
19436         for private members before reporting a CS0103; if we find anything,
19437         it's a CS0122.
19438
19439 2002-08-28  Martin Baulig  <martin@gnome.org>
19440
19441         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
19442         to check whether `closure_start_type == closure_invocation_type',
19443         we also need to check whether `m.DeclaringType == closure_invocation_type'
19444         before bypassing the permission checks.  We might be accessing
19445         protected/private members from the base class.
19446         (TypeManager.RealMemberLookup): Only set private_ok if private
19447         members were requested via BindingFlags.NonPublic.
19448
19449         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
19450
19451         * expression.cs (MemberAccess.ResolveMemberAccess): Set
19452         MethodGroupExpr.IsExplicitImpl if appropriate.
19453         (Invocation.DoResolve): Don't report the CS0120 for explicit
19454         interface implementations.
19455
19456 2002-08-27  Martin Baulig  <martin@gnome.org>
19457
19458         * expression.cs (Invocation.DoResolve): If this is a static
19459         method and we don't have an InstanceExpression, we must report
19460         a CS0120.
19461
19462 2002-08-25  Martin Baulig  <martin@gnome.org>
19463
19464         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
19465         `==' between a valuetype and an object.
19466
19467 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
19468
19469         * ecore.cs (TypeExpr): Provide a ToString method.
19470
19471 2002-08-24  Martin Baulig  <martin@gnome.org>
19472
19473         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
19474         now called proggie.dbg and it's a binary file.
19475
19476 2002-08-23  Martin Baulig  <martin@gnome.org>
19477
19478         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
19479
19480 2002-08-23  Martin Baulig  <martin@gnome.org>
19481
19482         * struct.cs (MyStructInfo.ctor): Make this work with empty
19483         structs; it's not allowed to use foreach() on null.
19484
19485 2002-08-23  Martin Baulig  <martin@gnome.org>
19486
19487         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
19488         writer the full pathname of the generated assembly.
19489
19490 2002-08-23  Martin Baulig  <martin@gnome.org>
19491
19492         * statements.cs (FlowBranching.UsageVector.MergeChildren):
19493         A `finally' block never returns or breaks; improved handling of
19494         unreachable code.
19495
19496 2002-08-23  Martin Baulig  <martin@gnome.org>
19497
19498         * statement.cs (Throw.Resolve): Allow `throw null'.
19499
19500 2002-08-23  Martin Baulig  <martin@gnome.org>
19501
19502         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
19503         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
19504         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
19505         MemberLookup would return a wrong event if this is an explicit
19506         interface implementation and the class has an event with the same
19507         name.
19508
19509 2002-08-23  Martin Baulig  <martin@gnome.org>
19510
19511         * statement.cs (Block.AddChildVariableNames): New public method.
19512         (Block.AddChildVariableName): Likewise.
19513         (Block.IsVariableNameUsedInChildBlock): Likewise.
19514         (Block.AddVariable): Check whether a variable name has already
19515         been used in a child block.
19516
19517         * cs-parser.jay (declare_local_variables): Mark all variable names
19518         from the current block as being used in a child block in the
19519         implicit block.
19520
19521 2002-08-23  Martin Baulig  <martin@gnome.org>
19522
19523         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
19524         find the symbol writer.
19525
19526         * driver.cs: csc also allows the arguments to /define being
19527         separated by commas, not only by semicolons.
19528
19529 2002-08-23  Martin Baulig  <martin@gnome.org>
19530
19531         * interface.cs (Interface.GetMembers): Added static check for events.
19532
19533 2002-08-15  Martin Baulig  <martin@gnome.org>
19534
19535         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
19536         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
19537
19538         * ecore.cs (Expression.MemberLookup): Added documentation and explained
19539         why the MethodData.EmitDestructor() change was necessary.
19540
19541 2002-08-20  Martin Baulig  <martin@gnome.org>
19542
19543         * class.cs (TypeContainer.FindMembers): Added static check for events.
19544
19545         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
19546
19547         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
19548         use Type.GetEvents(), not Type.FindMembers().
19549
19550 2002-08-20  Martin Baulig  <martin@gnome.org>
19551
19552         * decl.cs (MemberCache): Added a special method cache which will
19553         be used for method-only searched.  This ensures that a method
19554         search will return a MethodInfo with the correct ReflectedType for
19555         inherited methods.      
19556
19557 2002-08-20  Martin Baulig  <martin@gnome.org>
19558
19559         * decl.cs (DeclSpace.FindMembers): Made this public.
19560
19561 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19562
19563         * delegate.cs: fixed build on windows.
19564         [FIXME:  Filed as bug #29150: MCS must report these errors.]
19565
19566 2002-08-19  Ravi Pratap  <ravi@ximian.com>
19567
19568         * ecore.cs (StandardConversionExists): Return a false
19569         if we are trying to convert the void type to anything else
19570         since that is not allowed.
19571
19572         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
19573         we flag error 70 in the event an event is trying to be accessed
19574         directly from outside the declaring type.
19575
19576 2002-08-20  Martin Baulig  <martin@gnome.org>
19577
19578         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
19579         MemberCache from typemanager.cs to decl.cs.
19580
19581 2002-08-19  Martin Baulig  <martin@gnome.org>
19582
19583         * class.cs (TypeContainer): Implement IMemberContainer.
19584         (TypeContainer.DefineMembers): Create the MemberCache.
19585         (TypeContainer.FindMembers): Do better BindingFlags checking; only
19586         return public members if BindingFlags.Public was given, check
19587         whether members are static.
19588
19589 2002-08-16  Martin Baulig  <martin@gnome.org>
19590
19591         * decl.cs (DeclSpace.Define): Splitted this in Define and
19592         DefineMembers.  DefineMembers is called first and initializes the
19593         MemberCache.
19594
19595         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
19596         DefineMembers() on all our DeclSpaces.
19597
19598         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
19599         but call DefineMembers() on all nested interfaces.  We call their
19600         Define() in our new Define() function.
19601
19602         * interface.cs (Interface): Implement IMemberContainer.
19603         (Interface.Define): Moved all code except the attribute stuf to
19604         DefineMembers().
19605         (Interface.DefineMembers): Initialize the member cache.
19606
19607         * typemanager.cs (IMemberFinder): Removed this interface, we don't
19608         need this anymore since we can use MemberCache.FindMembers directly.
19609
19610 2002-08-19  Martin Baulig  <martin@gnome.org>
19611
19612         * typemanager.cs (MemberCache): When creating the cache for an
19613         interface type, add all inherited members.
19614         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
19615         to `out bool used_cache' and documented it.
19616         (TypeManager.MemberLookup): If we already used the cache in the first
19617         iteration, we don't need to do the interfaces check.
19618
19619 2002-08-19  Martin Baulig  <martin@gnome.org>
19620
19621         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
19622         here from IMemberFinder and don't implement this interface anymore.
19623         (DeclSpace.MemberCache): Moved here from IMemberFinder.
19624
19625         * typemanager.cs (IMemberFinder): This interface is now only used by
19626         classes which actually support the member cache.
19627         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
19628         since we only put DeclSpaces into this Hashtable.
19629         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
19630         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
19631
19632 2002-08-16  Martin Baulig  <martin@gnome.org>
19633
19634         * typemanager.cs (ICachingMemberFinder): Removed.
19635         (IMemberFinder.MemberCache): New property.
19636         (TypeManager.FindMembers): Merged this with RealFindMembers().
19637         This function will never be called from TypeManager.MemberLookup()
19638         so we can't use the cache here, just the IMemberFinder.
19639         (TypeManager.MemberLookup_FindMembers): Check whether the
19640         IMemberFinder has a MemberCache and call the cache's FindMembers
19641         function.
19642         (MemberCache): Rewrote larger parts of this yet another time and
19643         cleaned it up a bit.
19644
19645 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
19646
19647         * driver.cs (LoadArgs): Support quoting.
19648
19649         (Usage): Show the CSC-like command line arguments.
19650
19651         Improved a few error messages.
19652
19653 2002-08-15  Martin Baulig  <martin@gnome.org>
19654
19655         * typemanager.cs (IMemberContainer.Type): New property.
19656         (IMemberContainer.IsInterface): New property.
19657
19658         The following changes are conditional to BROKEN_RUNTIME, which is
19659         defined at the top of the file.
19660
19661         * typemanager.cs (MemberCache.MemberCache): Don't add the base
19662         class'es members, but add all members from TypeHandle.ObjectType
19663         if we're an interface.
19664         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
19665         is the current type.
19666         (MemberCache.CacheEntry.Container): Removed this field.
19667         (TypeHandle.GetMembers): Include inherited members.
19668
19669 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19670
19671         * typemanager.cs: fixed compilation and added a comment on a field that
19672         is never used.
19673
19674 2002-08-15  Martin Baulig  <martin@gnome.org>
19675
19676         * class.cs (ConstructorInitializer.Resolve): In the
19677         Expression.MemberLookup call, use the queried_type as
19678         invocation_type.
19679
19680         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
19681         declared' attribute, it's always true.
19682         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
19683         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
19684         temporary wrapper for FindMembers which tells MemberLookup whether
19685         members from the base classes are included in the return value.
19686         This will go away soon.
19687         (TypeManager.MemberLookup): Use this temporary hack here; once the
19688         new MemberCache is completed, we don't need to do the DeclaredOnly
19689         looping here anymore since the MemberCache will take care of this.
19690         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
19691         (MemberCache): When creating the MemberCache for a class, get
19692         members from the current class and all its base classes.
19693         (MemberCache.CacheEntry.Container): New field.  This is a
19694         temporary hack until the Mono runtime is fixed to distinguish
19695         between ReflectedType and DeclaringType.  It allows us to use MCS
19696         with both the MS runtime and the unfixed Mono runtime without
19697         problems and without accecting performance.
19698         (MemberCache.SearchMembers): The DeclaredOnly looping from
19699         TypeManager.MemberLookup is now done here.      
19700
19701 2002-08-14  Martin Baulig  <martin@gnome.org>
19702
19703         * statement.cs (MyStructInfo.MyStructInfo): Don't call
19704         Type.GetFields on dynamic types but get the fields from the
19705         corresponding TypeContainer.
19706         (MyStructInfo.GetStructInfo): Added check for enum types.
19707
19708         * typemanager.cs (MemberList.IsSynchronized): Implemented.
19709         (MemberList.SyncRoot): Implemented.
19710         (TypeManager.FilterWithClosure): No need to check permissions if
19711         closure_start_type == closure_invocation_type, don't crash if
19712         closure_invocation_type is null.
19713
19714 2002-08-13  Martin Baulig  <martin@gnome.org>
19715
19716         Rewrote TypeContainer.FindMembers to use a member cache.  This
19717         gives us a speed increase of about 35% for the self-hosting MCS
19718         build and of about 15-20% for the class libs (both on GNU/Linux).
19719
19720         * report.cs (Timer): New class to get enhanced profiling.  This
19721         whole class is "TIMER" conditional since it remarkably slows down
19722         compilation speed.
19723
19724         * class.cs (MemberList): New class.  This is an IList wrapper
19725         which we're now using instead of passing MemberInfo[]'s around to
19726         avoid copying this array unnecessarily.
19727         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
19728         (ICachingMemberFinder, IMemberContainer): New interface.
19729         (TypeManager.FilterWithClosure): If `criteria' is null, the name
19730         has already been checked, otherwise use it for the name comparision.
19731         (TypeManager.FindMembers): Renamed to RealMemberFinder and
19732         provided wrapper which tries to use ICachingMemberFinder.FindMembers
19733         if possible.  Returns a MemberList, not a MemberInfo [].
19734         (TypeHandle): New class, implements IMemberContainer.  We create
19735         one instance of this class per type, it contains a MemberCache
19736         which is used to do the member lookups.
19737         (MemberCache): New class.  Each instance of this class contains
19738         all members of a type and a name-based hash table.
19739         (MemberCache.FindMembers): This is our new member lookup
19740         function.  First, it looks up all members of the requested name in
19741         the hash table.  Then, it walks this list and sorts out all
19742         applicable members and returns them.
19743
19744 2002-08-13  Martin Baulig  <martin@gnome.org>
19745
19746         In addition to a nice code cleanup, this gives us a performance
19747         increase of about 1.4% on GNU/Linux - not much, but it's already
19748         half a second for the self-hosting MCS compilation.
19749
19750         * typemanager.cs (IMemberFinder): New interface.  It is used by
19751         TypeManager.FindMembers to call FindMembers on a TypeContainer,
19752         Enum, Delegate or Interface.
19753         (TypeManager.finder_to_member_finder): New PtrHashtable.
19754         (TypeManager.finder_to_container): Removed.
19755         (TypeManager.finder_to_delegate): Removed.
19756         (TypeManager.finder_to_interface): Removed.
19757         (TypeManager.finder_to_enum): Removed.
19758
19759         * interface.cs (Interface): Implement IMemberFinder.
19760
19761         * delegate.cs (Delegate): Implement IMemberFinder.
19762
19763         * enum.cs (Enum): Implement IMemberFinder.
19764
19765         * class.cs (TypeContainer): Implement IMemberFinder.
19766
19767 2002-08-12  Martin Baulig  <martin@gnome.org>
19768
19769         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
19770
19771 2002-08-12  Martin Baulig  <martin@gnome.org>
19772
19773         * ecore.cs (ITypeExpression): New interface for expressions which
19774         resolve to a type.
19775         (TypeExpression): Renamed to TypeLookupExpression.
19776         (Expression.DoResolve): If we're doing a types-only lookup, the
19777         expression must implement the ITypeExpression interface and we
19778         call DoResolveType() on it.
19779         (SimpleName): Implement the new ITypeExpression interface.
19780         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
19781         hack, the situation that we're only looking up types can't happen
19782         anymore when this method is called.  Moved the type lookup code to
19783         DoResolveType() and call it.
19784         (SimpleName.DoResolveType): This ITypeExpression interface method
19785         is now doing the types-only lookup.
19786         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
19787         (ResolveFlags): Added MaskExprClass.
19788
19789         * expression.cs (MemberAccess): Implement the ITypeExpression
19790         interface.
19791         (MemberAccess.DoResolve): Added support for a types-only lookup
19792         when we're called via ITypeExpression.DoResolveType().
19793         (ComposedCast): Implement the ITypeExpression interface.
19794
19795         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
19796         Expression.Resolve() with ResolveFlags.Type instead.
19797
19798 2002-08-12  Martin Baulig  <martin@gnome.org>
19799
19800         * interface.cs (Interface.Define): Apply attributes.
19801
19802         * attribute.cs (Attribute.ApplyAttributes): Added support for
19803         interface attributes.
19804
19805 2002-08-11  Martin Baulig  <martin@gnome.org>
19806
19807         * statement.cs (Block.Emit): Only check the "this" variable if we
19808         do not always throw an exception.
19809
19810         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
19811         whether the property has a set accessor.
19812
19813 2002-08-11  Martin Baulig  <martin@gnome.org>
19814
19815         Added control flow analysis support for structs.
19816
19817         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
19818         with control flow analysis turned off.
19819         (IVariable): New interface.
19820         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
19821         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
19822         (FieldExpr.DoResolve): Resolve the instance expression with flow
19823         analysis turned off and do the definite assignment check after the
19824         resolving when we know what the expression will resolve to.
19825
19826         * expression.cs (LocalVariableReference, ParameterReference):
19827         Implement the new IVariable interface, only call the flow analysis
19828         code if ec.DoFlowAnalysis is true.
19829         (This): Added constructor which takes a Block argument.  Implement
19830         the new IVariable interface.
19831         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
19832         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
19833         This does the definite assignment checks for struct members.
19834
19835         * class.cs (Constructor.Emit): If this is a non-static `struct'
19836         constructor which doesn't have any initializer, call
19837         Block.AddThisVariable() to tell the flow analysis code that all
19838         struct elements must be initialized before control returns from
19839         the constructor.
19840
19841         * statement.cs (MyStructInfo): New public class.
19842         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
19843         argument to this indexer.  If non-zero, check an individual struct
19844         member, not the whole struct.
19845         (FlowBranching.CheckOutParameters): Check struct members.
19846         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
19847         overloaded versions of these methods which take an additional
19848         `int field_idx' argument to check struct members.
19849         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
19850         overloaded versions of these methods which take an additional
19851         `string field_name' argument to check struct member.s
19852         (VariableInfo): Implement the IVariable interface.
19853         (VariableInfo.StructInfo): New public property.  Returns the
19854         MyStructInfo instance of the variable if it's a struct or null.
19855         (Block.AddThisVariable): New public method.  This is called from
19856         Constructor.Emit() for non-static `struct' constructor which do
19857         not have any initializer.  It creates a special variable for the
19858         "this" instance variable which will be checked by the flow
19859         analysis code to ensure that all of the struct's fields are
19860         initialized before control returns from the constructor.
19861         (UsageVector): Added support for struct members.  If a
19862         variable/parameter is a struct with N members, we reserve a slot
19863         in the usage vector for each member.  A struct is considered fully
19864         initialized if either the struct itself (slot 0) or all its
19865         members are initialized.
19866
19867 2002-08-08  Martin Baulig  <martin@gnome.org>
19868
19869         * driver.cs (Driver.MainDriver): Only report an error CS5001
19870         if there were no compilation errors.
19871
19872         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
19873         `UnsafeContext' property to determine whether the parent is in
19874         unsafe context rather than checking the parent's ModFlags:
19875         classes nested in an unsafe class are unsafe as well.
19876
19877 2002-08-08  Martin Baulig  <martin@gnome.org>
19878
19879         * statement.cs (UsageVector.MergeChildren): Distinguish between
19880         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
19881         we return.  Added test17() and test18() to test-154.cs.
19882
19883 2002-08-08  Martin Baulig  <martin@gnome.org>
19884
19885         * typemanager.cs (TypeManager.FilterWithClosure): If we have
19886         Family access, make sure the invoking type isn't a subclass of the
19887         queried type (that'd be a CS1540).
19888
19889         * ecore.cs (Expression.MemberLookup): Added overloaded version of
19890         this method which takes an additional `Type invocation_type'.
19891
19892         * expression.cs (BaseAccess.DoResolve): Use the base type as
19893         invocation and query type.
19894         (MemberAccess.DoResolve): If the lookup failed and we're about to
19895         report a CS0122, try a lookup with the ec.ContainerType - if this
19896         succeeds, we must report a CS1540.
19897
19898 2002-08-08  Martin Baulig  <martin@gnome.org>
19899
19900         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
19901         (MethodGroupExpr): Implement the IMemberExpr interface.
19902
19903         * expression (MemberAccess.ResolveMemberAccess): No need to have
19904         any special code for MethodGroupExprs anymore, they're now
19905         IMemberExprs.   
19906
19907 2002-08-08  Martin Baulig  <martin@gnome.org>
19908
19909         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
19910         Family, FamANDAssem and FamORAssem permissions.
19911         (TypeManager.IsSubclassOrNestedChildOf): New public method.
19912
19913 2002-08-08  Martin Baulig  <martin@gnome.org>
19914
19915         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
19916         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
19917         or loop block.
19918
19919 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
19920
19921         * driver.cs: implemented /resource option to embed managed resources.
19922
19923 2002-08-07  Martin Baulig  <martin@gnome.org>
19924
19925         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
19926         (FieldBase.HasFieldInitializer): New public property.
19927         (FieldBase.GetInitializerExpression): New public method.  Resolves and
19928         returns the field initializer and makes sure it is only resolved once.
19929         (TypeContainer.EmitFieldInitializers): Call
19930         FieldBase.GetInitializerExpression to get the initializer, this ensures
19931         that it isn't resolved multiple times.
19932
19933         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
19934         the resolving process (SimpleName/MemberLookup) that we're currently
19935         emitting a field initializer (which must not access any instance members,
19936         this is an error CS0236).
19937
19938         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
19939         argument, if the `IsFieldInitializer' flag is set, we must report and
19940         error CS0236 and not an error CS0120.   
19941
19942 2002-08-07  Martin Baulig  <martin@gnome.org>
19943
19944         * ecore.cs (IMemberExpr): New public interface.
19945         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
19946         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
19947         if the expression is an IMemberExpr.
19948
19949         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
19950         to be null, implicitly default to `this' if we're non-static in
19951         this case.  Simplified the code a lot by using the new IMemberExpr
19952         interface.  Also fixed bug #28176 here.
19953
19954 2002-08-06  Martin Baulig  <martin@gnome.org>
19955
19956         * cs-parser.jay (SimpleLookup): Removed.  We need to create
19957         ParameterReferences during semantic analysis so that we can do a
19958         type-only search when resolving Cast, TypeOf and SizeOf.
19959         (block): Pass the `current_local_parameters' to the Block's
19960         constructor.
19961
19962         * class.cs (ConstructorInitializer): Added `Parameters parameters'
19963         argument to the constructor.
19964         (ConstructorInitializer.Resolve): Create a temporary implicit
19965         block with the parameters.
19966
19967         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
19968         references here if we aren't doing a type-only search.
19969
19970         * statement.cs (Block): Added constructor which takes a
19971         `Parameters parameters' argument.
19972         (Block.Parameters): New public property.
19973
19974         * support.cs (InternalParameters.Parameters): Renamed `parameters'
19975         to `Parameters' and made it public readonly.
19976
19977 2002-08-06  Martin Baulig  <martin@gnome.org>
19978
19979         * ecore.cs (Expression.Warning): Made this public as well.
19980
19981         * report.cs (Report.Debug): Print the contents of collections.
19982
19983 2002-08-06  Martin Baulig  <martin@gnome.org>
19984
19985         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
19986         used to tell Resolve() which kinds of expressions it may return.
19987         (Expression.Resolve): Added overloaded version of this method which
19988         takes a `ResolveFlags flags' argument.  This can be used to tell
19989         Resolve() which kinds of expressions it may return.  Reports a
19990         CS0118 on error.
19991         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
19992         ResolveFlags.SimpleName.
19993         (Expression.Error118): Added overloaded version of this method which
19994         takes a `ResolveFlags flags' argument.  It uses the flags to determine
19995         which kinds of expressions are allowed.
19996
19997         * expression.cs (Argument.ResolveMethodGroup): New public method.
19998         Resolves an argument, but allows a MethodGroup to be returned.
19999         This is used when invoking a delegate.
20000
20001         * TODO: Updated a bit.
20002
20003 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20004
20005         Fixed compilation with csc.
20006
20007         * ecore.cs: Expression.Error made public. Is this correct? Should
20008         Warning be made public too?
20009
20010         * expression.cs: use ea.Location instead of ea.loc.
20011         [FIXME:  Filed as bug #28607: MCS must report these errors.]
20012
20013 2002-08-06  Martin Baulig  <martin@gnome.org>
20014
20015         * ecore.cs (Expression.loc): Moved the location here instead of
20016         duplicating it in all derived classes.
20017         (Expression.Location): New public property.
20018         (Expression.Error, Expression.Warning): Made them non-static and
20019         removed the location argument.
20020         (Expression.Warning): Added overloaded version which takes an
20021         `int level' argument.
20022         (Expression.Error118): Make this non-static and removed the
20023         expression and location arguments.
20024         (TypeExpr): Added location argument to the constructor.
20025
20026         * expression.cs (StaticCallExpr): Added location argument to
20027         the constructor.
20028         (Indirection, PointerArithmetic): Likewise.
20029         (CheckedExpr, UnCheckedExpr): Likewise.
20030         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
20031         (StringPtr): Likewise.
20032
20033
20034 2002-08-05  Martin Baulig  <martin@gnome.org>
20035
20036         * expression.cs (BaseAccess.DoResolve): Actually report errors.
20037
20038         * assign.cs (Assign.DoResolve): Check whether the source
20039         expression is a value or variable.
20040
20041         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
20042         while resolving the corresponding blocks.
20043
20044         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
20045         an error, don't silently return null.
20046
20047         * statement.cs (Block.AddVariable): Do the error reporting here
20048         and distinguish between CS0128 and CS0136.
20049         (Block.DoResolve): Report all unused labels (warning CS0164).
20050         (LabeledStatement): Pass the location to the constructor.
20051         (LabeledStatement.HasBeenReferenced): New property.
20052         (LabeledStatement.Resolve): Set it to true here.
20053
20054         * statement.cs (Return.Emit): Return success even after reporting
20055         a type mismatch error (CS0126 or CS0127), this is what csc does and
20056         it avoids confusing the users with any consecutive errors.
20057
20058 2002-08-05  Martin Baulig  <martin@gnome.org>
20059
20060         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
20061
20062         * const.cs (Const.LookupConstantValue): Catch circular definitions.
20063
20064         * expression.cs (MemberAccess.DoResolve): Silently return if an
20065         error has already been reported.
20066
20067         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
20068         error has already been reported.
20069
20070 2002-08-05  Martin Baulig  <martin@gnome.org>
20071
20072         * statement.cs (UsageVector): Only initialize the `parameters'
20073         vector if we actually have any "out" parameters.
20074
20075 2002-08-05  Martin Baulig  <martin@gnome.org>
20076
20077         * expression.cs (Binary.ResolveOperator): When combining delegates,
20078         they must have the same type.
20079
20080 2002-08-05  Martin Baulig  <martin@gnome.org>
20081
20082         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
20083         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
20084         work with the ms runtime and we also don't need it: if we're a
20085         PropertyBuilder and not in the `indexer_arguments' hash, then we
20086         are a property and not an indexer.
20087
20088         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
20089         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
20090         since the latter one doesn't work with the ms runtime.
20091
20092 2002-08-03  Martin Baulig  <martin@gnome.org>
20093
20094         Fixed bugs #27998 and #22735.
20095
20096         * class.cs (Method.IsOperator): New public field.
20097         (Method.CheckBase): Report CS0111 if there's already a method
20098         with the same parameters in the current class.  Report CS0508 when
20099         attempting to change the return type of an inherited method.
20100         (MethodData.Emit): Report CS0179 if a method doesn't have a body
20101         and it's not marked abstract or extern.
20102         (PropertyBase): New abstract base class for Property and Indexer.
20103         (PropertyBase.CheckBase): Moved here from Property and made it work
20104         for indexers.
20105         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
20106         the same so we can reuse it there.
20107         (Property, Indexer): Derive from PropertyBase.
20108         (MethodSignature.inheritable_property_signature_filter): New delegate
20109         to find properties and indexers.
20110
20111         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
20112         argument and improved error reporting.
20113
20114         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
20115         EmptyReadOnlyParameters and made it a property.
20116
20117         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
20118         version of this method which takes a `PropertyInfo indexer'.
20119         (TypeManager.RegisterIndexer): New method.
20120
20121         * class.cs: Added myself as author of this file :-)
20122
20123 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20124
20125         * class.cs: fixed compilation on windoze.
20126
20127 2002-08-03  Martin Baulig  <martin@gnome.org>
20128
20129         * interface.cs (Interface.GetInterfaceBases): Check whether all
20130         base interfaces are at least as accessible than the current one.
20131
20132         * class.cs (TypeContainer.GetClassBases): Check whether base types
20133         are at least as accessible than the current type.
20134         (TypeContainer.AsAccessible): Implemented and made non-static.
20135         (MemberBase.CheckParameters): Report errors if the accessibility
20136         checks fail.
20137
20138         * delegate.cs (Delegate.Delegate): The default visibility is
20139         internal for top-level types and private for nested types.
20140         (Delegate.Define): Report errors if the accessibility checks fail.
20141
20142         * enum.cs (Enum.Enum): The default visibility is internal for
20143         top-level types and private for nested types.
20144         (Enum.DefineType): Compute the correct visibility.
20145
20146         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
20147         function which takes a `bool is_toplevel' instead of a TypeContainer.
20148
20149         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
20150         builtin type.
20151
20152 2002-08-02  Martin Baulig  <martin@gnome.org>
20153
20154         * expression.cs (LocalVariableReferenc): Added constructor which
20155         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
20156         (LocalVariableReference.IsReadOnly): New property.
20157         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
20158         variable is readonly, use our own readonly flag to do this; you can
20159         use the new constructor to get a writable reference to a read-only
20160         variable.
20161
20162         * cs-parser.jay (foreach_statement, using_statement): Get a writable
20163         reference to the local variable.
20164
20165 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
20166
20167         * rootcontext.cs (ResolveCore): Also include System.Exception
20168
20169         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
20170         we reach an EmptyStatement.
20171
20172         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
20173         is also fine.
20174
20175         * expression.cs (Binary.ResolveOperator): Check error result in
20176         two places.
20177
20178         use brtrue/brfalse directly and avoid compares to null.
20179
20180 2002-08-02  Martin Baulig  <martin@gnome.org>
20181
20182         * class.cs (TypeContainer.Define): Define all nested interfaces here.
20183         Fixes bug #28407, added test-155.cs.
20184
20185 2002-08-01  Martin Baulig  <martin@gnome.org>
20186
20187         * class.cs (Event.EmitDefaultMethod): Make this work with static
20188         events.  Fixes #28311, added verify-3.cs.
20189
20190 2002-08-01  Martin Baulig  <martin@gnome.org>
20191
20192         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
20193         `is_disposable' fields.
20194         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
20195         `hm.is_disposable' if we're using the collection pattern.
20196         (Foreach.EmitCollectionForeach): Use the correct type for the
20197         enumerator's local variable, only emit the try/finally block if
20198         necessary (fixes #27713).
20199
20200 2002-08-01  Martin Baulig  <martin@gnome.org>
20201
20202         * ecore.cs (Expression.report118): Renamed to Error118 and made
20203         it public static.
20204
20205         * statement.cs (Throw.Resolve): Check whether the expression is of
20206         the correct type (CS0118) and whether the type derives from
20207         System.Exception (CS0155).
20208         (Catch.Resolve): New method.  Do the type lookup here and check
20209         whether it derives from System.Exception (CS0155).
20210         (Catch.CatchType, Catch.IsGeneral): New public properties.
20211
20212         * typemanager.cs (TypeManager.exception_type): Added.
20213
20214 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
20215
20216         * driver.cs: Updated About function.
20217
20218 2002-07-31  Martin Baulig  <martin@gnome.org>
20219
20220         Implemented Control Flow Analysis.
20221
20222         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
20223         (EmitContext.CurrentBranching): Added.
20224         (EmitContext.StartFlowBranching): Added.
20225         (EmitContext.EndFlowBranching): Added.
20226         (EmitContext.KillFlowBranching): Added.
20227         (EmitContext.IsVariableAssigned): Added.
20228         (EmitContext.SetVariableAssigned): Added.
20229         (EmitContext.IsParameterAssigned): Added.
20230         (EmitContext.SetParameterAssigned): Added.
20231         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
20232         Added control flow analysis stuff here.
20233
20234         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
20235         resolve the expression as lvalue.
20236         (LocalVariableReference.DoResolve): Check whether the variable has
20237         already been assigned.
20238         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
20239         the parameter as assigned here.
20240         (ParameterReference.DoResolve): Check whether the parameter has already
20241         been assigned.
20242         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
20243         expression as lvalue.
20244
20245         * statement.cs (FlowBranching): New class for the flow analysis code.
20246         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
20247         (LabeledStatement.IsDefined): New public property.
20248         (LabeledStatement.AddUsageVector): New public method to tell flow
20249         analyis that the label may be reached via a forward jump.
20250         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
20251         flow analysis.
20252         (VariableInfo.Number): New public field.  This is used by flow analysis
20253         to number all locals of a block.
20254         (Block.CountVariables): New public property.  This is the number of
20255         local variables in this block (including the locals from all parent
20256         blocks).
20257         (Block.EmitMeta): Number all the variables.
20258
20259         * statement.cs: Added flow analysis support to all classes.
20260
20261 2002-07-31  Martin Baulig  <martin@gnome.org>
20262
20263         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
20264         To get debugging messages, compile mcs with /define:MCS_DEBUG and
20265         then use this argument.
20266
20267         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
20268
20269         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
20270         use this to specify /define options.
20271
20272 2002-07-29  Martin Baulig  <martin@gnome.org>
20273
20274         * statement.cs (Fixed): Moved all code that does variable lookups
20275         and resolvings from Emit to Resolve.
20276
20277         * statement.cs (For): Moved all code that does variable lookups
20278         and resolvings from Emit to Resolve.
20279
20280         * statement.cs (Using): Moved all code that does variable lookups
20281         and resolvings from Emit to Resolve.
20282
20283 2002-07-29  Martin Baulig  <martin@gnome.org>
20284
20285         * attribute.cs (Attribute.Resolve): Explicitly catch a
20286         System.NullReferenceException when creating the
20287         CustromAttributeBuilder and report a different warning message.
20288
20289 2002-07-29  Martin Baulig  <martin@gnome.org>
20290
20291         * support.cs (ParameterData.ParameterName): Added method to
20292         get the name of a parameter.
20293
20294         * typemanager.cs (TypeManager.IsValueType): New public method.
20295
20296 2002-07-29  Martin Baulig  <martin@gnome.org>
20297
20298         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
20299         is a flag which specifies that it's either ref or out.
20300         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
20301         the out parameter to `out Parameter.Modifier mod', also set the
20302         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
20303
20304         * support.cs (InternalParameters.ParameterModifier): Distinguish
20305         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20306         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20307
20308         * expression.cs (Argument.GetParameterModifier): Distinguish
20309         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20310         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20311
20312 2002-07-29  Martin Baulig  <martin@gnome.org>
20313
20314         * expression.cs (ParameterReference.ParameterReference): Added
20315         `Location loc' argument to the constructor.
20316
20317         * cs-parser.jay: Pass location to ParameterReference.
20318
20319 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
20320
20321         * statement.cs (Try): Initialize the location.
20322
20323         * cs-parser.jay: pass location to Try.
20324
20325         * expression.cs (Unary.Reduce): Change the prototype to return
20326         whether a constant fold could be performed or not.  The result is
20327         returned in an out parameters.  In the case of Indirection and
20328         AddressOf, we want to perform the full tests.
20329
20330 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
20331
20332         * statement.cs (Statement.Emit): Flag dead code.
20333
20334 2002-07-27  Andrew Birkett  <andy@nobugs.org>
20335
20336         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
20337
20338 2002-07-27  Martin Baulig  <martin@gnome.org>
20339
20340         * class.cs (MethodData.Define): Put back call to
20341         TypeManager.AddMethod(), accidentally commented this out.
20342
20343         * report.cs (Debug): New public method to print debugging information,
20344         this is `[Conditional ("DEBUG")]'.
20345
20346 2002-07-26  Martin Baulig  <martin@gnome.org>
20347
20348         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
20349         (switch_statement): Push the current_block to the switch_stack and
20350         pop it again when we're done with the switch.
20351         (switch_section): The new block is a child of the current_block.
20352         Fixes bug #24007, added test-152.cs.
20353
20354 2002-07-27  Martin Baulig  <martin@gnome.org>
20355
20356         * expression.cs (Invocation.EmitArguments): When calling a varargs
20357         function with only its fixed arguments, we need to pass an empty
20358         array.
20359
20360 2002-07-27  Martin Baulig  <martin@gnome.org>
20361
20362         Mono 0.13 has been released.
20363
20364 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
20365
20366         * driver.cs: Rename --resource to --linkres, because that is what
20367         we do currently, we dont support --resource yet.
20368
20369         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
20370
20371 2002-07-25  Martin Baulig  <martin@gnome.org>
20372
20373         * class.cs (MethodData): New public class.  This is a `method builder'
20374         class for a method or one accessor of a Property/Indexer/Event.
20375         (MethodData.GetMethodFlags): Moved here from MemberBase.
20376         (MethodData.ApplyAttributes): Likewise.
20377         (MethodData.ApplyObsoleteAttribute): Likewise.
20378         (MethodData.ApplyConditionalAttribute): Likewise.
20379         (MethodData.ApplyDllImportAttribute): Likewise.
20380         (MethodData.CheckAbstractAndExternal): Likewise.
20381         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
20382         (MethodData.Emit): Formerly known as Method.Emit().
20383         (MemberBase): Moved everything which was specific to a single
20384         accessor/method to MethodData.
20385         (Method): Create a new MethodData and call Define() and Emit() on it.
20386         (Property, Indexer, Event): Create a new MethodData objects for each
20387         accessor and call Define() and Emit() on them.
20388
20389 2002-07-25  Martin Baulig  <martin@gnome.org>
20390
20391         Made MethodCore derive from MemberBase to reuse the code from there.
20392         MemberBase now also checks for attributes.
20393
20394         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
20395         (MemberBase.GetMethodFlags): Moved here from class Method and marked
20396         as virtual.
20397         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
20398         `CallingConventions cc' and `Attributes opt_attrs' arguments.
20399         (MemberBase.ApplyAttributes): New virtual method; applies the
20400         attributes to a method or accessor.
20401         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
20402         (MemberBase.ApplyConditionalAttribute): Likewise.
20403         (MemberBase.ApplyDllImportAttribute): Likewise.
20404         (MemberBase.CheckAbstractAndExternal): Likewise.
20405         (MethodCore.ParameterTypes): This is now a property instead of a
20406         method, it's initialized from DoDefineParameters().
20407         (MethodCore.ParameterInfo): Removed the set accessor.
20408         (MethodCore.DoDefineParameters): New protected virtual method to
20409         initialize ParameterTypes and ParameterInfo.
20410         (Method.GetReturnType): We can now simply return the MemberType.
20411         (Method.GetMethodFlags): Override the MemberBase version and add
20412         the conditional flags.
20413         (Method.CheckBase): Moved some code from Define() here, call
20414         DoDefineParameters() here.
20415         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
20416         here to avoid some larger code duplication.
20417         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
20418         ensure that abstract and external accessors don't declare a body.
20419
20420         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
20421         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
20422         lookup in the attribute's parent classes, so we need to abort as soon
20423         as we found the first match.
20424         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
20425         the attribute has no arguments.
20426
20427         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
20428         of a Method.
20429
20430 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20431
20432         * cs-parser.jay: reverted previous patch.
20433
20434 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20435
20436         * cs-parser.jay: fixed bug #22119.
20437
20438 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20439
20440         * attribute.cs: fixed compilation. The error was:
20441         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
20442         be assigned to before control leaves the current method."
20443         [FIXME:  Filed as bug #28186: MCS must report this error.]
20444
20445 2002-07-25  Martin Baulig  <martin@gnome.org>
20446
20447         * attribute.cs (Attribute.Conditional_GetConditionName): New static
20448         method to pull the condition name ouf of a Conditional attribute.
20449         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
20450         the obsolete message and error flag out of an Obsolete attribute.
20451
20452         * class.cs (Method.GetMethodFlags): New public method to get the
20453         TypeManager.MethodFlags for this method.
20454         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
20455         private methods.
20456         (Method.Define): Get and apply the Obsolete and Conditional attributes;
20457         if we're overriding a virtual function, set the new private variable
20458         `parent_method'; call the new TypeManager.AddMethod().
20459
20460         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
20461         the MethodBuilder and the Method in a PtrHashtable.
20462         (TypeManager.builder_to_method): Added for this purpose.
20463         (TypeManager.MethodFlags): Added IsObsoleteError.
20464         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
20465         Obsolete and Conditional arguments in MethodBuilders.  If we discover
20466         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
20467         the message from the attribute.
20468
20469 2002-07-24  Martin Baulig  <martin@gnome.org>
20470
20471         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
20472         preprocessor directives, ensure that the argument to #define/#undef is
20473         exactly one identifier and that it's actually an identifier.
20474
20475         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
20476         did not work ....
20477
20478 2002-07-24  Martin Baulig  <martin@gnome.org>
20479
20480         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
20481         initialize it to TypeManager.object_type in the constructor.
20482         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
20483         of the `hm.get_current' method if we're using the collection pattern.
20484         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
20485         for the explicit conversion to make it work when we're using the collection
20486         pattern and the `Current' property has a different return type than `object'.
20487         Fixes #27713.
20488
20489 2002-07-24  Martin Baulig  <martin@gnome.org>
20490
20491         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
20492         does not match, but don't report any errors.  This method is called in
20493         order for all methods in a MethodGroupExpr until a matching method is
20494         found, so we don't want to bail out if the first method doesn't match.
20495         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
20496         matches, report the 123.  Fixes #28070.
20497
20498 2002-07-24  Martin Baulig  <martin@gnome.org>
20499
20500         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
20501         TypeManager.TypeToCoreType() to the top of the method so the
20502         following equality checks will work.  Fixes #28107.
20503
20504 2002-07-24  Martin Baulig  <martin@gnome.org>
20505
20506         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
20507         operand is of type uint, and the other operand is of type sbyte,
20508         short or int, the operands are converted to type long." -
20509         Actually do what this comment already told us.  Fixes bug #28106,
20510         added test-150.cs.
20511
20512 2002-07-24  Martin Baulig  <martin@gnome.org>
20513
20514         * class.cs (MethodBase): New abstract class.  This is now a base
20515         class for Property, Indexer and Event to avoid some code duplication
20516         in their Define() and DefineMethods() methods.
20517         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
20518         generic methods for Define() and DefineMethods().
20519         (FieldBase): Derive from MemberBase, not MemberCore.
20520         (Property): Derive from MemberBase, not MemberCore.
20521         (Property.DefineMethod): Moved all the code from this method to the
20522         new MethodBase.DefineAccessor(), just call it with appropriate
20523         argumetnts.
20524         (Property.Define): Call the new Property.DoDefine(), this does some
20525         sanity checks and we don't need to duplicate the code everywhere.
20526         (Event): Derive from MemberBase, not MemberCore.
20527         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
20528         accessors, this will also make them work with interface events.
20529         (Indexer): Derive from MemberBase, not MemberCore.
20530         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
20531         (Indexer.Define): Use the new MethodBase functions.
20532
20533         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
20534         argument to the constructor.
20535         (Interface.FindMembers): Added support for interface events.
20536         (Interface.PopluateEvent): Implemented.
20537
20538         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
20539
20540 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
20541
20542         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
20543         but this is required to check for a method name being the same as
20544         the containing class.  
20545
20546         Handle this now.
20547
20548 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20549
20550         * interface.cs: initialize variable.
20551
20552 2002-07-23  Martin Baulig  <martin@gnome.org>
20553
20554         Implemented the IndexerName attribute in interfaces.
20555
20556         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
20557         name if this is an explicit interface implementation.
20558         (Indexer.InterfaceIndexerName): New public variable.  If we're
20559         implementing an interface indexer, this is the IndexerName in that
20560         interface.  Otherwise, it's the IndexerName.
20561         (Indexer.DefineMethod): If we're implementing interface indexer,
20562         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
20563         and Pending.ImplementIndexer methods.
20564         (Indexer.Define): Also define the PropertyBuilder if we're
20565         implementing an interface indexer and this is neither an explicit
20566         interface implementation nor do the IndexerName match the one in
20567         the interface.
20568
20569         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
20570         If a method is defined here, then we always need to create a proxy
20571         for it.  This is used when implementing interface indexers.
20572         (Pending.IsInterfaceIndexer): New public method.
20573         (Pending.ImplementIndexer): New public method.
20574         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
20575         This is used when implementing interface indexers to define a proxy
20576         if necessary.
20577         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
20578         define a proxy if necessary.
20579
20580         * interface.cs (Interface.IndexerName): New public variable.
20581         (Interface.PopulateIndexer): Set the IndexerName.
20582         (Interface.DefineIndexers): New private method.  Populate all the
20583         indexers and make sure their IndexerNames match.
20584
20585         * typemanager.cs (IndexerPropertyName): Added support for interface
20586         indexers.
20587
20588 2002-07-22  Martin Baulig  <martin@gnome.org>
20589
20590         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
20591         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
20592         ret if HasReturnLabel.
20593         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
20594         variables.
20595
20596         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
20597         and set the ec.LoopBeginTryCatchLevel.
20598         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
20599         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
20600         the current ec.TryCatchLevel, the branch goes out of an exception
20601         block.  In this case, we need to use Leave and not Br.
20602
20603 2002-07-22  Martin Baulig  <martin@gnome.org>
20604
20605         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
20606         block unless the block does not always return or it is contained in
20607         another try { ... } catch { ... } block.  Fixes bug #26506.
20608         Added verify-1.cs to the test suite.
20609
20610 2002-07-22  Martin Baulig  <martin@gnome.org>
20611
20612         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
20613         then we do not always return.  Fixes bug #24985.
20614
20615 2002-07-22  Martin Baulig  <martin@gnome.org>
20616
20617         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
20618         lookup on a per-class level; ie. walk up the class hierarchy until we
20619         found at least one applicable method, then choose the best among them.
20620         Fixes bug #24463 and test-29.cs.
20621
20622 2002-07-22  Martin Baulig  <martin@gnome.org>
20623
20624         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
20625         return types of the methods.  The return type is not part of the
20626         signature and we must not check it to make the `new' modifier work.
20627         Fixes bug #27999, also added test-147.cs.
20628         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
20629
20630         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
20631         on the method's return type.
20632
20633 2002-07-21  Martin Baulig  <martin@gnome.org>
20634
20635         * assign.cs: Make this work if the rightmost source is a constant and
20636         we need to do an implicit type conversion.  Also adding a few more tests
20637         to test-38.cs which should have caught this.
20638
20639         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
20640         target in the makefile for this.  The makefile.gnu is primarily intended
20641         for end-users who don't want to debug the compiler.
20642
20643 2002-07-21  Martin Baulig  <martin@gnome.org>
20644
20645         * assign.cs: Improved the Assign class so it can now handle embedded
20646         assignments (X = Y = Z = something).  As a side-effect this'll now also
20647         consume less local variables.  test-38.cs now passes with MCS, added
20648         a few new test cases to that test.
20649
20650 2002-07-20  Martin Baulig  <martin@gnome.org>
20651
20652         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
20653         instructions.  Fixes bug #27977, also added test-146.cs.
20654
20655 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20656
20657         * cs-tokenizer.cs: fixed getHex ().
20658
20659 2002-07-19  Martin Baulig  <martin@gnome.org>
20660
20661         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
20662         not Type.GetType() to lookup the array type.  This is needed when
20663         we're constructing an array of a user-defined type.
20664         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
20665         single-dimensional arrays, but also for single-dimensial arrays of
20666         type decimal.
20667
20668 2002-07-19  Martin Baulig  <martin@gnome.org>
20669
20670         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
20671         this function is called, it's not allowed to share LocalBuilders
20672         among ILGenerators.
20673
20674 2002-07-19  Martin Baulig  <martin@gnome.org>
20675
20676         * expression.cs (Argument.Resolve): Report an error 118 when trying
20677         to pass a type as argument.
20678
20679 2002-07-18  Martin Baulig  <martin@gnome.org>
20680
20681         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
20682         Conv_R_Un for the signed `long' type.
20683
20684 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
20685
20686         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
20687         `expr' for the temporary result, as that will fail if we do
20688         multiple resolves on the same expression.
20689
20690 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
20691
20692         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
20693         ec.TypeContainer for looking up aliases. 
20694
20695         * class.cs (TypeContainer): Remove LookupAlias from here.
20696
20697         * decl.cs (DeclSpace); Move here.
20698
20699 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
20700
20701         * class.cs (FindMembers): Only call filter if the constructor
20702         bulider is not null.
20703
20704         Also handle delegates in `NestedTypes' now.  Now we will perform
20705         type lookups using the standard resolution process.  This also
20706         fixes a bug.
20707
20708         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
20709         This uses Expressions (the limited kind that can be parsed by the
20710         tree) instead of strings.
20711
20712         * expression.cs (ComposedCast.ToString): Implement, used to flag
20713         errors since now we have to render expressions.
20714
20715         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
20716         FormArrayType. 
20717
20718         * ecore.cs (SimpleName.ToString): ditto.
20719
20720         * cs-parser.jay: Instead of using strings to assemble types, use
20721         Expressions to assemble the type (using SimpleName, ComposedCast,
20722         MemberAccess).  This should fix the type lookups in declarations,
20723         because we were using a different code path for this.
20724
20725         * statement.cs (Block.Resolve): Continue processing statements
20726         even when there is an error.
20727
20728 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
20729
20730         * class.cs (Event.Define): Also remove the `remove' method from
20731         the list of pending items.
20732
20733         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
20734         generate more compact code. 
20735
20736 2002-07-17  Martin Baulig  <martin@gnome.org>
20737
20738         * const.cs (Const.LookupConstantValue): Add support for constant
20739         `unchecked' and `checked' expressions.
20740         Also adding test case test-140.cs for this.
20741
20742 2002-07-17  Martin Baulig  <martin@gnome.org>
20743
20744         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
20745         check whether mi.ReturnType implements the IEnumerator interface; the
20746         `==' and the IsAssignableFrom() will fail in this situation.
20747
20748 2002-07-16  Ravi Pratap  <ravi@ximian.com>
20749
20750         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
20751         here too.
20752
20753 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20754
20755         * expression.cs: fixed bug #27811.
20756
20757 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
20758
20759         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
20760         Molaro: when we are a ref, the value already contains a pointer
20761         value, do not take the address of it.
20762
20763 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
20764         * removed mb-parser.jay and mb-tokenizer.cs
20765
20766 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20767
20768         * expression.cs: check against the building corlib void type.
20769
20770 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
20771
20772         * ecore.cs: fix for valuetype static readonly fields: when 
20773         initializing them, we need their address, not the address of a copy.
20774
20775 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
20776
20777         * typemanager.cs: register also enum_type in corlib.
20778
20779 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20780
20781         * class.cs: allow calling this (but not base) initializers in structs.
20782
20783 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
20784
20785         * ecore.cs: make sure we compare against the building base types
20786         in GetTypeSize ().
20787
20788 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
20789
20790         * typemanager.cs: fix TypeToCoreType() to handle void and object
20791         (corlib gets no more typerefs after this change).
20792
20793 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
20794
20795         * expression.cs (ArrayCreation.EmitArrayArguments): use
20796         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
20797
20798         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
20799         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
20800         array indexes, the runtime actually forbids them.
20801
20802         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
20803         for array arguments here.
20804
20805         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
20806         instead of the default for ValueTypes.
20807
20808         (New.DoEmit): Use IsValueType instead of
20809         IsSubclassOf (value_type)
20810         (New.DoResolve): ditto.
20811         (Invocation.EmitCall): ditto.
20812
20813         * assign.cs (Assign): ditto.
20814
20815         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
20816         Statements *are* currently doing part of their resolution during
20817         Emit.  
20818
20819         Expressions do always resolve during resolve, but statements are
20820         only required to propagate resolution to their children.
20821
20822 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
20823
20824         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
20825
20826         (LoadAssembly): Do not add the dll if it is already specified
20827
20828         (MainDriver): Add the System directory to the link path at the end,
20829         after all the other -L arguments. 
20830
20831         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
20832         wrong opcode for loading bytes and bools (ldelem.i1 instead of
20833         ldelem.u1) and using the opposite for sbytes.
20834
20835         This fixes Digger, and we can finally run it.
20836
20837         * driver.cs (UnixParseOption): Move the option parsing here.  
20838         (CSCParseOption): Implement CSC-like parsing of options.
20839
20840         We now support both modes of operation, the old Unix way, and the
20841         new CSC-like way.  This should help those who wanted to make cross
20842         platform makefiles.
20843
20844         The only thing broken is that /r:, /reference: and /lib: are not
20845         implemented, because I want to make those have the same semantics
20846         as the CSC compiler has, and kill once and for all the confussion
20847         around this.   Will be doing this tomorrow.
20848
20849         * statement.cs (Unsafe.Resolve): The state is checked during
20850         resolve, not emit, so we have to set the flags for IsUnsfe here.
20851
20852 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20853
20854         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
20855         not catch the Error_ObjectRefRequired in SimpleName (as it is
20856         possible to have a class/instance variable name that later gets
20857         deambiguated), we have to check this here.      
20858
20859 2002-07-10  Ravi Pratap  <ravi@ximian.com>
20860
20861         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
20862         make static and put into Expression.
20863
20864         (Event.Define): Register the private field of the event with the 
20865         TypeManager so that GetFieldFromEvent can get at it.
20866
20867         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
20868         keep track of the private field associated with an event which
20869         has no accessors.
20870
20871         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
20872         private field.
20873
20874         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
20875
20876 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20877
20878         * expression.cs (Binary.EmitBranchable): this routine emits the
20879         Binary expression in a branchable context.  This basically means:
20880         we need to branch somewhere, not just get the value on the stack.
20881
20882         This works together with Statement.EmitBoolExpression.
20883
20884         * statement.cs (Statement.EmitBoolExpression): Use
20885         EmitBranchable. 
20886
20887 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
20888
20889         * statement.cs (For): Reduce the number of jumps in loops.
20890
20891         (For): Implement loop inversion for the For statement.
20892
20893         (Break): We can be breaking out of a Try/Catch controlled section
20894         (foreach might have an implicit try/catch clause), so we need to
20895         use Leave instead of Br.
20896
20897         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
20898         now).  If the instace expression supports IMemoryLocation, we use
20899         the AddressOf method from the IMemoryLocation to extract the
20900         address instead of emitting the instance.
20901
20902         This showed up with `This', as we were emitting the instance
20903         always (Emit) instead of the Address of This.  Particularly
20904         interesting when This is a value type, as we dont want the Emit
20905         effect (which was to load the object).
20906
20907 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
20908
20909         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
20910
20911         * statement.cs (Checked): Set the CheckedState during the resolve
20912         process too, as the ConvCast operations track the checked state on
20913         the resolve process, and not emit.
20914
20915         * cs-parser.jay (namespace_member_declaration): Flag that we have
20916         found a declaration when we do.  This is used to flag error 1529
20917
20918         * driver.cs: Report ok when we display the help only.
20919
20920 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
20921
20922         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
20923
20924 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
20925
20926         * cs-tokenizer.cs (define): We also have to track locally the
20927         defines.  AllDefines is just used for the Conditional Attribute,
20928         but we also need the local defines for the current source code. 
20929
20930 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
20931
20932         * statement.cs (While, For, Do): These loops can exit through a
20933         Break statement, use this information to tell whether the
20934         statement is the last piece of code.
20935
20936         (Break): Flag that we break.
20937
20938         * codegen.cs (EmitContexts): New `Breaks' state variable.
20939
20940 2002-07-03  Martin Baulig  <martin@gnome.org>
20941
20942         * class.cs (TypeContainer.MethodModifiersValid): Allow override
20943         modifiers in method declarations in structs.  Otherwise, you won't
20944         be able to override things like Object.Equals().
20945
20946 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20947
20948         * class.cs (Method, Property, Indexer): Do not allow the public
20949         modifier to be used in explicit interface implementations.
20950
20951         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
20952         override modifiers in method declarations in structs
20953
20954 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
20955
20956         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
20957         integer or real overflow, report an error
20958
20959 2002-07-02  Martin Baulig  <martin@gnome.org>
20960
20961         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
20962         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
20963         to tell the runtime about our newly created System.Object and
20964         System.ValueType types.
20965
20966 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20967
20968         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
20969         struct instead of Ldarg/Starg.
20970
20971 2002-07-02  Martin Baulig  <martin@gnome.org>
20972
20973         * expression.cs (Indirection.Indirection): Call
20974         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
20975
20976 2002-07-02  Martin Baulig  <martin@gnome.org>
20977
20978         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
20979         ValueType, call TypeManager.TypeToCoreType() on it.
20980         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
20981         the OpCodes.Newarr argument.
20982
20983 2002-07-02  Martin Baulig  <martin@gnome.org>
20984
20985         * expression.cs (Invocation.EmitCall): When compiling corlib,
20986         replace all calls to the system's System.Array type to calls to
20987         the newly created one.
20988
20989         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
20990         System.Array methods.
20991         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
20992         from the system's System.Array type which must be replaced.
20993
20994 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
20995
20996         * typemanager.cs: load unverifiable_code_ctor so we can build
20997         corlib using the correct type. Avoid using GetTypeCode() with
20998         TypeBuilders.
20999         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
21000         TypeManager.object_type to allow building corlib.
21001
21002 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
21003
21004         * ecore.cs: handle System.Enum separately in LoadFromPtr().
21005
21006 2002-07-01  Martin Baulig  <martin@gnome.org>
21007
21008         * class.cs: Make the last change actually work, we need to check
21009         whether `ifaces != null' to avoid a crash.
21010
21011 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
21012
21013         * class.cs: when we build structs without fields that implement
21014         interfaces, we need to add the interfaces separately, since there is
21015         no API to both set the size and add the interfaces at type creation
21016         time.
21017
21018 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
21019
21020         * expression.cs: the dimension arguments to the array constructors
21021         need to be converted if they are a long.
21022
21023 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
21024
21025         * class.cs: don't emit ldarg.0 if there is no parent constructor
21026         (fixes showstopper for corlib).
21027
21028 2002-06-29  Martin Baulig  <martin@gnome.org>
21029
21030         MCS now compiles corlib on GNU/Linux :-)
21031
21032         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
21033         ie. check for MethodImplOptions.InternalCall.
21034
21035         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
21036         and TypeManager.attribute_type are null, so we must explicitly check
21037         whether parent is not null to find out whether it's an attribute type.
21038         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
21039         and SetBuilder, not only if the property is neither abstract nor external.
21040         This is necessary to set the MethodImplOptions on the accessor methods.
21041         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
21042         SetBuilder, see Property.Emit().
21043
21044         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
21045         populate "System.Object", "System.ValueType" and "System.Attribute" since
21046         they've already been populated from BootCorlib_PopulateCoreTypes().
21047
21048 2002-06-29  Martin Baulig  <martin@gnome.org>
21049
21050         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
21051         is the NullLiteral, we also need to make sure that target_type is not
21052         an enum type.   
21053
21054 2002-06-29  Martin Baulig  <martin@gnome.org>
21055
21056         * rootcontext.cs (RootContext.ResolveCore): We must initialize
21057         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
21058         before calling BootstrapCorlib_ResolveDelegate ().
21059
21060 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21061
21062         * statement.cs: fixed build-breaker. All tests passed ok.
21063
21064 2002-06-27  Martin Baulig  <martin@gnome.org>
21065
21066         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
21067         for System.Decimal when compiling corlib.
21068
21069 2002-06-27  Martin Baulig  <martin@gnome.org>
21070
21071         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
21072         switch blocks which contain nothing but a default clause.
21073
21074 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
21075
21076        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
21077
21078 2002-06-27  Martin Baulig  <martin@gnome.org>
21079
21080         * ecore.cs (PropertyExpr.PropertyExpr): Call
21081         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
21082
21083         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
21084         is already a TypeBuilder.
21085
21086 2002-06-27  Martin Baulig  <martin@gnome.org>
21087
21088         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
21089         `target_type == TypeManager.array_type', not IsAssignableFrom() in
21090         the "from an array-type to System.Array" case.  This makes it work
21091         when compiling corlib.
21092
21093 2002-06-27  Martin Baulig  <martin@gnome.org>
21094
21095         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
21096         non-static PropertyExpr, set its InstanceExpression.  This makes
21097         the `ICollection.Count' property work in System/Array.cs.
21098
21099 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
21100
21101         * driver.cs: Made error handling more consistent.  Errors now
21102         tracked by Report class, so many methods which used to return int
21103         now return void.  Main() now prints success/failure and 
21104         errors/warnings message.
21105
21106         Renamed '--probe' compiler argument to '--expect-error'.  Removed
21107         the magic number return values (123 and 124).  Now, if the
21108         expected error occurs, the compiler exits with success (exit value
21109         0).  If the compilation completes without seeing that particular
21110         error, the compiler exits with failure (exit value 1).  The
21111         makefile in mcs/errors has been changed to handle the new behaviour.
21112
21113         * report.cs: Made 'expected error' number a property and renamed
21114         it from 'Probe' to 'ExpectedError'.
21115
21116         * genericparser.cs: Removed error handling support, since it is
21117         now all done by Report class.
21118
21119         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
21120         class, so parse() no longer returns an int.
21121
21122         * namespace.cs: Use Report.Error instead of GenericParser.error
21123
21124 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
21125
21126         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
21127         TypeContainer.AddOperator): At the front of the list put the
21128         explicit implementations, so they get resolved/defined first. 
21129
21130 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
21131
21132         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
21133         interface type is implemented by this TypeContainer.  Used during
21134         explicit interface implementation.
21135
21136         (Property.Define, Indexer.Define, Method.Define): Validate that
21137         the given interface in the explicit implementation is one of the
21138         base classes for the containing type.
21139
21140         Also if we are explicitly implementing an interface, but there is
21141         no match in the pending implementation table, report an error.
21142
21143         (Property.Define): Only define the property if we are
21144         not explicitly implementing a property from an interface.  Use the
21145         correct name also for those properties (the same CSC uses,
21146         although that is really not needed).
21147
21148         (Property.Emit): Do not emit attributes for explicitly implemented
21149         properties, as there is no TypeBuilder.
21150
21151         (Indexer.Emit): ditto.
21152
21153         Hiding then means that we do not really *implement* a pending
21154         implementation, which makes code fail.
21155
21156 2002-06-22  Martin Baulig  <martin@gnome.org>
21157
21158         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
21159         the return value of Object.GetType().  [FIXME: we need to do this whenever
21160         we get a type back from the reflection library].
21161
21162 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
21163
21164         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
21165
21166 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
21167
21168         * attribute.cs: Return null if we can not look up the type.
21169
21170         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
21171         the interface types found.
21172
21173         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
21174         interface types found.
21175
21176         * typemanager.cs (GetInterfaces): Make this routine returns alll
21177         the interfaces and work around the lame differences between
21178         System.Type and System.Reflection.Emit.TypeBuilder in the results
21179         result for GetInterfaces.
21180
21181         (ExpandInterfaces): Given an array of interface types, expand and
21182         eliminate repeated ocurrences of an interface.  This expands in
21183         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
21184         be IA, IB, IC.
21185
21186 2002-06-21  Martin Baulig  <martin@gnome.org>
21187
21188         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
21189         on System.Enum.
21190
21191 2002-06-21  Martin Baulig  <martin@gnome.org>
21192
21193         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
21194         and called with one of the core types, return the corresponding typebuilder for
21195         that type.
21196
21197         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
21198         element type.
21199
21200 2002-06-21  Martin Baulig  <martin@gnome.org>
21201
21202         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
21203         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
21204         (Expression.ConvertReferenceExplicit): Likewise.
21205
21206         * expression.cs (ElementAccess.DoResolve): Likewise.
21207         (ElementAccess.DoResolveLValue): Likewise.
21208
21209 2002-06-10  Martin Baulig  <martin@gnome.org>
21210
21211         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
21212         add the "value" parameter to the parameter list.
21213
21214         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
21215         to our caller.
21216
21217 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
21218
21219         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
21220         the argument to an int, uint, long or ulong, per the spec.  Also
21221         catch negative constants in array creation.
21222
21223 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
21224
21225         * class.cs: do not allow the same interface to appear twice in
21226         the definition list.
21227
21228 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
21229
21230         * ecore.cs: don't use ldlen with System.Array.
21231
21232 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
21233
21234         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
21235
21236 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
21237
21238         * modifiers.cs: produce correct field attributes for protected
21239         internal. Easy fix so miguel can work on ther harder stuff:-)
21240
21241 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
21242
21243         * pending.cs: New file.  Move the code from class.cs here.
21244         Support clearning the pending flag for all methods (when not doing
21245         explicit interface implementation).
21246
21247 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
21248
21249         * rootcontext.cs: added a couple more types needed to bootstrap.
21250
21251 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
21252
21253         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
21254         constructor in the type, instead of any constructor in the type
21255         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
21256         a bug in the Mono runtime when applying the params attribute). 
21257
21258 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
21259         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
21260
21261 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
21262
21263         * expression.cs (Unary.ResolveOperator): Use TypeManager
21264         to resolve the type.
21265
21266 2002-06-13  Ravi Pratap  <ravi@ximian.com>
21267
21268         * cs-parser.jay (enum_member_declaration): Pass in the attributes
21269         attached.
21270
21271         * enum.cs (AddEnumMember): Add support to store the attributes associated 
21272         with each member too.
21273
21274         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
21275         field builders too - this takes care of the enum member case.
21276
21277 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
21278
21279         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
21280         address-of operator on both value types and pointers.
21281
21282 2002-06-10  Martin Baulig  <martin@gnome.org>
21283
21284         * interface.cs (Interface.PopulateIndexer): Add the indexer's
21285         PropertyBuilder to the `property_builders' list.
21286
21287         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
21288         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
21289         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
21290         find any indexers which are inherited from an interface.
21291
21292 2002-06-09  Martin Baulig  <martin@gnome.org>
21293
21294         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
21295         the same type as the constant if necessary.  There's also a test-130.cs
21296         for this.
21297
21298         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
21299
21300         * typemanager.cs (TypeManager.ChangeType): Previously known as
21301         Enum.ChangeEnumType().
21302
21303 2002-06-09  Martin Baulig  <martin@gnome.org>
21304
21305         * expression.cs (Cast.TryReduce): Added support for consts.
21306
21307 2002-06-08  Ravi Pratap  <ravi@ximian.com>
21308
21309         * class.cs (Accessor): Hold attributes information so we can pass
21310         it along.
21311
21312         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
21313         Modify to pass in attributes attached to the methods.
21314
21315         (add_accessor_declaration, remove_accessor_declaration): Ditto.
21316
21317         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
21318         to handle the Accessor kind :-)
21319
21320         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
21321
21322 2002-06-08  Martin Baulig  <martin@gnome.org>
21323
21324         * expression.cs (Unary.TryReduceNegative): Added support for
21325         ULongConstants.
21326
21327 2002-06-08  Martin Baulig  <martin@gnome.org>
21328
21329         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
21330         name can't be found in the `defined_names' - the caller will do a
21331         MemberLookup in this case and thus find methods in System.Enum
21332         such as Enum.IsDefined().
21333
21334 2002-06-08  Martin Baulig  <martin@gnome.org>
21335
21336         * enum.cs (Enum.ChangeEnumType): This is a custom version of
21337         Convert.ChangeType() which works with TypeBuilder created types.
21338         (Enum.LookupEnumValue, Enum.Define): Use it here.
21339
21340         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
21341         `TypeBuilder.BaseType != null' check.
21342         (TypeContainer.FindMembers): Only lookup parent members if we
21343         actually have a parent.
21344         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
21345         (ConstructorInitializer.Resolve): Likewise.
21346
21347         * interface.cs (Interface.FindMembers): Added
21348         `TypeBuilder.BaseType != null' check.
21349
21350         * rootcontext.cs (RootContext.ResolveCore): Added
21351         "System.Runtime.CompilerServices.IndexerNameAttribute" to
21352         classes_second_stage.
21353
21354         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
21355         debug_type and trace_type when compiling with --nostdlib.       
21356
21357 2002-06-07  Martin Baulig  <martin@gnome.org>
21358
21359         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
21360         (AddField): Set it to true when adding a non-static field.
21361         (DefineType): Use `have_nonstatic_fields' to find out whether we
21362         have non-static fields, not `Fields != null'.
21363
21364 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
21365
21366         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
21367         dereferencing a null on the static-field code path)
21368
21369 2002-05-30  Martin Baulig  <martin@gnome.org>
21370
21371         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
21372         to take command line arguments.  Use reflection to call the new
21373         custom `Initialize' function on the symbol writer and pass it the
21374         command line arguments.
21375
21376         * driver.cs (--debug-args): New command line argument to pass command
21377         line arguments to the symbol writer.
21378
21379 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
21380
21381         * assign.cs (DoResolve): Forgot to do the implicit conversion to
21382         the target type for indexers and properties.  Thanks to Joe for
21383         catching this.
21384
21385 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
21386
21387         * typemanager.cs (MethodFlags): returns the method flags
21388         (Obsolete/ShouldIgnore) that control warning emission and whether
21389         the invocation should be made, or ignored. 
21390
21391         * expression.cs (Invocation.Emit): Remove previous hack, we should
21392         not do this on matching a base type, we should do this based on an attribute
21393
21394         Only emit calls to System.Diagnostics.Debug and
21395         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
21396         on the command line.
21397
21398         * rootcontext.cs: Global settings for tracing and debugging.
21399
21400         * cs-tokenizer.cs (define): New utility function to track
21401         defines.   Set the global settings for TRACE and DEBUG if found.
21402
21403 2002-05-25  Ravi Pratap  <ravi@ximian.com>
21404
21405         * interface.cs (Populate*): Pass in the TypeContainer as well as
21406         the DeclSpace as parameters so that we can create EmitContexts and
21407         then use that to apply attributes etc.
21408
21409         (PopulateMethod, PopulateEvent, PopulateProperty)
21410         (PopulateIndexer): Apply attributes everywhere.
21411
21412         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
21413         etc.
21414
21415         (ApplyAttributes): Update accordingly.
21416
21417         We now apply interface attributes for all members too.
21418
21419 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
21420
21421         * class.cs (Indexer.Define); Correctly check if we are explicit
21422         implementation (instead of checking the Name for a ".", we
21423         directly look up if the InterfaceType was specified).
21424
21425         Delay the creation of the PropertyBuilder.
21426
21427         Only create the PropertyBuilder if we are not an explicit
21428         interface implementation.   This means that explicit interface
21429         implementation members do not participate in regular function
21430         lookups, and hence fixes another major ambiguity problem in
21431         overload resolution (that was the visible effect).
21432
21433         (DefineMethod): Return whether we are doing an interface
21434         implementation. 
21435
21436         * typemanager.cs: Temporary hack until we get attributes in
21437         interfaces (Ravi is working on that) and we get IndexerName
21438         support in interfaces.
21439
21440         * interface.cs: Register the indexers as properties.
21441
21442         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
21443         warning, I have verified that this is a bug in the .NET runtime
21444         (JavaScript suffers of the same problem).
21445
21446         * typemanager.cs (MemberLookup): When looking up members for
21447         interfaces, the parent of an interface is the implicit
21448         System.Object (so we succeed in searches of Object methods in an
21449         interface method invocation.  Example:  IEnumerable x;  x.ToString
21450         ()) 
21451
21452 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
21453
21454         * class.cs (Event): Events should also register if they do
21455         implement the methods that an interface requires.
21456
21457         * typemanager.cs (MemberLookup); use the new GetInterfaces
21458         method. 
21459
21460         (GetInterfaces): The code used to lookup interfaces for a type is
21461         used in more than one place, factor it here. 
21462
21463         * driver.cs: Track the errors at the bottom of the file, we kept
21464         on going.
21465
21466         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
21467         instance if the method we are calling is static!
21468
21469 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
21470
21471         * attribute.cs (ApplyAttributes): Make this function filter out
21472         the IndexerName attribute (as that attribute in reality is never
21473         applied) and return the string constant for the IndexerName
21474         attribute. 
21475
21476         * class.cs (TypeContainer.Emit): Validate that all the indexers
21477         have the same IndexerName attribute, and if so, set the
21478         DefaultName attribute on the class. 
21479
21480         * typemanager.cs: The return value might contain other stuff (not
21481         only methods).  For instance, consider a method with an "Item"
21482         property and an Item method.
21483
21484         * class.cs: If there is a problem with the parameter types,
21485         return. 
21486
21487 2002-05-24  Ravi Pratap  <ravi@ximian.com>
21488
21489         * ecore.cs (ImplicitConversionExists): Wrapper function which also
21490         looks at user defined conversion after making a call to 
21491         StandardConversionExists - we need this for overload resolution.
21492
21493         * expression.cs : Update accordingly the various method calls.
21494
21495         This fixes 2 bugs filed against implicit user defined conversions 
21496
21497 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
21498
21499         * statement.cs: Track the result of the assignment.
21500
21501 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
21502
21503         * expression.cs (MemberAccess): Improved error reporting for
21504         inaccessible members.
21505
21506 2002-05-22  Martin Baulig  <martin@gnome.org>
21507
21508         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
21509         itself with debugging support.
21510
21511 2002-05-22  Martin Baulig  <martin@gnome.org>
21512
21513         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
21514         Removed, this isn't needed anymore.
21515
21516 2002-05-20  Martin Baulig  <martin@gnome.org>
21517
21518         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
21519         be underlying type for an enum.
21520
21521 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
21522
21523         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
21524         that splits out the loading of just the core types.
21525
21526         * rootcontext.cs (ResolveCore): Split the struct resolution in
21527         two, so we can load the enumeration underlying types before any
21528         enums are used.
21529
21530         * expression.cs (Is): Bandaid until we fix properly Switch (see
21531         bug #24985 for details).
21532
21533         * typemanager.cs (ImplementsInterface): The hashtable will contain
21534         a null if there are no interfaces implemented.
21535
21536 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
21537
21538         * cs-parser.jay (indexer_declarator): It is fine to have array
21539         parameters
21540
21541 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21542
21543         * typemanager.cs: (RegisterBuilder): New function used to register
21544         TypeBuilders that implement interfaces.  Since
21545         TypeBuilder.GetInterfaces (as usual) does not work with lame
21546         Reflection.Emit. 
21547         (AddUserType): register interfaces.
21548
21549         (ImplementsInterface): Use the builder_to_ifaces hash if we are
21550         dealing with TypeBuilder.  Also, arrays are showing up as
21551         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
21552         methods can not be invoked on them!
21553
21554         * ecore.cs (ExplicitReferenceConversionExists): Made public.
21555         (ImplicitReferenceConversionExists): Split out from
21556         StandardConversionExists. 
21557
21558         * expression.cs (As): We were only implementing one of the three
21559         cases for the as operator.  We now implement them all.
21560         (Is): Implement the various other cases for Is as well.
21561
21562         * typemanager.cs (CACHE): New define used to control if we want or
21563         not the FindMembers cache.  Seems to have a negative impact on
21564         performance currently
21565
21566         (MemberLookup): Nested types have full acess to
21567         enclosing type members
21568
21569         Remove code that coped with instance/static returns for events, we
21570         now catch this in RealFindMembers.
21571
21572         (RealFindMembers): only perform static lookup if the instance
21573         lookup did not return a type or an event.  
21574
21575 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21576
21577         * assign.cs (CompoundAssign): We pass more semantic information
21578         now to Compound Assignments than we did before: now we have all
21579         the information at hand, and now we resolve the target *before* we
21580         do the expression expansion, which allows the "CacheValue" method
21581         to have the effect we intended (before, a [x] += 1 would generate
21582         two differen ArrayAccess expressions from the ElementAccess,
21583         during the resolution process).
21584
21585         (CompoundAssign.DoResolve): Resolve target and original_source here.
21586
21587 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
21588
21589         * expression.cs (ArrayAccess): dropped debugging information. 
21590
21591         * typemanager.cs: Small bug fix: I was always returning i_members,
21592         instead of one of i_members or s_members (depending on which had
21593         the content).
21594
21595         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
21596         method is invoked before any code generation takes place, and it
21597         is a mechanism to inform that the expression will be invoked more
21598         than once, and that the method should use temporary values to
21599         avoid having side effects
21600
21601         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
21602
21603         * ecore.cs (Expression.CacheTemporaries): Provide empty default
21604         implementation.
21605
21606         * expression.cs (Indirection, ArrayAccess): Add support for
21607         CacheTemporaries in these two bad boys. 
21608
21609         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
21610         ldobj or ldind_ref.  
21611         (StoreFromPtr): Handle stobj as well.
21612
21613         * expression.cs (UnaryMutator): Share more code.
21614
21615         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
21616         down: I was not tracking the Filter function as well, which
21617         was affecting the results of the cache.
21618
21619 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
21620
21621         * attribute.cs: Remove the hack to handle the CharSet property on
21622         StructLayouts. 
21623
21624 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
21625
21626         * attribute.cs (DoResolve): More uglyness, we now only try to
21627         resolve the attribute partially, to extract the CharSet
21628         information (only if we are a StructLayout attribute).  Otherwise 
21629
21630         (GetExtraTypeInfo): Add some code to conditionally kill in the
21631         future this.   I am more and more convinced that the .NET
21632         framework has special code to handle the attribute setting on
21633         certain elements.
21634
21635         * expression.cs (IsParamsMethodApplicable): Revert my previous
21636         foreach change here, it was wrong.
21637
21638 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
21639
21640         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
21641         (pp_expr): do not abort on unknown input, just return.
21642         (eval): abort if there are pending chars.
21643
21644         * attribute.cs (Attribute.Resolve): Positional parameters are
21645         optional.  Deal with that case.
21646
21647         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
21648         the Ansi/Unicode/Auto information for the type.
21649
21650         (TypeContainer.DefineType): instantiate the EmitContext here, as
21651         we will be using it during the type definition (to resolve
21652         attributes) and during the emit phase.
21653
21654         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
21655         to pull type information out of the attributes
21656
21657         (Attribute.Resolve): track the constructor builder, and allow for
21658         multiple invocations (structs and classes will use this).
21659
21660         * ecore.cs (MemberLookupFinal): new version with all the
21661         parameters customizable.
21662
21663         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
21664         constructors.  Return if the result value is null (as the error
21665         would have been flagged already by MemberLookupFinal)
21666
21667         Do not allow instances of abstract classes or interfaces to be
21668         created.
21669
21670         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
21671         We have to compare the assembly property here when dealing with
21672         FamANDAssem and Assembly access modifiers, because we might be
21673         creating an assembly from *modules* (that means that we are not
21674         getting TypeBuilders for types defined in other modules that are
21675         part of this assembly).
21676
21677         (Method.Emit): If the method is marked abstract and has a body,
21678         emit an error. 
21679
21680         (TypeContainer.DefineMembers): If both the defined member and the
21681         parent name match are methods, then do not emit any warnings: let
21682         the Method.Define routine take care of flagging warnings.  But if
21683         there is a mismatch (method overrides something else, or method is
21684         overriwritten by something, then emit warning).
21685
21686         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
21687         set to null, this means `do not check for the return type on the
21688         signature'. 
21689
21690         (Method.Define): set the return type for the method signature to
21691         null, so that we get methods with the same name and parameters and
21692         different return types.  This is used to flag warning 114 (you are
21693         hiding a method, and you probably want to use the new/override
21694         keywords instead).
21695
21696         * typemanager.cs (MemberLookup): Implemented proper access
21697         control, closing a long standing set of bug reports.  The problem
21698         was that the Framework only has two bits: Public and NonPublic,
21699         and NonPublic includes private and protected methods, but we need
21700         to enforce the FamANDAssem, FamOrAssem and Family. 
21701
21702 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
21703
21704         * statement.cs (GotoCase): Return true: Ammounts to giving up
21705         knowledge on whether we return or not, and letting the other case
21706         be responsible for it.
21707
21708 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
21709
21710         * driver.cs: Do not load directories for each file processed, only
21711         do it if there is a pattern.
21712
21713         * ecore.cs: Report readonly assigns here as well, as we might have
21714         been resolved only by MemberAccess.
21715
21716         (SimpleName.SimpleNameResolve): Also be useful for LValue
21717         resolution.   We need this to propagate assign to local readonly variables
21718
21719         * typemanager.cs: Use a ptrhashtable for the criteria, because we
21720         do not want to reuse potential criteria memory.
21721
21722         * class.cs (MyEventBuilder): Set reflected_type;
21723
21724         * ecore.cs (Constantify): Added support for constifying bools.
21725
21726         (RootContext.LookupType): Added a cache for values looked up in
21727         the declaration space.
21728
21729         * typemanager.cs (FindMembers): Now is a front-end to
21730         RealFindMembers, and provides a two-level hashtable-based cache to
21731         the request.  
21732
21733         15% performance improvement: from 22.5 to 19.2 seconds.
21734
21735         * expression.cs (IsParamsMethodApplicable): use foreach.
21736         (Invocation.DoResolve): ditto.
21737         (New.DoResolve): ditto.
21738         (ArrayCreation.DoResolve): ditto.
21739
21740         * ecore.cs (FindMostEncompassingType): use foreach.
21741
21742         * delegate.cs (NewDelegate.DoResolve): Use foreach
21743
21744         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
21745         (RemoveMethods): use foreach.
21746
21747         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
21748         nested foreach statements instead of for, and also break out of
21749         the inner loop once a match is found.
21750
21751         (Invocation.OverloadResolve): Use foreach, simplify the code. 
21752
21753 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
21754
21755         * cfold.cs (BinaryFold): During an enumeration evaluation context,
21756         we actually unwrap the expression to allow for extra information
21757         to be extracted. 
21758
21759         * expression.cs: Use Shr_Un on unsigned operations. 
21760
21761 2002-05-08  Ravi Pratap  <ravi@ximian.com>
21762
21763         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
21764         applicable operators was not being considered correctly. This closes
21765         the bug Miguel reported.
21766
21767 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
21768
21769         * attribute.cs: check that the type derives from System.Attribute
21770         and report the correct error in that case (moved the duplicate code to
21771         its own method, too).
21772
21773 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
21774
21775         * attribute.cs: lookup attribute type name as the spec says: first the
21776         bare attribute name and then name + "Attribute" (nant compiles with
21777         mcs after this fix).
21778
21779 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
21780
21781         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
21782         Because of the way we parse things, we should try to see if a
21783         UIntConstant can fit in an integer.
21784
21785 2002-05-07  Ravi Pratap  <ravi@ximian.com>
21786
21787         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
21788         when we are in an explicit context.
21789
21790         (ConvertReferenceExplicit): When converting from Iface type S to Class
21791         T make sure the rules are implemented as an OR.
21792
21793         * parameter.cs (ParameterType): Make it a property for now although the
21794         purpose really isn't anything immediate.
21795
21796         * expression.cs (Is*Applicable): Do better checking on the parameter type
21797         of a ref/out parameter. The ones from the system assemblies are already 
21798         marked with the correct type so we don't need to do any correction.
21799
21800         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
21801         the object type is standard too so include that.
21802
21803 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21804
21805         * ecore.cs (StandardConversionExists): Augment with missing code:
21806         deal with IntConstant, LongConstants and Enumerations.
21807
21808         * assign.cs: Report the error, instead of failing silently
21809
21810         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
21811         typecontainer that they are declared, because the
21812         typecontainer/namespace will have the list of using clauses that
21813         need to be applied.
21814
21815         Assembly Attributes were escaping the normal registration
21816         mechanism. 
21817
21818         (EmitCode): Apply attributes within an EmitContext that represents
21819         the container they were declared on.
21820
21821         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
21822
21823 2002-05-06  Ravi Pratap  <ravi@ximian.com>
21824
21825         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
21826         Revamp completely - make much cleaner as we now operate only
21827         on a set of Types.
21828
21829         (FindMostSpecificSource, FindMostSpecificTarget): New methods
21830         to implement the logic detailed in the spec more correctly.
21831
21832         (UserDefinedConversion): Update accordingly.
21833
21834 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21835
21836         * statement.cs: Return flow analysis information up.
21837
21838         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
21839         and the default.
21840
21841         (token): Do not consume an extra character before calling
21842         decimal_digits.
21843
21844 2002-05-06  Piers Haken <piersh@friskit.com>
21845
21846         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
21847
21848 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21849
21850         * class.cs (Constructor.Emit): Set the IsStatic flag in the
21851         EmitContext during the instance constructor initializer
21852         resolution, to stop access to instance variables.
21853
21854         This is mandated by the spec, last paragraph of the `constructor
21855         initializers' section. 
21856
21857 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
21858
21859         * cs-parser.jay, class.cs (Accessor): new class used to represent
21860         an accessor (get or set).  In the past we used `null' to represent
21861         a missing accessor.  But this is ambiguous because there was no
21862         way to tell in abstract indexers/properties if one of them was
21863         specified.
21864
21865         Now there is a way of addressing that.
21866
21867         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
21868         instead of FindMembers.
21869
21870         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
21871         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
21872
21873         * attribute.cs: Treat indexers and properties as the same in terms
21874         of applying attributes
21875
21876         * ecore.cs (FindMostEncompassedType): Use statically initialized
21877         EmptyExpressions()s like we do elsewhere to avoid creating useless
21878         objects (and we take this out of the tight loop).
21879
21880         (GetConversionOperators): Move the code to extract the actual
21881         operators to a separate routine to clean things up.
21882
21883 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
21884
21885         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
21886         events are always registered FieldBuilders.
21887
21888         * class.cs (FieldBase): New class shared by Fields 
21889
21890         * delegate.cs: If we are a toplevel delegate, use our full name.
21891         If we are a nested delegate, then only use our tail name.
21892
21893 2002-05-02  Ravi Pratap  <ravi@ximian.com>
21894
21895         * expression.cs (IsApplicable): Ensure that we add the "&" to
21896         ref/out types before comparing it with the type of the argument.
21897
21898         (IsParamsMethodApplicable): Ditto.
21899
21900         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
21901         silly me ;-)
21902
21903         * delegate.cs : Handle the case when we have more than one applicable
21904         method. Flag an error only when we finish checking all.
21905
21906 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
21907
21908         * expression.cs: Add support for boolean static initializers.
21909
21910 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
21911
21912         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
21913
21914         * parameter.cs (ComputeParameterTypes,
21915         ComputeAndDefineParameterTypes): Better error handling: now we
21916         clear the `types' cache if we fail during any of the type lookups.
21917         We also return the status code correctly to our caller
21918
21919         * delegate.cs: If we fail to define a delegate, abort the extra
21920         steps. 
21921
21922         * expression.cs (Binary.ResolveOperator): for
21923         operator==(object,object) and operator !=(object, object) we also
21924         have to verify that there is an implicit conversion from one to
21925         the other.
21926
21927         (ArrayAccess.DoResolve): Array Access can operate on
21928         non-variables. 
21929
21930 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
21931
21932         * assign.cs (CompoundAssign): A new class used as a "flag" that
21933         the assignment actually is happening as part of a compound
21934         assignment operator.
21935
21936         During compound assignment, a few new rules exist to enable things
21937         like:
21938
21939         byte b |= 1 + 2
21940
21941         From the spec:
21942
21943         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
21944         to the type of x) if y is implicitly convertible to the type of x,
21945         and the operator is a builtin operator and the return type of the
21946         operator is explicitly convertible to the type of x. 
21947
21948         * rootcontext.cs: Reset warning level to 2.  4 catches various
21949         "interesting" features in mcs, we must clean this up at some
21950         point, but currently am trying to kill other bugs ;-)
21951
21952         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
21953         in container classes as well.  
21954
21955         * expression.cs (Binary.ResolveOperator): Handle string case
21956         before anything else (as operator overloading does emit an error
21957         before doing anything else).
21958
21959         This code could go away when we move to a table driven model, but
21960         i could not come up with a good plan last night.
21961
21962 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
21963
21964         * typemanager.cs (CSharpName): reimplementation using regex.
21965         * class.cs: added null check for fields in Emit
21966         * rootcontext.cs: set warninglevel to 4
21967
21968 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
21969
21970         * typemanager.cs (CSharpName): reimplemented with Lupus
21971         suggestion.
21972
21973 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
21974
21975         * statement.cs (If): correclty implement Resolve, because we were
21976         not catching sem errors in there.  The same process is needed
21977         everywhere else. 
21978         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
21979
21980
21981         (Statement.Warning_DeadCodeFound): Factorize code.
21982         (While): Report dead code here too.
21983
21984         (Statement): Added Resolve virtual method to allow
21985         for resolution split from the emit code.
21986
21987 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21988
21989         * statement.cs (EmitBoolExpression): No longer try to resolve the
21990         expression here.    
21991         (MakeBoolean): New utility function that resolve, implicitly
21992         converts to boolean and tags the expression. 
21993
21994
21995         (If, Do): Implement dead code elimination.
21996         (While): Implement loop inversion
21997
21998         (Do, While, For, If): Resolve the expression prior to calling our
21999         code generation.
22000
22001 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
22002
22003         * class.cs:
22004           - added method Report28 (warning: program has more than one entry point)
22005           - added method IsEntryPoint, implements paragraph 10.1 of the spec
22006           - modified method Method.Define, the part at the end of the method
22007
22008         * rootcontext.cs: added static public Location EntryPointLocation;
22009           
22010         * ../errors/cs0028.cs : Add test case for the above warning.              
22011
22012         * typemanager.cs:
22013           - modified method CSharpName to allow arrays of primitive type to
22014             be printed nicely (e.g. instead of System.Int32[][] it now prints
22015             int[][])
22016           - added method CSharpSignature: returns the signature of a method
22017             in string format to be used in reporting errors, warnings, etc.
22018
22019         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
22020         with String.Empty.
22021
22022 2002-04-26  Ravi Pratap  <ravi@ximian.com>
22023
22024         * delegate.cs (Define): Fix extremely silly bug where I was
22025         setting the type of the 'object' parameter of the BeginInvoke
22026         method to System.IAsyncResult instead of System.Object ;-)
22027
22028 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
22029
22030         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
22031         here. 
22032
22033         (Constructor.Emit): return if we fail to initialize the
22034         constructor.  Another door closed!  
22035
22036         * expression.cs (New.DoResolve): Improve error message (from -6 to
22037         1501).  Use DeclaredOnly lookup to find the exact constructor.
22038
22039         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
22040         loop.  This is useful.
22041
22042         * cs-parser.jay: Adjust the default parameters so that destructors
22043         have the proper signature.
22044
22045 2002-04-26  Martin Baulig  <martin@gnome.org>
22046
22047         * driver.cs (LoadAssembly): If `assembly' contains any characters
22048         which are only valid in path names and not in assembly names
22049         (currently slash, backslash and point), use Assembly.LoadFrom ()
22050         instead of Assembly.Load () on the `assembly' (before iteration
22051         over the link_paths).
22052
22053 2002-04-26  Martin Baulig  <martin@gnome.org>
22054
22055         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
22056
22057 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
22058
22059         * class.cs (Property): use the new typemanager.MemberLookup
22060
22061         (TypeContainer.MemberLookup): Implement using the
22062         TypeManager.MemberLookup now. 
22063
22064         * typemanager.cs: Make MemberLookup a function of the TypeManager,
22065         and return MemberInfos, so that these can be used without an
22066         EmitContext (what we had before).
22067
22068 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
22069
22070         * expression.cs: Fix the case where the argument to params if the
22071         type of the params.  I omitted handling this before.   Fixed
22072
22073 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
22074
22075         * driver.cs: Call BootCorlib_PopulateCoreType
22076
22077         * class.cs (Property.CheckBase): Check for properties only, not
22078         for all members. 
22079
22080         * interface.cs: Temporary hack: try/catch around the
22081         CustomAttributeBuilder, because I am getting an exception that I
22082         do not understand.
22083
22084         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
22085         types whose definitions are required to be there (attributes are
22086         defined before standard types).
22087
22088         Compute definitions as we boot the various types, as they are used
22089         immediately (value_type class will need object_type, but if we do
22090         not initialize object_type, we will pass a null, which will let
22091         the runtime pick the System.Object from the existing corlib, which
22092         is not what we want).
22093
22094 2002-04-22  Patrik Torstensson <totte@labs2.com>
22095
22096         * cs-tokenizer.cs: fixed a number of trim() issues.
22097
22098 2002-04-22  Ravi Pratap  <ravi@ximian.com>
22099
22100         * expression.cs (Argument.Type): Ensure that we return the correct
22101         type when we have out or ref parameters [in which case we 
22102         append a "&"].
22103
22104 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
22105
22106         * class.cs (Property, Indexer): Allow extern modifier in there. 
22107
22108         * typemanager.cs (InitBaseTypes): Initializes object_type and
22109         value_type, since those will be used early on during the bootstrap
22110         process to compile corlib.
22111
22112         (InitCoreTypes): Move code from here to InitBaseTypes.
22113
22114 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
22115
22116         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
22117         single-dimension arrays as using the ldlen opcode.  
22118
22119         Daniel Lewis discovered this optimization.  
22120
22121         * typemanager.cs: Add signature for System.Array::get_Length
22122
22123 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22124
22125         * statement.cs: report the error when the foreach does not apply to an
22126         array nor a collection.
22127
22128 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
22129
22130         * expression.cs: Add implicit conversions to the operator ~.
22131
22132         * constant.cs (DecimalConstant.Emit): Emit decimal value.
22133
22134         * typemanager.cs: Locate the decimal constructor.
22135
22136 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22137
22138         * attribute.cs: use the new property of TypeOf.
22139         * expression.cs: added 'get' property around typearg.
22140
22141         These changes fix a build breaker reported by NickD. Is this the
22142         correct way to fix?  If not, please, revert my changes and make it
22143         work :-).
22144
22145 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
22146
22147         * attribute.cs: Add support for typeof in attribute invocations.
22148         I am not sure that this is right though.
22149
22150 2002-04-14  Duncan Mak  <duncan@ximian.com>
22151
22152         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
22153         Binary.Operator.Division case.
22154
22155 2002-04-13  Ravi Pratap  <ravi@ximian.com>
22156
22157         * class.cs (DefineType): Ensure that we do a proper check on
22158         attribute types and also register it with the TypeManager.
22159
22160         (TypeContainer.Targets): The default for attribute types is
22161         AttributeTargets.All.
22162
22163         * attribute.cs (ApplyAttributes): Registering the attribute type
22164         is done elsewhere, not when we discover we have a Usage attribute.
22165
22166 2002-04-12  Ravi Pratap  <ravi@ximian.com>
22167
22168         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
22169         and get rid of is_delegate parameter.
22170
22171         * everywhere : update.
22172
22173 2002-04-12  Ravi Pratap  <ravi@ximian.com>
22174
22175         * cs-parser.jay (compilation_unit): Revamp completely to use
22176         some new ideas that I got from Rhys' grammar to solve the problems
22177         with assembly level attributes.
22178
22179         (outer_declaration): New grammar production.
22180
22181         (attribute_sections): Add.
22182
22183         (opt_attributes): Base on attribute_sections
22184
22185         (namespace_declaration): Allow opt_attributes to tackle the case
22186         when we have assembly level attributes - we are clever in this
22187         regard now ;-)
22188
22189         * attribute.cs (ApplyAttributes): Do not worry about assembly 
22190         attributes in the non-global context.
22191
22192         * rootcontext.cs (AddGlobalAttributes): Go back to using this
22193         instead of SetGlobalAttributes.
22194
22195         * class.cs, rootcontext.cs : Ensure we define and generate 
22196         attribute types before anything else.
22197
22198         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
22199         and flag the new error -20 for the case when the attribute type
22200         does not have valid targets specified. csc does not catch this.
22201
22202         * ../errors/errors.txt : update for error # -20
22203
22204 2002-04-11  Ravi Pratap  <ravi@ximian.com>
22205
22206         * support.cs (InternalParameters.ParameterModifier): Do some null
22207         checking and return sane values.
22208
22209         * class.cs (Method.Define): If we are a PInvoke method, ensure
22210         that we are static and extern. Report error # 601
22211
22212         * ../errors/cs0601.cs : Add test case for the above error.
22213
22214 2002-04-07  Ravi Pratap  <ravi@ximian.com>
22215
22216         * rootcontext.cs (attribute_types): We need to keep type of
22217         all attribute types separately and emit code for them first.
22218
22219         (RegisterAttribute) : Implement.
22220
22221         * class.cs (DefineType): Check if the current Type is a custom
22222         attribute type and register it accordingly.
22223
22224         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
22225         adding the first attribute twice and rename to
22226
22227         (SetGlobalAttributes): this.
22228
22229         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
22230         lookups.
22231
22232         * attribute.cs (ApplyAttributes): Take an additional argument telling us
22233         if we are processing global arguments. Hmm, I am unsure of this.
22234
22235 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22236
22237         * expression.cs: added static array of strings to avoid calling
22238         Enum.ToString () for Operator in Binary. Significant recover of
22239         performance.
22240
22241 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
22242
22243         * class.cs (FindMembers): Allow the Builders of the various
22244         members to be null.  If they are skip them.  This only happens
22245         during the PInvoke declaration.
22246
22247 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
22248
22249         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
22250         failure, so we do not keep going afterwards.
22251
22252         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
22253         wanted to pass `false' as the `is_delegate' argument.  If this is
22254         the case, why not use delegate_type == null to mean `is_delegate =
22255         false' and anything else as is_delegate = true.
22256
22257 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
22258
22259         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
22260         code for the section, not the beginning of the tests.
22261
22262 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
22263
22264         * cfold.cs: Handle operator + (Enum x, Underlying x) 
22265
22266         * expression.cs (Binary): same.  Warn about errors where we have
22267         Enum/Enum in operator + as well.
22268
22269 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
22270
22271         * statement.cs:
22272                 - added support for switch(bool)
22273                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
22274                 - add TableSwitchEmit() to handle table-based switch statements
22275
22276 2002-04-05  Ravi Pratap  <ravi@ximian.com>
22277
22278         * expression.cs (Invocation.OverloadResolve): Factor out code which
22279         does parameter compatibility checking with arguments so that we can 
22280         re-use the code even from Delegate.VerifyApplicability
22281
22282         (VerifyArgumentsCompat): Move above code here.
22283
22284         * delegate.cs (VerifyApplicability): Get rid of duplicate code
22285         and instead make a call to the above method.
22286
22287 2002-03-31  Ravi Pratap  <ravi@ximian.com>
22288
22289         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
22290         We use it to keep track of classes which are attribute types.
22291
22292 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
22293
22294         * delegate.cs (Delegate.Define): Correctly define the types in the
22295         presence of fixed and array parameters.
22296
22297         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
22298         doing FindMembers.
22299
22300         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
22301         include NonPublic after the first iteration.
22302
22303         * class.cs (Indexer.CheckBase): Only check if both parents are
22304         non-null. 
22305
22306         * cs-parser.jay (accessor_body): If empty, set to null.
22307
22308         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
22309         same code path here to resolve constants names that we did have in
22310         MemberAccess.DoResolve.  There is too much code duplicated here.
22311
22312 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
22313
22314         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
22315
22316         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
22317         to MakeUnionSet.
22318
22319         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
22320         tokens, numbers and strings.
22321
22322         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
22323         parenthesis.
22324
22325         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
22326         asyncronous parameters and the regular parameters.  
22327
22328         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
22329         specify the target directory.
22330
22331         * expression.cs: (This.DoResolve): Simplify
22332         (As.Emit): Optimize, do not generate IsInst if the expression is
22333         always of the given type.
22334
22335         (Is.DoResolve): Bug fix, we were reporting both always/never for
22336         the is expression.
22337
22338         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
22339         creating too many unnecessary arrays.
22340
22341 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
22342
22343         * class.cs (EmitFieldInitializer): Use Assign expression to assign
22344         fields instead of rolling our own initializer.   Takes care of all
22345         implicit conversions, and drops unnecessary static checks/argument.
22346
22347 2002-03-31  Dick Porter  <dick@ximian.com>
22348
22349         * driver.cs: use the GetDirectories() return values properly, and
22350         use "/" as path separator.
22351
22352 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
22353
22354         * expression.cs (Unary): Optimize - - expr into expr.
22355         (Binary): Optimize a + (-b) into a -b.
22356
22357         * codegen.cs (CodeGen): Made all methods static.
22358
22359 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
22360
22361         * rootcontext.cs: 
22362
22363         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
22364         TypeBuilder property.
22365
22366         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
22367         instead. 
22368
22369         * tree.cs: Removed the various RecordXXXX, and replaced with a
22370         single RecordDecl.  Removed all the accessor methods, and just
22371         left a single access point Type 
22372
22373         * enum.cs: Rename DefineEnum to DefineType.
22374
22375         * decl.cs: New abstract method `DefineType' used to unify the
22376         Defines for Enumerations, Interfaces, TypeContainers and
22377         Delegates.
22378
22379         (FindType): Moved LookupInterfaceOrClass here.  Moved the
22380         LookupBaseClasses method that used to live in class.cs and
22381         interface.cs here, and renamed to FindType.
22382
22383         * delegate.cs: Implement DefineType.  Take advantage of the
22384         refactored pattern for locating the parent builder without taking
22385         the parent_builder argument (which we know does not work if we are
22386         nested, and triggering a toplevel definition).
22387
22388 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22389
22390         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
22391         accessibility of a member has changed during override and report
22392         an error if so.
22393
22394         * class.cs (Method.Define, Property.Define): Only complain on
22395         overrides if the method is private, any other accessibility is
22396         fine (and since we just checked the permission is the same, we are
22397         good to go).
22398
22399         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
22400         and elif are processed always.  The other pre-processing
22401         directives are only processed if we are "taking" the path
22402
22403 2002-03-29  Martin Baulig  <martin@gnome.org>
22404
22405         * class.cs (Method.Emit): Only emit symbolic debugging info if the
22406         current location is not Null.
22407
22408         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
22409         a separate method so we can profile it.
22410
22411         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
22412         `span.Seconds' are just seconds, but no minutes or hours.
22413         (MainDriver): Profile the CodeGen.SaveSymbols calls.
22414
22415 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22416
22417         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
22418         Remove the gratuitous set of Final:
22419
22420                                 // If an interface implementation, then we can set Final.
22421                                 if (((flags & MethodAttributes.Abstract) == 0) &&
22422                                     implementing.DeclaringType.IsInterface)
22423                                         flags |= MethodAttributes.Final;
22424
22425         I do not know what I was smoking when I used that.
22426
22427
22428         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
22429         step into fixing the name resolution issues for delegates and
22430         unifying the toplevel name resolution.
22431
22432 2002-03-28  Martin Baulig  <martin@gnome.org>
22433
22434         * class.cs (Method.Emit): If we have a symbol writer, call its
22435         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
22436         tell it about the current method.
22437
22438         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
22439         writer that we're going to emit the first byte of IL code for a new
22440         statement (a new source line).
22441         (EmitContext.EmitTopBlock): If we have a symbol writer, call
22442         EmitContext.Mark() before emitting any code.
22443
22444         * location.cs (SymbolDocument): Return null when we're Null.
22445
22446         * statement.cs (Statement): Moved the `Location loc' variable here.
22447         (Statement.EmitBoolExpression): If we have a symbol writer, call
22448         ec.Mark() before emitting any code to tell it that we're at the
22449         beginning of a new statement.
22450         (StatementExpression): Added `Location' argument to the constructor.
22451         (Block): Added public readonly variable `StartLocation' and public
22452         variable `EndLocation'.  The latter is to be set using SetEndLocation().
22453         (Block): Added constructor which takes a start and end location.
22454         (Block.SetEndLocation): New method. This sets the end location.
22455         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
22456         local variables we create.
22457         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
22458         each statement and do also mark the begin and end of the block.
22459
22460         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
22461         tell it the current lexer.Location, use Location.Null for the end of the
22462         block.
22463         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
22464         current block, set its end location using SetEndLocation().
22465         (statement_expression): StatementExpression constructor now takes the
22466         lexer.Location as additional argument.
22467         (for_statement, declare_local_variables): Likewise.
22468         (declare_local_variables): When creating a new implicit block, use the
22469         new Block constructor and pass it the lexer.Location.
22470
22471 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22472
22473         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
22474         members also on the parent interfaces recursively.
22475
22476 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
22477
22478         * report.cs: Use new formats, since Gonzalo finished the missing
22479         bits. 
22480
22481         * expression.cs (Binary.ResolveOperator): added missing operator|
22482         operator& and operator^ for bool/bool.
22483
22484         * cs-parser.jay: CheckDef now takes a Location argument that is
22485         used to report errors more precisly (instead of reporting the end
22486         of a definition, we try to track something which is a lot closer
22487         to the source of the problem).
22488
22489         * cs-tokenizer.cs: Track global token use, so we can properly flag
22490         the use of #define/#undef after the first token has been seen.
22491
22492         Also, rename the reportXXXX to Error_DescriptiveName
22493
22494         * decl.cs (DeclSpace.IsTopLevel): Move property here from
22495         TypeContainer, so that Enum and Interface can use this too.
22496
22497         * class.cs (TypeContainer.LookupInterfaceOrClass,
22498         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
22499         `builder' argument.  Typically this was used to pass the parent
22500         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
22501         the definition).  
22502
22503         The problem is that a nested class could trigger the definition of
22504         a toplevel class, and the builder would be obviously wrong in that
22505         case. 
22506
22507         So we drop this argument, and we compute dynamically the
22508         TypeBuilder/ModuleBuilder (the correct information was available
22509         to us anyways from DeclSpace.Parent)
22510
22511         * interface.cs (Interface.DefineInterface): Drop builder
22512         parameter cleanup like class.cs
22513
22514         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
22515         like class.cs
22516
22517         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
22518         values. 
22519
22520         (Try.Emit): Propagate the returns value from the statement.
22521
22522         (Return.Emit): Even if we are leavning 
22523
22524         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
22525
22526         * modifiers.cs: Fix the computation of MethodAttributes flags.
22527
22528 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
22529
22530         * driver.cs: allow compilation of files that start with '/'.
22531         Add a default case when checking the argument of --target.
22532
22533 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
22534
22535         * interface.cs: Implement the same search algorithm for types in
22536         the interface code.
22537
22538         * delegate.cs: Do not allow multiple definition.
22539
22540         * Recovered ChangeLog that got accidentally amputated
22541
22542         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
22543
22544         * rootcontext.cs: Load manually enum to allow core classes to
22545         contain enumerations.
22546
22547         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
22548         Update to new static methods in TypeManager.
22549
22550         * typemanager.cs (GetMethod, GetConstructor): Use our
22551         implementation of FindMembers to find the members, since during
22552         corlib compilation, the types are TypeBuilders and GetMethod and
22553         GetConstructor do not work.
22554
22555         Make all methods in TypeManager static.
22556
22557         (InitCodeHelpers): Split the functionality from
22558         the InitCodeTypes function.
22559
22560         * driver.cs: Call InitCodeHelpers after we have populated the
22561         types. 
22562
22563         * cs-parser.jay (delegate_declaration): we did not used to compute
22564         the delegate name correctly for void delegates.
22565
22566 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
22567
22568         * rootcontext.cs (RootContext): Init the interface_resolve_order
22569         and type_container_resolve_order always.
22570
22571         (ResolveCore, BootstrapCorlib_ResolveClass,
22572         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
22573         compiler when compiling with --nostdlib
22574
22575         * class.cs (TypeContainer.DefineType): Check that our parent is
22576         not null.  This test is most important when we are bootstraping
22577         the core types.
22578
22579         * codegen.cs: Split out the symbol writing code.
22580
22581 2002-03-25  Martin Baulig  <martin@gnome.org>
22582
22583         * driver.cs (-g): Made -g an alias for --debug.
22584
22585 2002-03-24  Martin Baulig  <martin@gnome.org>
22586
22587         * codegen.cs (SymbolWriter): New public variable. Returns the
22588         current symbol writer.
22589         (CodeGen): Added `bool want_debugging_support' argument to the
22590          constructor. If true, tell the ModuleBuild that we want debugging
22591         support and ask it for the ISymbolWriter.
22592         (Save): If we have a symbol writer, call it's Close() method after
22593         saving the assembly.
22594
22595         * driver.c (--debug): New command line argument to create a
22596         debugger information file.
22597
22598         * location.cs (SymbolDocument): New public property. Returns an
22599         ISymbolDocumentWriter object for the current source file or null
22600         if we don't have a symbol writer.
22601
22602 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
22603
22604         * driver.cs (LoadAssembly): Correctly return when all the paths
22605         have been tried and not before.
22606
22607         * statement.cs (Switch.Emit): return the actual coverage for this
22608         statement (returns/not-returns)
22609
22610         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
22611         switch of the statement if we are the last switch section.  That
22612         kills two problems: try/catch problems (we used to emit an empty
22613         nop at the end) and switch statements where all branches would
22614         return. 
22615
22616 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
22617
22618         * driver.cs: Add default assemblies (the equivalent to the
22619         Microsoft CSC.RSP file)
22620
22621         * cs-tokenizer.cs: When updating `cols and setting it to zero,
22622         also update tokens_seen and set it to false.
22623
22624         * driver.cs: Implement --recurse for Mike.
22625
22626         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
22627         correctly splitting out the paths.
22628
22629 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
22630
22631         * interface.cs (Interface.PopulateProperty): Instead of using
22632         `parent' as the declaration space for the set parameters, use
22633         `this' 
22634
22635         * support.cs (InternalParameters): InternalParameters constructor
22636         takes a DeclSpace instead of a TypeContainer.
22637
22638         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
22639         types are being initialized, load the address of it before calling
22640         the function.  
22641
22642         (New): Provide a mechanism to disable the generation of local
22643         value type temporaries when the caller will be providing us with
22644         an address to store it.
22645
22646         (ArrayCreation.EmitDynamicInitializers): Use it.
22647
22648 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
22649
22650         * expression.cs (Invocation.EmitArguments): Only probe for array
22651         property if there is more than one argument.  Sorry about that.
22652
22653         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
22654         empty param arrays.
22655
22656         * class.cs (Method.LabelParameters): Fix incorrect code path that
22657         prevented the `ParamArrayAttribute' from being applied to the
22658         params attribute.
22659
22660 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
22661
22662         * support.cs (ReflectionParameters): Correctly compute whether the
22663         last argument is a params array.  Fixes the problem with
22664         string.Split ('a')
22665
22666         * typemanager.cs: Make the assemblies array always be non-null
22667         (empty, but non-null)
22668
22669         * tree.cs (RecordDecl): New function that abstracts the recording
22670         of names.  This reports error 101, and provides a pointer to the
22671         previous declaration.  Fixes a crash in the compiler.
22672
22673         * cs-parser.jay (constructor_declaration): Update to new grammar,
22674         and provide a constructor_body that can be empty.
22675
22676 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
22677
22678         * driver.cs: Add support for --resources.
22679
22680         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
22681         Make all types for the various array helper methods be integer.
22682
22683         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
22684         CheckState to ConvCast.
22685
22686         (ConvCast): Now it takes a `checked' state argument, to avoid
22687         depending on the emit context for the conversion, and just using
22688         the resolve time setting.
22689
22690         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
22691         instead of Invocation.EmitArguments.  We do not emit the original
22692         arguments, instead we emit those which have been converted to
22693         unsigned int expressions.
22694
22695         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
22696
22697         * codegen.cs: ditto.
22698
22699         * expression.cs (LocalVariableReference): Drop the use of the
22700         Store function that depended on the variable index.
22701
22702         * statement.cs (VariableInfo): Drop the `Idx' property from this
22703         class, as this is not taking into account the indexes for
22704         temporaries tat we generate during the execution, getting the
22705         indexes wrong.
22706
22707         * class.cs: First emit class initializers, then call the parent
22708         constructor. 
22709
22710         * expression.cs (Binary): Fix opcode emision.
22711         (UnaryMutator.EmitCode): Support checked code generation
22712
22713         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
22714         matches for events for both the Static and Instance scans,
22715         pointing to the same element.   Fix that.
22716
22717 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
22718
22719         * rootcontext.cs (ResolveTree): Always set the
22720         interface_resolve_order, because nested interfaces will be calling
22721         into us.
22722
22723         * class.cs (GetInterfaceOrClass): Track the same resolution
22724         process used by TypeManager.LookupType.  This fixes the nested
22725         type lookups in class declarations (separate path from
22726         LookupType). 
22727
22728         (TypeContainer.DefineType): Also define nested interfaces.
22729         (TypeContainer.RegisterOrder): New public function used to
22730         register the order in which child interfaces need to be closed.
22731
22732         Nested interfaces need to be closed after their parents have been
22733         created. 
22734
22735         * interface.cs (InterfaceAttr): Put all the logic for computing
22736         the interface attribute here. 
22737
22738         (DefineInterface): Register our interface order with the
22739         RootContext or with the TypeContainer depending on the case.
22740
22741 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22742
22743         * cs-parser.jay: rework foreach statement to work with the new
22744         changes to the policy on SimpleNames.
22745
22746         * report.cs: support Stacktrace on warnings as well.
22747
22748         * makefile: drop --unsafe and /unsafe from the compile.
22749
22750 2002-03-13  Ravi Pratap  <ravi@ximian.com>
22751
22752         * ecore.cs (StandardConversionExists): Modify to take an Expression
22753         as the first parameter. Ensure we do null -> reference type conversion
22754         checking.
22755
22756         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
22757         temporary Expression objects.
22758
22759 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
22760
22761         * interface.cs: workaround bug in method overloading resolution
22762         (there is already a bugzilla bug for it).
22763
22764 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22765
22766         We could also solve this problem by having a separate path for
22767         performing type lookups, instead of DoResolve, we could have a
22768         ResolveType entry point, and only participating pieces of the
22769         production (simplename, deref, array) would implement this. 
22770
22771         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
22772         signal SimpleName to only resolve type names and not attempt to
22773         resolve anything else.
22774
22775         * expression.cs (Cast): Set the flag.
22776
22777         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
22778
22779         * class.cs: Only report 108 if there is no `new' modifier.
22780
22781         * cs-parser.jay: rework foreach statement to work with the new
22782         changes to the policy on SimpleNames.
22783
22784         * report.cs: support Stacktrace on warnings as well.
22785
22786         * makefile: drop --unsafe and /unsafe from the compile.
22787
22788 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
22789
22790         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22791         lookups here, instead of doing that at parse time.  This means
22792         that our grammar will not introduce `LocalVariableReferences' as
22793         expressions at this point.  That solves the problem of code like
22794         this:
22795
22796         class X {
22797            static void Main ()
22798            { int X = 1;
22799             { X x = null }}}
22800
22801         This is only half the fix.  The full fix requires parameters to
22802         also be handled in this way.
22803
22804         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
22805         makes the use more obvious of the DeclSpace.  The
22806         ec.TypeContainer.TypeBuilder is now only used to pull the
22807         TypeBuilder for it.
22808
22809         My theory is that I can get rid of the TypeBuilder completely from
22810         the EmitContext, and have typecasts where it is used (from
22811         DeclSpace to where it matters).  
22812
22813         The only pending problem is that the code that implements Aliases
22814         is on TypeContainer, and probably should go in DeclSpace.
22815
22816         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22817         lookups here, instead of doing that at parse time.  This means
22818         that our grammar will not introduce `LocalVariableReferences' as
22819         expressions at this point.  That solves the problem of code like
22820         this:
22821
22822         class X {
22823            static void Main ()
22824            { int X = 1;
22825             { X x = null }}}
22826
22827         This is only half the fix.  The full fix requires parameters to
22828         also be handled in this way.
22829
22830         * class.cs (Property.DefineMethod): When implementing an interface
22831         method, set newslot, when implementing an abstract method, do not
22832         set the flag (before we tried never setting it, or always setting
22833         it, which is the difference).
22834         (Indexer.DefineMethod): same.
22835         (Method.DefineMethod): same.
22836
22837         * ecore.cs: Only set the status used flag if we get back a Field.
22838
22839         * attribute.cs: Temporary hack, so Paolo can keep working.
22840
22841 2002-03-08  Ravi Pratap  <ravi@ximian.com>
22842
22843         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
22844         the unmanaged type in the case we have a MarshalAs attribute.
22845
22846         (Resolve): Handle the case when we are parsing the special MarshalAs
22847         attribute [we need to store the unmanaged type to use later]
22848
22849         * typemanager.cs (marshal_as_attr_type): Built in type for the 
22850         MarshalAs Attribute.
22851
22852         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
22853         on parameters and accordingly set the marshalling info.
22854
22855 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
22856
22857         * class.cs: Optimizing slightly by removing redundant code after
22858         we switched to the `NoTypes' return value.
22859         (Property.DefineMethod): use NoTypes here too.
22860
22861         This fixes the bug I introduced in my last batch of changes.
22862
22863 2002-03-05  Ravi Pratap  <ravi@ximian.com>
22864
22865         * tree.cs (RecordEnum): Add. We now keep track of enums too.
22866
22867         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
22868         Enums since those are types too. 
22869
22870         * cs-parser.jay (enum_declaration): Record enums as we parse them.
22871
22872         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
22873         thanks to a call during the lookup process.
22874
22875 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
22876
22877         * statement.cs (Foreach): Lots of work to accomodate a particular
22878         kind of foreach statement that I had not kept in mind.  It is
22879         possible to have foreachs on classes that provide a GetEnumerator
22880         method that return objects that implement the "pattern" for using
22881         a foreach, there is no need to support GetEnumerator
22882         specifically. 
22883
22884         This is needed to compile nant.
22885
22886         * decl.cs: Only report 114 if the member is not `Finalize' and if
22887         the warning level is at least 2.
22888
22889         * class.cs: Moved the compare function from Method to
22890         MethodSignature. 
22891
22892         (MethodSignature.InheritableMemberSignatureCompare): Add new
22893         filter function that is used to extract inheritable methods from a
22894         class. 
22895
22896         (Method.Define): Use the new `inheritable_method_signature_filter'
22897         delegate
22898
22899         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
22900         command. 
22901
22902 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
22903
22904         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
22905
22906         * cs-parser.jay: Add opt_semicolon to the interface declaration.
22907
22908         * expression.cs: Pass location information to
22909         ConvertImplicitStandard. 
22910
22911         * class.cs: Added debugging code to track return values from
22912         interfaces. 
22913
22914 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
22915
22916         * expression.cs (Is.DoResolve): If either side of the `is' is an
22917         interface, do not flag the warning.
22918
22919         * ecore.cs (ImplicitReferenceConversion): We need a separate test
22920         for interfaces
22921
22922         * report.cs: Allow for --fatal to be used with --probe.
22923
22924         * typemanager.cs (NoTypes): Move the definition for the empty Type
22925         array here. 
22926
22927         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
22928         properties. 
22929         (TypeContainer.DefineProxy): New function used to proxy to parent
22930         implementations when implementing interfaces.
22931         (TypeContainer.ParentImplements): used to lookup if our parent
22932         implements a public function that is required by an interface.
22933         (TypeContainer.VerifyPendingMethods): Hook this up.
22934
22935         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
22936         `modules' and `assemblies' arraylists into arrays.  We only grow
22937         these are the very early start up of the program, so this improves
22938         the speedof LookupType (nicely measured).
22939
22940         * expression.cs (MakeByteBlob): Replaced unsafe code with
22941         BitConverter, as suggested by Paolo.
22942
22943         * cfold.cs (ConstantFold.Binary): Special case: perform constant
22944         folding of string concatenation, but if either side is a string,
22945         and the other is not, then return null, and let the runtime use
22946         the concatenation on the string plus the object (using
22947         `Object.ToString'). 
22948
22949 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
22950
22951         Constant Folding has been implemented now.
22952
22953         * expression.cs (Unary.Reduce): Do not throw an exception, catch
22954         the error instead on types that are not supported in one's
22955         complement. 
22956
22957         * constant.cs (Constant and all children): New set of functions to
22958         perform implict and explicit conversions.
22959
22960         * ecore.cs (EnumConstant): Implement the new functions to perform
22961         conversion by proxying to the child expression.
22962
22963         * codegen.cs: (ConstantCheckState): Constant evaluation has its
22964         own separate setting that can not be turned off from the command
22965         line using --unchecked or --checked and is only controlled using
22966         the checked/unchecked statements and expressions.  This setting is
22967         used by the constant folder to flag errors.
22968
22969         * expression.cs (CheckedExpr, UncheckedExpr): Set the
22970         ConstantCheckState as well.   
22971
22972         During Resolve, they also have to flag the state, because the
22973         constant folder runs completely in the Resolve phase.
22974
22975         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
22976         well.
22977
22978 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22979
22980         * cfold.cs: New file, this file contains the constant folder.
22981
22982         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
22983         argument to track whether we are using the resulting address to
22984         load or store a value and provide better error messages. 
22985
22986         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
22987         new AddressOf arguments.
22988
22989         * statement.cs (Foreach.EmitCollectionForeach): Update
22990
22991         * expression.cs (Argument.Emit): Call AddressOf with proper
22992         arguments to track usage.
22993
22994         (New.DoEmit): Call AddressOf with new arguments.
22995
22996         (Unary.Emit): Adjust AddressOf call.
22997
22998 2002-03-01  Ravi Pratap  <ravi@ximian.com>
22999
23000         * cs-parser.jay (member_access): Change the case for pre-defined types
23001         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
23002         this suggestion.
23003
23004         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
23005         a method body.
23006
23007         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
23008         essentially like methods and apply attributes like MethodImplOptions to them too.
23009
23010         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
23011         not being null.
23012
23013         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
23014         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
23015         is the DeclSpace.
23016
23017         * Update code everywhere accordingly.
23018
23019         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
23020
23021         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
23022
23023 2002-02-28  Ravi Pratap  <ravi@ximian.com>
23024
23025         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
23026         try performing lookups against those instead of jumping straight into using
23027         the 'using' clauses.
23028
23029         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
23030
23031         (LookupType): Perform lookups in implicit parents too.
23032
23033         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
23034         sequence as RootContext.LookupType. 
23035
23036         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
23037         the various cases of namespace lookups into this method.
23038
23039 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
23040
23041         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
23042         in positional arguments)
23043
23044         * class.cs (Operator): Update the AllowedModifiers to contain
23045         extern. 
23046
23047         * cs-parser.jay: Update operator declaration to allow for the
23048         operator body to be empty.
23049
23050         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
23051         values. 
23052
23053 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
23054
23055         * class.cs (Method.Emit): Label parameters.
23056
23057         * driver.cs: Return 1 or 0 as the program exit code.
23058
23059 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
23060
23061         * expression.cs: Special case the `null' object when trying to
23062         auto-compute the type, as anything can be explicitly converted to
23063         that. 
23064
23065         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
23066         spotting this Paolo.
23067
23068         (Expression.ImplicitNumericConversion): Perform comparissions of
23069         the type using the underlying type in the case of an enumeration
23070         rather than using the enumeration type for the compare.
23071
23072         Cope with the underlying == type case, which is not possible to
23073         catch before. 
23074
23075         (Expression.ConvertNumericExplicit): Perform comparissions of
23076         the type using the underlying type in the case of an enumeration
23077         rather than using the enumeration type for the compare.
23078
23079         * driver.cs: If the user does not supply an extension, assume .exe
23080
23081         * cs-parser.jay (if_statement): Rewrote so that we can track the
23082         location for the if statement.
23083
23084         * expression.cs (Binary.ConstantFold): Only concat strings when
23085         the operation is "+", not everything ;-)
23086
23087         * statement.cs (Statement.EmitBoolExpression): Take a location
23088         argument. 
23089         (If, While, Do): Track location.
23090
23091         * expression.cs (Binary.ResolveOperator): In the object + string
23092         case, I was missing a call to ConvertImplicit
23093
23094 2002-02-25  Ravi Pratap  <ravi@ximian.com>
23095
23096         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
23097         Location arguments. Ensure we use RootContext.LookupType to do our work
23098         and not try to do a direct Type.GetType and ModuleBuilder.GetType
23099
23100         * interface.cs (PopulateMethod): Handle the type of the parameter being
23101         null gracefully.
23102
23103         * expression.cs (Invocation.BetterFunction): Handle the case when we 
23104         have a params method with no fixed arguments and a call is made with no
23105         arguments.
23106
23107 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
23108
23109         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
23110         the verbatim-string-literal
23111
23112         * support.cs (InternalParameters.ParameterModifier): handle null
23113         fixed parameters.
23114         (InternalParameters.ParameterType): ditto.
23115
23116         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
23117         duplicating the name of the variable parameter.
23118         (GetParameterByName): Fix bug where we were not looking up array
23119         paramters if they were the only present (thanks Paolo!).
23120         (GetParameterInfo): We only have an empty set of types if both
23121         fixed and array are set to null.
23122         (GetParameterInfo-idx): Handle FixedParameter == null
23123
23124         * cs-parser.jay: Handle the case where there is no catch
23125         statements (missing null test).
23126
23127 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
23128
23129         * driver.cs (MainDriver): Be conservative on our command line
23130         handling.
23131
23132         Catch DirectoryNotFoundException when calling GetFiles.
23133
23134         (SplitPathAndPattern): Used to split the input specification into
23135         a path and a pattern that we can feed to Directory.GetFiles.
23136
23137 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
23138
23139         * statement.cs (Fixed): Implement the last case of the Fixed
23140         statement (string handling).
23141
23142         * expression.cs (StringPtr): New class used to return a char * to
23143         a string;  Used by the Fixed statement.
23144
23145         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
23146
23147         * expression.cs (Binary.ResolveOperator): Remove redundant
23148         MemberLookup pn parent type.
23149         Optimize union call, we do not need a union if the types are the same.
23150         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
23151         type.
23152
23153         Specialize the use of MemberLookup everywhere, instead of using
23154         the default settings. 
23155
23156         (StackAlloc): Implement stackalloc keyword.
23157
23158         * cs-parser.jay: Add rule to parse stackalloc.
23159
23160         * driver.cs: Handle /h, /help, /?
23161
23162         * expression.cs (MakeByteBlob): Removed the hacks we had in place
23163         before we supported unsafe code.
23164
23165         * makefile: add --unsafe to the self compilation of mcs.
23166
23167 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
23168
23169         * expression.cs (PointerArithmetic): New class that is used to
23170         perform pointer arithmetic.
23171         (Binary.Resolve): Handle pointer arithmetic
23172         Handle pointer comparission.
23173         (ArrayPtr): Utility expression class that is used to take the
23174         address of an array.
23175
23176         (ElementAccess): Implement array access for pointers
23177
23178         * statement.cs (Fixed): Implement fixed statement for arrays, we
23179         are missing one more case before we are done.
23180
23181         * expression.cs (Indirection): Implement EmitAssign and set the
23182         ExprClass to Variable.  This allows pointer dereferences to be
23183         treated as variables, and to have values assigned to them.
23184
23185         * ecore.cs (Expression.StoreFromPtr): New utility function to
23186         store values dereferencing.
23187
23188 2002-02-20  Ravi Pratap  <ravi@ximian.com>
23189
23190         * expression.cs (Binary.ResolveOperator): Ensure that we are
23191         not trying to operate on a void type - this fixes the reported
23192         bug.
23193
23194         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
23195         the parent implementation is sealed.
23196
23197         * ../errors/cs0239.cs : Add.
23198
23199         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
23200
23201         * typemanager.cs (unverifiable_code_type): Corresponds to 
23202         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
23203         which have unsafe code in them.
23204
23205         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
23206         unsafe context.
23207
23208 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
23209
23210         * cs-tokenizer.cs: Add support for @"litreal strings"
23211
23212         Make tokenizer accept pre-processor directives
23213         on any column (remove the old C-like limitation). 
23214
23215         * rootcontext.cs (EmitCode): Emit any global attributes.
23216         (AddGlobalAttributes): Used to keep track of assembly attributes. 
23217
23218         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
23219
23220         * cs-parser.jay: Add support for global attributes.  
23221
23222 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
23223
23224         * expression.cs (Indirection): New helper class.  Unary will
23225         create Indirection classes to be able to implement the
23226         IMemoryLocation interface on it.
23227
23228 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
23229
23230         * cs-parser.jay (fixed_statement): reference the right statement.
23231
23232         * statement.cs (Fixed.Emit): Finish implementing the fixed
23233         statement for the &x case.
23234
23235 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
23236
23237         * class.cs (Property.Define, Method.Define): Remove newslot when
23238         `implementing'.  
23239
23240         * modifiers.cs: My use of NewSlot when `Abstract' was set was
23241         wrong.  NewSlot should only be used if the `new' keyword is present.
23242
23243         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
23244         locating our system dir.  Sorry about this.
23245
23246 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23247
23248         * driver.cs (GetSystemDir): Compute correctly the location of our
23249         system assemblies.  I was using the compiler directory instead of
23250         the library directory.
23251
23252 2002-02-13  Ravi Pratap  <ravi@ximian.com>
23253
23254         * expression.cs (BetterFunction): Put back in what Miguel commented out
23255         since it is the correct fix. The problem is elsewhere ;-)
23256
23257         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
23258         parameters of the parms method are themselves compatible or not !
23259
23260         (StandardConversionExists): Fix very dangerous bug where we were forgetting
23261         to check that a class implements an interface before saying that an implicit
23262         conversion was allowed. Use ImplementsInterface to do the checking.
23263
23264 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23265
23266         * class.cs (Method.Define): Track whether we are an explicit
23267         implementation or not.  And only call DefineMethodOverride if we
23268         are an explicit implementation.
23269
23270         (Property.DefineMethod): Ditto.
23271
23272 2002-02-11  Ravi Pratap  <ravi@ximian.com>
23273
23274         * expression.cs (BetterFunction): Catch hideous bug which was
23275          preventing us from detecting ambiguous calls due to implicit casts i.e
23276         cs0121.
23277
23278 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
23279
23280         * support.cs (Pair): Remove un-needed method.  I figured why I was
23281         getting the error in cs-parser.jay, the variable in a foreach loop
23282         is readonly, and the compiler does not really treat this as a variable.
23283
23284         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
23285         instead of EQUALS in grammar.  
23286
23287         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
23288
23289         * expression.cs (Unary.DoResolve): Check whether the argument is
23290         managed or not.
23291
23292 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
23293
23294         * support.cs: Api for Pair to set a value.  Despite the fact that
23295         the variables are public the MS C# compiler refuses to compile
23296         code that accesses the field if the variable is part of a foreach
23297         statement. 
23298
23299         * statement.cs (Fixed): Begin implementation of the fixed
23300         statement.
23301
23302         (Block.AddVariable): Return the VariableInfo on success and null
23303         on failure instead of true/false. 
23304
23305         * cs-parser.jay (foreach): Catch errors on variables already
23306         defined (we were ignoring this value before) and properly unwind
23307         the block hierarchy
23308
23309         (fixed_statement): grammar for the fixed statement.
23310
23311 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
23312
23313         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
23314         pointer types to be incretemented.
23315
23316         (SizeOf): Implement.
23317
23318         * cs-parser.jay (pointer_member_access): Implement
23319         expr->IDENTIFIER production.
23320
23321         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
23322         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
23323         on safe contexts.
23324
23325         (Unary): Implement indirection.
23326
23327         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
23328         use in non-unsafe context).
23329
23330         (SimpleName.DoResolve): Check for pointers in field access on safe
23331         contexts. 
23332
23333         (Expression.LoadFromPtr): Factor the load-indirect code in this
23334         function.  This was duplicated in UnboxCast and ParameterReference
23335
23336 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
23337
23338         * expression.cs (ComposedCast): report an error if a pointer cast
23339         is used in a safe region.
23340
23341         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
23342         pointer type casts in unsafe context.
23343
23344         * codegen.cs (EmitContext): Set up IsUnsafe.
23345
23346         * cs-parser.jay (non_expression_type): Add productions for pointer
23347         casts. 
23348
23349         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
23350         code.  We should not use force into static mode if the method is
23351         not virtual.  Fixes bug in MIS
23352
23353         * statement.cs (Do.Emit, While.Emit, For.Emit,
23354         Statement.EmitBoolExpression): Add support to Do and While to
23355         propagate infinite loop as `I do return' semantics.
23356
23357         Improve the For case to also test for boolean constants.
23358
23359         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
23360         to the list of attributes we can add.
23361
23362         Remove `EmitContext' argument.
23363
23364         * class.cs (Method.Define): Apply parameter attributes.
23365         (Constructor.Define): Apply parameter attributes.
23366         (MethodCore.LabelParameters): Move here the core of labeling
23367         parameters. 
23368
23369         * support.cs (ReflectionParameters.ParameterModifier,
23370         InternalParameters.ParameterModifier): Use IsByRef on the type and
23371         only return the OUT bit for these parameters instead of in/out/ref
23372         flags.
23373
23374         This is because I miss-understood things.  The ParameterInfo.IsIn
23375         and IsOut represent whether the parameter has the [In] and [Out]
23376         attributes set.  
23377
23378 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
23379
23380         * ecore.cs (FieldExpr.Emit): Release temporaries.
23381
23382         * assign.cs (LocalTemporary.Release): new function.
23383
23384         * codegen.cs (EmitContext.GetTemporaryStorage,
23385         EmitContext.FreeTemporaryStorage): Rework the way we deal with
23386         temporary storage.  Now we can "put back" localbuilders when we
23387         are done with them
23388
23389 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
23390
23391         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
23392         need to make a copy of the variable to generate verifiable code.
23393
23394 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
23395
23396         * driver.cs: Compute dynamically the system directory.
23397
23398         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
23399         Slower, but more generally useful.  Used by the abstract
23400         registering implementation. 
23401
23402         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
23403         the rules for the special rule on Type/instances.  First check if
23404         we have the same name, and if so, try that special static path
23405         rather than the instance path.
23406
23407 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
23408
23409         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
23410         for, while and if.
23411
23412         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
23413         Enum, ValueType, Delegate or Array for non-corlib compiles.
23414
23415         * cs-tokenizer.cs: Catch long identifiers (645)
23416
23417         * typemanager.cs (IndexerPropetyName): Ravi never tested this
23418         piece of code.
23419
23420         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
23421         fix, we were returning too early, so we were not registering
23422         pending methods from abstract classes.
23423
23424         Do not register pending methods if the class is abstract.
23425
23426         * expression.cs (Conditional.DoResolve): Report circular implicit
23427         conversions when we neecd to compute it for conditional
23428         expressions. 
23429
23430         (Is.DoResolve): If the expression is always of the provided type,
23431         flag warning 183.  If the expression can not ever be of the
23432         provided type flag warning 184.
23433
23434         * class.cs: Catch 169 as well.
23435
23436         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
23437         read. 
23438
23439 2002-01-18  Nick Drochak  <ndrochak@gol.com>
23440
23441         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
23442
23443 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
23444
23445         * interface.cs: (PopulateMethod): Check for pointers being defined
23446         only if the unsafe context is active.
23447         (PopulateProperty): ditto.
23448         (PopulateIndexer): ditto.
23449
23450         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
23451         specified.  If pointers are present, make sure that they are
23452         present in an unsafe context.
23453         (Constructor, Constructor.Define): ditto.
23454         (Field, Field.Define): ditto.
23455         (Property, Property.Define): ditto.
23456         (Event, Event.Define): ditto.
23457
23458         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
23459         hashtable if there are classes or structs defined.
23460
23461         * expression.cs (LocalVariableReference.DoResolve): Simplify this
23462         code, as the constant resolution moved.
23463
23464         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
23465         the metadata, so we can flag error 133. 
23466
23467         * decl.cs (MemberCore.UnsafeOK): New function to test that a
23468         pointer is being declared in an unsafe context.
23469
23470 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
23471
23472         * modifiers.cs (Modifiers.Check): Require a Location argument.
23473         Report error 227 for Unsafe use.
23474
23475         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
23476
23477         * statement.cs (For.Emit): If the test is null, then report that
23478         we do `return', as we wont reach anything afterwards.
23479
23480         (Switch.SwitchGoverningType): Track the expression that matched
23481         the conversion.
23482
23483         * driver.cs: Allow negative numbers as an error code to flag.
23484
23485         * cs-parser.jay: Handle 1551.
23486
23487         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
23488
23489 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23490
23491         * cs-parser.jay: Report 1518 (type declaration can only contain
23492         class, struct, interface, enum or delegate)
23493
23494         (switch_label): Report 1523 (keywords `case' or `default' must
23495         preced code)
23496
23497         (opt_switch_sections): Report 1522 (empty switch)
23498
23499         * driver.cs: Report 1515 (response file specified multiple times)
23500         Report 1516 (Source file specified multiple times).
23501
23502         * expression.cs (Argument.Resolve): Signal 1510
23503
23504         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
23505         access not allowed in static code)
23506
23507 2002-01-11  Ravi Pratap  <ravi@ximian.com>
23508
23509         * typemanager.cs (IsPointerType): Utility method which we are going
23510         to need a lot.
23511
23512         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
23513         the object type, so we take care of that.
23514
23515         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
23516
23517         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
23518         added to non-params parameters :-)
23519
23520         * typemanager.cs (CSharpName): Include 'void' type too. 
23521
23522         (void_ptr_type): Include in the set of core types.
23523
23524         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
23525         duplicating code.
23526
23527         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
23528         an unsafe context.
23529
23530         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
23531         completely forgotten about it.
23532
23533 2002-01-10  Ravi Pratap  <ravi@ximian.com>
23534
23535         * cs-parser.jay (pointer_type): Add. This begins our implementation
23536         of parsing rules for unsafe code.
23537
23538         (unsafe_statement): Implement.
23539
23540         (embedded_statement): Modify to include the above.
23541
23542         * statement.cs (Unsafe): Implement new class for unsafe blocks.
23543
23544         * codegen.cs (EmitContext.InUnsafe): Add. This determines
23545         if the current context is an unsafe one.
23546
23547         * cs-parser.jay (local_variable_pointer_type): Since local variable types
23548         are handled differently, we need separate rules for them.
23549
23550         (local_variable_declaration): Update to use local_variable_pointer_type
23551         to allow variable declarations of unmanaged pointer types.
23552
23553         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
23554         in unsafe contexts.
23555
23556         * ../errors/cs0214.cs : Add.
23557
23558 2002-01-16  Nick Drochak  <ndrochak@gol.com>
23559
23560         * makefile: remove 'response' file when cleaning.
23561
23562 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23563
23564         * cs-parser.jay: Report 1524.
23565
23566 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
23567
23568         * typemanager.cs (RegisterMethod): drop checking if we have
23569         registered this from here
23570
23571 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
23572
23573         * class.cs (Method.EmitDestructor): Implement calling our base
23574         destructor. 
23575
23576         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
23577         value of InFinally.
23578
23579         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
23580         this routine and will wrap the call in a try/catch block.  Deal
23581         with the case.
23582
23583 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
23584
23585         * ecore.cs (Expression.MemberLookup): instead of taking a
23586         parameter `same_type' that was used to tell whether we could
23587         access private members we compute our containing type from the
23588         EmitContext.
23589
23590         (FieldExpr): Added partial support for volatile fields.  This does
23591         not work for volatile fields exposed from assemblies, as I can not
23592         figure out how to extract the modreq from it.
23593
23594         Updated all the source files to use this.
23595
23596         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
23597         because it is referenced by MemberLookup very often. 
23598
23599 2002-01-09  Ravi Pratap  <ravi@ximian.com>
23600
23601         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
23602         TypeBuilder.GetCustomAttributes to retrieve what we need.
23603
23604         Get rid of redundant default_member_attr_type as this is the same as
23605         default_member_type which already exists.
23606
23607         * interface.cs, attribute.cs : Update accordingly.
23608
23609 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
23610
23611         * typemanager.cs: Enable IndexerPropertyName again.  It does not
23612         work for TYpeBuilders though.  Ravi, can you please fix this?
23613
23614         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
23615
23616         * expression.cs (Argument.Emit): Handle the case of ref objects
23617         being passed to ref functions;  
23618
23619         (ParameterReference.EmitLoad): Loads the content of the pointer
23620         without dereferencing.
23621
23622 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23623
23624         * cs-tokenizer.cs: Implemented the pre-processing expressions.
23625
23626 2002-01-08  Ravi Pratap  <ravi@ximian.com>
23627
23628         * class.cs (Indexer.DefineMethod): Incorporate the interface
23629         type in the name of the method if we are doing explicit interface
23630         implementation.
23631
23632         * expression.cs (ConversionExists): Remove as it is completely obsolete.
23633
23634         (BetterConversion): Fix extremely trivial bug where we were referring to
23635         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
23636         again !
23637
23638         * ../errors/bug16.cs : Add although we have fixed it.
23639
23640 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23641
23642         * expression.cs (BaseIndexer): Begin implementation.
23643
23644         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
23645
23646         * cs-parser.jay (indexer_declarator): Use qualified_identifier
23647         production directly to remove a shift/reduce, and implement
23648         explicit interface implementation.
23649
23650         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
23651         after a floating point suffix.
23652
23653         * expression.cs (DoNumericPromotions): Improved the conversion for
23654         uint/uint.  If we have a constant, we avoid doing a typecast to a
23655         larger type.
23656
23657         * class.cs (Indexer): Implement explicit interface implementation
23658         for indexers.
23659
23660 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
23661
23662         * class.cs: make the default instance constructor public and hidebysig.
23663
23664 2001-01-03  Ravi Pratap  <ravi@ximian.com>
23665
23666         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
23667         so we can call it from elsewhere.
23668
23669         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
23670         we emit it internally if the class has a defined indexer; otherwise the user
23671         emits it by decorating the class definition with the DefaultMemberAttribute.
23672
23673         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
23674         attribute is not used on a type which defines an indexer.
23675
23676         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
23677         character when we skip whitespace.
23678
23679         * ../errors/cs0646.cs : Add.
23680
23681 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
23682
23683         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
23684         again. 
23685
23686         * makefile: Add practical target `mcs3.exe' which builds the third
23687         generation compiler. 
23688
23689         * expression.cs (New): Fix structures constructor calling.
23690
23691         * class.cs (Property, Method, Indexer): Emit Final flag on the
23692         method if we are an interface implementation and we are not
23693         abstract. 
23694
23695         * ecore.cs (PropertyExpr): New public field `IsBase', tells
23696         whether this property is referencing a `base' method.
23697
23698         * expression.cs (Invocation.EmitCall): take an extra argument:
23699         is_base, this is used to determine whether the `call' or
23700         `callvirt' opcode should be used.
23701
23702
23703         * delegate.cs: update EmitCall.
23704
23705         * class.cs (Method.Define): Set NewSlot for the cases where we are
23706         not implementing an interface method.
23707
23708         (Property.Define): ditto.
23709
23710 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
23711
23712         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
23713         'r'.  Allows mcs to parse itself fully.
23714
23715 2002-01-02  Ravi Pratap  <ravi@ximian.com>
23716
23717         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
23718         of the number of initializers that require the InitializeArray method.
23719
23720         (CheckIndices): Store the Expression in all cases - not the plain value. Also
23721         update the above field where necessary.
23722
23723         (MakeByteBlob): Update accordingly.
23724
23725         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
23726         greater than 2.
23727
23728         (EmitDynamicInitializers): Update in accordance with the new optimization.
23729
23730         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
23731         same OpCode applies.
23732
23733         * cs-parser.jay : Fix some glaring errors I introduced.
23734
23735 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
23736
23737         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
23738         so that we can check for name clashes there too.
23739
23740         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
23741         for interface indexers.
23742
23743         * interfaces.cs (Define): Emit the default member attribute.
23744
23745         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
23746         variable was being referred to while setting the value ;-)
23747
23748 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
23749
23750         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
23751         byte-by-byte information when we know the data is zero.
23752
23753         Make the block always a multiple of 4, because
23754         DefineInitializedData has a bug.
23755
23756         * assign.cs: Fix, we should assign from the temporary, not from
23757         the source. 
23758
23759         * expression.cs (MakeByteBlob): Fix my incorrect code.
23760
23761 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
23762
23763         * typemanager.cs (EnumToUnderlying): This function is used to get
23764         the underlying type from an enumeration, because it does not
23765         always work. 
23766
23767         * constant.cs: Use the I4_S form for values between -128 and 127.
23768
23769         * statement.cs (Block.LookupLabel): Looks up a label.
23770         (Block): Drop support for labeled blocks.
23771
23772         (LabeledStatement): New kind of statement that represents a label
23773         only.
23774
23775         (Goto): Finally implement this bad boy.
23776
23777         * cs-parser.jay: Update to reflect new mechanism to implement
23778         labels.
23779
23780 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
23781
23782         * codegen.cs (EmitContext.This): a codegen property that keeps the
23783         a single instance of this instead of creating many different this
23784         instances. 
23785
23786         * delegate.cs (Delegate.DoResolve): Update to use the property;
23787
23788         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
23789
23790         * expression.cs (BaseAccess.DoResolve): Ditto.
23791
23792 2001-12-29  Ravi Pratap  <ravi@ximian.com>
23793
23794         * typemanager.cs (methodimpl_attr_type): Add to hold the type
23795         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
23796
23797         (InitCoreTypes): Update accordingly.
23798
23799         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
23800         so we can quickly store the state.
23801
23802         (ApplyAttributes): Set the correct implementation flags
23803         for InternalCall methods.
23804
23805 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
23806
23807         * expression.cs (EmitCall): if a method is not virtual, then do
23808         not use callvirt on it.
23809
23810         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
23811         user defined stuff) requires the use of stobj, which takes an
23812         address on the stack instead of an array and an index.  So emit
23813         the Ldelema operation for it.
23814
23815         (EmitStoreOpcode): Use stobj for valuetypes.
23816
23817         (UnaryMutator.EmitCode): Use the right 1 value depending on
23818         whether we are dealing with int64/uint64, float or doubles.
23819
23820         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
23821         constructors that I implemented last night.
23822
23823         (Constructor.IsDefault): Fix to work properly for static
23824         constructors.
23825
23826         * cs-parser.jay (CheckDef): report method signature errors.
23827         Update error number 103 to be 132.
23828
23829         * decl.cs: New AdditionResult enumeration value: MethodExists.
23830         Although we do this check for methods later on in the semantic
23831         analysis, catching repeated default constructors is so easy that
23832         we catch these here. 
23833
23834         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
23835         promotions code.
23836
23837         (ParameterReference.EmitAssign, Emit): handle
23838         bools as bytes.
23839
23840         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
23841         (ArrayAccess.EmitStoreOpcode): ditto.
23842
23843         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
23844
23845         * expression.cs (MakeByteBlob): Complete all the missing types
23846         (uint, short, ushort, byte, sbyte)
23847
23848         * class.cs: Only init instance field initializers on instance
23849         constructors. 
23850
23851         Rename `constructors' to instance_constructors. 
23852
23853         (TypeContainer.AddConstructor): Only add constructors to the list
23854         if it is not static.
23855
23856         Make sure that we handle default_static_constructor independently
23857         everywhere where we handle instance_constructors
23858
23859 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
23860
23861         * class.cs: Do not lookup or create a base initializer for a
23862         static constructor.
23863
23864         (ConstructorInitializer.Resolve): use the proper type to lookup
23865         for constructors.
23866
23867         * cs-parser.jay: Report error 1585 (modifiers between type and name).
23868
23869         * enum.cs, interface.cs: Remove CloseType, this is taken care by
23870         in DeclSpace. 
23871
23872         * decl.cs: CloseType is now an virtual method, the default
23873         implementation just closes this type.
23874
23875 2001-12-28  Ravi Pratap  <ravi@ximian.com>
23876
23877         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
23878         to PreserveSig by default. Also emit HideBySig on such methods.
23879
23880         Basically, set the defaults to standard values.
23881
23882         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
23883         argument, if candidate is better, it can't be worse than the best !
23884
23885         (Invocation): Re-write bits to differentiate between methods being
23886         applicable in their expanded form and their normal form - for params
23887         methods of course.
23888
23889         Get rid of use_standard everywhere as only standard conversions are allowed
23890         in overload resolution. 
23891
23892         More spec conformance.
23893
23894 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23895
23896         * driver.cs: Add --timestamp, to see where the compiler spends
23897         most of its time.
23898
23899         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
23900         `this' in static code.
23901
23902         (SimpleName.DoResolve): Implement in terms of a helper function
23903         that allows static-references to be passed upstream to
23904         MemberAccess.
23905
23906         (Expression.ResolveWithSimpleName): Resolve specially simple
23907         names when called by MemberAccess to implement the special
23908         semantics. 
23909
23910         (Expression.ImplicitReferenceConversion): Handle conversions from
23911         Null to reference types before others, as Null's type is
23912         System.Object. 
23913
23914         * expression.cs (Invocation.EmitCall): Handle the special case of
23915         calling methods declared on a reference type from a ValueType
23916         (Base classes System.Object and System.Enum)
23917
23918         (MemberAccess.Resolve): Only perform lookups on Enumerations if
23919         the left hand side is a TypeExpr, not on every enumeration. 
23920
23921         (Binary.Resolve): If types are reference types, then do a cast to
23922         object on operators != and == of both arguments.
23923
23924         * typemanager.cs (FindMembers): Extract instance and static
23925         members if requested.
23926
23927         * interface.cs (PopulateProperty): Use void_type instead of null
23928         as the return type for the setter method.
23929
23930         (PopulateIndexer): ditto.
23931
23932 2001-12-27  Ravi Pratap  <ravi@ximian.com>
23933
23934         * support.cs (ReflectionParameters): Fix minor bug where we
23935         were examining the wrong parameter for the ParamArray attribute.
23936
23937         Cope with requests for the type of the parameter at position
23938         greater than the params parameter's. We now return the element
23939         type of the params array as that makes more sense.
23940
23941         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
23942         accordingly as we no longer have to extract the element type
23943         ourselves.
23944
23945         (Invocation.OverloadResolve): Update.
23946
23947 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23948
23949         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
23950         against IEnumerator, test whether the return value is a descendant
23951         of the IEnumerator interface.
23952
23953         * class.cs (Indexer.Define): Use an auxiliary method to implement
23954         the other bits of the method definition.  Begin support for
23955         explicit interface implementation.
23956
23957         (Property.DefineMethod): Use TypeManager.void_type instead of null
23958         for an empty return value.
23959
23960 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
23961
23962         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
23963         dealing with a FieldExpr which is composed of a FieldBuilder, in
23964         the code path we did extract the constant, but we should have
23965         obtained the underlying value to be able to cast it (otherwise we
23966         end up in an infinite loop, this is what Ravi was running into).
23967
23968         (ArrayCreation.UpdateIndices): Arrays might be empty.
23969
23970         (MemberAccess.ResolveMemberAccess): Add support for section
23971         14.5.4.1 that deals with the special case of E.I when E is a type
23972         and something else, that I can be a reference to a static member.
23973
23974         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
23975         handle a particular array type to create byte blobs, it is just
23976         something we dont generate byteblobs for.
23977
23978         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
23979         arguments. 
23980
23981         * location.cs (Push): remove the key from the hashtable that we
23982         are about to add.   This happens for empty files.
23983
23984         * driver.cs: Dispose files after we have parsed them.
23985
23986         (tokenize): new function that only runs the tokenizer on its
23987         input, for speed testing.
23988
23989 2001-12-26  Ravi Pratap  <ravi@ximian.com>
23990
23991         * class.cs (Event.Define): Define the private field only if there
23992         are no accessors defined.
23993
23994         * expression.cs (ResolveMemberAccess): If there is no associated
23995         field with the event, that means we have an event defined with its
23996         own accessors and we should flag error cs0070 since transforming
23997         ourselves into a field is not valid in that case.
23998
23999         * ecore.cs (SimpleName.DoResolve): Same as above.
24000
24001         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
24002         and charset to sane values.
24003
24004 2001-12-25  Ravi Pratap  <ravi@ximian.com>
24005
24006         * assign.cs (DoResolve): Perform check on events only if they 
24007         are being accessed outside the declaring type.
24008
24009         * cs-parser.jay (event_declarations): Update rules to correctly
24010         set the type of the implicit parameter etc.
24011
24012         (add_accessor, remove_accessor): Set current local parameters.
24013
24014         * expression.cs (Binary): For delegate addition and subtraction,
24015         cast the return value from the method into the appropriate delegate
24016         type.
24017
24018 2001-12-24  Ravi Pratap  <ravi@ximian.com>
24019
24020         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
24021         of these as the workaround is unnecessary.
24022
24023         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
24024         delegate data - none of that is needed at all.
24025
24026         Re-write bits to extract the instance expression and the delegate method
24027         correctly.
24028
24029         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
24030         on delegates too.
24031
24032         * attribute.cs (ApplyAttributes): New method to take care of common tasks
24033         of attaching attributes instead of duplicating code everywhere.
24034
24035         * everywhere : Update code to do attribute emission using the above method.
24036
24037 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
24038
24039         * expression.cs (IsParamsMethodApplicable): if there are not
24040         parameters, return immediately.
24041
24042         * ecore.cs: The 0 literal can be implicity converted to an enum
24043         type. 
24044
24045         (SimpleName.DoResolve): First lookup the type, then lookup the
24046         members. 
24047
24048         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
24049         want to get its address.  If the InstanceExpression is not
24050         addressable, store the result in a temporary variable, then get
24051         the address of it.
24052
24053         * codegen.cs: Only display 219 errors on warning level or above. 
24054
24055         * expression.cs (ArrayAccess): Make it implement the
24056         IMemoryLocation interface.
24057
24058         (Binary.DoResolve): handle the operator == (object a, object b)
24059         and operator != (object a, object b) without incurring into a
24060         BoxedCast (because 5 != o should never be performed).
24061
24062         Handle binary enumerator operators.
24063
24064         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
24065         value type, otherwise use Ldelem_ref.
24066
24067         Use precomputed names;
24068
24069         (AddressOf): Implement address of
24070
24071         * cs-parser.jay (labeled_statement): Fix recursive block
24072         addition by reworking the production.
24073
24074         * expression.cs (New.DoEmit): New has a special case:
24075                 
24076                  If we are dealing with a ValueType, we have a few
24077                  situations to deal with:
24078                 
24079                     * The target of New is a ValueType variable, that is
24080                       easy, we just pass this as the variable reference
24081                 
24082                     * The target of New is being passed as an argument,
24083                       to a boxing operation or a function that takes a
24084                       ValueType.
24085                 
24086                       In this case, we need to create a temporary variable
24087                       that is the argument of New.
24088
24089
24090 2001-12-23  Ravi Pratap  <ravi@ximian.com>
24091
24092         * rootcontext.cs (LookupType): Check that current_type is not null before
24093         going about looking at nested types.
24094
24095         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
24096         not implement the IAssignMethod interface any more.
24097
24098         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
24099         where we tranform them into FieldExprs if they are being resolved from within
24100         the declaring type.
24101
24102         * ecore.cs (SimpleName.DoResolve): Do the same here.
24103
24104         * assign.cs (DoResolve, Emit): Clean up code considerably. 
24105
24106         * ../errors/bug10.cs : Add.
24107
24108         * ../errors/cs0070.cs : Add.
24109
24110         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
24111
24112         * assign.cs : Get rid of EventIsLocal everywhere.
24113
24114 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
24115
24116         * ecore.cs (ConvertIntLiteral): finished the implementation.
24117
24118         * statement.cs (SwitchLabel): Convert the value we are using as a
24119         key before looking up the table.
24120
24121 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
24122
24123         * codegen.cs (EmitTopBlock): Require a Location argument now.
24124
24125         * cs-parser.jay (constructor_declarator): We need to setup
24126         current_local_parameters before we parse the
24127         opt_constructor_initializer, to allow the variables to be bound
24128         to the constructor arguments.
24129
24130         * rootcontext.cs (LookupType): First lookup nested classes in our
24131         class and our parents before we go looking outside our class.
24132
24133         * expression.cs (ConstantFold): Extract/debox the values at the
24134         beginnning. 
24135
24136         * rootcontext.cs (EmitCode): Resolve the constants first before we
24137         resolve the types.  This is not really needed, but it helps debugging.
24138
24139         * statement.cs: report location.
24140
24141         * cs-parser.jay: pass location to throw statement.
24142
24143         * driver.cs: Small bug fix.
24144
24145         * report.cs: Updated format to be 4-zero filled digits.
24146
24147 2001-12-22  Ravi Pratap  <ravi@ximian.com>
24148
24149         * expression.cs (CheckIndices): Fix minor bug where the wrong
24150         variable was being referred to ;-)
24151
24152         (DoEmit): Do not call EmitStaticInitializers when the 
24153         underlying type is System.Object.
24154
24155 2001-12-21  Ravi Pratap  <ravi@ximian.com>
24156
24157         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
24158         and do the usual workaround for SRE.
24159
24160         * class.cs (MyEventBuilder.EventType): New member to get at the type
24161         of the event, quickly.
24162
24163         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
24164
24165         * assign.cs (Assign.DoResolve): Handle the case when the target
24166         is an EventExpr and perform the necessary checks.
24167
24168         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
24169         interface.
24170
24171         (SimpleName.MemberStaticCheck): Include check for EventExpr.
24172
24173         (EventExpr): Set the type in the constructor itself since we 
24174         are meant to be born fully resolved.
24175
24176         (EventExpr.Define): Revert code I wrote earlier.
24177                 
24178         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
24179         instance expression is null. The instance expression is a This in that case
24180         or a null, depending on whether it is a static method or not.
24181
24182         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
24183         refers to more than one method.
24184
24185         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
24186         and accordingly flag errors.
24187
24188 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
24189
24190         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
24191
24192 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
24193
24194         * location.cs (ToString): Provide useful rutine.
24195
24196 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
24197
24198         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
24199         objects, return the actual integral boxed.
24200
24201         * statement.cs (SwitchLabel): define an ILLabel for each
24202         SwitchLabel. 
24203
24204         (Switch.CheckSwitch): If the value is a Literal, extract
24205         the underlying literal.
24206
24207         Also in the unused hashtable we had, add the SwitchLabel so we can
24208         quickly look this value up.
24209
24210         * constant.cs: Implement a bunch of new constants.  Rewrite
24211         Literal based on this.  Made changes everywhere to adapt to this.
24212
24213         * expression.cs (Expression.MakeByteBlob): Optimize routine by
24214         dereferencing array only once, and also copes with enumrations.
24215
24216         bytes are two bytes wide, not one.
24217
24218         (Cast): Perform constant conversions.
24219
24220         * ecore.cs (TryImplicitIntConversion): Return literals instead of
24221         wrappers to the literals here.
24222
24223         * expression.cs (DoNumericPromotions): long literals can converted
24224         to ulong implicity (this is taken care of elsewhere, but I was
24225         missing this spot).
24226
24227         * ecore.cs (Expression.Literalize): Make the return type Literal,
24228         to improve type checking.
24229
24230         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
24231
24232 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24233
24234         * literal.cs: Revert code from ravi that checked the bounds.  The
24235         bounds are sane by the definition of the type itself. 
24236
24237         * typemanager.cs: Fix implementation of ImplementsInterface.  We
24238         need to actually look up in our parent hierarchy for interfaces
24239         implemented. 
24240
24241         * const.cs: Use the underlying type for enumerations
24242
24243         * delegate.cs: Compute the basename for the delegate creation,
24244         that should fix the delegate test case, and restore the correct
24245         Type Lookup semantics in rootcontext
24246
24247         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
24248         referencing a nested type with the Reflection API is using the "+"
24249         sign. 
24250
24251         * cs-parser.jay: Do not require EOF token at the end.
24252
24253 2001-12-20  Ravi Pratap  <ravi@ximian.com>
24254
24255         * rootcontext.cs (LookupType): Concatenate type names with
24256         a '.' instead of a '+' The test suite passes again.
24257
24258         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
24259         field of the enumeration.
24260
24261         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
24262         the case when the member is an EventExpr.
24263
24264         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
24265         static has an associated instance expression.
24266
24267         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
24268
24269         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
24270
24271         * class.cs (Event.Define): Register event and perform appropriate checks
24272         for error #111.
24273
24274         We define the Add and Remove methods even if the use provides none because
24275         in that case, we provide default implementations ourselves.
24276
24277         Define a private field of the type of the event. This is done by the CSC compiler
24278         and we should be doing it too ;-)
24279
24280         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
24281         More methods we use in code we generate.
24282
24283         (multicast_delegate_type, delegate_type): Two separate types since the distinction
24284         is important.
24285
24286         (InitCoreTypes): Update accordingly for the above.
24287
24288         * class.cs (Event.Emit): Generate code for default accessors that we provide
24289
24290         (EmitDefaultMethod): Do the job in the above.
24291
24292         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
24293         appropriate place.
24294
24295 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24296
24297         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
24298         builders even if we were missing one.
24299
24300         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
24301         pass the Basename as our class name instead of the Name.  The
24302         basename will be correctly composed for us.
24303
24304         * parameter.cs (Paramters): Now takes a Location argument.
24305
24306         * decl.cs (DeclSpace.LookupType): Removed convenience function and
24307         make all the code call directly LookupType in RootContext and take
24308         this chance to pass the Location information everywhere.
24309
24310         * Everywhere: pass Location information.
24311
24312 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
24313
24314         * class.cs (Constructor.Define): Updated way of detecting the
24315         length of the parameters.
24316
24317         (TypeContainer.DefineType): Use basename as the type name for
24318         nested types.
24319
24320         (TypeContainer.Define): Do not recursively define types here, as
24321         definition is taken care in order by the RootContext.
24322
24323         * tree.cs: Keep track of namespaces in a per-file basis.
24324
24325         * parameter.cs (Parameter.ComputeSignature): Update to use
24326         DeclSpace. 
24327
24328         (Parameters.GetSignature): ditto.
24329
24330         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
24331         instead of a TypeContainer.
24332
24333         (Interface.SemanticAnalysis): Use `this' instead of our parent to
24334         resolve names.  Because we need to be resolve in our context, not
24335         our parents.
24336
24337         * driver.cs: Implement response files.
24338
24339         * class.cs (TypeContainer.DefineType): If we are defined, do not
24340         redefine ourselves.
24341
24342         (Event.Emit): Emit the code for add/remove handlers.
24343         (Event.Define): Save the MethodBuilders for add/remove.
24344
24345         * typemanager.cs: Use pair here too.
24346
24347         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
24348         DictionaryEntry requires the first argument to be non-null.  
24349
24350         (enum_declaration): Compute full name for registering the
24351         enumeration.
24352
24353         (delegate_declaration): Instead of using
24354         formal_parameter_list, use opt_formal_parameter_list as the list
24355         can be empty.
24356
24357         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
24358         (EventParsing): New property that controls whether `add' and
24359         `remove' are returned as tokens or identifiers (for events);
24360
24361 2001-12-19  Ravi Pratap  <ravi@ximian.com>
24362
24363         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
24364         use MyEventBuilder only and let it wrap the real builder for us.
24365
24366         (MyEventBuilder): Revamp constructor etc.
24367
24368         Implement all operations that we perform on EventBuilder in precisely the same
24369         way here too.
24370
24371         (FindMembers): Update to use the EventBuilder member.
24372
24373         (Event.Emit): Update accordingly.
24374
24375 2001-12-18  Ravi Pratap  <ravi@ximian.com>
24376
24377         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
24378         by calling the appropriate methods.
24379
24380         (GetCustomAttributes): Make stubs as they cannot possibly do anything
24381         useful.
24382
24383         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
24384
24385 2001-12-17  Ravi Pratap  <ravi@ximian.com>
24386
24387         * delegate.cs (Delegate.Populate): Check that the return type
24388         and various parameters types are indeed accessible.
24389
24390         * class.cs (Constructor.Define): Same here.
24391
24392         (Field.Define): Ditto.
24393
24394         (Event.Define): Ditto.
24395
24396         (Operator.Define): Check that the underlying Method defined itself
24397         correctly - so it's MethodBuilder should not be null.
24398
24399         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
24400         expression happens to be null.
24401
24402         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
24403         members but as of now we don't seem to be able to do anything really useful with it.
24404
24405         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
24406         not the EventBuilder.
24407
24408 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
24409
24410         * cs-tokenizer.cs: Add support for defines.
24411         Add support for #if, #elif, #else, #endif
24412
24413         (eval_var): evaluates a variable.
24414         (eval): stubbed for evaluating functions.
24415
24416         * cs-parser.jay: Pass the defines information
24417
24418         * driver.cs: Add --define command line option.
24419
24420         * decl.cs: Move MemberCore here.
24421
24422         Make it the base class for DeclSpace.  This allows us to catch and
24423         report 108 and 109 for everything now.
24424
24425         * class.cs (TypeContainer.Define): Extract all the members
24426         before populating and emit the warning 108 (new keyword required
24427         to override) instead of having each member implement this.
24428
24429         (MemberCore.Define): New abstract method, we will be using this in
24430         the warning reporting engine in Populate.
24431
24432         (Operator.Define): Adjust to new MemberCore protocol. 
24433
24434         * const.cs (Const): This does not derive from Expression, it is a
24435         temporary object we use to create fields, it is a MemberCore. 
24436
24437         * class.cs (Method.Define): Allow the entry point to be in a
24438         specific class.
24439
24440         * driver.cs: Rewrite the argument handler to clean it up a bit.
24441
24442         * rootcontext.cs: Made it just an auxiliary namespace feature by
24443         making everything static.
24444
24445         * driver.cs: Adapt code to use RootContext type name instead of
24446         instance variable.
24447
24448         * delegate.cs: Remove RootContext argument.
24449
24450         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
24451         argument. 
24452
24453         * class.cs (Event.Define): The lookup can fail.
24454
24455         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
24456
24457         * expression.cs: Resolve the this instance before invoking the code.
24458
24459 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
24460
24461         * cs-parser.jay: Add a production in element_access that allows
24462         the thing to become a "type" reference.  This way we can parse
24463         things like "(string [])" as a type.
24464
24465         Note that this still does not handle the more complex rules of
24466         casts. 
24467
24468
24469         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
24470
24471         * ecore.cs: (CopyNewMethods): new utility function used to
24472         assemble the list of methods from running FindMembers.
24473
24474         (MemberLookup): Rework FindMembers so that 
24475
24476 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
24477
24478         * class.cs (TypeContainer): Remove Delegates who fail to be
24479         defined.
24480
24481         * delegate.cs (Populate): Verify that we dont get null return
24482         values.   TODO: Check for AsAccessible.
24483
24484         * cs-parser.jay: Use basename to emit error 574 (destructor should
24485         have the same name as container class), not the full name.
24486
24487         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
24488         possible representation.  
24489
24490         Also implements integer type suffixes U and L.
24491
24492 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
24493
24494         * expression.cs (ArrayCreation.DoResolve): We need to do the
24495         argument resolution *always*.
24496
24497         * decl.cs: Make this hold the namespace.  Hold the root context as
24498         well.
24499         (LookupType): Move here.
24500
24501         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
24502
24503         * location.cs (Row, Name): Fixed the code, it was always returning
24504         references to the first file.
24505
24506         * interface.cs: Register properties defined through interfaces.
24507
24508         * driver.cs: Add support for globbing on the command line
24509
24510         * class.cs (Field): Make it derive from MemberCore as well.
24511         (Event): ditto.
24512
24513 2001-12-15  Ravi Pratap  <ravi@ximian.com>
24514
24515         * class.cs (Event::Define): Check that the type of the event is a delegate
24516         type else flag error #66.
24517
24518         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
24519         same.
24520
24521         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
24522         values of EntryPoint, CharSet etc etc.
24523
24524         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
24525
24526         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
24527         be null and we should ignore this. I am not sure if this is really clean. Apparently,
24528         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
24529         which needs this to do its work.
24530
24531         * ../errors/cs0066.cs : Add.
24532
24533 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
24534
24535         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
24536         helper functions.
24537
24538         * class.cs: (MethodSignature.MethodSignature): Removed hack that
24539         clears out the parameters field.
24540         (MemberSignatureCompare): Cleanup
24541
24542         (MemberCore): New base class used to share code between MethodCore
24543         and Property.
24544
24545         (RegisterRequiredImplementations) BindingFlags.Public requires
24546         either BindingFlags.Instace or Static.  Use instance here.
24547
24548         (Property): Refactored code to cope better with the full spec.
24549
24550         * parameter.cs (GetParameterInfo): Return an empty array instead
24551         of null on error.
24552
24553         * class.cs (Property): Abstract or extern properties have no bodies.
24554
24555         * parameter.cs (GetParameterInfo): return a zero-sized array.
24556
24557         * class.cs (TypeContainer.MethodModifiersValid): Move all the
24558         method modifier validation to the typecontainer so we can reuse
24559         this on properties.
24560
24561         (MethodCore.ParameterTypes): return an empty sized array of types.
24562
24563         (Property.Define): Test property modifier validity.
24564
24565         Add tests for sealed/override too.
24566
24567         (Method.Emit): abstract or extern methods have no bodies.
24568
24569 2001-12-14  Ravi Pratap  <ravi@ximian.com>
24570
24571         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
24572         thing.
24573
24574         (Method::Define, ::Emit): Modify accordingly.
24575
24576         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
24577
24578         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
24579
24580         * makefile: Pass in /unsafe.
24581
24582 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
24583
24584         * class.cs (MakeKey): Kill routine.
24585
24586         * class.cs (TypeContainer.Define): Correctly define explicit
24587         method implementations (they require the full interface name plus
24588         the method name).
24589
24590         * typemanager.cs: Deply the PtrHashtable here and stop using the
24591         lame keys.  Things work so much better.
24592
24593         This of course broke everyone who depended on `RegisterMethod' to
24594         do the `test for existance' test.  This has to be done elsewhere.
24595
24596         * support.cs (PtrHashtable): A hashtable that avoid comparing with
24597         the object stupid Equals method (because, that like fails all over
24598         the place).  We still do not use it.
24599
24600         * class.cs (TypeContainer.SetRequiredInterface,
24601         TypeContainer.RequireMethods): Killed these two routines and moved
24602         all the functionality to RegisterRequiredImplementations.
24603
24604         (TypeContainer.RegisterRequiredImplementations): This routine now
24605         registers all the implementations required in an array for the
24606         interfaces and abstract methods.  We use an array of structures
24607         which can be computed ahead of time to reduce memory usage and we
24608         also assume that lookups are cheap as most classes will not
24609         implement too many interfaces.
24610
24611         We also avoid creating too many MethodSignatures.
24612
24613         (TypeContainer.IsInterfaceMethod): Update and optionally does not
24614         clear the "pending" bit if we find that there are problems with
24615         the declaration.
24616
24617         (TypeContainer.VerifyPendingMethods): Update to report errors of
24618         methods that look like implementations but are not.
24619
24620         (TypeContainer.Define): Add support for explicit interface method
24621         implementation. 
24622
24623 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
24624
24625         * typemanager.cs: Keep track of the parameters here instead of
24626         being a feature of the TypeContainer.
24627
24628         * class.cs: Drop the registration of parameters here, as
24629         InterfaceMethods are also interface declarations.
24630
24631         * delegate.cs: Register methods with the TypeManager not only with
24632         the TypeContainer.  This code was buggy.
24633
24634         * interface.cs: Full registation here.
24635
24636 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
24637
24638         * expression.cs: Remove reducer for binary expressions, it can not
24639         be done this way.
24640
24641         * const.cs: Put here the code that used to go into constant.cs
24642
24643         * constant.cs: Put here the code for constants, this is a new base
24644         class for Literals.
24645
24646         * literal.cs: Make Literal derive from Constant.
24647
24648 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
24649
24650         * statement.cs (Return.Emit): Report error 157 if the user
24651         attempts to return from a finally block.
24652
24653         (Return.Emit): Instead of emitting a return, jump to the end of
24654         the function.
24655
24656         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
24657         LocalBuilder to store the result of the function.  ReturnLabel is
24658         the target where we jump.
24659
24660
24661 2001-12-09  Radek Doulik  <rodo@ximian.com>
24662
24663         * cs-parser.jay: remember alias in current namespace
24664
24665         * ecore.cs (SimpleName::DoResolve): use aliases for types or
24666         namespaces
24667
24668         * class.cs (LookupAlias): lookup alias in my_namespace
24669
24670         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
24671         aliases hashtable
24672         (LookupAlias): lookup alias in this and if needed in parent
24673         namespaces
24674
24675 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
24676
24677         * support.cs: 
24678
24679         * rootcontext.cs: (ModuleBuilder) Made static, first step into
24680         making things static.  I need this to avoid passing the
24681         TypeContainer when calling ParameterType.
24682
24683         * support.cs (InternalParameters.ParameterType): Remove ugly hack
24684         that did string manipulation to compute the type and then call
24685         GetType.  Use Parameter.ParameterType instead.
24686
24687         * cs-tokenizer.cs: Consume the suffix for floating values.
24688
24689         * expression.cs (ParameterReference): figure out whether this is a
24690         reference parameter or not.  Kill an extra variable by computing
24691         the arg_idx during emission.
24692
24693         * parameter.cs (Parameters.GetParameterInfo): New overloaded
24694         function that returns whether a parameter is an out/ref value or not.
24695
24696         (Parameter.ParameterType): The type of the parameter (base,
24697         without ref/out applied).
24698
24699         (Parameter.Resolve): Perform resolution here.
24700         (Parameter.ExternalType): The full type (with ref/out applied).
24701
24702         * statement.cs (Using.Emit, Using.EmitExpression): Implement
24703         support for expressions on the using statement.
24704
24705 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
24706
24707         * statement.cs (Using.EmitLocalVariableDecls): Split the
24708         localvariable handling of the using statement.
24709
24710         (Block.EmitMeta): Keep track of variable count across blocks.  We
24711         were reusing slots on separate branches of blocks.
24712
24713         (Try.Emit): Emit the general code block, we were not emitting it. 
24714
24715         Check the type of the declaration to be an IDisposable or
24716         something that can be implicity converted to it. 
24717
24718         Emit conversions if required.
24719
24720         * ecore.cs (EmptyExpression): New utility class.
24721         (Expression.ImplicitConversionExists): New utility function.
24722
24723 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
24724
24725         * statement.cs (Using): Implement.
24726
24727         * expression.cs (LocalVariableReference): Support read only variables.
24728
24729         * statement.cs: Remove the explicit emit for the Leave opcode.
24730         (VariableInfo): Add a readonly field.
24731
24732 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
24733
24734         * ecore.cs (ConvCast): new class used to encapsulate the various
24735         explicit integer conversions that works in both checked and
24736         unchecked contexts.
24737
24738         (Expression.ConvertNumericExplicit): Use new ConvCast class to
24739         properly generate the overflow opcodes.
24740
24741 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24742
24743         * statement.cs: The correct type for the EmptyExpression is the
24744         element_type, not the variable type.  Ravi pointed this out.
24745
24746 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24747
24748         * class.cs (Method::Define): Handle PInvoke methods specially
24749         by using DefinePInvokeMethod instead of the usual one.
24750
24751         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
24752         above to do the task of extracting information and defining the method.
24753
24754 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24755
24756         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
24757         of the condition for string type.
24758
24759         (Emit): Move that here. 
24760
24761         (ArrayCreation::CheckIndices): Keep string literals in their expression
24762         form.
24763
24764         (EmitDynamicInitializers): Handle strings appropriately.
24765
24766 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24767
24768         * codegen.cs (EmitContext): Replace multiple variables with a
24769         single pointer to the current Switch statement.
24770
24771         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
24772         EmitContext.
24773
24774 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24775
24776         * statement.cs 
24777
24778         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
24779         default'.
24780
24781         (Foreach.Emit): Foreach on arrays was not setting
24782         up the loop variables (for break/continue).
24783
24784         (GotoCase): Semi-implented.
24785
24786 2001-12-03  Ravi Pratap  <ravi@ximian.com>
24787
24788         * attribute.cs (CheckAttribute): Handle system attributes by using
24789         Attribute.GetAttributes to examine information we need.
24790
24791         (GetValidPlaces): Same here.
24792
24793         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
24794
24795         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
24796
24797         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
24798
24799         (Method::Define): Set appropriate flags if we have a DllImport attribute.
24800
24801         (Method::Emit): Handle the case when we are a PInvoke method.
24802
24803 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24804
24805         * expression.cs: Use ResolveWithSimpleName on compound names.
24806
24807 2001-12-02  Ravi Pratap  <ravi@ximian.com>
24808
24809         * constant.cs (EmitConstant): Make sure we resolve the associated expression
24810         before trying to reduce it.
24811
24812         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
24813
24814         * constant.cs (LookupConstantValue): Implement.
24815
24816         (EmitConstant): Use the above in emitting the constant.
24817
24818         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
24819         that are user-defined by doing a LookupConstantValue on them.
24820
24821         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
24822         too, like above.
24823
24824 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
24825
24826         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
24827
24828         (BaseAccess.DoResolve): Implement.
24829
24830         (MemberAccess.DoResolve): Split this routine into a
24831         ResolveMemberAccess routine that can be used independently
24832
24833 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
24834
24835         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
24836         As that share bits of the implementation.  Is returns a boolean,
24837         while As returns the Type that is being probed.
24838
24839 2001-12-01  Ravi Pratap  <ravi@ximian.com>
24840
24841         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
24842         instead of a Literal - much easier.
24843
24844         (EnumInTransit): Remove - utterly useless :-)
24845
24846         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
24847
24848         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
24849
24850         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
24851         chain when we have no associated expression.
24852
24853 2001-11-30  Ravi Pratap  <ravi@ximian.com>
24854
24855         * constant.cs (Define): Use Location while reporting the errror.
24856
24857         Also emit a warning when 'new' is used and there is no inherited
24858         member to hide.
24859
24860         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
24861         populated.
24862
24863         (LookupEnumValue): Implement to lookup an enum member's value and define it
24864         if necessary.
24865
24866         (Populate): Re-write accordingly to use the above routine.
24867
24868 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
24869
24870         * expression.cs (This): Fix prototype for DoResolveLValue to
24871         override the base class DoResolveLValue.
24872
24873         * cs-parser.cs: Report errors cs574 and cs575 (destructor
24874         declarations) 
24875
24876         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
24877         (we need to load the address of the field here).  This fixes
24878         test-22. 
24879
24880         (FieldExpr.DoResolveLValue): Call the DoResolve
24881         function to initialize the Instance expression.
24882
24883         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
24884         correctly the GetEnumerator operation on a value type.
24885
24886         * cs-parser.jay: Add more simple parsing error catches.
24887
24888         * statement.cs (Switch): Add support for string switches.
24889         Handle null specially.
24890
24891         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
24892
24893 2001-11-28  Ravi Pratap  <ravi@ximian.com>
24894
24895         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
24896
24897         (declare_local_constant): New helper function.
24898
24899         * statement.cs (AddConstant): Keep a separate record of constants
24900
24901         (IsConstant): Implement to determine if a variable is a constant.
24902
24903         (GetConstantExpression): Implement.
24904
24905         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
24906
24907         * statement.cs (IsVariableDefined): Re-write.
24908
24909 2001-11-27  Ravi Pratap  <ravi@ximian.com>
24910
24911         * class.cs (TypeContainer::FindMembers): Look for constants
24912         in the case when we are looking for MemberTypes.Field
24913
24914         * expression.cs (MemberAccess::DoResolve): Check that in the
24915         case we are a FieldExpr and a Literal, we are not being accessed
24916         by an instance reference.
24917
24918         * cs-parser.jay (local_constant_declaration): Implement.
24919
24920         (declaration_statement): Implement for constant declarations.
24921
24922 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
24923
24924         * statement.cs (Switch): Catch double defaults.
24925
24926         (Switch): More work on the switch() statement
24927         implementation.  It works for integral values now, need to finish
24928         string support.
24929
24930
24931 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24932
24933         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
24934         integer literals into other integer literals.  To be used by
24935         switch. 
24936
24937 2001-11-24  Ravi Pratap  <ravi@ximian.com>
24938
24939         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
24940         some memory.
24941
24942         (EmitDynamicInitializers): Cope with the above since we extract data
24943         directly from ArrayData now.
24944
24945         (ExpectInitializers): Keep track of whether initializers are mandatory
24946         or not.
24947
24948         (Bounds): Make it a hashtable to prevent the same dimension being 
24949         recorded for every element in that dimension.
24950
24951         (EmitDynamicInitializers): Fix bug which prevented the Set array method
24952         from being found.
24953
24954         Also fix bug which was causing the indices to be emitted in the reverse
24955         order.
24956
24957 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24958
24959         * expression.cs (ArrayCreation): Implement the bits that Ravi left
24960         unfinished.  They do not work, because the underlying code is
24961         sloppy.
24962
24963 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24964
24965         * cs-parser.jay: Remove bogus fixme.
24966
24967         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
24968         on Switch statement.
24969
24970 2001-11-23  Ravi Pratap  <ravi@ximian.com>
24971
24972         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
24973         the same. 
24974
24975         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
24976         parameter. Apparently, any expression is allowed. 
24977
24978         (ValidateInitializers): Update accordingly.
24979
24980         (CheckIndices): Fix some tricky bugs thanks to recursion.
24981
24982         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
24983         I was being completely brain-dead.
24984
24985         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
24986         and re-write acordingly.
24987
24988         (DelegateInvocation): Re-write accordingly.
24989
24990         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
24991
24992         (MakeByteBlob): Handle types more correctly.
24993
24994         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
24995         initialization from expressions but it is incomplete because I am a complete
24996         Dodo :-|
24997
24998 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24999
25000         * statement.cs (If.Emit): Fix a bug that generated incorrect code
25001         on If.  Basically, we have to return `true' (ie, we do return to
25002         our caller) only if both branches of the if return.
25003
25004         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
25005         short-circuit operators, handle them as short circuit operators. 
25006
25007         (Cast.DoResolve): Resolve type.
25008         (Cast.Cast): Take an expression as the target type.
25009
25010         * cs-parser.jay (cast_expression): Remove old hack that only
25011         allowed a limited set of types to be handled.  Now we take a
25012         unary_expression and we resolve to a type during semantic
25013         analysis.
25014
25015         Use the grammar productions from Rhys to handle casts (this is
25016         not complete like Rhys syntax yet, we fail to handle that corner
25017         case that C# has regarding (-x), but we will get there.
25018
25019 2001-11-22  Ravi Pratap  <ravi@ximian.com>
25020
25021         * class.cs (EmitFieldInitializer): Take care of the case when we have a
25022         field which is an array type.
25023
25024         * cs-parser.jay (declare_local_variables): Support array initialization too.
25025
25026         * typemanager.cs (MakeKey): Implement.
25027
25028         (everywhere): Use the above appropriately.
25029
25030         * cs-parser.jay (for_statement): Update for array initialization while
25031         declaring variables.
25032
25033         * ecore.cs : The error message was correct, it's the variable's names that
25034         were misleading ;-) Make the code more readable.
25035
25036         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
25037         the correct type etc.
25038
25039         (ConvertExplicit): Handle Enum types by examining the underlying type.
25040
25041 2001-11-21  Ravi Pratap  <ravi@ximian.com>
25042
25043         * parameter.cs (GetCallingConvention): Always return
25044         CallingConventions.Standard for now.
25045
25046 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25047
25048         * expression.cs (Binary.ResolveOperator): Update the values of `l'
25049         and `r' after calling DoNumericPromotions.
25050
25051         * ecore.cs: Fix error message (the types were in the wrong order).
25052
25053         * statement.cs (Foreach.ProbeCollectionType): Need to pass
25054         BindingFlags.Instance as well 
25055
25056         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
25057         implicit int literal conversion in an empty cast so that we
25058         propagate the right type upstream.
25059
25060         (UnboxCast): new class used to unbox value types.
25061         (Expression.ConvertExplicit): Add explicit type conversions done
25062         by unboxing.
25063
25064         (Expression.ImplicitNumericConversion): Oops, forgot to test for
25065         the target type before applying the implicit LongLiterals to ULong
25066         literal cast.
25067
25068 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
25069
25070         * cs-parser.jay (for_statement): Reworked the way For works: now
25071         we declare manually any variables that are introduced in
25072         for_initializer to solve the problem of having out-of-band code
25073         emition (that is what got for broken).
25074
25075         (declaration_statement): Perform the actual variable declaration
25076         that used to be done in local_variable_declaration here.
25077
25078         (local_variable_declaration): Do not declare anything, just pass
25079         the information on a DictionaryEntry
25080
25081 2001-11-20  Ravi Pratap  <ravi@ximian.com>
25082
25083         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
25084         re-write of the logic to now make it recursive.
25085
25086         (UpdateIndices): Re-write accordingly.
25087
25088         Store element data in a separate ArrayData list in the above methods.
25089
25090         (MakeByteBlob): Implement to dump the array data into a byte array.
25091
25092 2001-11-19  Ravi Pratap  <ravi@ximian.com>
25093
25094         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
25095         into CheckIndices.
25096
25097         * constant.cs (Define): Implement.
25098
25099         (EmitConstant): Re-write fully.
25100
25101         Pass in location info.
25102
25103         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
25104         respectively.
25105
25106         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
25107         DictionaryEntry since we need location info too.
25108
25109         (constant_declaration): Update accordingly.
25110
25111         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
25112         code into another method : UpdateIndices.
25113
25114 2001-11-18  Ravi Pratap  <ravi@ximian.com>
25115
25116         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
25117         some type checking etc.
25118
25119 2001-11-17  Ravi Pratap  <ravi@ximian.com>
25120
25121         * expression.cs (ArrayCreation::ValidateInitializers): Implement
25122         bits to provide dimension info if the user skips doing that.
25123
25124         Update second constructor to store the rank correctly.
25125
25126 2001-11-16  Ravi Pratap  <ravi@ximian.com>
25127
25128         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
25129         and try to implement.
25130
25131         * ../errors/cs0150.cs : Add.
25132
25133         * ../errors/cs0178.cs : Add.
25134
25135 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
25136
25137         * statement.cs: Implement foreach on multi-dimensional arrays. 
25138
25139         * parameter.cs (Parameters.GetParameterByName): Also lookup the
25140         name of the params argument.
25141
25142         * expression.cs: Use EmitStoreOpcode to get the right opcode while
25143         initializing the array.
25144
25145         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
25146         we can use this elsewhere.
25147
25148         * statement.cs: Finish implementation of foreach for single
25149         dimension arrays.
25150
25151         * cs-parser.jay: Use an out-of-band stack to pass information
25152         around, I wonder why I need this.
25153
25154         foreach_block: Make the new foreach_block the current_block.
25155
25156         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
25157         function used to return a static Parameters structure.  Used for
25158         empty parameters, as those are created very frequently.
25159
25160         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
25161
25162 2001-11-15  Ravi Pratap  <ravi@ximian.com>
25163
25164         * interface.cs : Default modifier is private, not public. The
25165         make verify test passes again.
25166
25167 2001-11-15  Ravi Pratap  <ravi@ximian.com>
25168
25169         * support.cs (ReflectionParameters): Fix logic to determine
25170         whether the last parameter is a params one. Test 9 passes again.
25171
25172         * delegate.cs (Populate): Register the builders we define with
25173         RegisterParameterForBuilder. Test 19 passes again.
25174
25175         * cs-parser.jay (property_declaration): Reference $6 instead
25176         of $$ to get at the location.
25177
25178         (indexer_declaration): Similar stuff.
25179
25180         (attribute): Ditto.
25181
25182         * class.cs (Property): Register parameters for the Get and Set methods
25183         if they exist. Test 23 passes again.
25184
25185         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
25186         call to EmitArguments as we are sure there aren't any params arguments. 
25187         Test 32 passes again.
25188
25189         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
25190         IndexOutOfRangeException. 
25191
25192         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
25193         Test 33 now passes again.
25194
25195 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
25196
25197         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
25198         broke a bunch of things.  Will have to come up with a better way
25199         of tracking locations.
25200
25201         * statement.cs: Implemented foreach for single dimension arrays.
25202
25203 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25204
25205         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
25206         an error.  This removes the lookup from the critical path.
25207
25208         * cs-parser.jay: Removed use of temporary_loc, which is completely
25209         broken. 
25210
25211 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
25212
25213         * support.cs (ReflectionParameters.ParameterModifier): Report
25214         whether the argument is a PARAMS argument or not.
25215
25216         * class.cs: Set the attribute `ParamArrayAttribute' on the
25217         parameter argument.
25218
25219         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
25220         and cons_param_array_attribute (ConstructorInfo for
25221         ParamArrayAttribute)., 
25222
25223         * codegen.cs: Emit the return using the `Return' statement, that
25224         way we can report the error correctly for missing return values. 
25225
25226         * class.cs (Method.Emit): Clean up.
25227
25228         * expression.cs (Argument.Resolve): Take another argument: the
25229         location where this argument is used.  Notice that this is not
25230         part of the "Argument" class as to reduce the size of the
25231         structure (we know the approximate location anyways).
25232
25233         Test if the argument is a variable-reference, if not, then
25234         complain with a 206.
25235
25236         (Argument.Emit): Emit addresses of variables.
25237
25238         (Argument.FullDesc): Simplify.
25239
25240         (Invocation.DoResolve): Update for Argument.Resolve.
25241
25242         (ElementAccess.DoResolve): ditto.
25243
25244         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
25245         method should be virtual, as this method is always virtual.
25246
25247         (NewDelegate.DoResolve): Update for Argument.Resolve.
25248
25249         * class.cs (ConstructorInitializer.DoResolve): ditto.
25250
25251         * attribute.cs (Attribute.Resolve): ditto.
25252
25253 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
25254
25255         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
25256
25257         * expression.cs (ParameterReference): Drop IStackStorage and implement
25258         IAssignMethod instead. 
25259
25260         (LocalVariableReference): ditto.
25261
25262         * ecore.cs (FieldExpr): Drop IStackStorage and implement
25263         IAssignMethod instead. 
25264
25265 2001-11-13  Miguel de Icaza <miguel@ximian.com>
25266
25267         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
25268         enumerations that are used in heavily used structures derive from
25269         byte in a laughable and pathetic attempt to reduce memory usage.
25270         This is the kind of pre-optimzations that you should not do at
25271         home without adult supervision.
25272
25273         * expression.cs (UnaryMutator): New class, used to handle ++ and
25274         -- separatedly from the other unary operators.  Cleans up the
25275         code, and kills the ExpressionStatement dependency in Unary.
25276
25277         (Unary): Removed `method' and `Arguments' from this class, making
25278         it smaller, and moving it all to SimpleCall, so I can reuse this
25279         code in other locations and avoid creating a lot of transient data
25280         strucutres when not required.
25281
25282         * cs-parser.jay: Adjust for new changes.
25283
25284 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
25285
25286         * enum.cs (Enum.Populate): If there is a failure during
25287         definition, return
25288
25289         * cs-parser.jay (opt_enum_base): we used to catch type errors
25290         here, but this is really incorrect.  The type error should be
25291         catched during semantic analysis.
25292
25293 2001-12-11  Ravi Pratap  <ravi@ximian.com>
25294
25295         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
25296         current_local_parameters as expected since I, in my stupidity, had forgotten
25297         to do this :-)
25298
25299         * attribute.cs (GetValidPlaces): Fix stupid bug.
25300
25301         * class.cs (Method::Emit): Perform check on applicability of attributes.
25302
25303         (Constructor::Emit): Ditto.
25304
25305         (Field::Emit): Ditto.
25306
25307         (Field.Location): Store location information.
25308
25309         (Property, Event, Indexer, Operator): Ditto.
25310
25311         * cs-parser.jay (field_declaration): Pass in location for each field.
25312
25313         * ../errors/cs0592.cs : Add.
25314
25315 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25316
25317         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
25318
25319         (InitCoreTypes): Update accordingly.
25320
25321         (RegisterAttrType, LookupAttr): Implement.
25322
25323         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
25324         info about the same.
25325
25326         (Resolve): Update to populate the above as necessary.
25327
25328         (Error592): Helper.
25329
25330         (GetValidPlaces): Helper to the above.
25331
25332         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
25333
25334         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
25335
25336 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25337
25338         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
25339
25340         * ../errors/cs0617.cs : Add.
25341
25342 2001-11-11  Ravi Pratap  <ravi@ximian.com>
25343
25344         * enum.cs (Emit): Rename to Populate to be more consistent with what
25345         we expect it to do and when exactly it is called.
25346
25347         * class.cs, rootcontext.cs : Update accordingly.
25348
25349         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
25350         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
25351
25352         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
25353
25354         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
25355         of a fieldinfo using the above, when dealing with a FieldBuilder.
25356
25357 2001-11-10  Ravi Pratap  <ravi@ximian.com>
25358
25359         * ../errors/cs0031.cs : Add.
25360
25361         * ../errors/cs1008.cs : Add.
25362
25363         * ../errrors/cs0543.cs : Add.
25364
25365         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
25366         enum type.
25367
25368         (FindMembers): Implement.
25369
25370         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
25371         enums and delegates too.
25372
25373         (enum_types): Rename to builder_to_enum.
25374
25375         (delegate_types): Rename to builder_to_delegate.
25376
25377         * delegate.cs (FindMembers): Implement.
25378
25379 2001-11-09  Ravi Pratap  <ravi@ximian.com>
25380
25381         * typemanager.cs (IsEnumType): Implement.
25382
25383         * enum.cs (Emit): Re-write parts to account for the underlying type
25384         better and perform checking etc.
25385
25386         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
25387         of the underlying type.
25388
25389         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
25390         value
25391
25392         * enum.cs (error31): Helper to report error #31.
25393
25394         * cs-parser.jay (enum_declaration): Store location of each member too.
25395
25396         * enum.cs (member_to_location): New hashtable. 
25397
25398         (AddEnumMember): Update location hashtable.
25399
25400         (Emit): Use the location of each member while reporting errors.
25401
25402 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25403
25404         * cs-parser.jay: A for_initializer if is a
25405         local_variable_declaration really ammount to have an implicit
25406         block with the variable declaration and no initializer for for.
25407
25408         * statement.cs (For.Emit): Cope with null initializers.
25409
25410         This fixes the infinite loop on for initializers.
25411
25412 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
25413
25414         * enum.cs: More cleanup.
25415
25416         * ecore.cs: Remove dead code.
25417
25418         * class.cs (Property.Emit): More simplification.
25419         (Event.Emit): ditto.
25420
25421         Reworked to have less levels of indentation.
25422
25423 2001-11-08  Ravi Pratap  <ravi@ximian.com>
25424
25425         * class.cs (Property): Emit attributes.
25426
25427         (Field): Ditto.
25428
25429         (Event): Ditto.
25430
25431         (Indexer): Ditto.
25432
25433         (Operator): Ditto.
25434
25435         * enum.cs (Emit): Ditto.
25436
25437         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
25438         Enums too.
25439
25440         * class.cs (Field, Event, etc.): Move attribute generation into the
25441         Emit method everywhere.
25442
25443         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
25444         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
25445         as we had no way of defining nested enums !
25446
25447         * rootcontext.cs : Adjust code accordingly.
25448
25449         * typemanager.cs (AddEnumType): To keep track of enum types separately.
25450
25451 2001-11-07  Ravi Pratap  <ravi@ximian.com>
25452
25453         * expression.cs (EvalConstantExpression): Move into ecore.cs
25454
25455         * enum.cs (Enum): Rename some members and make them public and readonly
25456         according to our convention.
25457
25458         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
25459         nothing else.
25460
25461         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
25462
25463         (Enum::Emit): Write a simple version for now which doesn't try to compute
25464         expressions. I shall modify this to be more robust in just a while.
25465
25466         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
25467
25468         (TypeContainer::CloseType): Create the Enum types too.
25469
25470         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
25471
25472         * expression.cs (EvalConstantExpression): Get rid of completely.
25473
25474         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
25475         user-defined values and other cases.
25476
25477         (IsValidEnumLiteral): Helper function.
25478
25479         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
25480         out there in the case we had a literal FieldExpr.
25481
25482         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
25483
25484         (Literalize): Revamp a bit to take two arguments.
25485
25486         (EnumLiteral): New class which derives from Literal to wrap enum literals.
25487
25488 2001-11-06  Ravi Pratap  <ravi@ximian.com>
25489
25490         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
25491
25492         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
25493
25494         (Resolve): Use the above to ensure we have proper initializers.
25495
25496 2001-11-05  Ravi Pratap  <ravi@ximian.com>
25497
25498         * expression.cs (Expression::EvalConstantExpression): New method to 
25499         evaluate constant expressions.
25500
25501         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
25502
25503 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
25504
25505         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
25506         in an array.
25507
25508         (Binary.ResolveOperator): Handle operator != (object a, object b)
25509         and operator == (object a, object b);
25510
25511         (Binary.DoNumericPromotions): Indicate whether the numeric
25512         promotion was possible.
25513
25514         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
25515         Implement.  
25516
25517         Made the ArrayAccess implement interface IAssignMethod instead of
25518         IStackStore as the order in which arguments are passed reflects
25519         this.
25520
25521         * assign.cs: Instead of using expr.ExprClass to select the way of
25522         assinging, probe for the IStackStore/IAssignMethod interfaces.
25523
25524         * typemanager.cs: Load InitializeArray definition.
25525
25526         * rootcontext.cs (RootContext.MakeStaticData): Used to define
25527         static data that can be used to initialize arrays. 
25528
25529 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
25530
25531         * expression.cs: Handle operator== and operator!= for booleans.
25532
25533         (Conditioal.Reduce): Implement reducer for the ?: operator.
25534
25535         (Conditional.Resolve): Implement dead code elimination.
25536
25537         (Binary.Resolve): Catch string literals and return a new
25538         concatenated string.
25539
25540         (Unary.Reduce): Implement reduction of unary expressions.
25541
25542         * ecore.cs: Split out the expression core handling here.
25543
25544         (Expression.Reduce): New method used to perform constant folding
25545         and CSE.  This is needed to support constant-expressions. 
25546
25547         * statement.cs (Statement.EmitBoolExpression): Pass true and false
25548         targets, and optimize for !x.
25549
25550 2001-11-04  Ravi Pratap  <ravi@ximian.com>
25551
25552         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
25553         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
25554         set custom atttributes.
25555
25556         * literal.cs (Literal::GetValue): New abstract method to return the actual
25557         value of the literal, cast as an object.
25558
25559         (*Literal): Implement GetValue method.
25560
25561         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
25562         expressions to the arraylist but objects of type Argument.
25563
25564         * class.cs (TypeContainer::Emit): Emit our attributes too.
25565
25566         (Method::Emit, Constructor::Emit): Ditto.
25567
25568         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
25569         to be ignoring earlier.
25570
25571 2001-11-03  Ravi Pratap  <ravi@ximian.com>
25572
25573         * attribute.cs (AttributeSection::Define): Implement to do the business
25574         of constructing a CustomAttributeBuilder.
25575
25576         (Attribute): New trivial class. Increases readability of code.  
25577
25578         * cs-parser.jay : Update accordingly.
25579
25580         (positional_argument_list, named_argument_list, named_argument): New rules
25581
25582         (attribute_arguments): Use the above so that we are more correct.
25583
25584 2001-11-02  Ravi Pratap  <ravi@ximian.com>
25585
25586         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
25587         to perform all checks for a method with a params parameter.
25588
25589         (Invocation::OverloadResolve): Update to use the above method and therefore
25590         cope correctly with params method invocations.
25591
25592         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
25593         params too.
25594
25595         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
25596         constructors in our parent too because we can't afford to miss out on 
25597         protected ones ;-)
25598
25599         * attribute.cs (AttributeSection): New name for the class Attribute
25600
25601         Other trivial changes to improve readability.
25602
25603         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
25604         use the new class names.
25605
25606 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25607
25608         * class.cs (Method::Define): Complete definition for params types too
25609
25610         (Indexer::Define): Ditto.
25611
25612         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
25613         Cope everywhere with a request for info about the array parameter.
25614
25615 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25616
25617         * tree.cs (RecordNamespace): Fix up to check for the correct key.
25618
25619         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
25620         local_variable_type to extract the string corresponding to the type.
25621
25622         (local_variable_type): Fixup the action to use the new helper method.
25623
25624         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
25625         go.
25626
25627         * expression.cs : Clean out code which uses the above.
25628
25629 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25630
25631         * typemanager.cs (RegisterMethod): Check if we already have an existing key
25632         and bale out if necessary by returning a false.
25633
25634         (RegisterProperty): Ditto.
25635
25636         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
25637         and print out appropriate error messages.
25638
25639         * interface.cs (everywhere): Ditto.
25640
25641         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
25642         location to constructor.
25643
25644         * class.cs (Property, Event, Indexer): Update accordingly.
25645
25646         * ../errors/cs111.cs : Added.
25647
25648         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
25649         of a method, as laid down by the spec.
25650
25651         (Invocation::OverloadResolve): Use the above method.
25652
25653 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25654
25655         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
25656         now take a TypeContainer and a Parameters object.
25657
25658         (ParameterData): Modify return type of ParameterModifier method to be 
25659         Parameter.Modifier and not a string.
25660
25661         (ReflectionParameters, InternalParameters): Update accordingly.
25662
25663         * expression.cs (Argument::GetParameterModifier): Same here.
25664
25665         * support.cs (InternalParameters::ParameterType): Find a better way of determining
25666         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
25667         symbol in it at all so maybe this is only for now.
25668
25669 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25670
25671         * support.cs (InternalParameters): Constructor now takes an extra argument 
25672         which is the actual Parameters class.
25673
25674         (ParameterDesc): Update to provide info on ref/out modifiers.
25675
25676         * class.cs (everywhere): Update call to InternalParameters to pass in
25677         the second argument too.
25678
25679         * support.cs (ParameterData): Add ParameterModifier, which is a method 
25680         to return the modifier info [ref/out etc]
25681
25682         (InternalParameters, ReflectionParameters): Implement the above.
25683
25684         * expression.cs (Argument::ParameterModifier): Similar function to return
25685         info about the argument's modifiers.
25686
25687         (Invocation::OverloadResolve): Update to take into account matching modifiers 
25688         too.
25689
25690         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
25691         a new SetFormalParameters object which we pass to InternalParameters.
25692
25693 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25694
25695         * expression.cs (NewArray): Merge into the ArrayCreation class.
25696
25697 2001-10-29  Ravi Pratap  <ravi@ximian.com>
25698
25699         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
25700         NewUserdefinedArray into one as there wasn't much of a use in having
25701         two separate ones.
25702
25703         * expression.cs (Argument): Change field's name to ArgType from Type.
25704
25705         (Type): New readonly property which returns the proper type, taking into 
25706         account ref/out modifiers.
25707
25708         (everywhere): Adjust code accordingly for the above.
25709
25710         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
25711         whether we are emitting for a ref or out parameter.
25712
25713         * expression.cs (Argument::Emit): Use the above field to set the state.
25714
25715         (LocalVariableReference::Emit): Update to honour the flag and emit the
25716         right stuff.
25717
25718         * parameter.cs (Attributes): Set the correct flags for ref parameters.
25719
25720         * expression.cs (Argument::FullDesc): New function to provide a full desc.
25721
25722         * support.cs (ParameterData): Add method ParameterDesc to the interface.
25723
25724         (ReflectionParameters, InternalParameters): Implement the above method.
25725
25726         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
25727         reporting errors.
25728
25729         (Invocation::FullMethodDesc): Ditto. 
25730
25731 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
25732
25733         * cs-parser.jay: Add extra production for the second form of array
25734         creation. 
25735
25736         * expression.cs (ArrayCreation): Update to reflect the above
25737         change. 
25738
25739         * Small changes to prepare for Array initialization.
25740
25741 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
25742
25743         * typemanager.cs (ImplementsInterface): interface might be null;
25744         Deal with this problem;
25745
25746         Also, we do store negative hits on the cache (null values), so use
25747         this instead of calling t.GetInterfaces on the type everytime.
25748
25749 2001-10-28  Ravi Pratap  <ravi@ximian.com>
25750
25751         * typemanager.cs (IsBuiltinType): New method to help determine the same.
25752
25753         * expression.cs (New::DoResolve): Get rid of array creation code and instead
25754         split functionality out into different classes.
25755
25756         (New::FormArrayType): Move into NewBuiltinArray.
25757
25758         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
25759         quite useless.
25760
25761         (NewBuiltinArray): New class to handle creation of built-in arrays.
25762
25763         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
25764         account creation of one-dimensional arrays.
25765
25766         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
25767
25768         (NewUserdefinedArray::DoResolve): Implement.
25769
25770         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
25771
25772         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
25773         we maintain inside the TypeManager. This is necessary to perform lookups on the
25774         module builder.
25775
25776         (LookupType): Update to perform GetType on the module builders too.     
25777
25778         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
25779
25780         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
25781
25782 2001-10-23  Ravi Pratap  <ravi@ximian.com>
25783
25784         * expression.cs (New::DoResolve): Implement guts of array creation.
25785
25786         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
25787
25788 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
25789
25790         * expression.cs: Fix bug I introduced lsat night that broke
25791         Delegates. 
25792
25793         (Expression.Resolve): Report a 246 error (can not resolve name)
25794         if we find a SimpleName in the stream.
25795
25796         (Expression.ResolveLValue): Ditto.
25797
25798         (Expression.ResolveWithSimpleName): This function is a variant of
25799         ResolveName, this one allows SimpleNames to be returned without a
25800         warning.  The only consumer of SimpleNames is MemberAccess
25801
25802 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
25803
25804         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
25805         might arrive here.  I have my doubts that this is correct.
25806
25807         * statement.cs (Lock): Implement lock statement.
25808
25809         * cs-parser.jay: Small fixes to support `lock' and `using'
25810
25811         * cs-tokenizer.cs: Remove extra space
25812
25813         * driver.cs: New flag --checked, allows to turn on integer math
25814         checking. 
25815
25816         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
25817         Threading.Monitor.Exit 
25818
25819 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
25820
25821         * expression.cs (IndexerAccess::DoResolveLValue): Set the
25822         Expression Class to be IndexerAccess.
25823
25824         Notice that Indexer::DoResolve sets the eclass to Value.
25825
25826 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
25827
25828         * class.cs (TypeContainer::Emit): Emit code for indexers.
25829
25830         * assign.cs (IAssignMethod): New interface implemented by Indexers
25831         and Properties for handling assignment.
25832
25833         (Assign::Emit): Simplify and reuse code. 
25834
25835         * expression.cs (IndexerAccess, PropertyExpr): Implement
25836         IAssignMethod, clean up old code. 
25837
25838 2001-10-22  Ravi Pratap  <ravi@ximian.com>
25839
25840         * typemanager.cs (ImplementsInterface): New method to determine if a type
25841         implements a given interface. Provides a nice cache too.
25842
25843         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
25844         method.
25845
25846         (ConvertReferenceExplicit): Ditto.
25847
25848         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
25849         various methods, with correct names etc.
25850
25851         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
25852         Operator.UnaryNegation.
25853
25854         * cs-parser.jay (operator_declarator): Be a little clever in the case where
25855         we have a unary plus or minus operator.
25856
25857         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
25858         UnaryMinus.
25859
25860         * everywhere : update accordingly.
25861
25862         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
25863         respectively.
25864
25865         * class.cs (Method::Define): For the case where we are implementing a method
25866         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
25867         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
25868
25869 2001-10-21  Ravi Pratap  <ravi@ximian.com>
25870
25871         * interface.cs (FindMembers): Implement to work around S.R.E
25872         lameness.
25873
25874         * typemanager.cs (IsInterfaceType): Implement.
25875
25876         (FindMembers): Update to handle interface types too.
25877
25878         * expression.cs (ImplicitReferenceConversion): Re-write bits which
25879         use IsAssignableFrom as that is not correct - it doesn't work.
25880
25881         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
25882         and accordingly override EmitStatement.
25883
25884         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
25885         using the correct logic :-)
25886
25887 2001-10-19  Ravi Pratap  <ravi@ximian.com>
25888
25889         * ../errors/cs-11.cs : Add to demonstrate error -11 
25890
25891 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
25892
25893         * assign.cs (Assign::Resolve): Resolve right hand side first, and
25894         then pass this as a hint to ResolveLValue.
25895
25896         * expression.cs (FieldExpr): Add Location information
25897
25898         (FieldExpr::LValueResolve): Report assignment to readonly
25899         variable. 
25900
25901         (Expression::ExprClassFromMemberInfo): Pass location information.
25902
25903         (Expression::ResolveLValue): Add new method that resolves an
25904         LValue. 
25905
25906         (Expression::DoResolveLValue): Default invocation calls
25907         DoResolve. 
25908
25909         (Indexers): New class used to keep track of indexers in a given
25910         Type. 
25911
25912         (IStackStore): Renamed from LValue, as it did not really describe
25913         what this did.  Also ResolveLValue is gone from this interface and
25914         now is part of Expression.
25915
25916         (ElementAccess): Depending on the element access type
25917
25918         * typemanager.cs: Add `indexer_name_type' as a Core type
25919         (System.Runtime.CompilerServices.IndexerNameAttribute)
25920
25921         * statement.cs (Goto): Take a location.
25922
25923 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25924
25925         * delegate.cs (Delegate::VerifyDelegate): New method to verify
25926         if two delegates are compatible.
25927
25928         (NewDelegate::DoResolve): Update to take care of the case when
25929         we instantiate a delegate from another delegate.
25930
25931         * typemanager.cs (FindMembers): Don't even try to look up members
25932         of Delegate types for now.
25933
25934 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25935
25936         * delegate.cs (NewDelegate): New class to take care of delegate
25937         instantiation.
25938
25939         * expression.cs (New): Split the delegate related code out into 
25940         the NewDelegate class.
25941
25942         * delegate.cs (DelegateInvocation): New class to handle delegate 
25943         invocation.
25944
25945         * expression.cs (Invocation): Split out delegate related code into
25946         the DelegateInvocation class.
25947
25948 2001-10-17  Ravi Pratap  <ravi@ximian.com>
25949
25950         * expression.cs (New::DoResolve): Implement delegate creation fully
25951         and according to the spec.
25952
25953         (New::DoEmit): Update to handle delegates differently.
25954
25955         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
25956         because of which we were printing out arguments in reverse order !
25957
25958         * delegate.cs (VerifyMethod): Implement to check if the given method
25959         matches the delegate.
25960
25961         (FullDelegateDesc): Implement.
25962
25963         (VerifyApplicability): Implement.
25964
25965         * expression.cs (Invocation::DoResolve): Update to accordingly handle
25966         delegate invocations too.
25967
25968         (Invocation::Emit): Ditto.
25969
25970         * ../errors/cs1593.cs : Added.
25971
25972         * ../errors/cs1594.cs : Added.
25973
25974         * delegate.cs (InstanceExpression, TargetMethod): New properties.
25975
25976 2001-10-16  Ravi Pratap  <ravi@ximian.com>
25977
25978         * typemanager.cs (intptr_type): Core type for System.IntPtr
25979
25980         (InitCoreTypes): Update for the same.
25981
25982         (iasyncresult_type, asynccallback_type): Ditto.
25983
25984         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
25985         correct.
25986
25987         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
25988         too.
25989
25990         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
25991         the builders for the 4 members of a delegate type :-)
25992
25993         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
25994         type.
25995
25996         * expression.cs (New::DoResolve): Implement guts for delegate creation.
25997
25998         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
25999
26000 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
26001
26002         * statement.cs (Break::Emit): Implement.   
26003         (Continue::Emit): Implement.
26004
26005         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26006         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26007         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26008         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
26009         end loop
26010
26011         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
26012         properties that track the label for the current loop (begin of the
26013         loop and end of the loop).
26014
26015 2001-10-15  Ravi Pratap  <ravi@ximian.com>
26016
26017         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
26018         use of emitting anything at all.
26019
26020         * class.cs, rootcontext.cs : Get rid of calls to the same.
26021
26022         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
26023
26024         (Populate): Define the constructor correctly and set the implementation
26025         attributes.
26026
26027         * typemanager.cs (delegate_types): New hashtable to hold delegates that
26028         have been defined.
26029
26030         (AddDelegateType): Implement.
26031
26032         (IsDelegateType): Implement helper method.
26033
26034         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
26035
26036         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
26037         and accordingly handle it.
26038
26039         * delegate.cs (Populate): Take TypeContainer argument.
26040         Implement bits to define the Invoke method. However, I still haven't figured out
26041         how to take care of the native int bit :-(
26042
26043         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
26044         Qualify the name of the delegate, not its return type !
26045
26046         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
26047         conversion.
26048
26049         (StandardConversionExists): Checking for array types turns out to be recursive.
26050
26051         (ConvertReferenceExplicit): Implement array conversion.
26052
26053         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
26054
26055 2001-10-12  Ravi Pratap  <ravi@ximian.com>
26056
26057         * cs-parser.jay (delegate_declaration): Store the fully qualified
26058         name as it is a type declaration.
26059
26060         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
26061         readonly.
26062
26063         (DefineDelegate): Renamed from Define. Does the same thing essentially,
26064         as TypeContainer::DefineType.
26065
26066         (Populate): Method in which all the definition of the various methods (Invoke)
26067         etc is done.
26068
26069         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
26070         see.
26071
26072         (CloseDelegate): Finally creates the delegate.
26073
26074         * class.cs (TypeContainer::DefineType): Update to define delegates.
26075         (Populate, Emit and CloseType): Do the same thing here too.
26076
26077         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
26078         delegates in all these operations.
26079
26080 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
26081
26082         * expression.cs: LocalTemporary: a new expression used to
26083         reference a temporary that has been created.
26084
26085         * assign.cs: Handle PropertyAccess back here, so that we can
26086         provide the proper semantic access to properties.
26087
26088         * expression.cs (Expression::ConvertReferenceExplicit): Implement
26089         a few more explicit conversions. 
26090
26091         * modifiers.cs: `NEW' modifier maps to HideBySig.
26092
26093         * expression.cs (PropertyExpr): Make this into an
26094         ExpressionStatement, and support the EmitStatement code path. 
26095
26096         Perform get/set error checking, clean up the interface.
26097
26098         * assign.cs: recognize PropertyExprs as targets, and if so, turn
26099         them into toplevel access objects.
26100
26101 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
26102
26103         * expression.cs: PropertyExpr::PropertyExpr: use work around the
26104         SRE.
26105
26106         * typemanager.cs: Keep track here of our PropertyBuilders again to
26107         work around lameness in SRE.
26108
26109 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
26110
26111         * expression.cs (LValue::LValueResolve): New method in the
26112         interface, used to perform a second resolution pass for LValues. 
26113
26114         (This::DoResolve): Catch the use of this in static methods.
26115
26116         (This::LValueResolve): Implement.
26117
26118         (This::Store): Remove warning, assigning to `this' in structures
26119         is 
26120
26121         (Invocation::Emit): Deal with invocation of
26122         methods on value types.  We need to pass the address to structure
26123         methods rather than the object itself.  (The equivalent code to
26124         emit "this" for structures leaves the entire structure on the
26125         stack instead of a pointer to it). 
26126
26127         (ParameterReference::DoResolve): Compute the real index for the
26128         argument based on whether the method takes or not a `this' pointer
26129         (ie, the method is static).
26130
26131         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
26132         value types returned from functions when we need to invoke a
26133         method on the sturcture.
26134
26135
26136 2001-10-11  Ravi Pratap  <ravi@ximian.com>
26137
26138         * class.cs (TypeContainer::DefineType): Method to actually do the business of
26139         defining the type in the Modulebuilder or Typebuilder. This is to take
26140         care of nested types which need to be defined on the TypeBuilder using
26141         DefineNestedMethod.
26142
26143         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
26144         methods in RootContext, only ported to be part of TypeContainer.
26145
26146         (TypeContainer::GetInterfaceOrClass): Ditto.
26147
26148         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
26149
26150         * interface.cs (Interface::DefineInterface): New method. Does exactly
26151         what RootContext.CreateInterface did earlier, only it takes care of nested types 
26152         too.
26153
26154         (Interface::GetInterfaces): Move from RootContext here and port.
26155
26156         (Interface::GetInterfaceByName): Same here.
26157
26158         * rootcontext.cs (ResolveTree): Re-write.
26159
26160         (PopulateTypes): Re-write.
26161
26162         * class.cs (TypeContainer::Populate): Populate nested types too.
26163         (TypeContainer::Emit): Emit nested members too.
26164
26165         * typemanager.cs (AddUserType): Do not make use of the FullName property,
26166         instead just use the name argument passed in as it is already fully
26167         qualified.
26168
26169         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
26170         to TypeContainer mapping to see if a type is user-defined.
26171
26172         * class.cs (TypeContainer::CloseType): Implement. 
26173
26174         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
26175         the default constructor.
26176
26177         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
26178         twice.
26179
26180         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
26181
26182         * interface.cs (CloseType): Create the type here.
26183
26184         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
26185         the hierarchy.
26186
26187         Remove all the methods which are now in TypeContainer.
26188
26189 2001-10-10  Ravi Pratap  <ravi@ximian.com>
26190
26191         * delegate.cs (Define): Re-write bits to define the delegate
26192         correctly.
26193
26194 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
26195
26196         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
26197
26198         * expression.cs (ImplicitReferenceConversion): handle null as well
26199         as a source to convert to any reference type.
26200
26201         * statement.cs (Return): Perform any implicit conversions to
26202         expected return type.  
26203
26204         Validate use of return statement.  
26205
26206         * codegen.cs (EmitContext): Pass the expected return type here.
26207
26208         * class.cs (Method, Constructor, Property): Pass expected return
26209         type to EmitContext.
26210
26211 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
26212
26213         * expression.cs: Make DoResolve take an EmitContext instead of a
26214         TypeContainer.
26215
26216         Replaced `l' and `location' for `loc', for consistency.
26217
26218         (Error, Warning): Remove unneeded Tc argument.
26219
26220         * assign.cs, literal.cs, constant.cs: Update to new calling
26221         convention. 
26222
26223         * codegen.cs: EmitContext now contains a flag indicating whether
26224         code is being generated in a static method or not.
26225
26226         * cs-parser.jay: DecomposeQI, new function that replaces the old
26227         QualifiedIdentifier.  Now we always decompose the assembled
26228         strings from qualified_identifier productions into a group of
26229         memberaccesses.
26230
26231 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
26232
26233         * rootcontext.cs: Deal with field-less struct types correctly now
26234         by passing the size option to Define Type.
26235
26236         * class.cs: Removed hack that created one static field. 
26237
26238 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26239
26240         * statement.cs: Moved most of the code generation here. 
26241
26242 2001-10-09  Ravi Pratap  <ravi@ximian.com>
26243
26244         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
26245         seem very right.
26246
26247         (ElementAccess): Remove useless bits for now - keep checks as the spec
26248         says.
26249
26250 2001-10-08  Ravi Pratap  <ravi@ximian.com>
26251
26252         * expression.cs (ElementAccess::DoResolve): Remove my crap code
26253         and start performing checks according to the spec.
26254
26255 2001-10-07  Ravi Pratap  <ravi@ximian.com>
26256
26257         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
26258         rank_specifiers instead.
26259
26260         (rank_specifiers): Change the order in which the rank specifiers are stored
26261
26262         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
26263
26264         * expression.cs (ElementAccess): Implement the LValue interface too.
26265
26266 2001-10-06  Ravi Pratap  <ravi@ximian.com>
26267
26268         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
26269         except that user defined conversions are not included.
26270
26271         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
26272         perform the conversion of the return type, if necessary.
26273
26274         (New::DoResolve): Check whether we are creating an array or an object
26275         and accordingly do the needful.
26276
26277         (New::Emit): Same here.
26278
26279         (New::DoResolve): Implement guts of array creation.
26280
26281         (New::FormLookupType): Helper function.
26282
26283 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26284
26285         * codegen.cs: Removed most of the code generation here, and move the
26286         corresponding code generation bits to the statement classes. 
26287
26288         Added support for try/catch/finalize and throw.
26289
26290         * cs-parser.jay: Added support for try/catch/finalize.
26291
26292         * class.cs: Catch static methods having the flags override,
26293         virtual or abstract.
26294
26295         * expression.cs (UserCast): This user cast was not really doing
26296         what it was supposed to do.  Which is to be born in fully resolved
26297         state.  Parts of the resolution were being performed at Emit time! 
26298
26299         Fixed this code.
26300
26301 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26302
26303         * expression.cs: Implicity convert the result from UserCast.
26304
26305 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26306
26307         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
26308         prevented it from working correctly. 
26309
26310         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
26311         merely ConvertImplicit.
26312
26313 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26314
26315         * typemanager.cs: Make the LookupTypeContainer function static,
26316         and not per-instance.  
26317
26318         * class.cs: Make static FindMembers (the one that takes a Type
26319         argument). 
26320
26321         * codegen.cs: Add EmitForeach here.
26322
26323         * cs-parser.jay: Make foreach a toplevel object instead of the
26324         inline expansion, as we need to perform semantic analysis on it. 
26325
26326 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26327
26328         * expression.cs (Expression::ImplicitUserConversion): Rename to
26329         UserDefinedConversion.
26330
26331         (Expression::UserDefinedConversion): Take an extra argument specifying 
26332         whether we look for explicit user conversions too.
26333
26334         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
26335
26336         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
26337
26338         (ExplicitUserConversion): Make it a call to UserDefinedConversion
26339         with the appropriate arguments.
26340
26341         * cs-parser.jay (cast_expression): Record location too.
26342
26343         * expression.cs (Cast): Record location info.
26344
26345         (Expression::ConvertExplicit): Take location argument.
26346
26347         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
26348         to determine if we are doing explicit conversions.
26349
26350         (UserCast::Emit): Update accordingly.
26351
26352         (Expression::ConvertExplicit): Report an error if everything fails.
26353
26354         * ../errors/cs0030.cs : Add.
26355
26356 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
26357
26358         * modifiers.cs: If the ABSTRACT keyword is present, also set the
26359         virtual and newslot bits. 
26360
26361         * class.cs (TypeContainer::RegisterRequiredImplementations):
26362         Record methods we need.
26363
26364         (TypeContainer::MakeKey): Helper function to make keys for
26365         MethodBases, since the Methodbase key is useless.
26366
26367         (TypeContainer::Populate): Call RegisterRequiredImplementations
26368         before defining the methods.   
26369
26370         Create a mapping for method_builders_to_methods ahead of time
26371         instead of inside a tight loop.
26372
26373         (::RequireMethods):  Accept an object as the data to set into the
26374         hashtable so we can report interface vs abstract method mismatch.
26375
26376 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26377
26378         * report.cs: Make all of it static.
26379
26380         * rootcontext.cs: Drop object_type and value_type computations, as
26381         we have those in the TypeManager anyways.
26382
26383         Drop report instance variable too, now it is a global.
26384
26385         * driver.cs: Use try/catch on command line handling.
26386
26387         Add --probe option to debug the error reporting system with a test
26388         suite. 
26389
26390         * report.cs: Add support for exiting program when a probe
26391         condition is reached.
26392
26393 2001-10-03  Ravi Pratap  <ravi@ximian.com>
26394
26395         * expression.cs (Binary::DoNumericPromotions): Fix the case when
26396         we do a forcible conversion regardless of type, to check if 
26397         ForceConversion returns a null.
26398
26399         (Binary::error19): Use location to report error.
26400
26401         (Unary::error23): Use location here too.
26402
26403         * ../errors/cs0019.cs : Check in.
26404
26405         * ../errors/cs0023.cs : Check in.
26406
26407         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
26408         case of a non-null MethodInfo object with a length of 0 !
26409
26410         (Binary::ResolveOperator): Flag error if overload resolution fails to find
26411         an applicable member - according to the spec :-)
26412         Also fix logic to find members in base types.
26413
26414         (Unary::ResolveOperator): Same here.
26415
26416         (Unary::report23): Change name to error23 and make first argument a TypeContainer
26417         as I was getting thoroughly confused between this and error19 :-)
26418
26419         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
26420         (::FindMostEncompassedType): Implement.
26421         (::FindMostEncompassingType): Implement.
26422         (::StandardConversionExists): Implement.
26423
26424         (UserImplicitCast): Re-vamp. We now need info about most specific
26425         source and target types so that we can do the necessary conversions.
26426
26427         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
26428         mathematical union with no duplicates.
26429
26430 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26431
26432         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
26433         in order from base classes to child classes, so that we can in
26434         child classes look up in our parent for method names and
26435         attributes (required for handling abstract, virtual, new, override
26436         constructs: we need to instrospect our base class, and if we dont
26437         populate the classes in order, the introspection might be
26438         incorrect.  For example, a method could query its parent before
26439         the parent has any methods and would determine that the parent has
26440         no abstract methods (while it could have had them)).
26441
26442         (RootContext::CreateType): Record the order in which we define the
26443         classes.
26444
26445 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
26446
26447         * class.cs (TypeContainer::Populate): Also method definitions can
26448         fail now, keep track of this.
26449
26450         (TypeContainer::FindMembers): Implement support for
26451         DeclaredOnly/noDeclaredOnly flag.
26452
26453         (Constructor::Emit) Return the ConstructorBuilder.
26454
26455         (Method::Emit) Return the MethodBuilder. 
26456         Check for abstract or virtual methods to be public.
26457
26458         * rootcontext.cs (RootContext::CreateType): Register all the
26459         abstract methods required for the class to be complete and the
26460         interface methods that must be implemented. 
26461
26462         * cs-parser.jay: Report error 501 (method requires body if it is
26463         not marked abstract or extern).
26464
26465         * expression.cs (TypeOf::Emit): Implement.
26466
26467         * typemanager.cs: runtime_handle_type, new global type.
26468
26469         * class.cs (Property::Emit): Generate code for properties.
26470
26471 2001-10-02  Ravi Pratap  <ravi@ximian.com>
26472
26473         * expression.cs (Unary::ResolveOperator): Find operators on base type
26474         too - we now conform exactly to the spec.
26475
26476         (Binary::ResolveOperator): Same here.
26477
26478         * class.cs (Operator::Define): Fix minor quirk in the tests.
26479
26480         * ../errors/cs0215.cs : Added.
26481
26482         * ../errors/cs0556.cs : Added.
26483
26484         * ../errors/cs0555.cs : Added.
26485
26486 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26487
26488         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
26489         single integer which is really efficient
26490
26491 2001-10-01  Ravi Pratap  <ravi@ximian.com>
26492
26493         *  expression.cs (Expression::ImplicitUserConversion): Use location
26494         even in the case when we are examining True operators.
26495  
26496         * class.cs (Operator::Define): Perform extensive checks to conform
26497         with the rules for operator overloading in the spec.
26498
26499         * expression.cs (Expression::ImplicitReferenceConversion): Implement
26500         some of the other conversions mentioned in the spec.
26501
26502         * typemanager.cs (array_type): New static member for the System.Array built-in
26503         type.
26504
26505         (cloneable_interface): For System.ICloneable interface.
26506
26507         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
26508         we start resolving the tree and populating types.
26509
26510         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
26511  
26512 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26513
26514         * expression.cs (Expression::ExprClassFromMemberInfo,
26515         Expression::Literalize): Create literal expressions from
26516         FieldInfos which are literals.
26517
26518         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
26519         type casts, because they were wrong.  The test suite in tests
26520         caught these ones.
26521
26522         (ImplicitNumericConversion): ushort to ulong requires a widening
26523         cast. 
26524
26525         Int32 constant to long requires widening cast as well.
26526
26527         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
26528         for integers because the type on the stack is not i4.
26529
26530 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
26531
26532         * expression.cs (report118): require location argument. 
26533
26534         * parameter.cs: Do not dereference potential null value.
26535
26536         * class.cs: Catch methods that lack the `new' keyword when
26537         overriding a name.  Report warnings when `new' is used without
26538         anything being there to override.
26539
26540         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
26541
26542         * class.cs: Only add constructor to hashtable if it is non-null
26543         (as now constructors can fail on define).
26544
26545         (TypeManager, Class, Struct): Take location arguments.
26546
26547         Catch field instance initialization in structs as errors.
26548
26549         accepting_filter: a new filter for FindMembers that is static so
26550         that we dont create an instance per invocation.
26551
26552         (Constructor::Define): Catch errors where a struct constructor is
26553         parameterless 
26554
26555         * cs-parser.jay: Pass location information for various new
26556         constructs. 
26557
26558         * delegate.cs (Delegate): take a location argument.
26559
26560         * driver.cs: Do not call EmitCode if there were problesm in the
26561         Definition of the types, as many Builders wont be there. 
26562
26563         * decl.cs (Decl::Decl): Require a location argument.
26564
26565         * cs-tokenizer.cs: Handle properly hex constants that can not fit
26566         into integers, and find the most appropiate integer for it.
26567
26568         * literal.cs: Implement ULongLiteral.
26569
26570         * rootcontext.cs: Provide better information about the location of
26571         failure when CreateType fails.
26572
26573 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
26574
26575         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
26576         as well.
26577
26578         * expression.cs (Binary::CheckShiftArguments): Add missing type
26579         computation.
26580         (Binary::ResolveOperator): Add type to the logical and and logical
26581         or, Bitwise And/Or and Exclusive Or code paths, it was missing
26582         before.
26583
26584         (Binary::DoNumericPromotions): In the case where either argument
26585         is ulong (and most signed types combined with ulong cause an
26586         error) perform implicit integer constant conversions as well.
26587
26588 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26589
26590         * expression.cs (UserImplicitCast): Method should always be
26591         non-null. 
26592         (Invocation::BetterConversion): Simplified test for IntLiteral.
26593
26594         (Expression::ImplicitNumericConversion): Split this routine out.
26595         Put the code that performs implicit constant integer conversions
26596         here. 
26597
26598         (Expression::Resolve): Become a wrapper around DoResolve so we can
26599         check eclass and type being set after resolve.
26600
26601         (Invocation::Badness): Remove this dead function
26602
26603         (Binary::ResolveOperator): Do not compute the expensive argumnets
26604         unless we have a union for it.
26605
26606         (Probe::Emit): Is needs to do an isinst and then
26607         compare against null.
26608
26609         (::CanConvert): Added Location argument.  If the Location argument
26610         is null (Location.Null), then we do not report errors.  This is
26611         used by the `probe' mechanism of the Explicit conversion.  We do
26612         not want to generate an error for something that the user
26613         explicitly requested to be casted.  But the pipeline for an
26614         explicit cast first tests for potential implicit casts.
26615
26616         So for now, if the Location is null, it means `Probe only' to
26617         avoid adding another argument.   Might have to revise this
26618         strategy later.
26619
26620         (ClassCast): New class used to type cast objects into arbitrary
26621         classes (used in Explicit Reference Conversions).
26622
26623         Implement `as' as well.
26624
26625         Reverted all the patches from Ravi below: they were broken:
26626
26627                 * The use of `level' as a mechanism to stop recursive
26628                   invocations is wrong.  That was there just to catch the
26629                   bug with a strack trace but not as a way of addressing
26630                   the problem.
26631
26632                   To fix the problem we have to *understand* what is going
26633                   on and the interactions and come up with a plan, not
26634                   just get things going.
26635
26636                 * The use of the type conversion cache that I proposed
26637                   last night had an open topic: How does this work across
26638                   protection domains.  A user defined conversion might not
26639                   be public in the location where we are applying the
26640                   conversion, a different conversion might be selected
26641                   (ie, private A->B (better) but public B->A (worse),
26642                   inside A, A->B applies, but outside it, B->A will
26643                   apply).
26644
26645                 * On top of that (ie, even if the above is solved),
26646                   conversions in a cache need to be abstract.  Ie, `To
26647                   convert from an Int to a Short use an OpcodeCast', not
26648                   `To convert from an Int to a Short use the OpcodeCast on
26649                   the variable 5' (which is what this patch was doing).
26650
26651 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26652
26653         * expression.cs (Invocation::ConversionExists): Re-write to use
26654         the conversion cache
26655
26656         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
26657         cache all conversions done, not just user-defined ones.
26658
26659         (Invocation::BetterConversion): The real culprit. Use ConversionExists
26660         to determine if a conversion exists instead of acutually trying to 
26661         perform the conversion. It's faster too.
26662
26663         (Expression::ConvertExplicit): Modify to use ConversionExists to check
26664         and only then attempt the implicit conversion.
26665
26666 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26667
26668         * expression.cs (ConvertImplicit): Use a cache for conversions
26669         already found. Check level of recursion and bail out if necessary.
26670
26671 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26672
26673         * typemanager.cs (string_concat_string_string, string_concat_object_object):
26674         Export standard methods that we expect for string operations.
26675
26676         * statement.cs (Block::UsageWarning): Track usage of variables and
26677         report the errors for not used variables.
26678
26679         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
26680         operator. 
26681
26682 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26683
26684         * codegen.cs: remove unnneded code 
26685
26686         * expression.cs: Removed BuiltinTypeAccess class
26687
26688         Fix the order in which implicit conversions are
26689         done.  
26690
26691         The previous fixed dropped support for boxed conversions (adding a
26692         test to the test suite now)
26693
26694         (UserImplicitCast::CanConvert): Remove test for source being null,
26695         that code is broken.  We should not feed a null to begin with, if
26696         we do, then we should track the bug where the problem originates
26697         and not try to cover it up here.
26698
26699         Return a resolved expression of type UserImplicitCast on success
26700         rather than true/false.  Ravi: this is what I was talking about,
26701         the pattern is to use a static method as a "constructor" for
26702         objects. 
26703
26704         Also, do not create arguments until the very last minute,
26705         otherwise we always create the arguments even for lookups that
26706         will never be performed. 
26707
26708         (UserImplicitCast::Resolve): Eliminate, objects of type
26709         UserImplicitCast are born in a fully resolved state. 
26710
26711         * typemanager.cs (InitCoreTypes): Init also value_type
26712         (System.ValueType). 
26713
26714         * expression.cs (Cast::Resolve): First resolve the child expression.
26715
26716         (LValue): Add new method AddressOf to be used by
26717         the `&' operator.  
26718
26719         Change the argument of Store to take an EmitContext instead of an
26720         ILGenerator, because things like FieldExpr need to be able to call
26721         their children expression to generate the instance code. 
26722
26723         (Expression::Error, Expression::Warning): Sugar functions for
26724         reporting errors.
26725
26726         (Expression::MemberLookup): Accept a TypeContainer instead of a
26727         Report as the first argument.
26728
26729         (Expression::ResolvePrimary): Killed.  I still want to improve
26730         this as currently the code is just not right.
26731
26732         (Expression::ResolveMemberAccess): Simplify, but it is still
26733         wrong. 
26734
26735         (Unary::Resolve): Catch errors in AddressOf operators.
26736
26737         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
26738         index to a byte for the short-version, or the compiler will choose
26739         the wrong Emit call, which generates the wrong data.
26740
26741         (ParameterReference::Emit, ::Store): same.
26742
26743         (FieldExpr::AddressOf): Implement.
26744
26745         * typemanager.cs: TypeManager: made public variable instead of
26746         property.
26747
26748         * driver.cs: document --fatal.
26749
26750         * report.cs (ErrorMessage, WarningMessage): new names for the old
26751         Error and Warning classes.
26752
26753         * cs-parser.jay (member_access): Turn built-in access to types
26754         into a normal simplename
26755
26756 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26757
26758         * expression.cs (Invocation::BetterConversion): Fix to cope
26759         with q being null, since this was introducing a bug.
26760
26761         * expression.cs (ConvertImplicit): Do built-in conversions first.
26762
26763 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26764
26765         * expression.cs (UserImplicitCast::Resolve): Fix bug.
26766
26767 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26768
26769         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
26770         I had introduced long ago (what's new ?).
26771
26772         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
26773         the work of all the checking. 
26774         (ConvertImplicit): Call CanConvert and only then create object if necessary.
26775         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
26776
26777         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
26778         that is the right way. 
26779
26780         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
26781         overloading resolution. Use everywhere instead of cutting and pasting code.
26782
26783         (Binary::ResolveOperator): Use MakeUnionSet.
26784
26785         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
26786         we have to convert to bool types. Not complete yet.
26787
26788 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26789
26790         * typemanager.cs (TypeManager::CSharpName): support ushort.
26791
26792         * expression.cs (Expression::TryImplicitIntConversion): Attempts
26793         to provide an expression that performsn an implicit constant int
26794         conversion (section 6.1.6).
26795         (Expression::ConvertImplicitRequired): Reworked to include
26796         implicit constant expression conversions.
26797
26798         (Expression::ConvertNumericExplicit): Finished.
26799
26800         (Invocation::Emit): If InstanceExpression is null, then it means
26801         that we perform a call on this.
26802
26803 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26804
26805         * expression.cs (Unary::Emit): Remove some dead code.
26806         (Probe): Implement Resolve and Emit for `is'.
26807         (Expression::ConvertImplicitRequired): Attempt to do constant
26808         expression conversions here.  Maybe should be moved to
26809         ConvertImplicit, but I am not sure.
26810         (Expression::ImplicitLongConstantConversionPossible,
26811         Expression::ImplicitIntConstantConversionPossible): New functions
26812         that tell whether is it possible to apply an implicit constant
26813         expression conversion.
26814
26815         (ConvertNumericExplicit): Started work on explicit numeric
26816         conversions.
26817
26818         * cs-parser.jay: Update operator constants.
26819
26820         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
26821         (Parameters::GetSignature): Hook up VerifyArgs here.
26822         (Parameters::VerifyArgs): Verifies that no two arguments have the
26823         same name. 
26824
26825         * class.cs (Operator): Update the operator names to reflect the
26826         ones that the spec expects (as we are just stringizing the
26827         operator names).
26828
26829         * expression.cs (Unary::ResolveOperator): Fix bug: Use
26830         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
26831         previous usage did only work for our methods.
26832         (Expression::ConvertImplicit): Handle decimal implicit numeric
26833         conversions as well.
26834         (Expression::InternalTypeConstructor): Used to invoke constructors
26835         on internal types for default promotions.
26836
26837         (Unary::Emit): Implement special handling for the pre/post
26838         increment/decrement for overloaded operators, as they need to have
26839         the same semantics as the other operators.
26840
26841         (Binary::ResolveOperator): ditto.
26842         (Invocation::ConversionExists): ditto.
26843         (UserImplicitCast::Resolve): ditto.
26844
26845 2001-09-26  Ravi Pratap  <ravi@ximian.com>
26846
26847         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
26848         operator, return after emitting body. Regression tests pass again !
26849
26850         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
26851         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
26852         (Invocation::OverloadResolve): Ditto.
26853         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
26854
26855         * everywhere : update calls to the above methods accordingly.
26856
26857 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26858
26859         * assign.cs (Assign): Make it inherit from ExpressionStatement.
26860
26861         * expression.cs (ExpressionStatement): New base class used for
26862         expressions that can appear in statements, so that we can provide
26863         an alternate path to generate expression that do not leave a value
26864         on the stack.
26865
26866         (Expression::Emit, and all the derivatives): We no longer return
26867         whether a value is left on the stack or not.  Every expression
26868         after being emitted leaves a single value on the stack.
26869
26870         * codegen.cs (EmitContext::EmitStatementExpression): Use the
26871         facilties of ExpressionStatement if possible.
26872
26873         * cs-parser.jay: Update statement_expression.
26874
26875 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
26876
26877         * driver.cs: Change the wording of message
26878
26879 2001-09-25  Ravi Pratap  <ravi@ximian.com>
26880
26881         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
26882         the type of the expression to the return type of the method if
26883         we have an overloaded operator match ! The regression tests pass again !
26884         (Unary::ResolveOperator): Ditto.
26885
26886         * expression.cs (Invocation::ConversionExists): Correct the member lookup
26887         to find "op_Implicit", not "implicit" ;-)
26888         (UserImplicitCast): New class to take care of user-defined implicit conversions.
26889         (ConvertImplicit, ForceConversion): Take TypeContainer argument
26890
26891         * everywhere : Correct calls to the above accordingly.
26892
26893         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
26894         (ConvertImplicit): Do user-defined conversion if it exists.
26895
26896 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
26897
26898         * assign.cs: track location.
26899         (Resolve): Use implicit conversions on assignment.
26900
26901         * literal.cs: Oops.  Not good, Emit of short access values should
26902         pass (Bytes) or the wrong argument will be selected.
26903
26904         * expression.cs (Unary::Emit): Emit code for -expr.
26905
26906         (Unary::ResolveOperator): Handle `Substract' for non-constants
26907         (substract from zero from the non-constants).
26908         Deal with Doubles as well. 
26909
26910         (Expression::ConvertImplicitRequired): New routine that reports an
26911         error if no implicit conversion exists. 
26912
26913         (Invocation::OverloadResolve): Store the converted implicit
26914         expressions if we make them
26915
26916 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26917
26918         * class.cs (ConstructorInitializer): Take a Location argument.
26919         (ConstructorBaseInitializer): Same here.
26920         (ConstructorThisInitializer): Same here.
26921
26922         * cs-parser.jay : Update all calls accordingly.
26923
26924         * expression.cs (Unary, Binary, New): Take location argument.
26925         Update accordingly everywhere.
26926
26927         * cs-parser.jay : Update all calls to the above to take a location
26928         argument.
26929
26930         * class.cs : Ditto.
26931
26932 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26933
26934         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
26935         (Invocation::BetterConversion): Same here
26936         (Invocation::ConversionExists): Ditto.
26937
26938         (Invocation::ConversionExists): Implement.
26939
26940 2001-09-22  Ravi Pratap  <ravi@ximian.com>
26941
26942         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
26943         Also take an additional TypeContainer argument.
26944
26945         * All over : Pass in TypeContainer as argument to OverloadResolve.
26946
26947         * typemanager.cs (CSharpName): Update to check for the string type and return
26948         that too.
26949
26950         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
26951         a given method.
26952
26953 2001-09-21  Ravi Pratap  <ravi@ximian.com>
26954
26955         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
26956         (Invocation::BetterFunction): Implement.
26957         (Invocation::BetterConversion): Implement.
26958         (Invocation::ConversionExists): Skeleton, no implementation yet.
26959
26960         Okay, things work fine !
26961
26962 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
26963
26964         * typemanager.cs: declare and load enum_type, delegate_type and
26965         void_type. 
26966
26967         * expression.cs (Expression::Emit): Now emit returns a value that
26968         tells whether a value is left on the stack or not.  This strategy
26969         might be reveted tomorrow with a mechanism that would address
26970         multiple assignments.
26971         (Expression::report118): Utility routine to report mismatches on
26972         the ExprClass.
26973
26974         (Unary::Report23): Report impossible type/operator combination
26975         utility function.
26976
26977         (Unary::IsIncrementableNumber): Whether the type can be
26978         incremented or decremented with add.
26979         (Unary::ResolveOperator): Also allow enumerations to be bitwise
26980         complemented. 
26981         (Unary::ResolveOperator): Implement ++, !, ~,
26982
26983         (Invocation::Emit): Deal with new Emit convetion.
26984
26985         * All Expression derivatives: Updated their Emit method to return
26986         whether they leave values on the stack or not.
26987
26988         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
26989         stack for expressions that are statements. 
26990
26991 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26992
26993         * expression.cs (LValue): New interface.  Must be implemented by
26994         LValue objects.
26995         (LocalVariableReference, ParameterReference, FieldExpr): Implement
26996         LValue interface.
26997
26998         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
26999         interface for generating code, simplifies the code.
27000
27001 2001-09-20  Ravi Pratap  <ravi@ximian.com>
27002
27003         * expression.cs (everywhere): Comment out return statements in ::Resolve
27004         methods to avoid the warnings.
27005
27006 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
27007
27008         * driver.cs (parse): Report error 2001 if we can not open the
27009         source file.
27010
27011         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
27012         not resolve it.
27013
27014         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
27015         object. 
27016
27017         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
27018         otherwise nested blocks end up with the same index.
27019
27020         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
27021
27022         * expression.cs:  Instead of having FIXMEs in the Resolve
27023         functions, throw exceptions so it is obvious that we are facing a
27024         bug. 
27025
27026         * cs-parser.jay (invocation_expression): Pass Location information.
27027
27028         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
27029         Use a basename for those routines because .NET does not like paths
27030         on them. 
27031
27032         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
27033         already defined.
27034
27035 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
27036
27037         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
27038         are loading the correct data types (throws an exception if not).
27039         (TypeManager::InitCoreTypes): Use CoreLookupType
27040
27041         * expression.cs (Unary::ResolveOperator): return the child
27042         expression for expressions which are just +expr.
27043         (Unary::ResolveOperator): Return negative literals for -LITERAL
27044         expressions (otherwise they are Unary {Literal}).
27045         (Invocation::Badness): Take into account `Implicit constant
27046         expression conversions'.
27047
27048         * literal.cs (LongLiteral): Implement long literal class.
27049         (IntLiteral): export the `Value' of the intliteral. 
27050
27051 2001-09-19  Ravi Pratap  <ravi@ximian.com>
27052
27053         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
27054
27055         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
27056         instead of 'Operator'
27057
27058         * expression.cs (Binary::ResolveOperator): Update accordingly.
27059         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
27060         and 'Minus'
27061
27062         * cs-parser.jay (unary_expression): Update to use the new names.
27063
27064         * gen-treedump.cs (GetUnary): Same here.
27065
27066         * expression.cs (Unary::Resolve): Implement.
27067         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
27068         operators are found instead of making noise ;-)
27069         (Unary::ResolveOperator): New method to do precisely the same thing which
27070         Binary::ResolveOperator does for Binary expressions.
27071         (Unary.method, .Arguments): Add.
27072         (Unary::OperName): Implement.   
27073         (Unary::ForceConversion): Copy and Paste !
27074
27075         * class.cs (Operator::Define): Fix a small bug for the case when we have 
27076         a unary operator.
27077
27078         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
27079         for the inbuilt operators. Only overloading works for now ;-)
27080
27081 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
27082
27083         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
27084         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
27085
27086         * expression.cs (This::Emit): Implement. 
27087         (This::Resolve): Implement.
27088         (TypeOf:Resolve): Implement.
27089         (Expression::ResolveSimpleName): Add an implicit this to instance
27090         field references. 
27091         (MemberAccess::Resolve): Deal with Parameters and Fields. 
27092         Bind instance variable to Field expressions.
27093         (FieldExpr::Instance): New field used to track the expression that
27094         represents the object instance.
27095         (FieldExpr::Resolve): Track potential errors from MemberLookup not
27096         binding 
27097         (FieldExpr::Emit): Implement.
27098
27099         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
27100         the last instruction contains a return opcode to avoid generating
27101         the last `ret' instruction (this generates correct code, and it is
27102         nice to pass the peverify output).
27103
27104         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
27105         initializer for static and instance variables.
27106         (Constructor::Emit): Allow initializer to be null in the case of
27107         static constructors.  Only emit initializer for instance
27108         constructors. 
27109
27110         (TypeContainer::FindMembers): Return a null array if there are no
27111         matches.
27112
27113         Also fix the code for the MemberTypes.Method branch, as it was not
27114         scanning that for operators (or tried to access null variables before).
27115
27116         * assign.cs (Assign::Emit): Handle instance and static fields. 
27117
27118         * TODO: Updated.
27119
27120         * driver.cs: Stop compilation if there are parse errors.
27121
27122         * cs-parser.jay (constructor_declaration): Provide default base
27123         initializer for non-static constructors.
27124         (constructor_declarator): Do not provide a default base
27125         initializers if none was specified.
27126         Catch the fact that constructors should not have parameters.
27127
27128         * class.cs: Do not emit parent class initializers for static
27129         constructors, that should be flagged as an error.
27130
27131 2001-09-18  Ravi Pratap  <ravi@ximian.com>
27132
27133         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
27134         Move back code into TypeContainer::Populate.
27135
27136 2001-09-18  Ravi Pratap  <ravi@ximian.com>
27137
27138         * class.cs (TypeContainer::AddConstructor): Fix the check to
27139         compare against Name, not Basename. 
27140         (Operator::OpType): Change Plus and Minus to Add and Subtract.
27141
27142         * cs-parser.jay : Update accordingly.
27143
27144         * class.cs (TypeContainer::FindMembers): For the case where we are searching
27145         for methods, don't forget to look into the operators too.
27146         (RegisterMethodBuilder): Helper method to take care of this for
27147         methods, constructors and operators.
27148         (Operator::Define): Completely revamp.
27149         (Operator.OperatorMethod, MethodName): New fields.
27150         (TypeContainer::Populate): Move the registering of builders into
27151         RegisterMethodBuilder.
27152         (Operator::Emit): Re-write.
27153
27154         * expression.cs (Binary::Emit): Comment out code path to emit method
27155         invocation stuff for the case when we have a user defined operator. I am
27156         just not able to get it right !
27157
27158 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
27159
27160         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
27161         argument. 
27162
27163         (Expression::MemberLookup): Provide a version that allows to
27164         specify the MemberTypes and BindingFlags. 
27165
27166         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
27167         so it was not fetching variable information from outer blocks.
27168
27169         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
27170         Beforefieldinit as it was buggy.
27171
27172         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
27173         that Ravi put here.  
27174
27175         * class.cs (Constructor::Emit): Only emit if block is not null.
27176         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
27177         deal with this by semantically definining it as if the user had
27178         done it.
27179
27180         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
27181         constructors as we now "emit" them at a higher level.
27182
27183         (TypeContainer::DefineDefaultConstructor): Used to define the
27184         default constructors if none was provided.
27185
27186         (ConstructorInitializer): Add methods Resolve and Emit. 
27187
27188         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
27189
27190 2001-09-17  Ravi Pratap  <ravi@ximian.com>
27191
27192         * class.cs (TypeContainer::EmitDefaultConstructor): Register
27193         the default constructor builder with our hashtable for methodbuilders
27194         to methodcores.
27195
27196         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
27197         and argument_count is 0 in which case we have a match.
27198         (Binary::ResolveOperator): More null checking and miscellaneous coding
27199         style cleanup.
27200
27201 2001-09-17  Ravi Pratap  <ravi@ximian.com>
27202
27203         * rootcontext.cs (IsNameSpace): Compare against null.
27204
27205         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
27206
27207         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
27208         and Unary::Operator.
27209
27210         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
27211         accordingly.
27212
27213         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
27214         we have overloaded operators.
27215         (Binary::ResolveOperator): Implement the part which does the operator overload
27216         resolution.
27217
27218         * class.cs (Operator::Emit): Implement.
27219         (TypeContainer::Emit): Emit the operators we have too.
27220
27221         * expression.cs (Binary::Emit): Update to emit the appropriate code for
27222         the case when we have a user-defined operator.
27223
27224 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
27225
27226         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
27227
27228 2001-09-16  Ravi Pratap  <ravi@ximian.com>
27229
27230         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
27231         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
27232         (Constructor::Emit): Implement.
27233         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
27234         if we have no work to do. 
27235         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
27236         Emit method.
27237
27238         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
27239         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
27240
27241         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
27242         of parent.parent.
27243
27244 2001-09-15  Ravi Pratap  <ravi@ximian.com>
27245
27246         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
27247         in the source.
27248         (Tree::RecordNamespace): Method to do what the name says ;-)
27249         (Tree::Namespaces): Property to get at the namespaces hashtable.
27250
27251         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
27252         keep track.
27253
27254         * rootcontext.cs (IsNamespace): Fixed it :-)
27255
27256 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27257
27258         * class.cs (TypeContainer::FindMembers): Add support for
27259         constructors. 
27260         (MethodCore): New class that encapsulates both the shared aspects
27261         of a Constructor and a Method.  
27262         (Method, Constructor): Factored pieces into MethodCore.
27263
27264         * driver.cs: Added --fatal which makes errors throw exceptions.
27265         Load System assembly as well as part of the standard library.
27266
27267         * report.cs: Allow throwing exceptions on errors for debugging.
27268
27269         * modifiers.cs: Do not use `parent', instead use the real type
27270         container to evaluate permission settings.
27271
27272         * class.cs: Put Ravi's patch back in.  He is right, and we will
27273         have to cope with the
27274
27275 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27276
27277         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
27278         FamORAssem, not FamANDAssem.
27279
27280 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27281
27282         * driver.cs: Added --parse option that only parses its input files
27283         and terminates.
27284
27285         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
27286         incorrect.  IsTopLevel is not used to tell whether an object is
27287         root_types or not (that can be achieved by testing this ==
27288         root_types).  But to see if this is a top-level *class* (not
27289         necessarly our "toplevel" container). 
27290
27291 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27292
27293         * enum.cs (Enum::Define): Modify to call the Lookup method on the
27294         parent instead of a direct call to GetType.
27295
27296 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27297
27298         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
27299         Modifiers.TypeAttr. This should just be a call to that method.
27300
27301         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
27302         object so that we can determine if we are top-level or not.
27303
27304         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
27305         TypeContainer too.
27306
27307         * enum.cs (Enum::Define): Ditto.
27308
27309         * modifiers.cs (FieldAttr): Re-write.
27310
27311         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
27312         (TypeContainer::HaveStaticConstructor): New property to provide access
27313         to precisely that info.
27314
27315         * modifiers.cs (MethodAttr): Re-write.
27316         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
27317
27318         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
27319         of top-level types as claimed.
27320
27321 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27322
27323         * expression.cs (MemberLookup): Fruitless attempt to lookup
27324         constructors.  Maybe I need to emit default constructors?  That
27325         might be it (currently .NET emits this for me automatically).
27326         (Invocation::OverloadResolve): Cope with Arguments == null.
27327         (Invocation::EmitArguments): new function, shared by the new
27328         constructor and us.
27329         (Invocation::Emit): Handle static and instance methods.  Emit
27330         proper call instruction for virtual or non-virtual invocations.
27331         (New::Emit): Implement.
27332         (New::Resolve): Implement.
27333         (MemberAccess:Resolve): Implement.
27334         (MethodGroupExpr::InstanceExpression): used conforming to the spec
27335         to track instances.
27336         (FieldExpr::Resolve): Set type.
27337
27338         * support.cs: Handle empty arguments.
27339                 
27340         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
27341         SimpleLookup): Auxiliary routines to help parse a qualifier
27342         identifier.  
27343
27344         Update qualifier_identifier rule.
27345
27346         * codegen.cs: Removed debugging messages.
27347
27348         * class.cs: Make this a global thing, this acts just as a "key" to
27349         objects that we might have around.
27350
27351         (Populate): Only initialize method_builders_to_methods once.
27352
27353         * expression.cs (PropertyExpr): Initialize type from the
27354         PropertyType. 
27355
27356         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
27357         Resolve pattern.  Attempt to implicitly convert value to boolean.
27358         Emit code.
27359
27360         * expression.cs: Set the type for the int32/int32 argument case.
27361         (Binary::ResolveOperator): Set the return type to boolean for
27362         comparission operators
27363
27364         * typemanager.cs: Remove debugging print code.
27365
27366         (Invocation::Resolve): resolve type.
27367
27368         * class.cs: Allocate a MemberInfo of the correct size, as the code
27369         elsewhere depends on the test to reflect the correct contents.
27370
27371         (Method::) Keep track of parameters, due to System.Reflection holes
27372
27373         (TypeContainer::Populate): Keep track of MethodBuilders to Method
27374         mapping here.
27375
27376         (TypeContainer::FindMembers): Use ArrayList and then copy an array
27377         of the exact size and return that.
27378
27379         (Class::LookupMethodByBuilder): New function that maps
27380         MethodBuilders to its methods.  Required to locate the information
27381         on methods because System.Reflection bit us again.
27382
27383         * support.cs: New file, contains an interface ParameterData and
27384         two implementations: ReflectionParameters and InternalParameters
27385         used to access Parameter information.  We will need to grow this
27386         as required.
27387
27388         * expression.cs (Invocation::GetParameterData): implement a cache
27389         and a wrapper around the ParameterData creation for methods. 
27390         (Invocation::OverloadResolve): Use new code.
27391
27392 2001-09-13  Ravi Pratap  <ravi@ximian.com>
27393
27394         * class.cs (TypeContainer::EmitField): Remove and move into 
27395         (Field::Define): here and modify accordingly.
27396         (Field.FieldBuilder): New member.
27397         (TypeContainer::Populate): Update accordingly.
27398         (TypeContainer::FindMembers): Implement.
27399
27400 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27401
27402         * statement.cs: (VariableInfo::VariableType): New field to be
27403         initialized with the full type once it is resolved. 
27404
27405 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
27406
27407         * parameter.cs (GetParameterInfo): Use a type cache to compute
27408         things only once, and to reuse this information
27409
27410         * expression.cs (LocalVariableReference::Emit): Implement.
27411         (OpcodeCast::Emit): fix.
27412
27413         (ParameterReference::Resolve): Implement.
27414         (ParameterReference::Emit): Implement.
27415
27416         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
27417         that are expressions need to stay as Expressions.
27418
27419         * typemanager.cs (CSharpName): Returns the C# name of a type if
27420         possible. 
27421
27422         * expression.cs (Expression::ConvertImplicit): New function that
27423         implements implicit type conversions.
27424
27425         (Expression::ImplicitReferenceConversion): Implements implicit
27426         reference conversions.
27427
27428         (EmptyCast): New type for transparent casts.
27429
27430         (OpcodeCast): New type for casts of types that are performed with
27431         a sequence of bytecodes.
27432
27433         (BoxedCast): New type used for casting value types into reference
27434         types.  Emits a box opcode.
27435
27436         (Binary::DoNumericPromotions): Implements numeric promotions of
27437         and computation of the Binary::Type.
27438
27439         (Binary::EmitBranchable): Optimization.
27440
27441         (Binary::Emit): Implement code emission for expressions.
27442
27443         * typemanager.cs (TypeManager): Added two new core types: sbyte
27444         and byte.
27445
27446 2001-09-12  Ravi Pratap  <ravi@ximian.com>
27447
27448         * class.cs (TypeContainer::FindMembers): Method which does exactly
27449         what Type.FindMembers does, only we don't have to use reflection. No
27450         implementation yet.
27451
27452         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
27453         typecontainer objects as we need to get at them.
27454         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
27455
27456         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
27457         typecontainer object.
27458
27459         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
27460         of just a Report object.
27461
27462 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27463
27464         * class.cs (Event::Define): Go back to using the prefixes "add_" and
27465         "remove_"
27466         (TypeContainer::Populate): Now define the delegates of the type too.
27467         (TypeContainer.Delegates): Property to access the list of delegates defined
27468         in the type.
27469
27470         * delegates.cs (Delegate::Define): Implement partially.
27471
27472         * modifiers.cs (TypeAttr): Handle more flags.
27473
27474 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27475
27476         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
27477         and not <=
27478         (Operator::Define): Re-write logic to get types by using the LookupType method
27479         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
27480         (Indexer::Define): Ditto.
27481         (Event::Define): Ditto.
27482         (Property::Define): Ditto.
27483
27484 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27485
27486         * class.cs (TypeContainer::Populate): Now define operators too. 
27487         (TypeContainer.Operators): New property to access the list of operators
27488         in a type.
27489         (Operator.OperatorMethodBuilder): New member to hold the method builder
27490         for the operator we are defining.
27491         (Operator::Define): Implement.
27492
27493 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27494
27495         * class.cs (Event::Define): Make the prefixes of the accessor methods
27496         addOn_ and removeOn_ 
27497
27498         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
27499         of the location being passed in too. Ideally, this should go later since all
27500         error reporting should be done through the Report object.
27501
27502         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
27503         (Populate): Iterate thru the indexers we have and define them too.
27504         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
27505         for the get and set accessors.
27506         (Indexer::Define): Implement.
27507
27508 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
27509
27510         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
27511         my previous implementation, did not work.
27512
27513         * typemanager.cs: Add a couple of missing types (the longs).
27514
27515         * literal.cs: Use TypeManager.bool_type instead of getting it.
27516
27517         * expression.cs (EventExpr): New kind of expressions.
27518         (Expressio::ExprClassFromMemberInfo): finish
27519
27520 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
27521
27522         * assign.cs: Emit stores to static fields differently.
27523
27524 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27525
27526         * Merge in changes and adjust code to tackle conflicts. Backed out my
27527         code in Assign::Resolve ;-) 
27528
27529 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27530
27531         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
27532         instead Report.Error and also pass in the location.
27533         (CSharpParser::Lexer): New readonly property to return the reference
27534         to the Tokenizer object.
27535         (declare_local_variables): Use Report.Error with location instead of plain 
27536         old error.
27537         (CheckDef): Ditto.
27538
27539         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
27540         (Operator.CheckBinaryOperator): Ditto.
27541
27542         * cs-parser.jay (operator_declarator): Update accordingly.
27543
27544         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
27545         (CheckBinaryOperator): Same here.
27546
27547         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
27548         on the name without any prefixes of namespace names etc. This is because we
27549         already might have something already fully qualified like 
27550         'System.Console.WriteLine'
27551
27552         * assign.cs (Resolve): Begin implementation. Stuck ;-)
27553
27554 2001-09-07  Ravi Pratap  <ravi@ximian.com>
27555
27556         * cs-tokenizer.cs (location): Return a string which also contains
27557         the file name.
27558
27559         * expression.cs (ElementAccess): New class for expressions of the
27560         type 'element access.'
27561         (BaseAccess): New class for expressions of the type 'base access.'
27562         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
27563         respectively.
27564
27565         * cs-parser.jay (element_access): Implement action.
27566         (base_access): Implement actions.
27567         (checked_expression, unchecked_expression): Implement.
27568
27569         * cs-parser.jay (local_variable_type): Correct and implement.
27570         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
27571
27572         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
27573
27574         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
27575         name and the specifiers.
27576
27577         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
27578
27579         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
27580         making them all public ;-)
27581
27582         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
27583         class anyways.
27584
27585 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
27586
27587         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
27588         PropertyExprs.
27589         (FieldExpr, PropertyExprs): New resolved expressions.
27590         (SimpleName::MemberStaticCheck): Perform static checks for access
27591         to non-static fields on static methods. Maybe this should be
27592         generalized for MemberAccesses. 
27593         (SimpleName::ResolveSimpleName): More work on simple name
27594         resolution. 
27595
27596         * cs-parser.jay (primary_expression/qualified_identifier): track
27597         the parameter index.
27598
27599         * codegen.cs (CodeGen::Save): Catch save exception, report error.
27600         (EmitContext::EmitBoolExpression): Chain to expression generation
27601         instead of temporary hack.
27602         (::EmitStatementExpression): Put generic expression code generation.
27603
27604         * assign.cs (Assign::Emit): Implement variable assignments to
27605         local variables, parameters and fields.
27606
27607 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
27608
27609         * statement.cs (Block::GetVariableInfo): New method, returns the
27610         VariableInfo for a variable name in a block.
27611         (Block::GetVariableType): Implement in terms of GetVariableInfo
27612
27613         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
27614         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
27615
27616 2001-09-06  Ravi Pratap  <ravi@ximian.com>
27617
27618         * cs-parser.jay (operator_declaration): Continue on my quest : update
27619         to take attributes argument.
27620         (event_declaration): Ditto.
27621         (enum_declaration): Ditto.
27622         (indexer_declaration): Ditto.
27623
27624         * class.cs (Operator::Operator): Update constructor accordingly.
27625         (Event::Event): Ditto.
27626
27627         * delegate.cs (Delegate::Delegate): Same here.
27628
27629         * enum.cs (Enum::Enum): Same here.
27630
27631 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27632
27633         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
27634
27635         * ../tests/cs0658.cs : New file to demonstrate error 0658.
27636
27637         * attribute.cs (Attributes): New class to encapsulate all attributes which were
27638         being passed around as an arraylist.
27639         (Attributes::AddAttribute): Method to add attribute sections.
27640
27641         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
27642         (struct_declaration): Update accordingly.
27643         (constant_declaration): Update.
27644         (field_declaration): Update.
27645         (method_header): Update.
27646         (fixed_parameter): Update.
27647         (parameter_array): Ditto.
27648         (property_declaration): Ditto.
27649         (destructor_declaration): Ditto.
27650
27651         * class.cs (Struct::Struct): Update constructors accordingly.
27652         (Class::Class): Ditto.
27653         (Field::Field): Ditto.
27654         (Method::Method): Ditto.
27655         (Property::Property): Ditto.
27656         (TypeContainer::OptAttribute): update property's return type.
27657
27658         * interface.cs (Interface.opt_attributes): New member.
27659         (Interface::Interface): Update to take the extra Attributes argument.
27660
27661         * parameter.cs (Parameter::Parameter): Ditto.
27662
27663         * constant.cs (Constant::Constant): Ditto.
27664
27665         * interface.cs (InterfaceMemberBase): New OptAttributes field.
27666         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
27667         the attributes as a parameter.
27668         (InterfaceProperty): Update constructor call.
27669         (InterfaceEvent): Ditto.
27670         (InterfaceMethod): Ditto.
27671         (InterfaceIndexer): Ditto.
27672
27673         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
27674         pass the attributes too.
27675         (interface_event_declaration): Ditto.
27676         (interface_property_declaration): Ditto.
27677         (interface_method_declaration): Ditto.
27678         (interface_declaration): Ditto.
27679
27680 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
27681
27682         * class.cs (Method::Define): Track the "static Main" definition to
27683         create an entry point. 
27684
27685         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
27686         EntryPoint if we find it. 
27687
27688         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
27689         (EmitContext::ig): Make this variable public.
27690
27691         * driver.cs: Make the default output file be the first file name
27692         with the .exe extension.  
27693
27694         Detect empty compilations
27695
27696         Handle various kinds of output targets.  Handle --target and
27697         rename -t to --dumper.
27698
27699         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
27700         methods inherited from Expression return now an Expression.  This
27701         will is used during the tree rewriting as we resolve them during
27702         semantic analysis.
27703
27704         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
27705         the spec.  Missing entirely is the information about
27706         accessability of elements of it.
27707
27708         (Expression::ExprClassFromMemberInfo): New constructor for
27709         Expressions that creates a fully initialized Expression based on
27710         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
27711         a Type.
27712
27713         (Invocation::Resolve): Begin implementing resolution of invocations.
27714
27715         * literal.cs (StringLiteral):  Implement Emit.
27716
27717 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27718
27719         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
27720         member.
27721
27722 2001-09-04  Ravi Pratap  <ravi@ximian.com>
27723
27724         * cs-parser.jay (attribute_arguments): Implement actions.
27725         (attribute): Fix bug in production. Implement action.
27726         (attribute_list): Implement.
27727         (attribute_target): Implement.
27728         (attribute_target_specifier, opt_target_specifier): Implement
27729         (CheckAttributeTarget): New method to check if the attribute target
27730         is valid.
27731         (attribute_section): Implement.
27732         (opt_attributes): Implement.
27733
27734         * attribute.cs : New file to handle attributes.
27735         (Attribute): Class to hold attribute info.
27736
27737         * cs-parser.jay (opt_attribute_target_specifier): Remove production
27738         (attribute_section): Modify production to use 2 different rules to 
27739         achieve the same thing. 1 s/r conflict down !
27740         Clean out commented, useless, non-reducing dimension_separator rules.
27741
27742         * class.cs (TypeContainer.attributes): New member to hold list
27743         of attributes for a type.
27744         (Struct::Struct): Modify to take one more argument, the attribute list.
27745         (Class::Class): Ditto.
27746         (Field::Field): Ditto.
27747         (Method::Method): Ditto.
27748         (Property::Property): Ditto.
27749
27750         * cs-parser.jay (struct_declaration): Update constructor call to
27751         pass in the attributes too.
27752         (class_declaration): Ditto.
27753         (constant_declaration): Ditto.
27754         (field_declaration): Ditto.
27755         (method_header): Ditto.
27756         (fixed_parameter): Ditto.
27757         (parameter_array): Ditto.
27758         (property_declaration): Ditto.
27759
27760         * constant.cs (Constant::Constant): Update constructor similarly.
27761         Use System.Collections.
27762
27763         * parameter.cs (Parameter::Parameter): Update as above.
27764
27765 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27766
27767         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
27768         (TypeContainer.delegates): New member to hold list of delegates.
27769
27770         * cs-parser.jay (delegate_declaration): Implement the action correctly 
27771         this time as I seem to be on crack ;-)
27772
27773 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
27774
27775         * rootcontext.cs (RootContext::IsNamespace): new function, used to
27776         tell whether an identifier represents a namespace.
27777
27778         * expression.cs (NamespaceExpr): A namespace expression, used only
27779         temporarly during expression resolution.
27780         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
27781         utility functions to resolve names on expressions.
27782
27783 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
27784
27785         * codegen.cs: Add hook for StatementExpressions. 
27786
27787         * class.cs: Fix inverted test for static flag in methods.
27788
27789 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27790
27791         * class.cs (Operator::CheckUnaryOperator): Correct error number used
27792         to make it coincide with MS' number.
27793         (Operator::CheckBinaryOperator): Ditto.
27794
27795         * ../errors/errors.txt : Remove error numbers added earlier.
27796
27797         * ../errors/cs1019.cs : Test case for error # 1019
27798
27799         * ../errros/cs1020.cs : Test case for error # 1020
27800
27801         * cs-parser.jay : Clean out commented cruft.
27802         (dimension_separators, dimension_separator): Comment out. Ostensibly not
27803         used anywhere - non-reducing rule.
27804         (namespace_declarations): Non-reducing rule - comment out.
27805
27806         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
27807         with TypeContainer::AddEnum.
27808
27809         * delegate.cs : New file for delegate handling classes.
27810         (Delegate): Class for declaring delegates.
27811
27812         * makefile : Update.
27813
27814         * cs-parser.jay (delegate_declaration): Implement.
27815
27816 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
27817
27818         * class.cs (Event::Define): Implement.
27819         (Event.EventBuilder): New member.
27820
27821         * class.cs (TypeContainer::Populate): Update to define all enums and events
27822         we have.
27823         (Events): New property for the events arraylist we hold. Shouldn't we move to using
27824         readonly fields for all these cases ?
27825
27826 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27827
27828         * class.cs (Property): Revamp to use the convention of making fields readonly.
27829         Accordingly modify code elsewhere.
27830
27831         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
27832         the Define method of the Property class.
27833
27834         * class.cs : Clean up applied patch and update references to variables etc. Fix 
27835         trivial bug.
27836         (TypeContainer::Populate): Update to define all the properties we have. Also
27837         define all enumerations.
27838
27839         * enum.cs (Define): Implement.
27840
27841 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27842
27843         * cs-parser.jay (overloadable_operator): The semantic value is an
27844         enum of the Operator class.
27845         (operator_declarator): Implement actions.
27846         (operator_declaration): Implement.
27847
27848         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
27849         validity of definitions.
27850         (Operator::CheckBinaryOperator): Static method to check for binary operators
27851         (TypeContainer::AddOperator): New method to add an operator to a type.
27852
27853         * cs-parser.jay (indexer_declaration): Added line to actually call the
27854         AddIndexer method so it gets added ;-)
27855
27856         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
27857         already taken care of by the MS compiler ?  
27858
27859 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27860
27861         * class.cs (Operator): New class for operator declarations.
27862         (Operator::OpType): Enum for the various operators.
27863
27864 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27865
27866         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
27867         ostensibly handle this in semantic analysis.
27868
27869         * cs-parser.jay (general_catch_clause): Comment out
27870         (specific_catch_clauses, specific_catch_clause): Ditto.
27871         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
27872         (catch_args, opt_catch_args): New productions.
27873         (catch_clause): Rewrite to use the new productions above
27874         (catch_clauses): Modify accordingly.
27875         (opt_catch_clauses): New production to use in try_statement
27876         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
27877         and re-write the code in the actions to extract the specific and
27878         general catch clauses by being a little smart ;-)
27879
27880         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
27881         Hooray, try and catch statements parse fine !
27882
27883 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27884
27885         * statement.cs (Block::GetVariableType): Fix logic to extract the type
27886         string from the hashtable of variables.
27887
27888         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
27889         I end up making that mistake ;-)
27890         (catch_clauses): Fixed gross error which made Key and Value of the 
27891         DictionaryEntry the same : $1 !!
27892
27893 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27894
27895         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
27896
27897         * cs-parser.jay (event_declaration): Correct to remove the semicolon
27898         when the add and remove accessors are specified. 
27899
27900 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27901
27902         * cs-parser.jay (IndexerDeclaration): New helper class to hold
27903         information about indexer_declarator.
27904         (indexer_declarator): Implement actions.
27905         (parsing_indexer): New local boolean used to keep track of whether
27906         we are parsing indexers or properties. This is necessary because 
27907         implicit_parameters come into picture even for the get accessor in the 
27908         case of an indexer.
27909         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
27910
27911         * class.cs (Indexer): New class for indexer declarations.
27912         (TypeContainer::AddIndexer): New method to add an indexer to a type.
27913         (TypeContainer::indexers): New member to hold list of indexers for the
27914         type.
27915
27916 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27917
27918         * cs-parser.jay (add_accessor_declaration): Implement action.
27919         (remove_accessor_declaration): Implement action.
27920         (event_accessors_declaration): Implement
27921         (variable_declarators): swap statements for first rule - trivial.
27922
27923         * class.cs (Event): New class to hold information about event
27924         declarations.
27925         (TypeContainer::AddEvent): New method to add an event to a type
27926         (TypeContainer::events): New member to hold list of events.
27927
27928         * cs-parser.jay (event_declaration): Implement actions.
27929
27930 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27931
27932         * cs-parser.jay (dim_separators): Implement. Make it a string
27933         concatenating all the commas together, just as they appear.
27934         (opt_dim_separators): Modify accordingly
27935         (rank_specifiers): Update accordingly. Basically do the same
27936         thing - instead, collect the brackets here.
27937         (opt_rank_sepcifiers): Modify accordingly.
27938         (array_type): Modify to actually return the complete type string
27939         instead of ignoring the rank_specifiers.
27940         (expression_list): Implement to collect the expressions
27941         (variable_initializer): Implement. We make it a list of expressions
27942         essentially so that we can handle the array_initializer case neatly too.
27943         (variable_initializer_list): Implement.
27944         (array_initializer): Make it a list of variable_initializers
27945         (opt_array_initializer): Modify accordingly.
27946
27947         * expression.cs (New::NType): Add enumeration to help us
27948         keep track of whether we have an object/delegate creation
27949         or an array creation.
27950         (New:NewType, New::Rank, New::Indices, New::Initializers): New
27951         members to hold data about array creation.
27952         (New:New): Modify to update NewType
27953         (New:New): New Overloaded contructor for the array creation
27954         case.
27955
27956         * cs-parser.jay (array_creation_expression): Implement to call
27957         the overloaded New constructor.
27958
27959 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
27960
27961         * class.cs (TypeContainer::Constructors): Return member
27962         constructors instead of returning null.
27963
27964 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
27965
27966         * typemanager.cs (InitCoreTypes): Initialize the various core
27967         types after we have populated the type manager with the user
27968         defined types (this distinction will be important later while
27969         compiling corlib.dll)
27970
27971         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
27972         on Expression Classification.  Now all expressions have a method
27973         `Resolve' and a method `Emit'.
27974
27975         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
27976         generation from working.     Also add some temporary debugging
27977         code. 
27978
27979 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
27980
27981         * codegen.cs: Lots of code generation pieces.  This is only the
27982         beginning, will continue tomorrow with more touches of polish.  We
27983         handle the fundamentals of if, while, do, for, return.  Others are
27984         trickier and I need to start working on invocations soon.
27985
27986         * gen-treedump.cs: Bug fix, use s.Increment here instead of
27987         s.InitStatement. 
27988
27989         * codegen.cs (EmitContext): New struct, used during code
27990         emission to keep a context.   Most of the code generation will be
27991         here. 
27992
27993         * cs-parser.jay: Add embedded blocks to the list of statements of
27994         this block.  So code generation proceeds in a top down fashion.
27995
27996 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
27997
27998         * statement.cs: Add support for multiple child blocks.
27999
28000 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
28001
28002         * codegen.cs (EmitCode): New function, will emit the code for a
28003         Block of code given a TypeContainer and its ILGenerator. 
28004
28005         * statement.cs (Block): Standard public readonly optimization.
28006         (Block::Block constructors): Link children. 
28007         (Block::Child): Child Linker.
28008         (Block::EmitVariables): Emits IL variable declarations.
28009
28010         * class.cs: Drop support for MethodGroups here, delay until
28011         Semantic Analysis.
28012         (Method::): Applied the same simplification that I did before, and
28013         move from Properties to public readonly fields.
28014         (Method::ParameterTypes): Returns the parameter types for the
28015         function, and implements a cache that will be useful later when I
28016         do error checking and the semantic analysis on the methods is
28017         performed.
28018         (Constructor::GetCallingConvention): Renamed from CallingConvetion
28019         and made a method, optional argument tells whether this is a class
28020         or a structure to apply the `has-this' bit.
28021         (Method::GetCallingConvention): Implement, returns the calling
28022         convention. 
28023         (Method::Define): Defines the type, a second pass is performed
28024         later to populate the methods.
28025
28026         (Constructor::ParameterTypes): implement a cache similar to the
28027         one on Method::ParameterTypes, useful later when we do semantic
28028         analysis. 
28029
28030         (TypeContainer::EmitMethod):  New method.  Emits methods.
28031
28032         * expression.cs: Removed MethodGroup class from here.
28033
28034         * parameter.cs (Parameters::GetCallingConvention): new method.
28035
28036 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
28037
28038         * class.cs (TypeContainer::Populate): Drop RootContext from the
28039         argument. 
28040
28041         (Constructor::CallingConvention): Returns the calling convention.
28042         (Constructor::ParameterTypes): Returns the constructor parameter
28043         types. 
28044
28045         (TypeContainer::AddConstructor): Keep track of default constructor
28046         and the default static constructor.
28047
28048         (Constructor::) Another class that starts using `public readonly'
28049         instead of properties. 
28050
28051         (Constructor::IsDefault): Whether this is a default constructor. 
28052
28053         (Field::) use readonly public fields instead of properties also.
28054
28055         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
28056         track of static constructors;  If none is used, turn on
28057         BeforeFieldInit in the TypeAttributes. 
28058
28059         * cs-parser.jay (opt_argument_list): now the return can be null
28060         for the cases where there are no arguments. 
28061
28062         (constructor_declarator): If there is no implicit `base' or
28063         `this', then invoke the default parent constructor. 
28064
28065         * modifiers.cs (MethodAttr): New static function maps a set of
28066         modifiers flags into a MethodAttributes enum
28067         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
28068         MethodAttr, TypeAttr to represent the various mappings where the
28069         modifiers are used.
28070         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
28071
28072 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
28073
28074         * parameter.cs (GetParameterInfo): Fix bug where there would be no
28075         method arguments.
28076
28077         * interface.cs (PopulateIndexer): Implemented the code generator
28078         for interface indexers.
28079
28080 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
28081
28082         * interface.cs (InterfaceMemberBase): Now we track the new status
28083         here.  
28084
28085         (PopulateProperty): Implement property population.  Woohoo!  Got
28086         Methods and Properties going today. 
28087
28088         Removed all the properties for interfaces, and replaced them with
28089         `public readonly' fields. 
28090
28091 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
28092
28093         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
28094         initialize their hashtables/arraylists only when they are needed
28095         instead of doing this always.
28096
28097         * parameter.cs: Handle refs and out parameters.
28098
28099         * cs-parser.jay: Use an ArrayList to construct the arguments
28100         instead of the ParameterCollection, and then cast that to a
28101         Parameter[] array.
28102
28103         * parameter.cs: Drop the use of ParameterCollection and use
28104         instead arrays of Parameters.
28105
28106         (GetParameterInfo): Use the Type, not the Name when resolving
28107         types. 
28108
28109 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
28110
28111         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
28112         and instead use public readonly fields.
28113
28114         * class.cs: Put back walking code for type containers.
28115
28116 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
28117
28118         * class.cs (MakeConstant): Code to define constants.
28119
28120         * rootcontext.cs (LookupType): New function.  Used to locate types 
28121
28122
28123 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
28124
28125         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
28126         this System.Reflection code is.  Kudos to Microsoft
28127
28128         * typemanager.cs: Implement a type cache and avoid loading all
28129         types at boot time.  Wrap in LookupType the internals.  This made
28130         the compiler so much faster.  Wow.  I rule!
28131
28132         * driver.cs: Make sure we always load mscorlib first (for
28133         debugging purposes, nothing really important).
28134
28135         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
28136         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
28137
28138         * rootcontext.cs: Lookup types on their namespace;  Lookup types
28139         on namespaces that have been imported using the `using' keyword.
28140
28141         * class.cs (TypeContainer::TypeAttr): Virtualize.
28142         (Class::TypeAttr): Return attributes suitable for this bad boy.
28143         (Struct::TypeAttr): ditto.
28144         Handle nested classes.
28145         (TypeContainer::) Remove all the type visiting code, it is now
28146         replaced with the rootcontext.cs code
28147
28148         * rootcontext.cs (GetClassBases): Added support for structs. 
28149
28150 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
28151
28152         * interface.cs, statement.cs, class.cs, parameter.cs,
28153         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
28154         Drop use of TypeRefs, and use strings instead.
28155
28156 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
28157
28158         * rootcontext.cs: 
28159
28160         * class.cs (Struct::Struct): set the SEALED flags after
28161         checking the modifiers.
28162         (TypeContainer::TypeAttr): new property, returns the
28163         TypeAttributes for a class.  
28164
28165         * cs-parser.jay (type_list): Oops, list production was creating a
28166         new list of base types.
28167
28168         * rootcontext.cs (StdLib): New property.
28169         (GetInterfaceTypeByName): returns an interface by type name, and
28170         encapsulates error handling here.
28171         (GetInterfaces): simplified.
28172         (ResolveTree): Encapsulated all the tree resolution here.
28173         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
28174         types. 
28175
28176         * driver.cs: Add support for --nostdlib, to avoid loading the
28177         default assemblies.
28178         (Main): Do not put tree resolution here. 
28179
28180         * rootcontext.cs: Beginning of the class resolution.
28181
28182 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
28183
28184         * rootcontext.cs: Provide better error reporting. 
28185
28186         * cs-parser.jay (interface_base): set our $$ to be interfaces.
28187
28188         * rootcontext.cs (CreateInterface): Handle the case where there
28189         are no parent interfaces.
28190
28191         (CloseTypes): Routine to flush types at the end.
28192         (CreateInterface): Track types.
28193         (GetInterfaces): Returns an array of Types from the list of
28194         defined interfaces.
28195
28196         * typemanager.c (AddUserType): Mechanism to track user types (puts
28197         the type on the global type hash, and allows us to close it at the
28198         end). 
28199
28200 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
28201
28202         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
28203         RecordInterface instead.
28204
28205         * cs-parser.jay: Updated to reflect changes above.
28206
28207         * decl.cs (Definition): Keep track of the TypeBuilder type that
28208         represents this type here.  Not sure we will use it in the long
28209         run, but wont hurt for now.
28210
28211         * driver.cs: Smaller changes to accomodate the new code.
28212
28213         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
28214         when done. 
28215
28216         * rootcontext.cs (CreateInterface):  New method, used to create
28217         the System.TypeBuilder type for interfaces.
28218         (ResolveInterfaces): new entry point to resolve the interface
28219         hierarchy. 
28220         (CodeGen): Property, used to keep track of the code generator.
28221
28222 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
28223
28224         * cs-parser.jay: Add a second production for delegate_declaration
28225         with `VOID'.
28226
28227         (enum_body): Put an opt_comma here instead of putting it on
28228         enum_body or enum_member_declarations so we can handle trailing
28229         commas on enumeration members.  Gets rid of a shift/reduce.
28230
28231         (type_list): Need a COMMA in the middle.
28232
28233         (indexer_declaration): Tell tokenizer to recognize get/set
28234
28235         * Remove old targets.
28236
28237         * Re-add the parser target.
28238
28239 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28240
28241         * cs-parser.jay: Add precendence rules for a number of operators
28242         ot reduce the number of shift/reduce conflicts in the grammar.
28243
28244 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
28245
28246         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
28247         and put it here.
28248
28249         Get rid of old crufty code.
28250
28251         * rootcontext.cs: Use this to keep track of the parsed
28252         representation and the defined types available to the program. 
28253
28254         * gen-treedump.cs: adjust for new convention.
28255
28256         * type.cs: Split out the type manager, and the assembly builder
28257         from here. 
28258
28259         * typemanager.cs: the type manager will live here now.
28260
28261         * cil-codegen.cs: And the code generator here. 
28262
28263 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
28264
28265         * makefile: Fixed up for easy making.
28266
28267 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28268
28269         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
28270         the 
28271
28272         (unary_expression): Expand pre_increment_expression and
28273         post_decrement_expression to reduce a shift/reduce.
28274
28275 2001-07-11  Simon Cozens
28276
28277         * cs-tokenizer.cs: Hex numbers should begin with a 0.
28278
28279         Improve allow_keyword_as_indent name.
28280
28281 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
28282
28283         * Adjustments for Beta2. 
28284
28285 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
28286
28287         * decl.cs: Added `Define' abstract method.
28288         (InTransit): new property, used to catch recursive definitions. 
28289
28290         * interface.cs: Implement `Define'. 
28291
28292         * modifiers.cs: Map Modifiers.constants to
28293         System.Reflection.TypeAttribute flags.
28294
28295         * class.cs: Keep track of types and user-defined types.
28296         (BuilderInit): New method for creating an assembly
28297         (ResolveType): New function to launch the resolution process, only
28298         used by interfaces for now.
28299
28300         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
28301         that are inserted into the name space. 
28302
28303 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
28304
28305         * ARGH.  I have screwed up my tree so many times due to the use of
28306         rsync rather than using CVS.  Going to fix this at once. 
28307
28308         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
28309         load types.
28310
28311 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
28312
28313         * Experiment successful: Use System.Type rather that our own
28314         version of Type.  
28315
28316 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
28317
28318         * cs-parser.jay: Removed nsAliases from here.
28319
28320         Use new namespaces, handle `using XXX;' 
28321
28322         * namespace.cs: Reimplemented namespace handling, use a recursive
28323         definition of the class.  Now we can keep track of using clauses
28324         and catch invalid using clauses.
28325
28326 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
28327
28328         * gen-treedump.cs: Adapted for all the renaming.
28329
28330         * expression.cs (Expression): this class now has a Type property
28331         which returns an expression Type.
28332
28333         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
28334         `Type', as this has a different meaning now in the base
28335
28336 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
28337
28338         * interface.cs, class.cs: Removed from all the sources the
28339         references to signature computation, as we can not do method
28340         signature computation during the parsing time, as we are not
28341         trying to solve at that point distinguishing:
28342
28343         class X {
28344                 void a (Blah x) {}
28345                 void a (NS.Blah x) {}
28346         }
28347
28348         Which depending on the context might be valid or not, as we do not
28349         know if Blah is the same thing as NS.Blah at that point.
28350
28351         * Redid everything so the code uses TypeRefs now instead of
28352         Types.  TypeRefs are just temporary type placeholders, that need
28353         to be resolved.  They initially have a pointer to a string and the
28354         current scope in which they are used.  This is used later by the
28355         compiler to resolve the reference to an actual Type. 
28356
28357         * DeclSpace is no longer a CIR.Type, and neither are
28358         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
28359         are all DeclSpaces, but no Types. 
28360
28361         * type.cs (TypeRefManager): This implements the TypeRef manager,
28362         which keeps track of all the types that need to be resolved after
28363         the parsing has finished. 
28364
28365 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
28366
28367         * ARGH.  We are going to have to store `foreach' as a class rather
28368         than resolving it, as we need to verify error 1579 after name
28369         resolution.   *OR* we could keep a flag that says `This request to
28370         IEnumerator comes from a foreach statement' which we can then use
28371         to generate the error.
28372
28373 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
28374
28375         * class.cs (TypeContainer.AddMethod): we now add methods to the
28376         MethodGroup instead of the method hashtable.  
28377
28378         * expression.cs: Add MethodGroup abstraction, which gets us one
28379         step closer to the specification in the way we handle method
28380         declarations.  
28381
28382         * cs-parser.jay (primary_expression): qualified_identifier now
28383         tried to match up an identifier to a local variable reference or
28384         to a parameter reference.
28385
28386         current_local_parameters is now a parser global variable that
28387         points to the current parameters for the block, used during name
28388         lookup.
28389
28390         (property_declaration): Now creates an implicit `value' argument to
28391         the set accessor.
28392
28393 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
28394
28395         * parameter.cs: Do not use `param' arguments as part of the
28396         signature, per the spec.
28397
28398 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
28399
28400         * decl.cs: Base class for classes, structs and interfaces.  This
28401         is the "Declaration Space" 
28402
28403         * cs-parser.jay: Use CheckDef for checking declaration errors
28404         instead of having one on each function.
28405
28406         * class.cs: Factor out some code for handling error handling in
28407         accordance to the "Declarations" section in the "Basic Concepts"
28408         chapter in the ECMA C# spec.
28409
28410         * interface.cs: Make all interface member classes derive from
28411         InterfaceMemberBase.
28412
28413 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
28414
28415         * Many things: all interfaces are parsed and generated in
28416         gen-treedump.  Support for member variables, constructors,
28417         destructors, properties, constants is there.
28418
28419         Beginning of the IL backend, but very little done, just there for
28420         testing purposes. 
28421
28422 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
28423
28424         * cs-parser.jay: Fix labeled statement.
28425
28426         * cs-tokenizer.cs (escape): Escape " and ' always.
28427         ref_line, ref_name: keep track of the line/filename as instructed
28428         by #line by the compiler.
28429         Parse #line.
28430
28431 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
28432
28433         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
28434         to match the values in System.CodeDOM.
28435
28436         Divid renamed to Divide.
28437
28438         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
28439         statements. 
28440         (Statements.set): remove.
28441
28442         * System.CodeDOM/CodeCatchClause.cs: always have a valid
28443         statements. 
28444
28445         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
28446         falseStatements always have valid values. 
28447
28448         * cs-parser.jay: Use System.CodeDOM now.
28449