18159ca00b0d1a779b54d06f02d060ee13f7adae
[mono.git] / mcs / gmcs / ChangeLog
1 2006-07-22  Raja R Harinath  <harinath@gmail.com>
2
3         * statement.cs (Block.ResolveMeta): Simplify slightly.
4
5         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
6         multiple boolean fields.  Convert InUnsafe, constant_check_state,
7         check_state to flags.
8         (CheckState, ConstantCheckState): Update.
9         (InUnsafe): New read-only property.
10         (FlagsHandle): Rename from CheckStateHandle and convert to handle
11         arbitrary flags.
12         (WithUnsafe): New helper similar to WithCheckState.
13         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
14         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
15
16 2006-07-21  Raja R Harinath  <rharinath@novell.com>
17
18         Make comparisons use the same IL irrespective of whether they're
19         in a 'checked' or 'unchecked' context: one of the issues in #78899
20         * codegen.cs (EmitContext.CheckState): Make read-only property.
21         (EmitContext.ConstantCheckState): Likewise.
22         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
23         helper that implement a save/restore stack for CheckState
24         values.  This is the only way to change check-state.
25         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
26         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
27         (CheckedExpr.EmitBranchable): New forwarding method.
28         (UnCheckedExpr): Likewise.
29         * statement.cs (Block.ResolveMeta): Use WithCheckState.
30         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
31         (Checked.Resolve, checked.DoEmit): Likewise.
32
33 2006-07-21  Martin Baulig  <martin@ximian.com>
34
35         * generic.cs (TypeManager.InferType): When inferring an array
36         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
37
38 2006-07-21  Martin Baulig  <martin@ximian.com>
39
40         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
41         and allow IList`1 and all its base interfaces.
42
43         * convert.cs (Convert.ImplicitReferenceConversion): Allow
44         converting from an array-type of T to IList<T>.
45
46 2006-07-21  Martin Baulig  <martin@ximian.com>
47
48         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
49
50 2006-07-20  Miguel de Icaza  <miguel@novell.com>
51
52         * anonymous.cs: Cache the resolved anonymous delegate, and return
53         this so that the ResolveTopBlock is only triggered once, not
54         twice.
55
56         Currently we trigger ResolvetopBlock twice due to a first pass of
57         argument check compatibility, and a second pass that does the
58         actual resolution.   
59
60 2006-07-16  Marek Safar  <marek.safar@seznam.cz>
61
62         A fix for #70506
63         * driver.cs (MainDriver): When a file extension is missing,
64         use a default one.
65
66 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
67
68         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
69         modifiers.
70         * rootcontext.cs (Reset): Add helper_classes.
71
72 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
73
74         A fix for #78860
75         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
76         correctly.
77
78 2006-07-13  Miguel de Icaza  <miguel@novell.com>
79
80         * statement.cs (Lock): Handle expressions of type
81         TypeManager.null_type specially.  Fixes #78770
82
83 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
84
85         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
86         to an event.
87
88 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
89
90         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
91         for accessors as well.
92         * ecore.cs (EventExpr): Add AccessorTable.
93
94 2006-07-03  Martin Baulig  <martin@ximian.com>
95
96         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
97         instances of value types.
98
99         * convert.cs (Convert.ExplicitConversion): Correctly handle
100         object->nullable conversions.   
101
102 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
103
104         A fix for #78738
105         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
106         for CS0122 where appropriate.
107         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
108         level attributes.
109         (Filter): Assembly can be null in the case of top level attributes.
110
111 2006-06-28  Raja R Harinath  <rharinath@novell.com>
112
113         Fix #78716
114         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
115         no arguments, return 'false': nothing can be inferred.
116
117 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
118
119         A fix for #78690
120
121         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
122         is done at global level.
123
124 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
125
126         A fix for #77002, Implemented TypeForwarder support.
127
128         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
129         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
130         attribute handling.
131         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
132         * typemanager.cs (): Add type_forwarder_attr_type.
133
134 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
135
136         * report.cs: Add CS0469 warning.
137
138 2006-06-22  Martin Baulig  <martin@ximian.com>
139
140         * class.cs
141         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
142         for interfaces; fixes #78686, which is a modification of #78380
143         with interfaces instead of classes.
144
145 2006-06-21  Martin Baulig  <martin@ximian.com>
146
147         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
148         the `try'-block, so we also report CS0016 etc. there.
149
150 2006-06-21  Martin Baulig  <martin@ximian.com>
151
152         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
153         handle SetAssigned() and SetMemberIsUsed() for generic types;
154         fixes #77545.
155
156 2006-06-21  Martin Baulig  <martin@ximian.com>
157
158         * delegate.cs
159         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
160
161 2006-06-21  Martin Baulig  <martin@ximian.com>
162
163         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
164         also report CS1686 for parameters.
165
166 2006-06-21  Martin Baulig  <martin@ximian.com>
167
168         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
169         instead of an error if the value is not implicitly convertible to
170         the switch types; fixes #77964.
171
172 2006-06-21  Raja R Harinath  <rharinath@novell.com>
173
174         Fix #78673
175         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
176         FieldBuilder is null.
177
178         Fix #78662
179         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
180         'left' and 'right' before error-checking.
181
182 2006-06-19  Martin Baulig  <martin@ximian.com>
183
184         * convert.cs
185         (Convert.ImplicitConversionStandard): Cleanup and correctly
186         implement nullable conversions.
187         (Convert.ImplicitStandardConversionExists): Likewise.
188         (Convert.ExplicitConversion): Likewise.
189
190 2006-06-19  Martin Baulig  <martin@ximian.com>
191
192         * generic.cs
193         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
194         methods; make the ctors protected.
195
196 2006-06-19  Martin Baulig  <martin@ximian.com>
197
198         Fixed #78380; added gtest-273.cs.
199
200         * ecore.cs
201         (Expression.ResolveAsBaseTerminal): Move the constraint checking
202         into ResolveAsTypeTerminal().
203
204         * generic.cs
205         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
206         TypeManager.FindMembers() to check for the default ctor.
207
208 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
209
210         * generic.cs: Fixed NullableInfo accessibility.
211
212 2006-06-16  Martin Baulig  <martin@ximian.com>
213
214         * generic.cs
215         (Constraints.InflatedConstraints.inflate): Correctly inflate
216         generic types; fixes #78400.
217
218 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
219
220         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
221         Fixed bug #78601.
222         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
223         (FieldExpr.DoResolve): likewise.
224         (PropertyExpr.InstanceResolve): likewise.
225         (EventExpr.InstanceResolve): likewise. 
226
227 2006-06-15  Martin Baulig  <martin@ximian.com>
228
229         * statement.cs
230         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
231         argument; always allow a `null' label if true.
232         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
233         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
234         we have a `null' label and mark the new `null_target' label;
235         default to the `default' label.
236         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
237
238 2006-06-15  Martin Baulig  <martin@ximian.com>
239
240         * class.cs (Operator.Define): Allow an implicit/explicit operator
241         to convert to/from a nullable value of the enclosing type.
242
243         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
244         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
245
246         * convert.cs
247         (Convert.ImplicitStandardConversionExists): Add support for lifted
248         implicit/explicit conversions.
249         (Convert.ImplicitConversionStandard): Likewise.
250
251 2006-06-13  Martin Baulig  <martin@ximian.com>
252
253         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
254         type arguments and create a ConstructedType if necessary.  Fixes #78400.
255
256 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
257
258         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
259         attribute applicable tests for attribute argument.
260
261 2006-06-02  Raja R Harinath  <rharinath@novell.com>
262
263         Fix #78079
264         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
265         (Binary.OverloadResolve_PredefinedIntegral): New.
266         (Binary.OverloadResolve_PredefinedFloating): New.
267         (Binary.OverloadResolve_PredefinedString): New.
268         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
269         Follow the standard more closely, and treat numeric promotions in
270         terms of overload resolution.
271         (Binary.CheckShiftArguments): Simplify.
272
273 2006-06-01  Raja R Harinath  <rharinath@novell.com>
274
275         * flowanalysis.cs (MyBitVector): Simplify representation.
276         (MyBitVector.Clone): Avoid allocating BitArray.
277         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
278         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
279         (*): Update.  Change all references to MyBitVector.And and
280         MyBitVector.Or to &= and |=.
281
282 2006-05-31  Raja R Harinath  <rharinath@novell.com>
283
284         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
285         Use bne.un instead of ceq+brfalse.
286
287         Fix cs0208-[23].cs
288         * typemanager.cs (IsUnmanagedType): Disallow generic types and
289         generic parameters.
290
291 2006-05-29  Raja R Harinath  <rharinath@novell.com>
292
293         Fix cs0231-[34].cs.
294         * cs-parser.jay (formal_parameter_list): Extend the pattern below
295         to param arguments too.
296
297 2006-05-26  Miguel de Icaza  <miguel@novell.com>
298
299         * cs-parser.jay: Catch another parsing form for arglist being
300         followed by other arguments.  Fixes #78313.
301
302 2006-05-25  Raja R Harinath  <rharinath@novell.com>
303
304         Fix #78324
305         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
306         also when one of the operands is a null literal.
307         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
308         to improve clarity, and generate slightly better code.
309
310 2006-05-24  Raja R Harinath  <rharinath@novell.com>
311
312         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
313         checking of out parameters to ...
314         (FlowBranchingToplevel.Merge): ... here.
315         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
316         set, propagate the origin upward, and only complain if there was
317         no other error.
318         (FlowBranchingException.AddContinueOrigin): Likewise.
319         (FlowBranchingException.AddReturnOrigin): Likewise.
320         (FlowBranchingException.AddGotoOrigin): Likewise.       
321
322 2006-05-23  Raja R Harinath  <rharinath@novell.com>
323
324         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
325         unreachable, skip it.
326         (FlowBranchingException.Merge): Always propagate jumps, even if
327         the finally block renders subsequent code unreachable.
328
329 2006-05-18  Raja R Harinath  <rharinath@novell.com>
330
331         Fix #77601
332         * statement.cs (Goto.Resolve): Move responsibility for resolving
333         'goto' to FlowBranching.AddGotoOrigin.
334         (Goto.SetResolvedTarget): New.  Callback to set the
335         LabeledStatement that's the target of the goto.
336         (Goto.DoEmit): Use Leave instead of Br when crossing an
337         unwind-protect boundary.
338         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
339         LookupLabel and adjust to new semantics.
340         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
341         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
342         Goto.SetResolvedTarget to update target.
343         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
344         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
345         AddBreakOrigin & co.  Delay propagation until ...
346         (FlowBranchingException.Merge): ... this.
347
348         * statement.cs (Block.Resolve): Always depend on flow-branching to
349         determine unreachability.  Kill workaround that originally emitted
350         only one statement after an "unreachable" label (see infloop in
351         test-515.cs).
352
353         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
354         This is still "wrong", but anything better would probably need a
355         multi-pass algorithm.
356         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
357         usage vector.  Force current usage vector to be reachable, to
358         optimistically signify backward jumps.
359         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
360         detected.
361         (FlowBranchingLabeled.Merge): New.  If no backward jump was
362         detected, return the original salted-away usage vector instead,
363         updated with appropriate changes.  Print unreachable warning if
364         necessary.
365         * statement.cs (Block.Resolve): Don't print unreachable warning on
366         a labeled statement.
367
368 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
369
370         * driver.cs: Pass filename without path to AssemblyBuilder's
371         AddResourceFile. Fixes bug #78407.
372
373 2006-05-17  Raja R Harinath  <rharinath@novell.com>
374
375         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
376         * flowanalysis.cs (FlowBranchingLabeled): ... here.
377         (FlowBranching.MergeChild): Overwrite
378         reachability information from Labeled branchings too.
379
380 2006-05-16  Raja R Harinath  <rharinath@novell.com>
381
382         * statement.cs (Goto.Resolve): Merge jump origins here ...
383         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
384
385         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
386         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
387         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
388         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
389         here, ...
390         * statement.cs (Goto.Resolve): ... not here.
391         (Goto.Emit): Remove CS1632 check.
392
393 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
394
395         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
396         error message.
397
398 2006-05-11  Raja R Harinath  <rharinath@novell.com>
399
400         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
401         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
402         (FlowBranchingException.Label): Likewise.
403
404         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
405         given value.
406         (MyBitVector.Or): Use it to avoid losing information (Count).
407         (FlowBranching.MergeOrigins): Likewise.
408
409         * flowanalysis.cs (UsageVector.IsDirty): Remove.
410         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
411         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
412         (UsageVector.ToString): Simplify.
413         (UsageVector.MergeSiblings): Move here from ...
414         (FlowBranching.Merge): ... here.
415         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
416         not a MyBitVector.
417
418 2006-05-10  Raja R Harinath  <rharinath@novell.com>
419
420         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
421         null bitvector is treated as all-true.
422
423         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
424         (MyBitVector): Rationalize invariants.  'vector != null' implies
425         that we have our own copy of the bitvector.  Otherwise,
426         'InheritsFrom == null' implies all inherited bits are true.
427
428 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
429
430         * statement.cs (LocalInfo): Add IsConstant.
431         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
432         local variable for constants.
433
434 2006-05-09  Raja R Harinath  <rharinath@novell.com>
435
436         * flowanalysis.cs (MyBitVector.Empty): New.
437         (MyBitVector): Don't allow InheritedFrom to be null.
438         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
439         (UsageVector, FlowBranching): Update to changes.
440
441         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
442         recursion.  The 'Parent == null' condition isn't sufficient for
443         anonymous methods.
444         (FlowBranching.AddBreakOrigin): Likewise.
445         (FlowBranching.AddContinueOrigin): Likewise.
446         (FlowBranching.AddReturnOrigin): Likewise.
447         (FlowBranching.StealFinallyClauses): Likewise.
448         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
449         (FlowBranching.CheckOutParameters): Likewise.
450         (FlowBranchingToplevel): Terminate all the above recursions here.
451         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
452         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
453
454         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
455         toplevel block.
456         (FlowBranchingToplevel): New.  Empty for now.
457         (FlowBranching.MergeTopBlock): Update.
458         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
459         branching for the anonymous delegate.
460         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
461
462         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
463         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
464         information at the start of the merge.  Reorganize.
465
466 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
467
468         * class.cs (MethodData.Define): Method cannot implement interface accessor.
469
470 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
471
472         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
473         to newly introduced ctor.
474
475         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
476         message to one place.
477         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
478         global namespace.
479
480 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
481
482         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
483
484         * ecore.cs (Expression.ResolveAsConstant): Updated.
485
486         * statement.cs (ResolveMeta): Updated.
487
488 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
489
490         * cs-parser.jay: __arglist cannot be used in initializer.
491
492 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
493
494         A fix for #77879
495         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
496         private types.
497
498 2006-05-05  Raja R Harinath  <rharinath@novell.com>
499
500         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
501         (LabeledStatement): Add 'name' parameter.
502         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
503         (Block.AddLabel): Update to changes.
504         * cs-parser.jay (labeled_statement): Likewise.
505
506         * flowanalysis.cs (BranchingType.Labeled): New.
507         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
508         (FlowBranchingLabeled): New.  Does nothing for now, but will
509         eventually handle 'goto' flows.
510         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
511         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
512         that's terminated ...
513         (Block.Resolve): ... here.
514
515         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
516         (UsageVector.MergeFinallyOrigins): Likewise.
517         (FlowBranching.InTryOrCatch): Likewise.
518         (FlowBranching.AddFinallyVector): Likewise.
519         (FlowBranchingException): Update to changes.
520
521         Fix #78290
522         * statement.cs (Return.Resolve): Move error checking to ...
523         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
524         (FlowBranchingException): Handle return origins like break and
525         continue origins.
526         (FlowBranching.UsageVector.CheckOutParameters): Remove.
527
528 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
529
530         A fix for #76122
531         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
532         filter.
533
534 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
535
536         A fix for #77543
537         * class.cs (MethodData.Define): Do public accessor check only when method
538         implements an interface.
539
540 2006-05-04  Raja R Harinath  <rharinath@novell.com>
541
542         Remove special handling of 'break'
543         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
544         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
545         (UsageVector.Break): Remove.
546         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
547         reachability.
548         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
549
550         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
551         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
552
553 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
554
555         A fix for #75726
556         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
557         be the interface member.
558
559 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
560
561         A fix for #60069
562         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
563         for emitting small (int) values.
564
565 2006-05-03  Raja R Harinath  <rharinath@novell.com>
566
567         Fix #59427
568         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
569         control-flow passes through the 'finally' after merging-in all the
570         control-flows from 'try' and the 'catch' clauses.
571
572         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
573         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
574         always true at the only non-recursive entry point.
575         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
576         FlowBranchingBreakable.
577         (FlowBranchingLoop): Remove.
578         * statement.cs (Return.DoResolve): Update to changes.
579
580         Fix #76471, #76665
581         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
582         (FlowBranching.CreateBranching): Handle it: create a
583         FlowBranchingContinuable.
584         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
585         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
586         except that it handles the 'continue' command.
587         (FlowBranching.UsageVector.MergeOrigins): Rename from
588         MergeBreakOrigins.
589         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
590         except that it overrides AddContinueOrigin.
591         (FlowBranchingException): Override AddContinueOrigin, similar to
592         AddBreakOrigin.
593         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
594         Create a new branching around the embedded statement.
595         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
596         control flow after the embedded statement.
597         (Continue.Resolve): Move all error checking to AddContinueOrigin.
598
599         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
600         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
601         FlowBranchingBreakable.
602         (FlowBranchingSwitch): Remove.
603
604         Fix test-503.cs
605         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
606         error reporting to ...
607         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
608         Rename from 'AddBreakVector'.  Add new location argument.  Return
609         a bool indicating whether the 'break' crosses an unwind-protect.
610         (FlowBranchingException.AddBreakOrigin): Add.
611         (FlowBranchingException.Merge): Propagate 'break's to surrounding
612         flowbranching after updating with the effects of the 'finally'
613         clause.
614         (FlowBranchingBreakable): New common base class for
615         FlowBranchingLoop and FlowBranchingSwitch.
616
617         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
618         embedded statement.
619         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
620
621 2006-05-02  Raja R Harinath  <rharinath@novell.com>
622
623         * statement.cs (Do.Resolve): If the loop is infinite, set the
624         barrier.
625         (While.Resolve, For.Resolve): Set a barrier after the embedded
626         statement.  There's no direct control flow that goes from the end
627         of the embedded statement to the end of the loop.
628         * flowanalysis.cs (FlowBranching.Infinite): Remove.
629         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
630         above ensure that the reachability is correctly computed.
631
632         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
633         (UsageVector.MergeBreakOrigins): If the current path is
634         unreachable, treat it as if all parameters/locals are initialized.
635         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
636         infinite loops before merging-in break origins.
637
638         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
639         (Reachability.Reachable): Split part into ...
640         (Reachability.Unreachable): ... this.  Simplify.
641         (Reachability.IsUnreachable): Use 'Unreachable' instead.
642
643         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
644         (Reachability.SetThrowsSometimes): Likewise.
645         (FlowBranchingBlock.MergeTopBlock): Don't compare against
646         TriState.Always, use corresponding property.
647         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
648         (Block.Resolve): Likewise.  Remove some redundant checks.
649
650 2006-05-02  Raja R Harinath  <harinath@gmail.com>
651
652         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
653         (Reachability.Meet): Don't bother checking AlwaysThrows --
654         barrier is always set.
655         (FlowBranchingBlock.Merge): Likewise.
656
657 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
658
659         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
660         defined, so it's references should also compile only for NET_2_0
661         (as occurs in mcs version)
662
663 2006-05-01  Raja R Harinath  <harinath@gmail.com>
664
665         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
666         checks for unreachable.
667
668 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
669
670         A fix for #77980
671         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
672
673         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
674         whether field is really assigned.
675
676 2006-04-30  Raja R Harinath  <harinath@gmail.com>
677
678         * flowanalysis.cs (Reachability): Make 4-argument constructor
679         private.
680         (Reachability.Meet): Rename from 'And'.  Remove static variant.
681         (Reachability.Always): Rename from the highly misleading
682         'Reachability.Never'.
683         (FlowBranching.Merge): Update to changes.  Mark an impossible
684         situation with a 'throw'.
685         (*): Update to changes.
686
687 2006-04-29  Raja R Harinath  <harinath@gmail.com>
688
689         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
690         Remove 'Undefined'.
691         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
692         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
693         (*): Update to changes.
694         * statement.cs: Update to changes.
695
696 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
697
698         A fix for #78049
699         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
700
701 2006-04-28  Raja R Harinath  <harinath@gmail.com>
702
703         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
704         dummy UsageVector.
705
706         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
707         argument to two arguments: an usage-vector and a bool.  Move call
708         to FlowBranching.Merge () ...
709         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
710
711         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
712         handling of loop and switch reachability to ...
713         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
714
715 2006-04-27  Raja R Harinath  <harinath@gmail.com>
716
717         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
718         handling to FlowBranchingLoop.InLoop.
719         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
720
721 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
722
723         A fix for #78115
724         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
725         anonymous method is allowed from AnonymousContainer here.
726
727         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
728
729 2006-04-24  Raja R Harinath  <rharinath@novell.com>
730
731         Fix #78156
732         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
733
734 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
735
736         A fix for #49011.
737         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
738         (DoubleConstant.Reduce): Ditto.
739
740 2006-04-23  Raja R Harinath  <rharinath@novell.com>
741
742         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
743         Remove 'lvalue_right_side' argument.  Move parts to ...
744         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
745         (LocalVariable.DoResolveLValue): ... these.
746
747 2006-04-21  Raja R Harinath  <rharinath@novell.com>
748
749         Fix cs1655.cs
750         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
751         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
752         (LocalVariableReference.DoResolveBase): Use it to implement new
753         CS1655 check.
754         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
755         (Argument.Resolve): Simplify.  Move CS1510 check ...
756         * ecore.cs (Expression.ResolveLValue): ... here.
757         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
758         (PropertyExpr.DoResolveLValue): Likewise.
759         (FieldExpr.Report_AssignToReadonly): Likewise.
760         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
761         LValueMemberAccess or LValueMemberOutAccess on instance depending
762         on it.
763         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
764         DoResolve as appropriate.
765
766 2006-04-20  Raja R Harinath  <rharinath@novell.com>
767
768         Fix #75800
769         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
770         implicit conversions on 'out' and 'ref' arguments.
771
772         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
773         improve clarity.  Remove dead code.
774
775         Fix #66031
776         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
777         (Catch.Resolve): Resolve VarBlock if it exists.
778
779 2006-04-19  Miguel de Icaza  <miguel@novell.com>
780
781         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
782         twice, this was some residual code, the enumerator was emitted
783         properly in the two branche of if later.
784
785         Fixes #78031
786         
787         Thanks to Martin for finding the source of the problem
788         
789 2006-04-19  Raja R Harinath  <rharinath@novell.com>
790
791         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
792         cast is never an lvalue.
793         (Cast.DoResolve, Cast.ResolveRest): Combine.
794         (Argument.Emit): Simplify slightly.  Move 'Expr is
795         IMemoryLocation' check ...
796         (Argument.Resolve): ... here.
797         (Argument.Error_LValueRequired): Remove.  Inline into only user.
798
799         Simplifications.  Fix cs0191-2.cs
800         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
801         CS1649 and CS1651 to ...
802         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
803         the actual selection of the error code and message to a lookup
804         table.  Add a dummy return value to simplify callsites.
805         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
806         readonly fields of other instances of the same type.  Move CS0197
807         warning from ...
808         * expression.cs (Argument.Resolve): ... here.  Simplify code.
809         Ensure that ec.InRefOutArgumentResolving is only set during LValue
810         resolution of an out or ref argument.  The code simplification
811         above uses this invariant.
812
813 2006-04-18  Raja R Harinath  <rharinath@novell.com>
814
815         Possibly fix #77752.  Fix cs1690-[4-7].cs.
816         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
817         CheckMarshallByRefAccess.  Drop parameter.
818         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
819         warning.
820         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
821         InstanceExpression.
822         * report.cs (AllWarnings): Add CS1690.
823         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
824         for ref access too.
825         (LocalVariableReference.DoResolveBase): Update.
826
827 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
828
829         * class.cs (MethodOrOperator): Moved common parts from method class.
830         detect obsolete attributes.
831         (Method.Define): Simplified as it reuses code from base.
832         (Constructor.ValidAttributeTargets): Fixed issue found during
833         refactoring.
834         (Destructor.ValidAttributeTargets): Fixed issue found during
835         refactoring.
836         (Operator): Finished refactoring set off by #78020. Operator class is now
837         ordinary method class.
838
839         * anonymous.cs: Updated.
840
841 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
842
843         * class.cs (Constructor.Emit): Don't emit the attributes twice.
844
845 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
846
847         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
848         detect obsolete attributes.
849         (Method.CreateEmitContext): Moved to MethodOrOperator.
850
851 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
852
853         A fix for #78048.
854         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
855         customized exception to make crash detection easier.
856         (MethodOrOperator): Started to work on new base class for methods and
857         operators.
858         (Method): Derives from MethodOrOperator.
859         (Constructor.Emit): Emits its own attributes.
860         (AbstractPropertyEventMethod.Emit): Ditto.
861         (Operator): Derives from MethodOrOperator, will refactor fully in extra
862         patch.
863         (Operator.Emit): It's temporary more tricky than should be.
864         
865         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
866
867         * report.cs (InternalErrorException): Add ctor with inner exception.
868
869 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
870
871         A fix for #76744.
872         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
873         only not visible.
874
875 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
876
877         A fix for #77916.
878         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
879         array.
880
881 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
882
883         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
884         attribute is present and Guid not.
885         (Interface.ApplyAttributeBuilder): Ditto.
886
887         * attribute.cs: Add error message.
888
889 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
890
891         A fix for #78020.
892
893         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
894         sources (it's composite) so hold them in extra array as they are used in
895         Emit phase only. It worked in the previous versions by mistake.
896         (Attribute.Emit): Emit attribute for more owners when exist.
897
898         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
899         it has now different behaviour.
900
901 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
902
903         * constant.cs (Constant.IsDefaultInitializer): New method.
904
905         * class.cs: Updated.
906
907         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
908         re-initialize default values. It saves KBs almost for every assembly.
909         Thanks Zoltan for the idea.
910         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
911         (ArrayCreation.DoResolve): Resolve only once.
912         (ArrayCreation.Emit): Emit static initializer only when it is faster.
913         (ArrayCreation.GetAttributableValue): Cope with optimized values.
914
915 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
916
917         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
918         From #77961.
919
920 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
921
922         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
923         in an embedded statement too.
924
925 2006-04-01  Raja R Harinath  <rharinath@novell.com>
926
927         Fix #77929
928         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
929         testing.
930
931         Fix #77958
932         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
933
934         Fix #77962
935         * report.cs (SymbolRelatedToPreviousError): Drop generic type
936         arguments before checking whether a type is reflected or not.
937
938         Fix #77954
939         * expression.cs (Invocation.IsApplicable): Ensure a generic method
940         definition doesn't take part in overload resolution.
941         (Invocation.IsParamsMethodApplicable): Likewise.
942         (Invocation.OverloadResolve): When replacing a reflected override
943         method with its base definition, ensure that type arguments are
944         applied.
945
946 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
947
948         A fix for #77966.
949
950         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
951         was not specified.
952
953         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
954
955 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
956
957         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
958         phase.
959
960         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
961         LocalTemporary change.
962
963         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
964         TypeContainer.
965         (ClassOrStruct.DefineFieldInitializers): Implemented static field
966         initializers optimization.
967         (ClassOrStruct.TypeAttr): Moved from modifiers.
968         (Constructor.CheckBase): Don't crash when static ctor has parameters.
969         (FieldBase.ResolveInitializer): Resolves initializer.
970         (FieldBase.HasDefaultInitializer): New property.
971
972         * cs-parser.jay: Removed message.
973
974         * expression.cs (CompilerGeneratedThis): New specialization.
975
976         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
977
978 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
979
980         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
981
982 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
983
984         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
985         be now EnumConstants only.
986
987 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
988
989         * attribute.cs, driver.cs: Reset more caches.
990
991 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
992
993         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
994
995 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
996
997         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
998         for easier reuse. Updated all overrides.
999         (IntegralConstant): New base class for all integral constants.
1000         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1001         of the constant range, report custom error.
1002         (UIntConstant.Reduce): Fixed uint conversion.
1003
1004         * ecore.cs, literal.cs: Reduce updates.
1005
1006 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1007
1008         A fix for #75813.
1009
1010         * class.cs (Constructor.Define): Removed extra if for default ctors.
1011         A patch from Atsushi Enomoto.
1012
1013 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1014
1015         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1016         GetAttributableValue.
1017
1018         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1019         when required.
1020
1021         * convert.cs (ImplicitConversionRequired): Error message moved to
1022         DoubleLiteral.
1023
1024         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1025         automatic implicit conversion of an output value.
1026         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1027
1028         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1029         conversion.
1030         (TypeOf.GetAttributableValue): Add extra handling for object type.
1031
1032         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1033         special error message.
1034
1035 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1036
1037         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1038         InternalCall.
1039         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1040         compatible with MS runtime.
1041
1042 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1043
1044         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1045         attribute arguments here.
1046
1047         * class.cs (Indexer.Define): The check was moved to attribute class.
1048
1049 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1050
1051         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1052
1053 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1054
1055         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1056
1057         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1058         the blocks too.
1059
1060 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1061
1062         * doc-bootstrap.cs : fix build.
1063
1064 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1065
1066         * expression.cs (StringConcat.Append): Issue a warning when empty string
1067         is going to append.
1068
1069 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1070
1071         * assign.cs (CompoundAssign.ResolveSource): Removed.
1072
1073         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1074         clean up.
1075
1076         * class.cs (TypeContainer.FindMethods): Removed.
1077         (TypeContainer.CheckMemberUsage): Made static.
1078
1079         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1080
1081         * constant.cs (CheckRange): Removed unused type argument.
1082         (CheckUnsigned): Removed unused type argument.
1083
1084         * cs-parser.jay: Updated after MemberAccess clean up.
1085         Uses Length for empty string test.
1086
1087         * cs-tokenizer.cs: Uses Length for empty string test.
1088         (IsCastToken): Made static.
1089         (is_hex): Made static.
1090         (real_type_suffix): Made static.
1091
1092         * decl.cs (SetupCache): Made static.
1093         (OnGenerateDocComment): Removed unused ds argument.
1094
1095         * delegate.cs (VerifyDelegate): Removed unused argument.
1096
1097         * doc.cs: Uses Length for empty string test.
1098
1099         * driver.cs: Uses Length for empty string test.
1100
1101         * enum.cs (IsValidEnumType): Made static
1102
1103         * expression.cs (EnumLiftUp): Removed unused argument.
1104         (ResolveMethodGroup): Ditto.
1105         (BetterConversion): Ditto.
1106         (GetVarargsTypes): Ditto.
1107         (UpdateIndices): Ditto.
1108         (ValidateInitializers): Ditto.
1109         (MemberAccess.ctor): Ditto.
1110         (GetIndexersForType): Ditto.
1111
1112         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1113
1114         * iterators.cs: Updated after MemberAccess clean up.
1115
1116         * location.cs: Uses Length for empty string test.
1117
1118         * namespace.cs: Uses Length for empty string test.
1119
1120          * report.cs (CheckWarningCode): Made static.
1121
1122         * statement.cs (LabeledStatement): Removed unused argument.
1123
1124         * typemanager.cs (FilterNone): Removed.
1125
1126 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1127
1128         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1129         obsolete.
1130
1131         * class.cs: Updated.
1132
1133 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1134
1135         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1136
1137 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1138
1139         A fix for #77816.
1140
1141         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1142         host container.
1143         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1144         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1145         Add more error reporting; Fixed issue with params.
1146
1147         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1148
1149         * cs-parser.jay: AnonymousMethod requires host container.
1150
1151         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1152
1153 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1154
1155         * class.cs: Change 'TypeContainer ds' constructor argument to
1156         'DeclSpace parent'.  Some classes were missed below due to
1157         different naming convention.
1158
1159         * class.cs (MemberCore.Parent): Delete.  This makes the
1160         ParentContainer changes below enforceable by the compiler.
1161
1162         Treat pointers to enclosing declaration space as 'DeclSpace', not
1163         'TypeContainer'.
1164         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1165         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1166
1167         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1168         of TypeContainer.
1169         (Block.AddThisVariable): Likewise.
1170         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1171         (AbstractPropertyEventMethod.Emit): Likewise.
1172         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1173         (GetMethod.Define, SetMethod.Define): Likewise.
1174         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1175         (DelegateMethod.EmitMethod): Likewise.
1176
1177         Fix regression test-partial-13.cs.
1178         Rationalize use of PartialContainer.  Ensure that the partial
1179         class semantics can be tied to type-correctness, i.e., any
1180         violation will cause a compile error.
1181         * class.cs, const.cs: Access all fields that belong to class
1182         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1183         Resolve()-like functions still use 'Parent'.
1184
1185         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1186         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1187         (PropertyMethod.CheckModifiers): Remove unused argument.
1188         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1189         DeclSpace.
1190
1191 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1192
1193         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1194
1195 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1196
1197         Make semantics of PartialContainer simpler.
1198         * decl.cs (DeclSpace.IsPartial): Remove.
1199         * class.cs (TypeContainer.IsPartial): Likewise.
1200         (TypeContainer..ctor): Set PartialContainer to point to self.
1201         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1202         (TypeContainer.FindNestedType): Likewise.
1203         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1204
1205 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1206
1207         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1208
1209 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1210
1211         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1212         classes.
1213
1214 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1215
1216         * class.cs (Operator.Define): An error for base conversion was not
1217         reported correctly.
1218
1219 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1220
1221         A fix for #77593, #77574.
1222
1223         * class.cs (MethodCore.CheckBase): Another if for operator.
1224
1225 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1226
1227         A fix for #77822.
1228
1229         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1230         reporting, it's more tricky than I thought.
1231
1232 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1233
1234         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1235         were not resolved
1236
1237         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1238         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1239         conversion test.
1240         
1241         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1242         not needed.
1243
1244 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1245
1246         A fix for #77353.
1247
1248         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1249         (Event.Define): ditto
1250         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1251
1252         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1253         Removed redundant code and set NewSlot for Invoke method too.
1254
1255         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1256         (Parameters.MergeGenerated): New method. Use this method when you merge
1257         compiler generated argument with user arguments.
1258
1259 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1260
1261         * attribute.cs (ResolveAsTypeTerminal): Removed.
1262
1263         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1264         specialization for predefined types; 30% speed up.
1265         Finally placed obsolete check to right place.
1266         (Expression.ResolveType): Removed.
1267
1268         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1269         Updated after ResolveType was removed.
1270
1271         * expression.cs (Cast.ctor): Check void cast.
1272         (Binary.ResolveAsTypeTerminal): Is never type.
1273         (Conditional.ResolveAsTypeTerminal): Is never type.
1274
1275         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
1276
1277 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1278
1279         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
1280
1281 2006-03-23  Martin Baulig  <martin@ximian.com>
1282
1283         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
1284         type check if either of the types is an open generic type.
1285
1286 2006-03-23  Martin Baulig  <martin@ximian.com>
1287
1288         * convert.cs
1289         (Convert.ExplicitTypeParameterConversion): New method; implement
1290         explicit type parameter conversions.
1291
1292 2006-03-23  Martin Baulig  <martin@ximian.com>
1293
1294         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
1295         blindly allow all conversions if we do not have any constraints.
1296
1297 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
1298
1299         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
1300         these two separated members to simplify the code.
1301         (Attribute.Resolve): Refactored to use new fields and methods.
1302         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
1303         implemented obsolete attribute checking.
1304         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
1305         implemented obsolete checking again. It look line never ending quest ;-)
1306         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
1307
1308         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
1309
1310         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
1311
1312         *class.cs (Property.Define): Add RegisterProperty call.
1313
1314         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
1315         argument groups (only 2).
1316
1317         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
1318         encoding expression to arguments.
1319         (Expression.ExprClassToResolveFlags): Just turned to property.
1320
1321         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
1322         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
1323         optimized as well as implemented support for zero-length attributes.
1324
1325         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
1326         Add caching of PropertyInfo's.
1327
1328 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1329
1330         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
1331         error multiple times.
1332
1333 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1334
1335         New partial class implementation.
1336         A fix for #77027, #77029, #77403
1337
1338         * attribute.cs (Attributable): Made attributes protected.
1339
1340         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
1341         the replacements of ClassPart and PartialContainer.
1342         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
1343         (TypeContainer.AddInterface): Ditto.
1344         (TypeContainer.AddPartial): The main method for partial classes. It checks
1345         for errors and merges ModFlags and attributes. At the end class is added to
1346         partial_parts list.
1347         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
1348         required here.
1349         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
1350         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
1351         from the rest of partial classes.
1352         (TypeContainer.GetClassBases): Simplified.
1353         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
1354         DefineType.
1355         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
1356         (TypeContainer.HasExplicitLayout): Uses Flags now.
1357         (PartialContainer): Removed.
1358         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
1359         (StaticClass): Was merged with Class.
1360         (Class.GetClassBases): class and static class bases are verified here.
1361         (Class.TypeAttr): Added static attributes when class is static.
1362         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
1363         (MemberBase): In some cases we need to call parent container for partial
1364         class. It should be eliminated but it's not easy now.
1365
1366         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
1367
1368         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
1369         partial classed to accumulate class comments.
1370         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
1371
1372         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
1373
1374         * driver.cs (MainDriver): Tree.GetDecl was removed.
1375
1376         * modifiers.cs (Modifiers): Add partial modifier.
1377
1378         * tree.cs (Tree.decl): Removed.
1379         (RootTypes): Started to use this class more often for root types
1380         specializations.
1381
1382 2006-03-23  Raja R Harinath  <rharinath@novell.com>
1383
1384         * generic.cs (TypeParameter.UpdateConstraints): Update
1385         'constraints' if null.
1386
1387 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1388
1389         A fix for #77615
1390
1391         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
1392         external interface does not have an attribute.
1393
1394 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1395
1396         Another prerequisites for new partial classs implementation.
1397         
1398         * attribute.cs (Attribute.Equal): Implemented.
1399         (Attribute.Emit): Changed as attributes can be applied more than twice.
1400         (Attributes.Emit): Check for duplicate attributes here.
1401
1402         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
1403         as a parameter, clean-up.
1404
1405 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1406
1407         A fix for #77485
1408
1409         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
1410         contains obsolete attribute check which can in some cases look for base
1411         type of current class which is not initialized yet.
1412         (TypeContainer.BaseType): Replacement of ptype.
1413
1414         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
1415
1416 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1417
1418         First of prerequisites for new partial classs implemention.
1419         
1420         * attribute.cs (Attributable): Extended by ResolveContext;
1421         Attributes finally have correct context for resolving in all cases.
1422         (AttachTo): Attribute owner is assigned here.
1423
1424         * codegen.cs (IResolveContext): Introduce new interface to hold
1425         all information needed in resolving phase.
1426         (EmitContext): Implements IResolveContext; more clean-up needed here.
1427         
1428         * decl.cs (MemberCore): Implemented IResolveContext.
1429
1430         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
1431         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
1432         parameter.cs, statement.cs, tree.cs, typemanager.cs:
1433         Refactored to use new IResolveContext instead of EmitContext; cleanup
1434
1435 2006-03-22  Raja R Harinath  <rharinath@novell.com>
1436
1437         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
1438         mcs to keep code differences small.
1439         * attribute.cs (Attribute.GetParameterDefaultValue): New.
1440         * typemanager.cs (parameter_default_value_attribute_type): New.
1441         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
1442         CS1908 check.
1443
1444 2006-03-22  Martin Baulig  <martin@ximian.com>
1445
1446         * generic.cs
1447         (Nullable.NullableLiteral): Derive from `NullLiteral'.
1448
1449         * convert.cs
1450         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
1451         instead of the normal `NullLiteral'.
1452
1453 2006-03-21  Martin Baulig  <martin@ximian.com>
1454
1455         Fix #77583.
1456         * generic.cs (TypeManager.InferType): If `pt' is a generic
1457         parameter, don't check whether `pt == at'.
1458
1459 2006-03-20  Raja R Harinath  <rharinath@novell.com>
1460
1461         Fix #77852
1462         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
1463         (TypeParameter.Resolve): Update to change.
1464         (ConstraintChecker.CheckConstraints): Resolve type-argument
1465         constraints before use.
1466
1467 2006-03-16  Martin Baulig  <martin@ximian.com>
1468
1469         * generic.cs
1470         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
1471         and don't have any instance constructors, also lookup in the base class.
1472         (TypeManager.IsNullableValueType): New public method.
1473
1474         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
1475         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
1476         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
1477
1478         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
1479         instead of just TypeManager.IsNullableType() to determine whether
1480         a lifted operator exists.
1481         (UnaryMutator.DoResolve): Likewise.
1482         (Conditional.DoResolve): Likewise.
1483         (Binary.DoResolve): A lifted operator only exists if both operands
1484         are valuetypes and at least one of them is a nullable type.
1485
1486 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
1487
1488         * iterator.cs : yield break is allowed in try statement which has
1489           catch clauses. Fixed bug #77767.
1490
1491 2006-03-12  Martin Baulig  <martin@ximian.com>
1492
1493         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
1494         private IsSignatureEqual() to compare types; see the comment in
1495         that method; fixes #77674.
1496
1497 2006-03-10  Raja R Harinath  <rharinath@novell.com>
1498
1499         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
1500         (Expression.ResolveAsTypeTerminal): Likewise.
1501         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
1502         * expression.cs, generic.cs, iterators.cs: Likewise.
1503         * parameter.cs, statement.cs, typemanager.cs: Likewise.
1504
1505 2006-03-09  Martin Baulig  <martin@ximian.com>
1506
1507         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
1508         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
1509
1510 2006-03-09  Martin Baulig  <martin@ximian.com>
1511
1512         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
1513         `prepared' flag is set.
1514
1515         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
1516         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
1517         issues; see gtest-254.cs.
1518
1519 2006-03-07  Martin Baulig  <martin@ximian.com>
1520
1521         * generic.cs (TypeManager.InferType): Allow infering
1522         `IEnumerable<T>' with an array of T; see gtest-251.cs.
1523
1524 2006-03-06  Martin Baulig  <martin@ximian.com>
1525
1526         * generic.cs
1527         (TypeManager.InferType): Fix gtest-250.cs.
1528
1529         * typemanager.cs
1530         (TypeManager.IsSubclassOf): Also check the base class.
1531
1532         * expression.cs
1533         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
1534         fixes gtest-249.cs.
1535
1536 2006-03-01  Raja R Harinath  <rharinath@novell.com>
1537
1538         Fix #77679.
1539         * expression.cs (ParameterReference.DoResolveBase): Change return
1540         type to bool.
1541         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
1542         Update.
1543
1544         Fix #77628.
1545         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
1546
1547         Fix #77642.
1548         * typemanager.cs (GetFullNameSignature): Don't nullref on
1549         protected accessors.
1550
1551 2006-02-16  Martin Baulig  <martin@ximian.com>
1552
1553         * generic.cs
1554         (TypeManager.GetGenericFieldDefinition): New public method; use it
1555         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
1556
1557 2006-02-14  Martin Baulig  <martin@ximian.com>
1558
1559         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
1560
1561 2006-02-14  Martin Baulig  <martin@ximian.com>
1562
1563         * generic.cs
1564         (TypeManager.DropGenericMethodArguments): New public method; don't
1565         use GetGenericMethodDefinition() on something which is not a
1566         generic method.
1567
1568 2006-02-14  Martin Baulig  <martin@ximian.com>
1569
1570         * generic.cs
1571         (ConstraintChecker.CheckConstraints): If a type parameter has the
1572         `struct' constraint, the type must be a non-nullable valuetype.
1573
1574 2006-02-10  Martin Baulig  <martin@ximian.com>
1575
1576         * typemanager.cs
1577         (TypeManager.IsOverride): Make this work for instantiated methods
1578         in a generic class; fixes #77509.
1579         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
1580         rather than calling it directly; fixes #77488.  
1581
1582 2006-02-08  Martin Baulig  <martin@ximian.com>
1583
1584         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
1585         reporting into CheckConstraint() so we can use the correctly
1586         instantiated type.
1587
1588 2006-02-08  Martin Baulig  <martin@ximian.com>
1589
1590         * expression.cs (BaseAccess): Add support for generic methods.
1591
1592         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
1593         the new MethodGroupExpr.
1594
1595 2006-02-07  Martin Baulig  <martin@ximian.com>
1596
1597         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
1598         also reference types; fixes #77483.
1599
1600 2006-02-07  Martin Baulig  <martin@ximian.com>
1601
1602         * generic.cs
1603         (TypeManager.IsGenericMethod): We now return whether something is
1604         an instantiated generic method (and not a generic method def).
1605         (TypeManager.IsGenericMethodDefinition): New public method.
1606
1607         * typemanager.cs
1608         (TypeManager.CSharpSignature): Only include type arguments for
1609         "real" generic methods, not for any instantiated method.
1610         (TypeManager.GetMethodName): Likewise, but also allow generic
1611         method definitions here.
1612
1613 2006-02-06  Miguel de Icaza  <miguel@novell.com>
1614
1615         * codegen.cs (EmitScopeInitFromBlock): check here the
1616         capture_context, there is no need to make two calls to the
1617         EmitContext. 
1618
1619         * anonymous.cs: Add some debugging messages that might help me
1620         track other instances of this problem in the future (the
1621         regression of test 467).
1622
1623         * cs-parser.jay: track the variable block, as we need to initalize
1624         any captured variables declared in this block for the "catch"
1625         portion of the "Try" statement.
1626
1627         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
1628         scope initialization for captured variables. 
1629
1630         Also, move the emit for the variables after the block location has
1631         been marked.
1632
1633 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
1634
1635        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
1636         
1637 2006-02-06  Martin Baulig  <martin@ximian.com>
1638
1639         * class.cs (TypeContainer.DefineType): If we're a struct, pass
1640         `TypeManager.value_type' as parent type to
1641         ModuleBuilder.DefineType().  Fixes #77358.      
1642
1643 2006-02-02  Miguel de Icaza  <miguel@novell.com>
1644
1645         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
1646         commit yesterday, the initialization for the roots is necessary.
1647         What is not necessary is the scope activation.
1648
1649 2006-02-02  Raja R Harinath  <rharinath@novell.com>
1650
1651         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
1652         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
1653         CS0206 checks.
1654         (Argument.Resolve): Remove CS0206 checks.
1655
1656 2006-02-01  Miguel de Icaza  <miguel@novell.com>
1657
1658         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
1659         scopes for all the roots, the scopes will now be emitted when the
1660         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
1661
1662         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
1663         code.  This reduces a lot of existing cruft.
1664         
1665         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
1666         that the ScopeInfo is generated as we enter the scope, not at the
1667         time of use, which is what we used to do before.
1668
1669         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
1670         every time a Block is about to be emitted if we have a
1671         CaptureContext. 
1672
1673 2006-02-01  Raja R Harinath  <rharinath@novell.com>
1674
1675         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
1676         attribute for mscorlib too.
1677
1678         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
1679         (Reset): Update.
1680         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
1681
1682         * typemanager.cs (cons_param_array_attribute): Make private.
1683         (Reset): Set it to null.
1684         (InitCoreHelpers): Don't initialize it.
1685         (ConsParamArrayAttribute): New.  Initialize it as needed.
1686         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
1687
1688 2006-01-31  Miguel de Icaza  <miguel@novell.com>
1689
1690         * expression.cs: There might be errors reported during the
1691         selection of applicable methods.  If there are errors, do not
1692         continue execution as it will lead the compiler to crash.
1693
1694 2006-01-30  Miguel de Icaza  <miguel@novell.com>
1695
1696         * expression.cs: Member access is not allowed on anonymous
1697         methods.  Fixes #77402.
1698
1699 2006-01-30  Raja R Harinath  <rharinath@novell.com>
1700
1701         Fix #77401
1702         * cs-parser.jay (VariableDeclaration): Don't set
1703         current_array_type to null.
1704         (field_declaration, event_declaration, declaration_statement):
1705         Set it to null here.
1706
1707 2006-01-29  Raja R Harinath  <harinath@gmail.com>
1708
1709         Fix part of #77397
1710         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
1711
1712 2006-01-28  Raja R Harinath  <harinath@gmail.com>
1713
1714         * typemanager.cs (GenericParameterPosition): New.
1715         * doc.cs: Use it.
1716
1717 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
1718
1719         * doc.cs : To process "include" elements, first we should create
1720           another list than XmlNodeList, because it could result in node
1721           removal, which could result in that the XmlNodeList gives up
1722           yielding next node.
1723
1724 2006-01-25  Miguel de Icaza  <miguel@novell.com>
1725
1726         * expression.cs: Introduce an error report that we were not
1727         catching before.   Gonzalo ran into it.
1728
1729 2006-01-23  Miguel de Icaza  <miguel@novell.com>
1730
1731         A fix for bug: #76957
1732         
1733         * iterators.cs (MoveNextMethod.CreateMethodHost): call
1734         ComputeMethodHost before creating the method, this is a new
1735         requirement. 
1736
1737         * anonymous.cs (AnonymousContainer): Now we track all the scopes
1738         that this method references (RegisterScope).  The actual scope
1739         where the method is hosted is computed with the ComputeMethodHost
1740         before we create the method.
1741
1742         Moved the Deepest routine here.
1743
1744         (AnonymousContainer.ComputeMethodHost): New routine used to
1745         compute the proper ScopeInfo that will host the anonymous method.
1746
1747         (ScopeInfo): Deal with multiple roots.  The problem was that we
1748         did not have a unique root where all ScopeInfos could be hanged
1749         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
1750         of roots.  
1751
1752         Remove AdjustMethodScope which is now computed at the end.  Remove
1753         LinkScope which did a partial link, instead link all ScopeInfos
1754         before code generation from the new "LinkScopes" routine. 
1755
1756         Simplify all the Add* routines as they no longer need to maintain
1757         the tree, they just need to record that they are using variables
1758         from a ScopeInfo.
1759
1760         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
1761         routines to produce the forest of ScopeInfo trees.
1762
1763         * class.cs (TypeContainer.AppendMethod): This is just like
1764         AddMethod, but ensures that an interface implementation method
1765         (IEnumerable.XXX) is not inserted at the beginning of the queue of
1766         methods, but at the end.
1767
1768         We use this functionality to ensure that the generated MoveNext
1769         method in the iterator class is resolved/emitted before the
1770         enumerator methods created.   
1771
1772         This is required because the MoveNext method computes the right
1773         ScopeInfo for the method.  And the other methods will eventually
1774         need to resolve and fetch information computed from the anonymous
1775         method. 
1776
1777         
1778 2006-01-23  Raja R Harinath  <rharinath@novell.com>
1779
1780         Improve implementation of section 14.4.2.2 (Better function member).
1781         * expression.cs (Invocation.MoreSpecific): Compare all type
1782         arguments before deciding if one type is more specific than
1783         another.  Handle array types too.  Return the more specific type.
1784         (Invocation.BetterFunction): Add more tie-breaking rules from
1785         section 14.4.2.2.  Perform "more specific" check after
1786         other tie-breaking rules.  Compare all parameter types before
1787         choosing the "more specific" method.
1788
1789 2006-01-21  Raja R Harinath  <harinath@gmail.com>
1790             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
1791
1792         Fix rest of #76995.
1793         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
1794         the 'aliases' hash.
1795         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
1796         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
1797
1798 2006-01-18  Martin Baulig  <martin@ximian.com>
1799
1800         * class.cs (TypeContainer.AddToMemberContainer): Use
1801         `symbol.MemberName.MethodName' instead of just `symbol.Name';
1802         fixes #77124.
1803
1804 2006-01-18  Martin Baulig  <martin@ximian.com>
1805
1806         Fix #76417: a generic class may now have methods which may unify
1807         for some type parameter substitutions.
1808
1809         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
1810         for methods which may unify anymore.
1811
1812         * expression.cs (Invocation.MoreSpecific): New private static
1813         method; checks whether one method is more specific than another
1814         according to 14.4.2.2 of the spec.
1815         (Invocation.BetterFunction): Implement the tie-breaking rules from
1816         14.4.2.2 of the spec: if two methods unify for some type parameter
1817         substitution, we need to pick the more specific one.
1818
1819 2006-01-18  Raja R Harinath  <rharinath@novell.com>
1820
1821         Fix #76656, cs0231-2.cs.
1822         * cs-parser.jay (formal_parameter_list): Make error case catch
1823         more issues.
1824         (parenthesized_expression_0): Add CS1026 check.
1825         (invocation_expression): Remove unused { $$ = lexer.Location }.
1826
1827 2006-01-17  Raja R Harinath  <rharinath@novell.com>
1828
1829         Fix #76824.
1830         * cs-parser.jay (statement_expression): Don't list out the
1831         individual statement-expressions.  Convert syntax error into
1832         CS0201 check.
1833
1834 2006-01-16  Raja R Harinath  <rharinath@novell.com>
1835
1836         Fix #76874.
1837         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
1838         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
1839         CheckIntermediateModification.
1840         (FieldExpr.DoResolve): Add new two-argument version that
1841         allows us to resolve the InstanceExpression as an lvalue.
1842         The one-argument variant is now just a wrapper.
1843         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
1844         Resolve the lhs as an lvalue if the it has a value type.
1845         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
1846         from Assign.DoResolve.
1847         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
1848         resolved as an lvalue.
1849         (PropertyExpr.DoResolve): Update.
1850         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
1851         has a value type.  Move CS1612 check here from
1852         CheckIntermediateModification.
1853         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
1854         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
1855         'right_side' of a ResolveLValue on an 'out' argument.
1856         (EmptyExpression.LValueMemberAccess): New.  Used as the
1857         'right_side' of a propagated ResolveLValue on a value type.
1858         (LocalVariableReference.DoResolveBase): Recognize
1859         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
1860         Add CS1654 check.
1861         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
1862         EmptyExpression.Null.
1863
1864 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
1865
1866         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
1867           Type.IsGenericParameter(). Fixed bug #77183.
1868         * doc.cs : it is now identical to doc.cs in mcs.
1869
1870 2006-01-16  Martin Baulig  <martin@ximian.com>
1871
1872         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
1873
1874 2006-01-16  Martin Baulig  <martin@ximian.com>
1875
1876         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
1877         ctors; fixes #77250.
1878
1879 2006-01-12  Miguel de Icaza  <miguel@novell.com>
1880
1881         This fixes the problem where we used ldfld instead of ldflda to
1882         load the "THIS" pointer on captured parameters, when THIS is a
1883         value type.  See bug #77205.
1884         
1885         * iterators.cs (CapturedThisReference.Emit): Pass false to
1886         EmitThis (we do not need the address).
1887
1888         * codegen.cs (EmitThis): it needs to know whether we need the
1889         address of `this' or not.  This is used by value types.  
1890
1891         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
1892         every other call passes false.
1893
1894 2006-01-12  Raja R Harinath  <rharinath@novell.com>
1895
1896         Fix #77221.
1897         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
1898         GetOverride.
1899         * expression.cs (Invocation.OverloadResolve): Update.
1900         (Invocation.DoResolve): Avoid double resolution of invocation.
1901
1902 2006-01-11  Raja R Harinath  <rharinath@novell.com>
1903
1904         Fix #77180.
1905         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
1906         unary negation of floating point types as 0-expr; negation cannot
1907         overflow in floating point types.
1908
1909         Fix #77204.
1910         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
1911         on operands of 'void' type.
1912
1913         Fix #77200.
1914         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
1915         and ExclusiveOr for boolean constants too.
1916
1917 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
1918
1919         * expression.cs: Fix Console.WriteLine ((this = x).foo);
1920
1921 2006-01-12  Miguel de Icaza  <miguel@novell.com>
1922
1923         * cs-tokenizer.cs (Position): New class used to save and restore
1924         the position state in the tokenizer.  Before this patch the save
1925         and restore was not complete enough so the line and columns would
1926         start to drift and the debugger and stack traces will get the
1927         wrong data.
1928
1929 2006-01-10  Martin Baulig  <martin@ximian.com>
1930
1931         * generic.cs
1932         (TypeParameter.InflateConstraints): New public method.
1933
1934         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
1935         constraints; fixes #77042.
1936
1937 2006-01-10  Martin Baulig  <martin@ximian.com>
1938
1939         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
1940         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
1941         #77061. 
1942
1943 2006-01-09  Raja R Harinath  <rharinath@novell.com>
1944
1945         Fix #75636.
1946         * expression.cs (Invocation.OverloadResolve): Replace reflected
1947         override methods with their base virtual methods, rather than
1948         skipping over them.
1949         * typemanager.cs (TypeManager.GetOverride): New.
1950
1951 2005-12-21  Miguel de Icaza  <miguel@novell.com>
1952
1953         * driver.cs: Report the case of no source files and no -out:
1954         argument provided.
1955
1956 2005-12-20  Raja R Harinath  <rharinath@novell.com>
1957
1958         Fix #77035.
1959         * expression.cs (ComposedCast.GetSignatureForError): Define.
1960
1961 2006-01-05  Jb Evain  <jbevain@gmail.com>
1962
1963         * class.cs (Property.Define, Indexer.Define): do not tag the
1964         properties as SpecialName | RTSpecialName.
1965
1966 2006-01-04  Miguel de Icaza  <miguel@novell.com>
1967
1968         * class.cs (MethodCore.IsDuplicateImplementation): This method was
1969         doing a low-level comparission of parameter types.  It was lacking
1970         a check for __argslist. 
1971
1972 2005-12-30  Miguel de Icaza  <miguel@novell.com>
1973
1974         * expression.cs (ParameterReference.DoResolveBase): Allow
1975         reference parameters if they are local to this block. 
1976
1977         This allows the ref and out parameters of a delegate to be used in
1978         an anonymous method, for example:
1979
1980         delegate void set (out int x);
1981
1982         set s = delegate (out int x){
1983                 x = 0;
1984         };
1985
1986         This is used by functionality introduced late in the C# language.
1987         
1988         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
1989         method that take ref and out parameters. 
1990
1991         Fixes #77119 which was a late change in the spec.
1992
1993 2005-12-23  Miguel de Icaza  <miguel@novell.com>
1994
1995         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
1996         parent if its the same scope.  Fixes #77060.
1997
1998 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
1999
2000         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2001
2002 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2003
2004         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2005         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2006         that doesn't contain the full public key. This is a update of the
2007         friend assemblies in .Net 2.0 release.
2008         
2009 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2010
2011         Fix #76995
2012
2013         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2014         ListDictionary, to contain the ExternAliasEntry entries (in
2015         addition to the NamespaceEntry.aliases hashtable). This field is
2016         shared between the original entry and its doppelganger (bodyless 
2017         copy of it).
2018         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2019         extern_aliases field.
2020         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2021         lookup in extern_aliases.
2022
2023 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2024
2025         Fix #77006.
2026         * class.cs (TypeContainer.Mark_HasEquals): New.
2027         (TypeContainer.Mark_HasGetHashCode): New.
2028         (ClassPart): Override them.
2029         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2030
2031         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2032         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2033         DeclSpace.
2034
2035         Fix #77008.
2036         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2037         'parent' argument to the base constructor.
2038
2039         Remove all mention of TypeContainer from decl.cs.
2040         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2041         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2042         (DeclSpace.DeclSpace): Likewise.
2043         (DeclSpace.DefineMembers): Remove unused argument.
2044         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2045         debugging check -- we don't care if the debug code throws an
2046         InvalidCastException instead of an InternalErrorException.
2047         * class.cs (TypeContainer.DefineMembers): Update to changes.
2048         (TypeContainer.DoDefineMembers): Likewise.
2049         (TypeContainer.GetMethods): Likewise.
2050         (PropertyMember.Define): Likewise.
2051         (MemberBase.Parent): New property that forwards to
2052         MemberCore.Parent, but ensures that we get a TypeContainer.
2053         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2054         (RootContext.PopulateTypes): Likewise.  Remove special case code
2055         for !RootContext.StdLib: DefineMembers is idempotent.
2056
2057 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2058
2059         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2060
2061 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2062
2063         * doc.cs : The search for referenced namespace was insufficient to
2064           get global one as it used to do. Fixed bug #76965.
2065
2066 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2067
2068         * doc.cs : check name in cref in the last phase that whether it is
2069           namespace or not.
2070
2071 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2072
2073         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2074           Mono.C5.
2075
2076 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2077
2078         * doc.cs : so it turned out that we cannot skip override check for 
2079           interface members. Fixed bug #76954.
2080
2081 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2082
2083         * cs-tokenizer.cs : fixed bug #75984:
2084           - #warning and #error should not be handled when the source line
2085             is disabled.
2086           - #line is not checked strictly when the source line is disabled.
2087           - #define and #undef is on the other hand checked strictly at any
2088             state.
2089
2090 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2091
2092         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2093           CS1027 report.
2094
2095 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2096
2097         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2098
2099         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2100         nested types.
2101
2102 2005-12-14  Martin Baulig  <martin@ximian.com>
2103
2104         * typemanager.cs (TypeManager.GetFullName): Make this public;
2105         `Type.Fullname' now never returns null.
2106
2107         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2108         explicit interface implementations; we're now using the same
2109         naming convention than csc does.
2110
2111 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2112
2113         * convert.cs (ExplicitConversionCore): Check the return value from
2114         ExplicitConversionCore which can return null on failure.  Fixes #76914
2115
2116 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2117
2118         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2119         instead of IsGenericInstance.
2120         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2121         code that's now covered by the more general test.
2122         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2123
2124         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2125         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2126         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2127         * generic.cs, report.cs, typemanager.cs: Likewise.
2128
2129 2005-12-08  Martin Baulig  <martin@ximian.com>
2130
2131         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2132
2133         * typemanager.cs (TypeManager.CSharpSignature): Include type
2134         arguments in the signature of a generic method.
2135
2136 2005-12-07  Martin Baulig  <martin@ximian.com>
2137
2138         Add support for custom attributes on type parameters.
2139
2140         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2141
2142         * generic.cs (TypeParameterName): New public class; we use this
2143         instead of a `string' to store the name of a type parameter, so we
2144         can also have `Attributes'.
2145         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2146         array instead of a `string[]' array.
2147         (TypeParameter.ctor): We now also take an `Attributes' argument.
2148         (TypeParameter.EmitAttributes): New public method; emit our
2149         `OptAttributes' here.
2150         (GenericMethod.EmitAttributes): New public method; emit the custom
2151         attributes on all our type parameters.
2152
2153         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2154         our type parameters.
2155         (MethodData.Define): If we're a generic method, call
2156         EmitAttributes() on it.
2157
2158 2005-12-07  Martin Baulig  <martin@ximian.com>
2159
2160         * generic.cs
2161         (ConstraintChecker): New public abstract class; move the
2162         constraint checking here from `ConstructedType' and also do
2163         constraint checking for generic methods here.
2164
2165         * expression.cs (Invocation.OverloadResolve): Use
2166         ConstraintChecker.CheckConstraints() if we resolved to a generic
2167         method.  Fix #76806.
2168
2169 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2170
2171         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2172
2173         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2174         event initializers.
2175         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2176         (FieldBase.Initializer): Initializer is now optional.
2177         (EventField.Define): Only event field can have initializer.
2178
2179         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2180
2181         * const.cs (Const): Reuse initializer.
2182
2183         * cs-parser.jay: Updated after FieldBase changes.
2184         Added current_array_type to simplify array initializers.
2185
2186         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2187
2188         * expression.cs, iterators.cs: Updated.
2189
2190         * namespace.cs (NamespaceEntry): Made UsingFound private.
2191
2192 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2193
2194         * parameterCollection.cs: Obsolete, removed.
2195         * parser.cs: Obsolete, removed.
2196
2197 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2198
2199         Fix #76849.
2200         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2201
2202         * enum.cs (Enum.Define): Set obsolete context here.
2203
2204 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2205
2206         * doc.cs :
2207           - FindDocumentedMember() now expects 1) paramList as null
2208             when "we don't have to check the number of parameters" and
2209             2) Type.EmptyTypes when "there is no arguments".
2210           - Introduced FoundMember struct to hold the exact type which was
2211             used to find the documented member (the above change broke
2212             test-xml-044; it might be better just to use DeclaringType than
2213             what MS does, like this change does, but it depends on usage.)
2214
2215 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2216
2217         * doc.cs : documented member might be from DeclaringType for nested
2218           types. Fixed bug #76782.
2219
2220 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2221
2222         * anonymous.cs: Have the param code handle leaving copies on the
2223         stack etc. Allows anonymous params to take part in the assignment
2224         code (++, +=, etc). Fixes bug #76550
2225
2226         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2227         it down to the anon code.
2228
2229         * iterators.cs: Use dummy var here
2230
2231         * codegen.cs: Handle new vars
2232
2233 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2234
2235         Fix #76849.
2236         * class.cs (MethodData.Define): Set proper Obsolete context.
2237
2238         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2239         obsolete context.
2240         (FieldExpr.DoResolve): Ditto.
2241
2242 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2243
2244         Fix #76849.
2245         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2246         parent is not obsolete.
2247
2248 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2249
2250         * doc.cs : (FindDocumentedMember) find parameterless members first
2251           and get CS0419 in the early stage. Fixed first case of bug #76727.
2252
2253 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2254
2255         Fix #76859.
2256         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2257         no error was reported.
2258
2259         *expression.cs (Binary.DoResolve): left can be null.
2260
2261 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2262
2263         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2264         abstract method and all overrides.
2265         * support.cs (ParameterData.GenericConstraints): Delete.
2266         (ReflectionParameters.type_params): Delete.
2267         (ReflectionParameters.ReflectionParameters): Make private.
2268         (ReflectionParameters.GetConstaints): New factory method.
2269         * generic.cs (TypeParameterDefineType): Use it.
2270         (TypeManager.GetTypeParameterConstraints): Likewise.
2271
2272 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
2273
2274         Fix #76783.
2275         * class.cs (MethodData.Emit): Parameters should be labeled first.
2276
2277 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
2278
2279         Fix #76761.
2280         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
2281
2282 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
2283
2284         * attribute.cs (AreParametersCompliant): Moved to Parameter.
2285
2286         * class.cs (MethodCore): Parameter clean up.
2287         (IMethodData): Added ParameterInfo.
2288         (MethodData): Parameter clean up.
2289         (Indexer.Define): Parameter clean up.
2290
2291         * anonymous.cs,
2292         * codegen.cs,
2293         * cs-parser.jay,
2294         * decl.cs,
2295         * doc.cs,
2296         * ecore.cs,
2297         * flowanalysis.cs,
2298         * iterators.cs,
2299         * pending.cs,
2300         * statement.cs,
2301         * typemanager.cs: Parameter clean up.
2302
2303         * delegate.cs (Define): Get rid of duplicated code.
2304
2305         * expression.cs (ParameterReference): Removed useless parameters
2306         and simplified.
2307         (Invocation): Ditto.
2308
2309         * parameter.cs (ParamsParameter): New class, params specialization.
2310         (ArglistParameter): Attemp to separate arglist.
2311         (Parameter): Refactored to be reusable and faster.
2312         (Parameter.Modifier): Made understandable.
2313         (Parameters): Changed to be used as a class for `this' assembly
2314         parameters. Refactored to use new specialized classes.
2315
2316         * support.cs (ParameterData): Added Types property.
2317         (InternalParameters): Deleted.
2318
2319 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2320
2321         * doc.cs : the previous patch does not actually fix the bug.
2322           PropertyInfo override check is now implemented and really fixed it.
2323         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
2324
2325 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2326
2327         * doc.cs : apply "override filter" also to properties.
2328           Fixed bug #76730.
2329
2330 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2331
2332         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
2333           no need to check overrides. For classes, omit those results from 
2334           interfaces since they must exist in the class. Fixed bug #76726.
2335
2336 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2337
2338         * typemanager.cs : (GetFullNameSignature) differentiate indexers
2339           with different parameters. Fixed the second problem in #76685.
2340
2341 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2342
2343         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
2344           get expected 'protected' access in CheckValidFamilyAccess()).
2345           Fixed bug #76692.
2346
2347 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2348
2349         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
2350           Fixed bug #76705.  CS1569 was incorrectly commented out.
2351
2352 2005-11-23  Martin Baulig  <martin@ximian.com>
2353
2354         * generic.cs (Constraints.Define): Removed.
2355         (TypeParameter.DefineConstraints): Removed.
2356         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
2357         on the GenericTypeParameterBuilder here.
2358
2359 2005-11-23  Martin Baulig  <martin@ximian.com>
2360
2361         * typemanager.cs (TypeManager.GetProperty): Make this public.
2362
2363         * generic.cs (Nullable.NullableInfo.ctor): Use
2364         TypeManager.GetProperty() rather than using reflection directly.
2365
2366 2005-11-17  Martin Baulig  <martin@ximian.com>
2367
2368         * expression.cs (Indexers.GetIndexersForType): Added support for
2369         generic parameters; fixes #76587.
2370
2371 2005-11-17  Martin Baulig  <martin@ximian.com>
2372
2373         * anonymous.cs
2374         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
2375         inherit the scope from our parent.  Fixes #76653.
2376
2377 2005-11-15  Martin Baulig  <martin@ximian.com>
2378
2379         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
2380         instead of `ScopeTypeBuilder' to refer to the "current" type.
2381         (AnonymousMethod.CreateScopeType): Correctly create the helper
2382         class if we're inside a generic type definition.
2383
2384 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2385
2386         * doc.cs : use Invocation.IsOverride() to do real override check.
2387         * expression.cs : made Invocation.IsOverride() internal.
2388
2389 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2390
2391         * doc.cs : use TypeManager.FindMembers() instead of (possible)
2392           TypeBuilder.FindMembers() and filter overriden base members out.
2393           Fixed bug #76990.
2394
2395 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2396
2397         * doc.cs : ref/out parameters are represented as '@' (instead of
2398           '&' in type FullName). Fixed bug #76630 (additionally crefs).
2399
2400 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2401
2402         * doc.cs : when there was no '.' in cref to methods in doc comment,
2403           then parameters were missing in the output. Fixed bug #76691.
2404
2405 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2406
2407         * driver.cs : don't output docs when there is an error.
2408           Fixed bug #76693.
2409
2410 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2411
2412         * doc.cs :
2413           Now it should detect indexers. Fixed primary concern in bug #76685.
2414           Fixed CS0419 message to not show the identical member signature in
2415           the message.
2416
2417 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2418
2419         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
2420           instead of Type.FindMembers() since it does not handle events.
2421           Fixed bug #71604.
2422
2423 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
2424
2425         * codegen.cs: Fixed typo (speficied -> specified).
2426
2427 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2428
2429         Fix #76369.
2430         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
2431
2432 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2433
2434         * attribute.cs: Changed error message.
2435
2436         * cs-tokenizer.cs: One more check.
2437
2438 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2439
2440         * statement.cs (Block.Resolve): Ignore empty statement.
2441
2442 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2443
2444         * report.cs: Made error/warning methods more strict to avoid
2445         their misuse.
2446
2447         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
2448         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
2449         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
2450         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
2451
2452 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2453
2454         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
2455         Use the more explicit AssemblyName.FullName instead of 
2456         AssemblyName.Name to report errors.
2457         
2458 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2459
2460         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
2461         with mcs.
2462
2463 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2464
2465         * class.cs,
2466         * convert.cs,
2467         * cs-parser.jay,
2468         * decl.cs,
2469         * enum.cs,
2470         * expression.cs,
2471         * generic.cs,
2472         * pending.cs,
2473         * report.cs: Fixed error reporting and typos.
2474
2475         * generic.cs (TypeParameter.GetSignatureForError): New method.
2476         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
2477
2478         * typemanager.cs (GetFullName): Refactored.
2479
2480 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
2481
2482         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
2483         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
2484
2485         * class.cs (TypeContainer.IsComImport): New property.
2486         (Constructor.Define): Create proper ctor for ComImport types.
2487
2488         * expression.cs (New.CheckComImport): Fixed.
2489
2490 2005-11-07  Miguel de Icaza  <miguel@novell.com>
2491
2492         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
2493         that a parameter has been captured does not mean that we do not
2494         have to do the rest of the processing.  This fixes the second part
2495         of #76592.  If there was another anonymous method capturing
2496         values in the past, the Scope would never be set for the second
2497         method that captured the same parameter.
2498
2499         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
2500         properly manipulate the stack.   Second part of fix for #76592.
2501
2502         * expression.cs (New): Add support for invoking "new" on
2503         interfaces that have been flagged with the ComImport attribute and
2504         the CoClass.  Fixes #76637 
2505
2506         * statement.cs (Try.DoEmit): When a variable is captured, do not
2507         try to emit the vi.LocalBuilder variable as it has been captured.
2508         Create a temporary variable and store the results on the
2509         FieldBuilder.  Fixes #76642
2510
2511 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2512
2513         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
2514
2515         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
2516
2517         * expression.cs (Binary.DoResolve): Added && optimalization.
2518     
2519         * typemanager.cs (AddUserType): Removed useless argument.
2520
2521 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
2522
2523         * statement.cs (Block.variables): Uses ListDictionary.
2524
2525 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2526
2527         Fix #75969.
2528         * class.cs (PartialContainer.EmitType): Customized to emit
2529         security attributes.
2530         (ClassPart.ApplyAttributeBuilder): Transform security attribute
2531         for partial classes.
2532
2533 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2534
2535         Fix #76599.
2536         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
2537         access has to be fixed.
2538         
2539         * typemanager.cs (IsUnmanagedType): Wrong common field type.
2540
2541 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
2542
2543         Fix #76590.
2544         * ecore.cs (NullCast.Reduce): Implemented.
2545
2546         * expression.cs (ArrayCreation.CheckIndices): Correcly check
2547         constant type.
2548         
2549         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
2550         properly.
2551         (Foreach.Resolve): Catch null properly.
2552
2553 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
2554  
2555         * cs-tokenizer.cs: Warning text fix.
2556
2557         * driver.cs: AllWarningNumbers exposed on public interface.
2558
2559         * report.cs (): Reviewed warning numbers.
2560         (IsValidWarning): Use binary search.
2561
2562 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
2563  
2564         * driver.cs: Implemeted resource visibility.
2565         (Resources): New class for code sharing between /res: and
2566         /linkres:
2567  
2568 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2569
2570         decl.cs (CurrentTypeParameters): Fixed to be public.
2571
2572 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2573
2574         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
2575
2576 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2577
2578         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
2579
2580 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
2581
2582         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
2583
2584 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2585
2586         Add friend assembly access support.
2587         * typemanager.cs: assembly_internals_vis_attrs
2588         cache for friend assembly access. 
2589         (TypeManager.IsFriendAssembly): New method for
2590         checking friend assembly access.
2591         (TypeManager.Error_FriendAccessNameNotMatching): New
2592         helper method.
2593         (TypeManager.CompareKeyTokens): Likewise.
2594         (TypeManager.Filter): Handle friend accessible
2595         members.
2596
2597         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
2598         friend accessible types.
2599
2600         * ecore.cs (Expression.IsAccessorAccessible): Handle
2601         friend accessible properties.
2602
2603         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
2604         accessible types.
2605         
2606 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
2607
2608         Fix #76568.
2609         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
2610         folding.
2611         
2612         * convert (Convert.ImplicitReferenceConversion): NullCast holds
2613         contants only.
2614         
2615         * ecore.cs (NullCast): Child is contant only.
2616         
2617         * literal.cs (NullLiteral.Reduce): null can be converted to any
2618         reference type.
2619
2620 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
2621
2622         * driver.cs: Use Encoding.Default as default code page instead
2623           of ISO-28591.
2624
2625 2005-10-27  Raja R Harinath  <rharinath@novell.com>
2626
2627         Fix #76085.
2628         * expression.cs (Invocation.Error_InvalidArguments): Handle
2629         __arglist parameters.
2630         (Invocation.VerifyArgumentsCompat): Likewise.
2631         * support.cs (ReflectionParameters.GetSignatureForError): Print
2632         __arglist parameters.
2633         (InternalParamters.GetSignatureForError): Likewise.
2634         * parameter.cs (Parameters.GetSignatureForError): Likewise.
2635
2636 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
2637
2638         * attribute.cs (GetPropertyValue): Made public.
2639
2640         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
2641         Resolve.
2642         Add new property WrapNonExceptionThrows to handle 2.0 assembly
2643         attribute.
2644         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
2645         is not defined.
2646         
2647         * driver.cs: Reflect method name change.
2648         
2649         * statement.cs (Try.Resolve): Warn when try has both general
2650         exception handlers.
2651         
2652         * typemanager.cs: runtime_compatibility_attr_type new predefined
2653         type.
2654
2655 2005-10-26  Raja R Harinath  <harinath@gmail.com>
2656
2657         Fix #76419.
2658         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
2659         treat it as an empty parameter list.
2660
2661 2005-10-26  Raja R Harinath  <rharinath@novell.com>
2662
2663         Fix #76271.     
2664         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
2665         ResolveAsTypeStep silent.
2666         * statement.cs (Block.AddConstant): Mark block as used.
2667         (Block.ResolveMeta): Avoid piling on error messages
2668         if a constant initializer resolution fails.
2669
2670 2005-10-25  Raja R Harinath  <rharinath@novell.com>
2671
2672         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
2673         Remove.
2674         (NamespaceEntry.VerifyAllUsing): New.
2675         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
2676         behaviour.  Delegates actual resolution of alias to ...
2677         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
2678         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
2679         Update.
2680         * driver.cs (Driver.MainDriver): Update.
2681         
2682         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
2683         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
2684         property.
2685         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
2686         Remove.
2687         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
2688         RootNamespace.DefineNamespacesForAll.
2689
2690 2005-10-24  Raja R Harinath  <harinath@gmail.com>
2691
2692         * typemanager.cs (assemblies, external_aliases, modules)
2693         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
2694         (ComputeNamespaces, GetRootNamespace): Remove extra staging
2695         overhead.  Move resposibility ...
2696         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
2697         * driver.cs, attribute.cs, codegen.cs: Update to changes.
2698
2699 2005-10-23  Raja R Harinath  <harinath@gmail.com>
2700
2701         * namespace.cs (RootNamespace.all_namespaces): Renamed from
2702         cached_namespaces.  Improve usage.
2703         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
2704         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
2705         Move from GlobalRootNamespace and simplify.
2706         (RootNamespace.Global): Make instance variable.
2707         (RootNamespace.RootNamespace): Add "alias name" parameter.
2708         (GlobalRootNamespace): Simplify drastically.
2709         (Namespace.Lookup): Don't use GetNamespace.
2710         * typemanager.cs (GetRootNamespace): Rename from
2711         ComputeNamespaceForAlias.
2712         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
2713
2714 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
2715
2716         * anonymous.cs (AnonymousContainer): Don't crash when container
2717         doesn't exist.
2718
2719 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
2720
2721         * expression.cs (Binary.DoResolve): Warn when comparing same
2722         values.
2723
2724 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
2725
2726         Fix #76486.
2727         * expression.cs (Binary.DoResolve): It looks like there are no
2728         convetsion rules in enum context.
2729
2730 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2731
2732         Add support for extern alias qualifiers.
2733         * typemanager.cs: Move some LookupTypeReflection code
2734         to namespace.cs, to have cleaner code. Added some methods
2735         to help us keep track of the extern aliased references.
2736         * driver.cs: Add suport for extern alias assemblies on command
2737         line and check for their warnings/errors. Also keep track of the
2738         extern aliased assemblies.
2739         * namespace.cs: Move the global functionality of Namespace
2740         to GlobalRootNamespace/RootNamespace. Now the global namespace
2741         is GlobalRootNamespace.Globa. Also the code moved from 
2742         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
2743         Finally added LocalAliasEntry (AliasEntry before) and
2744         ExternAliasEntry, to handle alias statements.
2745         * cs-parser.jay: Add support in the grammar for extern alias
2746         statement.
2747         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
2748         Update callings to Namespace (now in GlobalRootNamespace).
2749
2750 2005-10-25  Martin Baulig  <martin@ximian.com>
2751
2752         * convert.cs (ImplicitTypeParameterConversion): Make base
2753         interfaces actually work; fixes #76557.
2754
2755 2005-10-25  Martin Baulig  <martin@ximian.com>
2756
2757         * generic.cs
2758         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
2759         all the type parameters; fixes #76551.
2760
2761 2005-10-25  Martin Baulig  <martin@ximian.com>
2762
2763         Fix #76472.
2764
2765         * generic.cs
2766         (GenericMethod.ctor): Added `Expression return_type' and
2767         `Parameters parameters' arguments.
2768         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
2769         parameter and return types to check their constraints if they're
2770         generic types.
2771
2772         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
2773         boolean field.
2774
2775         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
2776         constraints of a generic type if `ec.ResolvingGenericMethod'.
2777
2778         * class.cs (MethodCore.DoDefineParameters): Set
2779         `ec.ResolvingGenericMethod' if we're a generic method.
2780         (MemberBase.MemberType): Likewise.
2781
2782 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2783
2784         * typemanager.cs (TypeManager): Added 
2785         TypeManager.internals_visible_attr_type to cache
2786         S.R.CompilerServices.InternalsVisibleToAttribute.
2787
2788         * codegen.cs (AssemblyClass): Added checks for 
2789         InternalsVisibleToAttribute in new method 
2790         CheckInternalsVisibleAttribute () and also cache the
2791         AssemblyName in AssemblyClass.Name.
2792         
2793 2005-10-24  Martin Baulig  <martin@ximian.com>
2794
2795         * typemanager.cs
2796         (TypeManager.ExpandInterfaces): Added overloaded version which
2797         just takes a `Type[]' array.
2798
2799         * generic.cs
2800         (Constraints.Resolve): Don't expand the interfaces here; ie. we
2801         just use the interfaces which were explicitly specified and not
2802         the interfaces they inherit.  Fixes #76482.
2803         (TypeParameter.FindMembers): Expand the interfaces here.
2804
2805 2005-10-21  Martin Baulig  <martin@ximian.com>
2806
2807         * generic.cs
2808         (Constraints.Resolve): Also resolve the actual types here.
2809         (Constraints.ResolveTypes): Just check the constraints here.
2810         Fixes #76363; see gtest-218.cs.
2811
2812 2005-10-21  Martin Baulig  <martin@ximian.com>
2813
2814         * convert.cs
2815         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
2816         instead of a `BoxedCast'; fixes gtest-217.cs.
2817
2818 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
2819
2820         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
2821           1) "new()" is specified as generic parameter constraint and 2) the
2822           type is TypeBuilder and 3) the type is abstract even if it has a
2823           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
2824
2825 2005-10-20  Martin Baulig  <martin@ximian.com>
2826
2827         * generic.cs
2828         (GenericConstraints.TypeParameter): New public property.
2829         (TypeParameter.ctor): Also take a `DeclSpace' argument.
2830         (TypeParameter.DeclSpace): New public property.
2831         (TypeParameter.DefineType): Inflate the constraints if our
2832         `DeclSpace' is an `Iterator'.   
2833
2834 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
2835
2836         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
2837           GenericMethod argument to compare methods' generic type arguments.
2838           Fixed bug #76382.
2839
2840 2005-10-19  Martin Baulig  <martin@ximian.com>
2841
2842         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
2843         not ResolveType() when resolving the base type, so we're not
2844         checking the constraints here.
2845         (TypeContainer.ResolveType): Call ResolveType() on our base_type
2846         if we have any.
2847
2848 2005-10-19  Martin Baulig  <martin@ximian.com>
2849
2850         * generic.cs (ConstructedType.CheckConstraints): Committing
2851         untested fix for #76441.
2852
2853 2005-10-18  Raja R Harinath  <rharinath@novell.com>
2854
2855         Fix #76371.
2856         * class.cs (TypeContainer.DefineType): Move updating of
2857         topological sort earlier in the code.
2858         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
2859
2860 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
2861
2862         Fix #76273.
2863         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
2864         
2865         * constant.cs (Constant.TryReduce): Moved from Cast class.
2866         (Reduce): Made little bit more OO and fixed missing conversions.
2867         
2868         * ecore.cs (Reduce): Implemented.
2869         (Binary.EnumLiftUp): New method to upgrade values to enum values.
2870         
2871         * literal.cs (Reduce): Implemented.
2872         
2873         * class.cs: Reverted Miguel's wrong commit.
2874
2875 2005-10-14  Miguel de Icaza  <miguel@novell.com>
2876
2877         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
2878
2879 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
2880
2881         * cs-parser.jay, expression.cs : CS0214 was missing error location
2882           for constants. Fixed bug #76404.
2883
2884 2005-10-10  Raja R Harinath  <rharinath@novell.com>
2885
2886         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
2887         InstanceExpression.
2888         (PropertyExpr.EmitCall): Likewise.
2889         * expression.cs (Invocation.EmitArguments): Handle case where
2890         arguments == null.
2891         (Invocation.EmitCall): Avoid allocating temporary variable if
2892         there are no arguments.
2893
2894 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
2895
2896         Fix #76370.
2897         * convert.cs (ExplicitConversionCore): Fixed object->enum
2898         conversion.
2899
2900 2005-10-07  Raja R Harinath  <rharinath@novell.com>
2901
2902         Fix #76323.
2903         * convert.cs (ImplicitConversionStandard): Move conversion of
2904         void* to arbitrary pointer types ...
2905         (ExplicitConversionStandard): .. here.
2906         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
2907         error to always print typenames.
2908
2909 2005-10-07  Raja R Harinath  <rharinath@novell.com>
2910
2911         * convert.cs (GetConversionOperator): Rename from
2912         GetConversionOperators.  Move operator selection code from ...
2913         (UserDefinedConversion): ... here.
2914
2915 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
2916
2917         * convert.cs (ExplicitConversionCore): Removed duplicate enum
2918         conversion.
2919
2920 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
2921
2922         * assign.cs (Assign.DoResolve): Error method changed.
2923
2924         * cfold.cs (DoConstantNumericPromotions): Error method changed.
2925         
2926         * const.cs (ResolveValue): Reset in_transit immediately.
2927         
2928         * constant.cs: Error method changed.
2929         
2930         * convert.cs: Removed useless location parameter.
2931         (ExplicitNumericConversion): Don't do double enum check.
2932         (ExplicitConversionCore): Renamed from ExplicitConversion.
2933         (ExplicitUnsafe): Extracted from ExplicitConversion.
2934         (ExplicitConversion): Uses for error reporting.
2935         
2936         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
2937         error messages.
2938         (ResolveBoolean): Uses common error method.
2939         (CastToDecimal): Get rid of ec.
2940         (CastFromDecimal): Optimized.
2941         (ConvCast): Get rid of ec.
2942         
2943         * enum.cs (ResolveValue): Reset in_transit immediately.
2944         (Emit): Return after first error.
2945         
2946         * expression.cs: Convert changes.
2947         
2948         * literal.cs: Error method changed.
2949         
2950         * statement.cs: Error method changed.
2951
2952 2005-10-06  Raja R Harinath  <rharinath@novell.com>
2953
2954         Fix gtest-131.cs and gtest-211.cs.
2955         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
2956         Only emit code for a label if it is used.  Unreachable code can
2957         violate ECMA evaluation stack invariants.
2958
2959 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
2960
2961         * anonymous.cs: Implemented ExprClassName.
2962         
2963         * assign.cs (Assign.DoResolve): Don't chrash when type is not
2964         delegate.
2965         
2966         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
2967         check.
2968         
2969         * class.cs (StaticClass.DefineContainerMembers): Report protected
2970         members as error.
2971         
2972         * codegen.cs: if(ed) PRODUCTION.
2973         
2974         * convert.cs (Error_CannotImplicitConversion): Better error
2975         distinction.
2976         
2977         * cs-parser.jay: More error checks.
2978         
2979         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
2980         
2981         * driver.cs (CSCParseOption): Enabled wrong option check.
2982         
2983         * ecore.cs (Expression.ExprClassName): Turned to property.
2984         (MemberExpr.CheckIntermediateModification): For checking boxed
2985         value types     modification.
2986         
2987         * statement.cs (Fixed.Resolve): Expression type must be
2988         convertible to fixed type.
2989         (CollectionForeach.GetEnumeratorFilter,TryType):
2990         Small refactoring for easier error checking.
2991
2992 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
2993
2994         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
2995         attributes.
2996         
2997         * class.cs (GeneratedBaseInitializer): New class for customization
2998         compiler generated initializers.
2999         (MemberBase.DoDefine): Check Obsolete attribute here.
3000         (FieldMember.DoDefine): Ditto.
3001         
3002         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3003         constants.
3004         
3005         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3006         (MemberCore.GetObsoleteAttribute): Removed argument.
3007         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3008         (MemberCore.CheckObsoleteType): New helper.
3009         
3010         * delegate.cs,
3011         * enum.cs,
3012         * statement.cs: Updates after MemberCore changes.
3013         
3014         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3015         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3016         
3017         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3018         obsolete attribute for compiler construct.
3019         (As.DoResolve): Cache result.
3020         
3021         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3022
3023 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3024
3025         * expression.cs (Probe): instead of having a "Type probe_type"
3026         keep the extra information as a TypeExpr probe_type_expr since the
3027         "As" operator needs to perform some type checks.
3028
3029         * (As.DoResolve): If the type is a type parameter, ensure that it
3030         is constrained by a class.
3031
3032 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3033
3034         * statement.cs (Lock): Use the TemporaryVariable class instead of
3035         manually using local variables as those do not work when variables
3036         are captured.
3037
3038         * ecore.cs: Moved the TemporaryVariable class from being a nested
3039         class inside Foreach to be a public class that can be employed in
3040         other places. 
3041
3042 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3043
3044         * cs-parser.jay: interface_accessors replaced by
3045         accessor_declarations.
3046
3047         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3048         location.
3049         
3050         * statement.cs (GotoCase.Resolve): Convert null constant to
3051         null case.
3052         (SwitchLabel.ResolveAndReduce): Ditto.
3053         (SwitchLabel.NullStringCase): Custom null stamp.
3054         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3055         
3056         typemanager.cs (CSharpSignature): Don't skip first argument
3057         for full names.
3058
3059 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3060
3061         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3062         expression.cs, iterators.cs, literal.cs: Store constants and
3063         literals location.
3064         
3065         * class.cs (MemberBase.ShortName): Pass location.
3066         
3067         * cs-parser.jay: Some location fixes.
3068         
3069         * ecore.cs (Expression.Location): Made virtual.
3070
3071 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3072
3073         Fix #72930.
3074         * const.cs (Const.ResolveValue): Check for assigning non-null
3075         value to reference type.
3076
3077 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3078
3079         Fix #76133.
3080         * expression.cs (This.VerifyFixed): In a value type T, the type of
3081         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3082         value type R, 'this' is treated as a value parameter.
3083
3084 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3085
3086         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3087         if the underlying types are the same, otherwise we need to produce
3088         code that will do the proper cast.
3089
3090         This was exposed by Marek's constant rewrite which produced
3091         invalid code for the call site:
3092
3093         enum X : long { a }
3094         void Method (X v) {}
3095
3096         Method ((X) 5)
3097
3098         This fixes test-49.cs
3099
3100 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3101
3102         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3103           Type/Object should be allowed as well. Fixed bug #75968.
3104
3105 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3106
3107         * expression.cs : (Binary.DoResolve): when one is enum constant and
3108           another is constant 0, then return enum one *as enum type*.
3109           Fixed bug 74846.
3110
3111 2005-10-04  Martin Baulig  <martin@ximian.com>
3112
3113         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3114         `SetMemberIsUsed()' work for generics, too.
3115
3116 2005-10-04  Martin Baulig  <martin@ximian.com>
3117
3118         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3119         for corlib.  Fixes #75691.
3120
3121 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3122
3123         Fix #76255.
3124         * driver.cs: Fix compilation files with full root path.
3125
3126 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3127
3128         * report.cs (SymbolRelatedToPreviousError): Format the output so
3129         it does not use an open parenthesis that is never closed. 
3130
3131         * driver.cs: Follow coding guidelines
3132
3133 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3134
3135         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3136
3137         * location.cs (InEmacs): in this mode, do not report column
3138         location as it confuses Emacs.
3139
3140 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3141
3142         * support.cs (SeekableStreamReader.Position): Don't error out when
3143         the requested position is just beyond the end of the current
3144         buffered data.
3145
3146 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3147
3148         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3149         try to keep in sync with the byte count of the underlying Stream.
3150         However, this limits us to a window size of 2048 characters: i.e.,
3151         the maximum lookahead of our lexer/parser can be 2048 characters.
3152
3153 2005-09-22  Martin Baulig  <martin@ximian.com>
3154
3155         * driver.cs: Removed a debugging FIXME.
3156
3157 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3158
3159         * cs-parser.jay (type_arguments): Add CS1644 check.
3160         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3161
3162 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3163
3164         * Makefile (PROGRAM): Make profile specific.
3165         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3166         the current directory.
3167
3168         Fix test-455.cs.
3169         * expression.cs (Invocation.EmitCall): Remove optimization on
3170         this_call since it doesn't handle 'this' being a value type.
3171
3172 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3173
3174         * driver.cs: Ensure file handles are closed after parsing
3175
3176 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3177
3178         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3179         if the underlying types are the same, otherwise we need to produce
3180         code that will do the proper cast.
3181
3182         This was exposed by Marek's constant rewrite which produced
3183         invalid code for the call site:
3184
3185         enum X : long { a }
3186         void Method (X v) {}
3187
3188         Method ((X) 5)
3189
3190         This fixes test-49.cs
3191
3192 2005-09-05  Martin Baulig  <martin@ximian.com>
3193
3194         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3195         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3196
3197         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3198
3199 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3200
3201         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3202           to be a pointer type due to the spec 25.2, so check if declaring
3203           type is generic type definition. Fixed bug #75772.
3204
3205 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3206
3207         Fixed bug #75957.
3208         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3209           both types are not defined by methods.
3210         * expression.cs : (Invocation.IsApplicable): it should work when
3211           the argument type is equal to the parameter type, not only when
3212           ImplicitConversionExists() returns true.
3213
3214 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3215
3216         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3217         internal.
3218
3219         Fix #75941.
3220         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3221         flow-branching for LocalVariableReferences in case we were invoked
3222         from a MemberAccess.
3223         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3224         Carved out of ...
3225         (LocalVariableReference.DoResolveBase): ... this.
3226         (MemberAccess.Resolve): Do the check that was disabled during
3227         SimpleNameResolve.
3228
3229 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3230
3231         * class.cs :
3232           (PartialContainer.Create): check abstract/sealed/static strictly
3233           but abstract/sealed can exist only at one side. Fixed bug #75883.
3234
3235 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3236
3237         Fix #75945.
3238         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3239         specified, don't default to UnmanagedType.I4.
3240
3241 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3242
3243         * expression.cs : conditional operator should check possibly
3244           incorrect assign expression. Fixed bug #75946.
3245
3246 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3247
3248         Fix #75934.
3249         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3250         (ScopeInfo.EmitScopeType): Use it to construct field names from
3251         names of captured locals.
3252
3253         Fix #75929.
3254         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3255         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3256         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3257         (ExplicitConversion): Remove enum cases already handled by
3258         implicit conversion.  Move implicit conversion check to the beginning.
3259         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3260         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3261         Don't treat System.Enum as a struct.
3262
3263 2005-08-30  Jb Evain  <jbevain@gmail.com>
3264
3265         * attribute.cs: handles as expression in parameters.
3266
3267 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3268
3269         Fix #75802.
3270         * class.cs (TypeContainer.VerifyClsName): Don't use a
3271         PartialContainer when verifying CLS compliance.
3272         (AbstractPropertyEventMethod): Set Parent here, ...
3273         (PropertyMethod): ... not here.
3274
3275 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
3276
3277         * attribute.cs : escaped attribute name should not be allowed to be
3278           resolved (e.g. @class as classAttribute). Fixed bug #75930.
3279
3280 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3281
3282         Fix #75927.
3283         * convert.cs (ImplicitStandardConversionExists): Allow zero also
3284         when converting a long constant to unsigned long.
3285         * expression.cs (Invocation.OverloadResolve): Add sanity check to
3286         detect where IsApplicable and VerifyArgumentsCompat disagree.
3287
3288 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3289         and Carlos Alberto Cortez  <carlos@unixmexico.org>
3290
3291         Fix #75848.
3292         * class.cs (TypeContainer.CanElideInitializer): New helper.
3293         (TypeContainer.EmitFieldInitializers): Use it to determine if we
3294         can safely emitting the initializer of a field.
3295
3296 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3297
3298         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
3299           allowed inside a switch (without loop). Fixed bug #75433.
3300
3301 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3302
3303         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3304         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3305
3306 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3307
3308         * driver.cs : kinda reverting the default encoding changes (not exact 
3309           revert since I noticed that "codepage:reset" might not work fine).
3310
3311 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3312
3313         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
3314           Location. Now getter and setter store location correctly.
3315           (errors/cs0111-12.cs now reports the expected location.)
3316
3317 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3318
3319         * driver.cs : Use default encoding on the environment.
3320           Removed (now that) extra parameter for SeekableStreamReader.
3321         * support.cs : (SeekableStreamReader) third .ctor() argument for
3322           StreamReader is not required (always true). preamble size could
3323           be acquired in simpler and safe way.
3324
3325 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
3326
3327         * cs-parser.jay: report CS0642 at warning level 3
3328           and report CS0642 for an if else statement also
3329           fixes bug #74745. Patch by John Luke (and a bit
3330           modified by me).
3331           Removed extra CS0642 warning check for "while",
3332           "for" and "fixed".
3333         * statement.cs: In Block.Resolve(), CS0642 check
3334           is reimplemented to check a sequence of an empty
3335           statement and a block.
3336
3337           Both fix bug #66777.
3338
3339 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
3340
3341         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
3342         detection until I fix it.
3343         
3344         * cs-tokenizer.cs: Changed error message.
3345         
3346         * cs-parser.jay: Fixed 2 error locations.
3347         
3348         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
3349         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
3350         properties.
3351         
3352         * enum.cs (GetSignatureForError): Fixed.
3353         
3354         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
3355         method detection.
3356         
3357         * class.cs,
3358         * typemanager.cs (RegisterProperty): Removed.
3359         
3360         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
3361
3362 2005-08-24  Raja R Harinath  <rharinath@novell.com>
3363
3364         Fix #75874.
3365         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
3366         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
3367
3368 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3369
3370         * expression.cs : tiny fix is required for not warning positive ulong.
3371           See test-441.cs.
3372
3373 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3374
3375         * expression.cs : add CS0652 check for constant and integral
3376           expression. Fixed bug #53974.
3377
3378 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3379
3380         * expression.cs : in DoNumericPromotions(), check if there is implicit
3381           conversion overload for string (to check CS0034). Fixed bug #52492.
3382
3383 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3384
3385         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
3386
3387 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3388
3389         * ecore.cs : report location when it is *not* Null.
3390
3391 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3392
3393         * codegen.cs,
3394           ecore.cs,
3395           flowanalysis.cs,
3396           expression.cs:
3397           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
3398           correctly. Fixed bug #75721.
3399
3400 2005-08-23  Raja R Harinath  <rharinath@novell.com>
3401
3402         * support.cs (SeekableStreamReader.Position): Avoid an expensive
3403         loop that performs 'min (pos, char_count)'.
3404
3405         Fix #75862.
3406         * expression.cs (Unary.ResolveOperator): Don't discard implicit
3407         converted value in Operator.OnesComplement.
3408
3409 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
3410
3411         * anonymous.cs: If the anon method is pulled into a helper class,
3412         it needs to be `internal' not `private'. Fixes runtime behavior on
3413         msft. bug #75704
3414
3415 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
3416
3417         Fix #75803
3418         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
3419         is a partial class.
3420
3421 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
3422
3423         The big constants rewrite
3424         Fix #75746, #75685 and more
3425         As a side effect saved 1MB for MWF ;-)
3426         
3427         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
3428         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
3429         enum based for corlib compilation.
3430         
3431         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
3432         subtractions.
3433         
3434         * class.cs (FixedField.Define): Use ResolveAsConstant.
3435         
3436         * const.cs (IConstant): Interface constants and enums.
3437         (Const.ResolveValue): New method for constant resolvning.
3438         (ExternalConstant): Constants from imported assemblies.
3439         
3440         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
3441         conversion; like enums.
3442         (Constant.ToType): Converts this constant to different type.
3443         (Constant.Increment): Adds 1.
3444         
3445         * convert.cs (ImplicitConversionRequired): Simplified.
3446         
3447         * cs-parser.jay: Create EnumMember directly.
3448         
3449         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
3450         
3451         * doc.cs (GenerateEnumDocComment): Removed.
3452         
3453         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
3454         (ConvertIntLiteral): Removed.
3455         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
3456         
3457         * enum.cs (EnumMember): Implement IConstant.
3458         (Enum.IsValidEnumConstant): Removed.
3459         (Enum.GetNextDefaultValue): Removed.
3460         (Enum.FindMembers): Updated.
3461         (Enum.GenerateDocComment): Iterate enum members.
3462         
3463         * expression.cs (Cast.TryReduce): Handle enums correctly.
3464         (New.Constantify): Made public.
3465         (MemberAccess.DoResolve): Removed contant specific if(s).
3466         
3467         * literal.cs (NullLiteral): Implement new abstract methods.
3468         
3469         * statement.cs (GotoCase.Resolve): Use new constant methods.
3470         (SwitchLabel.ResolveAndReduce): Use new constant methods.
3471         
3472         * typemanager.cs (LookupEnum): Removed.
3473         (IsEnumType): Fixed to work with corlib.
3474         (RegisterConstant): Removed.
3475         (LookupConstant): Removed.
3476         (GetConstant): Changed to work with IConstant.
3477
3478 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
3479
3480         * location.cs : Fixed overflown (>255) column number.
3481
3482 2005-08-03  Raja R Harinath  <rharinath@novell.com>
3483
3484         First cut of the qualified-alias-member feature.
3485         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
3486         token.
3487         * cs-parser.jay (DOUBLE_COLON): New token.
3488         (namespace_or_type_name): Add rule for recognizing
3489         qualified-alias-members.
3490         (primary_expression): Likewise.
3491         (element_access): Allow QualifiedAliasMember as a possible
3492         type-bearing expression.
3493         (local_variable_type, local_variable_pointer_type): Likewise.
3494         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
3495         aliases in the current and enclosing namespace declarations.
3496         (NamespaceEntry.UsingAlias): Add CS0440 warning.
3497         * decl.cs (MemberName.is_double_colon): New.
3498         (MemberName.MemberName): Add new constructor for alias-member.
3499         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
3500         * expression.cs (QualifiedAliasMember): New expression type.
3501
3502 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3503
3504         * location.cs : it borked when no argument was specified.
3505
3506 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3507
3508         * location.cs : tiny ToString() format fix.
3509
3510 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3511
3512         * statement.cs : oops, it was missing.
3513
3514 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3515
3516         A set of fixes for precise line/column location.
3517
3518         * location.cs :
3519           "token" field now holds a file/line "delta", a line number offset 
3520           from the segment, and a column number. See also:
3521           http://lists.ximian.com/pipermail/mono-devel-list/2004-
3522           December/009508.html
3523           Removed static IsNull. Use instance IsNull property instead.
3524         * cs-tokenizer.cs :
3525           For some tokens it stores Location. For Identifier it stores
3526           LocatedToken which is a pair of string name and location.
3527           Column numbers are adjusted only at getChar().
3528         * report.cs :
3529           Use Location.ToString() for reporting (it now contains column).
3530         * cs-parser.jay :
3531           Largely modified to use LocatedToken instead of
3532           string (IDENTIFIER), and to acquire Location from some tokens.
3533         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
3534           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
3535           codegen.cs :
3536           Now MemberName holds Location. DeclSpace.ctor() receives Location
3537           as a parameter. Removed extra parameters to all derived classes.
3538           Replaced Location.IsNull() with instance property.
3539         * assign.cs, expression.cs :
3540           Added .ctor() overload that omits Location.
3541         * attribute.cs :
3542           Added "nameEscaped" flag that indicates the identifier was escaped
3543           in the source file. This fixes bug #57047.
3544
3545 2005-09-02  Martin Baulig  <martin@ximian.com>
3546
3547         * class.cs: Make CS3005 a warning, not an error.
3548
3549 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
3550
3551         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
3552         New method, looking for lo-case imported cls type.
3553
3554         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
3555         here.
3556
3557         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
3558
3559         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
3560
3561         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
3562         all_imported_types.
3563         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
3564
3565         Optimized to save 3.5 MB for SWF compilation.
3566
3567 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
3568
3569         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
3570         (PartialContainer.Create): Moved logic AddToContainer.
3571         (PartialContainer.MarkForDuplicationCheck): Shares name.
3572         
3573         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
3574         place.
3575         
3576         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
3577         initialization.
3578         (Namespace.GetSignatureForError): New method.
3579         
3580         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
3581         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
3582
3583 2005-08-01  Raja R Harinath  <rharinath@novell.com>
3584
3585         Fix #75669.
3586         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
3587         member lookup rather than qualifier_type, since qualifier_type can
3588         be null.
3589
3590 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
3591
3592         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
3593         enum member.
3594
3595 2005-07-31  Miguel de Icaza  <miguel@novell.com>
3596
3597         * statement.cs: Copy the local exception into the exception
3598         captured local.  Fixes 75674
3599
3600 2005-07-31  Raja R Harinath  <harinath@gmail.com>
3601
3602         Fix #75658.
3603         * expression.cs (Invocation.OverloadResolve): Don't report error
3604         CS1501 if error CS1502 has been reported.
3605         (New.DoResolve): Delegate CS1501 reporting to
3606         Invocation.OverloadResolve.
3607
3608         Fix #75656.
3609         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
3610         invariant-meaning-in-block property in an enclosing block if
3611         necessary.
3612
3613 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
3614
3615         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
3616         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
3617         (Switch.CheckSwitch): Just save 50kb for SWF.
3618
3619 2005-07-27  Martin Baulig  <martin@ximian.com>
3620
3621         * anonymous.cs (CaptureContext.AddField): Added
3622         `AnonymousContainer am' argument; compute its toplevel scope if
3623         it's not already computed.  Fixes #75649.
3624
3625 2005-07-26  Raja R Harinath  <rharinath@novell.com>
3626
3627         Fix #75628.
3628         * class.cs (Constructor.Emit): Reset block to null if the block
3629         resolve fails.
3630
3631 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
3632
3633         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
3634
3635 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
3636
3637         * class.cs (MethodData.Define): Check whether accessor implementing
3638         interface is public.
3639
3640         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
3641
3642 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
3643
3644         Fix #57245
3645         * namespace.cs (LookupType): Moved same type check to...
3646         
3647         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
3648         with the same name.
3649
3650 2005-07-21  Raja R Harinath  <rharinath@novell.com>
3651
3652         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
3653         already found a typebuilder.
3654         * class.cs (MethodCore.IsDuplicateImplementation): Compare
3655         MemberNames, not strings.
3656
3657         * const.cs (Error_ExpressionMustBeConst): 
3658         Rename from Error_EpressionMustBeConst.
3659         * const.cs, class.cs, statement.cd: Update.
3660
3661 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
3662
3663         Fix #65573
3664
3665         * const.cs (Const.LookupConstantValue): Report missing contant expression
3666         everytime.
3667         (Error_EpressionMustBeConstant): Only one error method.
3668
3669         * class.cs, statement.c: Updated.
3670
3671 2005-07-20  Raja R Harinath  <rharinath@novell.com>
3672
3673         * statement.cs (Block.Flags): Add back HasVarargs.
3674         (Block.flags): Make protected.
3675         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
3676
3677         * typemanager.cs (types, typecontainers, user_types): Remove.
3678         (UserTypes, TypeContainers): Likewise.
3679         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
3680         (CleanUp, Reset): Update.
3681         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
3682         (GetNestedType): Use Type.GetNestedType.
3683         (CoreLookupType): Take two arguments, the namespace and the
3684         basename of the type.  Update to use the Namespace.Lookup
3685         mechanism.
3686         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
3687         (RealMemberLookup): Use IsNestedChildOf instead of playing with
3688         string concatenation and substring matches.
3689         * class.cs, enum.cs, delegate.cs: Update to changes.
3690
3691 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
3692
3693         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
3694         Expression and made virtual.
3695
3696         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
3697         (ImplicitStandardConversionExists): Fixed `byte' typo ?
3698
3699         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
3700
3701         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
3702         error message.
3703
3704         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
3705         change.
3706
3707 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
3708
3709         Fix #57707
3710         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
3711         AssemblyCultureAttribute is not used on executable.
3712
3713         * rootcontext.cs,
3714         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
3715
3716 2005-07-16  Raja R Harinath  <rharinath@novell.com>
3717
3718         Fix #60638.
3719         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
3720         New.  Reports CS0252/CS0253.
3721         Mostly taken from preliminary patch by Duncak Mak.
3722         (Binary.DoResolveOperator): Store results of operator lookup.
3723         Use them to detect if we need to warn about unintended reference
3724         comparisons.
3725
3726 2005-07-15  Raja R Harinath  <rharinath@novell.com>
3727
3728         Fix #72969.
3729         * namespace.cs (Namespace.Lookup): Add back location parameter.
3730         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
3731         * delegate.cs, ecore.cs, expression.cs: Update to changes.
3732
3733         * codegen.cs (EmitContext.DeclSpace): Make readonly.
3734         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
3735         (Namespace.LookupType): ... this.
3736         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
3737         of namespaces.
3738         * typemanager.cs (LookupTypeReflection): Remove buggy code that
3739         purported to handle pointers.
3740         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
3741         CoreLookupType.
3742
3743 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
3744
3745         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
3746         type as namespace.
3747
3748 2005-07-15  Raja R Harinath  <rharinath@novell.com>
3749
3750         * namespace.cs (Namespace.Lookup): Drop location parameter.
3751         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
3752         (NamespaceEntry.Lookup): ... this.
3753         (NamespaceEntry.Error_AmbiguousTypeReference):
3754         Move here from DeclSpace.
3755         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
3756         names ...
3757         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
3758         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
3759         Move to NamespaceEntry.
3760         * delegate.cs, expression.cs: Update to changes.
3761
3762 2005-08-31  Martin Baulig  <martin@ximian.com>
3763
3764         Committing a patch from Atsushi Enomoto for #75850.
3765
3766         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
3767         Prefer a generic enumerator over a non-generic one.
3768
3769 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3770
3771         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3772         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3773
3774 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3775
3776         * driver.cs : reverting default encoding change as well as mcs.
3777
3778 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3779
3780         * driver.cs, support.cs : merged r48826.
3781           Marek Safer wrote:
3782           > could you integrate your mcs changes to gmcs otherwise
3783           > gmcs cannot compile some files.
3784
3785 2005-08-20  Martin Baulig  <martin@ximian.com>
3786
3787         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
3788         scope if we don't already have it.
3789
3790         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
3791         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
3792         fixes #75867.
3793
3794 2005-07-31  Miguel de Icaza  <miguel@novell.com>
3795
3796         * statement.cs: Copy the local exception into the exception
3797         captured local.  Fixes 75674
3798
3799 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
3800
3801         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
3802         type as namespace.
3803
3804 2005-08-12  Martin Baulig  <martin@ximian.com>
3805
3806         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
3807         for nested types here to avoid hitting the cache too early.
3808
3809 2005-08-09  Miguel de Icaza  <miguel@novell.com>
3810
3811         * enum.cs: On the new compiler CLS error 3005 is now a warning not
3812         an error. 
3813
3814 2005-08-03  Martin Baulig  <martin@ximian.com>
3815
3816         Make iterators in generic methods work; see gtest-191.cs.
3817
3818         * generic.cs
3819         (Constraints.Resolve): Protect against being called twice.
3820
3821         * class.cs
3822         (TypeContainer.GetClassBases): Make this `protected virtual'.
3823
3824         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
3825         (Iterator.GetClassBases): Override this and compute the base
3826         classes here.
3827         (Iterator.DefineNestedTypes): If we're a generic method, all our
3828         method type parameters become class type parameters on the proxy
3829         class.
3830
3831         * statement.cs
3832         (ToplevelBlock.Parameters): Make this a property, not a field.
3833         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
3834
3835 2005-08-03  Martin Baulig  <martin@ximian.com>
3836
3837         * typemanager.cs (TypeManager.IsSubclassOf): Use
3838         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
3839         (TypeManager.GetFullName_recursed): Improved.
3840
3841 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3842
3843         Fix #75417
3844         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
3845         Private accessor case, using TypeManager.IsPrivateAccessible instead of
3846         invocation_type == mi.DeclaringType, since the first one also checks
3847         other condition used by generic instances.
3848         
3849 2005-07-27  Martin Baulig  <martin@ximian.com>
3850
3851         * anonymous.cs (CaptureContext.AddField): Added
3852         `AnonymousContainer am' argument; compute its toplevel scope if
3853         it's not already computed.  Fixes #75649.
3854
3855 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
3856
3857         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
3858         CheckAttributeType and refactored.
3859         (Attribute.ResolvePossibleAttributeType): Changed to reuse
3860         ResolveAsTypeTerminal error handling.
3861         (ResolveAsTypeTerminal): Introduced because of global attributes extra
3862         handling.
3863         (GetSignatureForError): Print errors in same way.
3864
3865         * class.cs,
3866         * codegen.cs: Reflect attribute GetSignatureForError change.
3867
3868         * ecore.cs,
3869         * expression.cs: Add silent parameter to ResolveAsTypeStep.
3870
3871         * namespace.cs (UsingEntry): Refactored to make fields private.
3872
3873         * assign.cs,
3874         statement.cs: Error_UnexpectedKind has extra parameter.
3875
3876 2005-07-14  Raja R Harinath  <rharinath@novell.com>
3877
3878         * ecore.cs (IAlias): Remove.
3879         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
3880         that implement the interface.
3881         * namespace.cs (Namespace): Likewise.
3882         (Namespace.declspaces): Renamed from 'defined_names'.
3883         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
3884         DeclSpace instead of an IAlias.
3885         * tree.cs (Tree.AddDecl): Update.
3886
3887 2005-07-12  Raja R Harinath  <rharinath@novell.com>
3888
3889         * statement.cs (Block.Flags); Remove HasVarargs.
3890         (Block.HasVarargs): Move to ToplevelBlock.
3891         (Block.ThisVariable, Block.AddThisVariable): Likewise.
3892         (Block.Variables): Make protected.  Initialize variable hashtable
3893         if necessary.
3894         (Block.AddVariable): Update.
3895         (Block.Resolve): Update to changes.
3896         (ToplevelBlock.HasVarargs): New boolean.
3897         (ToplevelBlock.ThisVariable): Move here from Block.
3898         (ToplevelBlock.AddThisVariable): Likewise.
3899         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
3900         * expression.cs (This.ResolveBase): Update to changes.
3901         (ArglistAccess.DoResolve): Likewise.
3902
3903 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
3904
3905         Fix #75321
3906         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
3907
3908         * class.cs (TypeContainer.VerifyMembers): Distinguish between
3909         not used and not used & assigned.
3910         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
3911
3912 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
3913
3914         Fix #75053
3915         * expression.cs (Is.DoResolve): null is never provided type.
3916
3917 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
3918
3919         Fix #52496
3920         * cs-parser.jay: Less strict event error rule to catch more errors.
3921
3922 2005-07-11  Martin Baulig  <martin@ximian.com>
3923
3924         * generic.cs (ConstructedType.CheckConstraints): Improve the check
3925         for the constructor constraint: we do not only have to check
3926         whether the class has a public constructor, but also ensure that
3927         it's parameterless.  Fixes #75492.
3928
3929 2005-07-11  Martin Baulig  <martin@ximian.com>
3930
3931         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
3932         between type parameters if they either have the reference type
3933         constraint or the class constraint.
3934
3935 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
3936
3937         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
3938
3939 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
3940
3941         Fix #74975
3942         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
3943         (ExtractSecurityPermissionSet): Cope with self referencing security
3944         attributes properly.
3945
3946         * driver.cs (SetOutputFile): Made public property OutputFile.
3947
3948 2005-07-07  Raja R Harinath  <rharinath@novell.com>
3949
3950         Fix #75486.
3951         * class.cs (TypeContainer.first_nonstatic_field): Rename from
3952         has_nonstatic_fields.  Make into a FieldBase pointer.
3953         (TypeContainer.AddField): Add CS0282 check.
3954         (TypeContainer.EmitType): Update.
3955
3956 2005-07-06  Miguel de Icaza  <miguel@novell.com>
3957
3958         * cs-tokenizer.cs (consume_identifier): Do not create strings to
3959         compare if they start with __.
3960
3961 2005-07-06  Raja R Harinath  <rharinath@novell.com>
3962
3963         * statement.cs (Switch.SwitchGoverningType): Only look at
3964         UserCasts that don't need implicit standard conversions to one of
3965         the allowed switch types (Fixes test-322.cs).
3966         (LocalInfo.Resolve): Re-enable sanity-test.
3967
3968 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
3969
3970         * cs-tokenizer.cs (consume_identifier): Detect double undescores
3971         
3972         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
3973         
3974         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
3975
3976 2005-07-06  Raja R Harinath  <rharinath@novell.com>
3977
3978         Fix #75472.
3979         * ecore.cs (SimpleName.GetSignatureForError): Add.
3980         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
3981         (MemberAccess.GetSignatureForError): Add.
3982
3983 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
3984  
3985         The big error and warning messages review.
3986         
3987         * anonymous.cs,
3988         * assign.cs,
3989         * attribute.cs,
3990         * class.cs,
3991         * codegen.cs,
3992         * convert.cs,
3993         * cs-parser.jay,
3994         * cs-tokenizer.cs,
3995         * decl.cs,
3996         * delegate.cs,
3997         * doc.cs,
3998         * driver.cs,
3999         * ecore.cs,
4000         * enum.cs,
4001         * expression.cs,
4002         * flowanalysis.cs,
4003         * iterators.cs,
4004         * literal.cs,
4005         * location.cs,
4006         * modifiers.cs,
4007         * namespace.cs,
4008         * parameter.cs,
4009         * pending.cs,
4010         * report.cs,
4011         * rootcontext.cs,
4012         * statement.cs,
4013         * support.cs,
4014         * tree.cs,
4015         * typemanager.cs: Updated.
4016         
4017         * class.cs: (MethodCore.SetYields): Moved here to share.
4018         (PropertyMethod.Define): Moved iterator setup here.
4019         
4020         * iterators.cs: Add orig_method to have full access to parent
4021         container.
4022
4023 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4024
4025         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4026         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4027         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4028         variable of struct type.
4029         * expression.cs (Unary.ResolveOperator): Update to change.
4030         (Indirection.VerifyFixed): Likewise.
4031         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4032         (ParameterReference.VerifyFixed): Value parameters are fixed.
4033         (This.VerifyFixed): Treat 'this' as a value parameter.
4034         * statement.cs (LocalInfo.IsFixed): Remove.
4035
4036 2005-07-01  Martin Baulig  <martin@ximian.com>
4037
4038         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4039         `ec.EmitThis ()' to get the correct scope.
4040
4041 2005-07-01  Martin Baulig  <martin@ximian.com>
4042
4043         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4044         instance is a ParameterReference; fixes #75299.
4045
4046 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4047
4048         Fix #75412.
4049         * expression.cs (Indexers.map): Remove.
4050         (Indexers.Append): Filter out inaccessible setters and getters.
4051         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4052
4053         Fix #75283.
4054         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4055         Refactored from ...
4056         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4057         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4058         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4059         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4060
4061 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4062
4063         Fix #75322
4064         * class.cs (FieldBase.GetInitializerExpression): One more field
4065         for backup.
4066
4067 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4068
4069         * pending.cs: Do not define a proxy if the base method is virtual,
4070         it will be picked up by the runtime (bug 75270).
4071
4072 2005-07-08  Martin Baulig  <martin@ximian.com>
4073
4074         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4075         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4076
4077 2005-07-07  Martin Baulig  <martin@ximian.com>
4078
4079         * generic.cs (ConstructedType.CheckConstraint): Use
4080         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4081         called recursively; fixes #75329.
4082
4083 2005-07-06  Martin Baulig  <martin@ximian.com>
4084
4085         * generic.cs (TypeManager.InferTypeArguments): Added support for
4086         anonymous methods; fixes #75461.
4087
4088 2005-07-01  Martin Baulig  <martin@ximian.com>
4089
4090         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4091         `ec.EmitThis ()' to get the correct scope.
4092
4093 2005-07-01  Martin Baulig  <martin@ximian.com>
4094
4095         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4096         instance is `This'; fixes #75299.
4097
4098 2005-06-30  Martin Baulig  <martin@ximian.com>
4099
4100         * class.cs (Indexer): Implement IIteratorContainer; added support
4101         for iterators in indexers.
4102
4103         * codegen.cs
4104         (EmitContext.CurrentIterator): Make this a property, not a field.
4105
4106         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4107
4108 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4109
4110         * pending.cs: Do not define a proxy if the base method is virtual,
4111         it will be picked up by the runtime (bug 75270).
4112
4113 2005-06-28  Martin Baulig  <martin@ximian.com>
4114
4115         * cs-parser.jay (interface_method_declaration): Avoid a
4116         reduce/reduce conflict by moving some of the code into a separate
4117         `interface_method_declaration_body' rule; fixes #75368.
4118
4119 2005-06-28  Martin Baulig  <martin@ximian.com>
4120
4121         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4122         array check after the check for TypeBuilder's.
4123
4124 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4125
4126         * convert.cs (FindMostEncompassedType): Add two trivial special
4127         cases (number_of_types == 0 || number_of_types == 1).
4128         (FindMostEncompasingType): Likewise.
4129
4130 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4131
4132         Some cleanups preparing for the fix of #75283.
4133         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4134         error testing.
4135         (EventExpr.InstanceResolve): Likewise.
4136         (EventExpr.DoResolve): Remove redundant checks.
4137
4138 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4139
4140         * class.cs: Small fix.
4141
4142 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4143
4144         Fix #75160.
4145         * class.cs (GetPartialBases): Fix return value check of
4146         part.GetClassBases.
4147
4148 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4149
4150         Ensure that partial classes are registered in their enclosing
4151         namespace.  Initial part of fix of #75160.
4152         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4153         Register declspace with namespace here, not in
4154         DeclSpace.RecordDecl.
4155         * cs-parser.jay: Pass namespace to RecordDecl.
4156         * class.cs (PartialContainer.Create): Likewise.
4157         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4158         called.
4159         * decl.cs (Declspace.RecordDecl): Remove.
4160         * namespace.cs (NamespaceEntry.DefineName): Remove.
4161
4162 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4163
4164         * rootcontext.cs: Reset TargetExt as well.
4165
4166 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4167
4168         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4169         -langversion:ISO-1.
4170
4171 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4172
4173         Fix #75080, cs0119.cs.
4174         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4175         of ...
4176         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4177         allowing ExprClass.Type and ExprClass.Namespace for
4178         ResolveFlags.VariableOrValue.
4179         (Expression.Resolve) [1-argument variant]: Change default resolve
4180         flags based on language version.
4181         (Expression.Error_UnexpectedKind): Use a simple string array
4182         rather than an ArrayList.
4183         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4184         not ExprClass.Type.
4185         (TypeOfVoid.DoResolve): Likewise.
4186         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4187         flags argument -- it always has the same value.
4188
4189 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4190
4191         Fix #75081.
4192         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4193         Use it in the error message.
4194         * assign.cs, expression.cs, statement.cs: Update.
4195
4196 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4197
4198         Fix #75088.
4199         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4200         the "almostMatchedMember" case too.
4201         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4202         that failed the accessibility checks to 'almost_match'.
4203
4204 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4205
4206         * attribute.cs: Use internal MethodBuilder methods to set
4207         ExactSpelling and SetLastError on PInvoke methods, instead
4208         of passing them via charset.  Fixes #75060.
4209
4210 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4211
4212         * parameter.cs (Parameter): Remove TODO comment.
4213         (Parameter.DefineParameter): Remove Location parameter.
4214         (Parameters.LabelParameters): Likewise.
4215         * class.cs (Constructor.Emit): Update to change.
4216         (MethodData.Emit): Likewise.
4217         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4218         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4219
4220 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4221
4222         * parameter.cs,
4223           Removed Parameters.Location and added Parameter.Location instead.
4224           Removed Location parameter from Emit() and GetSignature().
4225         * anonymous.cs,
4226           class.cs,
4227           cs-parser.jay,
4228           delegate.cs,
4229           iterators.cs,
4230           statement.cs :
4231           Modified all related calls.
4232
4233 2005-06-21  Martin Baulig  <martin@ximian.com>
4234
4235         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4236         left-hand side is not a nullable type; fixes #75328.
4237
4238 2005-06-21  Martin Baulig  <martin@ximian.com>
4239
4240         * typemanager.cs
4241         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4242         (TypeManager.GetFullNameSignature): Likewise.
4243
4244         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4245         `source.FullName' and `target.FullName' to check whether there are
4246         two conflicting definitions.
4247
4248 2005-06-21  Martin Baulig  <martin@ximian.com>
4249
4250         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4251         a BoxedCast - also for reference types - to be compatible with csc.
4252
4253 2005-06-21  Martin Baulig  <martin@ximian.com>
4254
4255         * expression.cs (MemberAccess.DoResolve): Add support for nested
4256         types in a generic instance; fixes #75320.
4257
4258 2005-06-20  Martin Baulig  <martin@ximian.com>
4259
4260         * generic.cs (TypeManager.InferType): Also walk the class
4261         hierarchy for generic instances; fixes #75261.
4262
4263 2005-06-17  Martin Baulig  <martin@ximian.com>
4264
4265         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4266         to make things work for corlib.
4267
4268 2005-06-15  Martin Baulig  <martin@ximian.com>
4269
4270         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4271         obsolete `SecurityAction' values.
4272
4273 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4274
4275         * rootcontext.cs: Reset TargetExt as well.
4276         
4277 2005-06-09  Martin Baulig  <martin@ximian.com>
4278
4279         * delegate.cs (Delegate.VerifyMethod): Added
4280         `MethodGroupExpr old_mg' argument; inherit its
4281         `HasTypeParameters'; fix #75085.
4282
4283 2005-06-09  Martin Baulig  <martin@ximian.com>
4284
4285         * expression.cs (Invocation.OverloadResolve): Correctly handle
4286         generic methods for the SetMemberIsUsed(); fix #75064.
4287
4288 2005-06-09  Martin Baulig  <martin@ximian.com>
4289
4290         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
4291         fixes #75062.
4292
4293 2005-06-08  Martin Baulig  <martin@ximian.com>
4294
4295         * cs-parser.jay (nullable_type_or_conditional): If we put the
4296         nullable back and our `type' is a `ComposedCast', remove the
4297         nullable from it.  Fixes #75156.
4298
4299         * expression.cs (ComposedCast.RemoveNullable): New public method.
4300
4301 2005-06-08  Martin Baulig  <martin@ximian.com>
4302
4303         The big Iterators rewrite :-)
4304
4305         * iterators.cs: Rewrite this to use the anonymous methods framework.
4306
4307         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
4308         before the TypeContainers; see 2test-21.cs.
4309
4310         * class.cs
4311         (TypeContainer.DefineType): Don't create a new EmitContext if we
4312         already have one (this only happens if we're an Iterator).
4313         (TypeContainer.Define): Also call Define() on all our iterators.
4314         (Method.CreateEmitContext): Added support for iterators.
4315
4316         * anonymous.cs
4317         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
4318         (AnonymousContainer.CreateMethodHost): Moved here from
4319         AnonymousMethod and made abstract.
4320         (AnonymousContainer.CreateScopeType): New abstract method.
4321         (AnonymousContainer.IsIterator): New public property.
4322         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
4323         get the ScopeTypeBuilder rather than manually defining it here. 
4324         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
4325         iterators here.
4326
4327         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
4328         before RootContext.DefineTypes().
4329
4330         * codegen.cs (EmitContext.RemapToProxy): Removed.
4331         (EmitContext.CurrentAnonymousMethod): Changed type from
4332         AnonymousMethod -> AnonymousContainer.
4333         (EmitContext.ResolveTopBlock): Protect from being called twice.
4334         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
4335         (EmitContext.EmitThis): Removed the iterators hacks; use the
4336         anonymous methods framework for that.
4337
4338         * statement.cs
4339         (ToplevelBlock.Container): Make this a property, not a field.
4340         (ToplevelBlock.ReParent): New public method; move the
4341         ToplevelBlock into a new container.
4342         (Foreach.TemporaryVariable): Simplify.
4343
4344 2005-06-05  Martin Baulig  <martin@ximian.com>
4345
4346         * statement.cs (LocalInfo.CompilerGenerated): New flag.
4347         (Block.AddTemporaryVariable): New public method; creates a new
4348         `LocalInfo' for a temporary variable.
4349         (Block.EmitMeta): Create the LocalBuilders for all the temporary
4350         variables here.
4351         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
4352         non-iterator variables.
4353
4354 2005-06-05  Martin Baulig  <martin@ximian.com>
4355
4356         * statement.cs (Foreach.TemporaryVariable): Create the
4357         LocalBuilder in the Emit phase and not in Resolve since in some
4358         situations, we don't have an ILGenerator during Resolve; see
4359         2test-19.cs for an example.
4360
4361 2005-06-04  Martin Baulig  <martin@ximian.com>
4362
4363         The big Foreach rewrite - Part II.
4364
4365         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
4366         with `PropertyInfo ienumerator_getcurrent'.
4367
4368         * codegen.cs (VariableStorage): Removed.
4369
4370         * statement.cs
4371         (Foreach): Derive from Statement, not ExceptionStatement.
4372         (Foreach.CollectionForeach): New nested class.  Moved all the code
4373         dealing with collection foreach here.
4374         (Foreach.ForeachHelperMethods): Removed.
4375         (Foreach.TemporaryVariable): Implement IMemoryLocation.
4376
4377 2005-05-23  Martin Baulig  <martin@ximian.com>
4378
4379         * statement.cs (Try.DoResolve): Don't create a `finally' if we
4380         don't need to.  Fix #75014.
4381
4382 2005-05-26  Raja R Harinath  <rharinath@novell.com>
4383
4384         Improve user-defined conversion handling.
4385         * convert.cs (GetConversionOperators): Rewrite.  Return only the
4386         applicable operators.
4387         (AddConversionOperators): New.  Helper for GetConversionOperators.
4388         (FindMostEncompassedType, FindMostEncompassingType): Verify that
4389         there is only one most encompassed/encompassing type.
4390         (FindMostSpecificSource, FindMostSpecificTarget): Remove
4391         "applicable operator" handling.
4392         (UserConversion): Move cache here from GetConversionOperators.
4393         Directly cache the chosen operator, rather than the whole
4394         MethodGroup.
4395         (ExplicitNumericConversion): Fix buggy implementation of Decimal
4396         case.  Allow conversion of decimal to sbyte and byte too.
4397         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4398         New static methods.  Used to avoid allocating EmptyExpressions in
4399         convert.cs.
4400
4401 2005-05-24  Duncan Mak  <duncan@novell.com>
4402
4403         * ecore.cs (CastFromDecimal): New class for casting a decimal to
4404         another class, used in Convert.ExplicitNumericConversion.
4405         (CastToDecimal): New class, similar to above, but casts to
4406         System.Decimal, used in Convert.ImplicitNumericConversion and also
4407         in explicit convesion from double/float to decimal.
4408
4409         * convert.cs (ImplicitNumericConversion): Handle implicit
4410         conversions to System.Decimal.
4411         (ExplicitNumericConversion): handle explicit conversions to
4412         System.Decimal.
4413
4414         This fixes #68711.
4415         
4416 2005-05-20  Miguel de Icaza  <miguel@novell.com>
4417
4418         * typemanager.cs: Do not throw an exception in the TypeBuilder
4419         case, we take care of it on the TypeCode.
4420
4421 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
4422         
4423         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
4424         is back.
4425         
4426         * cs-parser.jay: Catch more lexical errors.
4427         
4428         * report.cs: Add one more Error method.
4429         
4430         * rootcontext.cs,
4431         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
4432
4433 2005-05-20  Martin Baulig  <martin@ximian.com>
4434
4435         * class.cs (TypeContainer.CircularDepException): Removed.
4436         (TypeContainer.DefineType): Removed the `InTransit' stuff.
4437         (TypeContainer.CheckRecursiveDefinition): Check for circular class
4438         (CS0146) and interface (CS0529) dependencies here.
4439
4440 2005-05-20  Martin Baulig  <martin@ximian.com>
4441
4442         * expression.cs (New.DoResolve): Move the CS0712 check above the
4443         CS0144 check; otherwise it can never be reached.
4444
4445 2005-05-20  Martin Baulig  <martin@ximian.com>
4446
4447         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
4448
4449 2005-05-20  Martin Baulig  <martin@ximian.com>
4450
4451         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
4452
4453         * typemanager.cs (TypeManager.IsAttributeType): New public method.
4454
4455 2005-05-19  Martin Baulig  <martin@ximian.com>
4456
4457         * delegate.cs
4458         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
4459         to disable error reporting.
4460
4461         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
4462         here since we don't want to report an error; see the new test-336.cs.
4463
4464 2005-05-19  Raja R Harinath  <rharinath@novell.com>
4465
4466         * statement.cs (ToplevelBlock.GetParameterReference)
4467         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
4468         Move here from class Block.
4469         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
4470         * expression.cs (ParameterReference.DoResolveBase): Likewise.
4471
4472 2005-05-18  Martin Baulig  <martin@ximian.com>
4473
4474         Fix #74978.
4475
4476         * flowanalysis.cs
4477         (FlowBranching.Reachability): Add non-static public And() and Or()
4478         methods.
4479         (FlowBranchingSwitch): New class; do the `break_origins' thing
4480         like in FlowBranchingLoop.
4481         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
4482         reachability, not just locals and parameters.
4483         (FlowBranching.MergeChild): Remove some of the hacks for loop and
4484         switch; MergeBreakOrigins() now takes care of that.
4485
4486 2005-05-18  Martin Baulig  <martin@ximian.com>
4487
4488         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4489         a loop and may leave it, reset the barrier; fixes #74974.
4490
4491 2005-05-16  Raja R Harinath  <rharinath@novell.com>
4492
4493         Fix test-382.cs.  Emit values of decimal constants.
4494         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
4495         Carved out of ...
4496         (TypeContainer.AddField): ... this.
4497         (TypeContainer.EmitFieldInitializers): Allow the list of fields
4498         with initializers to include 'Const's.
4499         (ClassPart.RegisterFieldForInitialization): Forward to
4500         PartialContainer.
4501         * const.cs (Const.Const): Pass initializer to base class.
4502         (Const.Define): In case of decimal constants, register them for
4503         initialization in a static constructor.
4504
4505 2005-05-14  Martin Baulig  <martin@ximian.com>
4506
4507         * statement.cs (Block.Resolve): Correctly handle unreachable code;
4508         do not call ResolveUnreachable() on unreachable statements in
4509         here, see the comment in the source code.
4510
4511 2005-05-13  Raja R Harinath  <rharinath@novell.com>
4512
4513         Fix #74934.
4514         * expression.cs (BinaryResolveOperator): If one of the operands of
4515         an equality comparison is 'null' and the other is a pointer type,
4516         convert the null to a NullPointer.
4517         * convert.cs (ImplicitReferenceConversion): If the expression is a
4518         NullLiteral and the target type is a pointer type, return a
4519         NullPointer instead.
4520         (ImplicitConversionStandard): Likewise.
4521
4522 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
4523         
4524         * cs-parser.jay: Set readonly context based on special constructs.
4525         
4526         * expression.cs (LocalVariableReference.DoResolveBase): Improved
4527         readonly variable error handling.
4528         
4529         * rootcontext.cs (EmitCode): Don't verify members when error
4530         occurred.
4531         
4532         * statement.cs (LocalInfo): Add reaodnly context information.
4533         (SetReadOnlyContext, GetReadOnlyContext): New methods.
4534
4535 2005-05-17  Martin Baulig  <martin@ximian.com>
4536
4537         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
4538         #70970. 
4539
4540 2005-05-13  Martin Baulig  <martin@ximian.com>
4541
4542         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
4543         handle unreachable blocks.
4544
4545 2005-05-13  Martin Baulig  <martin@ximian.com>
4546
4547         * class.cs
4548         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
4549         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
4550         #74905. 
4551
4552 2005-05-13  Martin Baulig  <martin@ximian.com>
4553
4554         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
4555         instance variable, not a local.  Fix #74873.
4556         (Block.ResolveUnreachable): Set it to true here.
4557
4558 2005-05-12  Martin Baulig  <martin@ximian.com>
4559
4560         * cs-parser.jay (property_declaration): Pass the `current_class',
4561         not the `current_container' to Property's .ctor.  Fixes #74912.
4562
4563 2005-05-11  Martin Baulig  <martin@ximian.com>
4564
4565         * typemanager.cs (Closure): Copy this from MCS and merge all the
4566         GMCS-specific changes into it.
4567
4568 2005-05-12  Raja R Harinath  <harinath@gmail.com>
4569
4570         Fix #74920.
4571         * typemanager.cs (unmanaged_enclosing_types): New.
4572         (IsUnmanagedType): Avoid infloops by using
4573         'unmanaged_enclosing_types' to talk with recursive invocations.
4574
4575 2005-05-11  Duncan Mak  <duncan@novell.com>
4576
4577         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
4578         continuing to process for 'arg'.
4579         (handle_preprocessing_directive): Check the argument of the #endif
4580         directive and report error CS1025 if there are any trailing
4581         characters.
4582
4583         According to the C# spec, having even whitespace after the #endif
4584         directive is illegal; however, because we call arg.TrimEnd ()
4585         beforehand, we have the same behavior as csc, allowing whitespace
4586         after the directive.
4587
4588         Fixes #74892.
4589
4590 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
4591
4592         Fix #74863.
4593         
4594         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
4595         (Constructor.GetObsoleteAttribute): Implemented correctly.
4596
4597 2005-05-10  Martin Baulig  <martin@ximian.com>
4598
4599         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
4600         resolve the type; fixes #74864.
4601         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
4602         in DoResolve(); fixes #74862.
4603
4604 2005-05-10  Martin Baulig  <martin@ximian.com>
4605
4606         * support.cs (ReflectionParameters.ParameterModifier): Use
4607         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
4608         and `ParameterAttributes.In'.  Fixes #74884.
4609
4610 2005-05-10  Martin Baulig  <martin@ximian.com>
4611
4612         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
4613         the cache if we're just looking for `MemberTypes.NestedType' in a
4614         generic instance.
4615
4616         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
4617         constraints if we're still resolving the type tree.
4618         (Expression.MemberLookup): If we're resolving the type tree, only
4619         look for `MemberTypes.NestedType' since we're only interested in
4620         getting types.
4621
4622         * class.cs (TypeContainer.DefineType): Don't resolve the type
4623         parameters here; do this later in ResolveType() after the type
4624         tree has been resolved.
4625         (TypeContainer.ResolveType): New public method; this is called
4626         after the type tree is resolved and before the types are being
4627         populated.  We resolve the generic constraints here.
4628         (TypeContainer.DoDefineMember): Check the constraints on our base
4629         class and interfaces.
4630
4631         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
4632         set the `ResolvingTypeTree' flag on the EmitContext.
4633
4634         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
4635
4636 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
4637
4638         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
4639         
4640         * expression.cs (Argument.GetParameterModifier): Turned to property.
4641         (Invocation.Error_InvalidArguments): Add more descriptive errors.
4642         
4643         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
4644         its C# equivalent.
4645         
4646 2005-05-09  Raja R Harinath  <rharinath@novell.com>
4647
4648         Fix #74852.
4649         * decl.cs (MemberCache.AddMethods): Register override methods,
4650         rather than non-override methods.
4651         * typemanager.cs (RegisterOverride): New.
4652         (IsOverride): Update.
4653
4654 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
4655
4656         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
4657
4658 2005-05-06  Martin Baulig  <martin@ximian.com>
4659
4660         * attribute.cs
4661         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
4662         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
4663
4664 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
4665
4666         Fix #73105.
4667         
4668         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
4669         recursive declaration.
4670         
4671         * statement.cs (Block.ResolveMeta): Report any error in resolving.
4672         
4673 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
4674
4675         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
4676         
4677         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
4678
4679 2005-05-05  Raja R Harinath  <rharinath@novell.com>
4680
4681         Fix #74797.
4682         * decl.cs (DeclSpace.FamilyAccessible): 
4683         Use TypeManager.IsNestedFamilyAccessible.
4684
4685         Fix reopened #64812.
4686         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
4687         internal'.
4688
4689 2005-05-04  Raja R Harinath  <rharinath@novell.com>
4690             Abin Thomas  <projectmonokochi@rediffmail.com>
4691             Anoob V E  <projectmonokochi@rediffmail.com>
4692             Harilal P R  <projectmonokochi@rediffmail.com>
4693
4694         Fix #64812.
4695         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
4696         allow access to all static members.
4697
4698 2005-05-04  Martin Baulig  <martin@ximian.com>
4699
4700         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
4701
4702 2005-05-04  Martin Baulig  <martin@ximian.com>
4703
4704         Fix #74655.
4705
4706         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
4707         section at the end; make things work if `default' is not the last
4708         section.        
4709
4710 2005-05-04  Martin Baulig  <martin@ximian.com>
4711
4712         Fix #70400.
4713
4714         * statement.cs (Switch): Replaced the `got_default' field with a
4715         `default_section' one.
4716         (Switch.CheckSwitch): Set `default_section' here.
4717         (Switch.Resolve): If we're a constant switch and the constant is
4718         not found, use the default section.
4719
4720 2005-05-03  Martin Baulig  <martin@ximian.com>
4721
4722         * expression.cs (ArrayAccess.EmitGetLength): New public method.
4723
4724         * statement.cs (Foreach.ArrayForeach): New nested class.
4725         (Foreach.TemporaryVariable): New nested class.
4726         (Foreach.EmitArrayForeach): Removed; this is now in the new
4727         ArrayForeach class.
4728
4729 2005-05-03  Raja R Harinath  <rharinath@novell.com>
4730
4731         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
4732         more conservative.
4733         (VerifyPendingMethods): Revert change below.
4734
4735         * typemanager.cs (IsOverride, RegisterNonOverride): New.
4736         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
4737         that used to trigger warning -28.  Remove warning -28.
4738         * expression.cs (Invocation.OverloadResolve): Use
4739         TypeManager.IsOverride to distinguish override methods.
4740
4741         Fix #74773.
4742         * pending.cs (VerifyPendingMethods): If a base type implements the
4743         requested interface, don't bother checking individual methods of
4744         the base type.  As a side-effect, this prevents the creation of
4745         unnecessary proxies.
4746
4747 2005-05-02  Martin Baulig  <martin@ximian.com>
4748
4749         Fix #70182.
4750
4751         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
4752         Also `And' the locals if the old vector is null.
4753         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
4754         null; in this case we basically reset all the variables.        
4755
4756 2005-05-02  Martin Baulig  <martin@ximian.com>
4757
4758         Fix #74529.
4759
4760         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
4761         Added `FlowBranching branching' argument; always `and' the
4762         variables instead of `or'ing them unless we're an infinite loop.
4763
4764         * statement.cs (While.Resolve): Create a new sibling unless we're
4765         infinite.       
4766
4767 2005-05-02  Martin Baulig  <martin@ximian.com>
4768
4769         Fix #70140.
4770
4771         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
4772         arguments; use it instead of creating a new TopLevelBlock.
4773         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
4774         our ConstructorInitializer.
4775
4776         * statement.cs
4777         (TopLevelBlock.TopLevelBranching): New public property.
4778         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
4779         and create our `TopLevelBranching'.
4780
4781         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
4782         anonymous method host, use `block.TopLevelBranching' rather than
4783         creating a new branching.
4784
4785 2005-04-20  Miguel de Icaza  <miguel@novell.com>
4786
4787         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
4788         a ScopeInfo, if any of the current children is a child of the new
4789         entry, move those children there.
4790
4791 2005-04-30  Martin Baulig  <martin@ximian.com>
4792
4793         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
4794         at the beginning of a SwitchSection.  Fix #73335.
4795
4796 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
4797
4798         Fix #74378
4799         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
4800         
4801         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
4802         (FieldExpr.DoResolve): Obsolete members are ignored for field
4803         initializers.
4804         
4805 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
4806
4807         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
4808         of arrays detection.
4809
4810         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
4811         verification.
4812         (Field.VerifyClsCompliance): Volatile fields are not compliant.
4813
4814         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
4815         arrays report.
4816
4817 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
4818
4819         * cs-parser.jay: Use the prefered version of -unsafe in error
4820         message.
4821
4822 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
4823
4824         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
4825         circumstances.
4826
4827 2005-04-20  John Luke  <john.luke@gmail.com>
4828
4829         * driver.cs: fix typo in error message, --outout to --output
4830
4831 2005-04-30  Martin Baulig  <martin@ximian.com>
4832
4833         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
4834         handle the .NET 2.x security attributes.
4835
4836 2005-04-30  Martin Baulig  <martin@ximian.com>
4837
4838         * typemanager.cs
4839         (TypeManager.ExpandInterfaces): Don't add things twice.
4840
4841         * class.cs
4842         (TypeContainer.VerifyClsCompliance): Allow generic instances.
4843
4844 2005-04-29  Martin Baulig  <martin@ximian.com>
4845
4846         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
4847
4848         * anonymous.cs: Added support for anonymous generic methods.
4849
4850 2005-04-29  Martin Baulig  <martin@ximian.com>
4851
4852         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
4853         generic instances.
4854
4855 2005-04-29  Martin Baulig  <martin@ximian.com>
4856
4857         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
4858
4859         * expression.cs (New.DoResolve): Fix the CS0304 check.
4860
4861 2005-04-29  Martin Baulig  <martin@ximian.com>
4862
4863         * typemanager.cs (TypeManager.GetFullName): Updated to the new
4864         naming schema.
4865
4866         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
4867         explicit interface implementation, compare the interface types.
4868         (MethodData.Define): Use the new naming scheme from the latest
4869         .NET 2.x beta2.
4870         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
4871
4872         * decl.cs (MemberName.GetMemberName): Removed.
4873         (MemberName.MethodName, FullName): New properties.
4874
4875 2005-04-25  Raja R Harinath  <rharinath@novell.com>
4876
4877         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
4878
4879 2005-04-22  Martin Baulig  <martin@ximian.com>
4880
4881         * generic.cs (GenericMethod): Create the EmitContext in the
4882         `Define()'; in `Define(MethodBuilder)', create the type parameters
4883         before calling `Define()'.  Fixes #73933.
4884
4885 2005-04-22  Martin Baulig  <martin@ximian.com>
4886
4887         * generic.cs
4888         (Constraints.Resolve): Make things work wrt. the new type lookup system.
4889         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
4890
4891         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
4892         ConstructedType, check its constraints.
4893
4894 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
4895
4896         * codegen.cs (InRefOutArgumentResolving): New field.
4897         
4898         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
4899         fields outside contructor.
4900         
4901         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
4902         
4903 2005-04-19  Miguel de Icaza  <miguel@novell.com>
4904
4905         * anonymous.cs (CaptureContext.EmitParameterInstance): The
4906         parameter code was not completed ever, so it was not as up-to-date
4907         as local variables.  Must finish it.
4908
4909         The bug fix was to compare the Toplevel of the block, not the
4910         current block.  Thanks for Ben for pointing this out. 
4911
4912 2005-04-19  Raja R Harinath  <rharinath@novell.com>
4913
4914         * decl.cs (AddMethods): Use the declaring type of the problem
4915         method to determine if we want to squash a warning.
4916
4917 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
4918
4919         * attribute.cs: Removed debug output.
4920
4921         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
4922         
4923         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
4924         Report.Stderr.
4925         
4926 2005-04-18  Raja R Harinath  <rharinath@novell.com>
4927
4928         Fix #74481.
4929         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
4930         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
4931         all null comparisons against reference types.
4932
4933 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
4934
4935         Fix# 74565
4936         * class.cs (TypeContainer.CircularDepException) New nested
4937         exception class.
4938         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
4939         (TypeContainer.DefineType): Removed error, reset InTransit before
4940         exit.
4941         (Class.DefineType): Throw exception when is in Transit.
4942         Catch exception and report error.
4943         (Struct.DefineType): Throw exception when is in Transit.
4944         Catch exception and report error.
4945         (Interface.DefineType): Throw exception when is in Transit.
4946         Catch exception and report error.
4947
4948         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
4949         handle nested exception handlers.
4950
4951         * flowanalysis.cs (InTryWithCatch): New method, search for try with
4952         a catch.
4953
4954         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
4955         InFinally and InCatch storage.
4956
4957         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
4958         (Catch.Resolve): Set and Restore ec.InCatch.
4959         (Try.Resolve): Set and Restore ec.InFinally.
4960         (Try.HasCatch): True when try has catch.
4961
4962 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
4963
4964         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
4965           for the same event member, so exclude such cases from warning 419.
4966           Fixed bug #74633.
4967
4968 2005-04-16  Miguel de Icaza  <miguel@novell.com>
4969
4970         * expression.cs (Binary.ResolveOperator): Apply patch from John
4971         Luke to fix bug 59864: operators &, | and ^ on enumerations
4972         require that the same enum type on both sides.
4973
4974         * driver.cs: Add warnings to old flag usage, this is to assist
4975         people who produce Makefiles and hope that the Makefiles will be
4976         used on Windows.
4977
4978         * class.cs (TypeContainer.EmitType): Moved the definition of the
4979         special $PRIVATE$ field from the resolve phase to the Emit phase.
4980         During resolve we do not know if we are a struct with
4981         HasExplicitLayout, we know this only after the attributes for the
4982         type are emitted.
4983
4984         Set the FieldOffset to zero on the dummy field that we create for
4985         the class.   Fixes 74590.
4986
4987 2005-04-16  Raja R Harinath  <rharinath@novell.com>
4988
4989         Fix #73834.
4990         * ecore.cs (PropertyExpr.resolved): New.
4991         (DoResolve): Use it to handle a case of double resolution here.
4992         Handle a case of identical-name-and-type-name.
4993         * expression.cs (ArrayCreation.CheckIndices): Avoid double
4994         resolution by storing the results of expression resolution back
4995         into the "probes" array.
4996
4997 2005-04-15  Raja R Harinath  <rharinath@novell.com>
4998
4999         Fix cs0208-7.cs and cs0208-8.cs.
5000         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5001         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5002         error reporting to point out the reason a struct is not unmanaged.
5003
5004 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5005
5006         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5007           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5008
5009 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5010
5011         Fix #74528.
5012         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5013         IdenticalNameAndTypeName here.
5014         (EventExpr.InstanceResolve): Likewise.
5015
5016 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5017
5018         C# 2.0 DefaultCharSetAttribute implementation
5019         
5020         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5021         which allows us to set GlobalNamespace for every resolve.
5022         (Attribute.ResolveArguments): Cut from Resolve.
5023         (Attribute.GetCharSetValue): Returns CharSet named argument.
5024         (Attribute.DefinePInvokeMethod): Gets default charset from
5025         module settings.
5026         (GlobalAttribute.ResolveAsTypeStep): Override.
5027         (GlobalAttribute.ResolveArguments): Override.
5028         
5029         * class.cs (TypeAttr): Is protected.
5030         
5031         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5032         (ModuleClass.DefaultCharSetType): New memeber.
5033         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5034         
5035         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5036         charset from module.
5037         
5038         * delegate.cs (TypeAttr): Override.
5039         (Delegate.DefineType): Use this TypeAttr.
5040         
5041         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5042         at very early stage (before types are defined) to resolve model
5043         module attributes. It will probably not work with corlib but it
5044         should be ok.
5045         
5046         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5047         charset from module.
5048         
5049         * typemanager.cs (default_charset_type): New type.
5050
5051 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5052
5053         * decl.cs (MemberCache.AddMethods): Don't warn if
5054         System.Object.Finalize has buggy MethodAttributes.
5055
5056         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5057         removed below.
5058
5059 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5060
5061         * doc.cs : detect ambiguous reference to overloaded members.
5062           Fixed bug #71603. MS 1.1 csc does not detect it.
5063
5064 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5065
5066         * doc.cs : delegates must not be referenced with parameters.
5067           Fixed bug #71605.
5068
5069 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5070
5071         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5072
5073 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5074
5075         * driver.cs (MainDriver): Stop processing if the CLS stage found
5076         errors. 
5077
5078         (CompilerCallableEntryPoint.InvokeCompiler): Always
5079         reset after execution;   Take a TextWriter argument for the
5080         output.
5081
5082         * report.cs: Use the error stream instead of hardcoding stderr. 
5083
5084 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5085
5086         * class.cs: Reduce code paths to test, too small of an
5087         optimization to make it worth the extra testing.  Always perform
5088         it. 
5089
5090 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5091
5092         Fix #74510.
5093         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5094         operators that had errors reported on them.
5095
5096 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5097
5098         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5099         argument types.
5100         (Attribute.Resolve): Add named argument type checking.
5101         
5102         * class.cs (FixedField.Define): Use IsPrimitiveType
5103         
5104         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5105         
5106         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5107         unsafe parameter types.
5108         
5109         * statement.cs (Using.ResolveExpression): Add better error description.
5110         
5111         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5112         
5113 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5114
5115         Fix #74484.
5116         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5117         AttributeUsageAttribute in the emitcontext of the attribute class,
5118         not in the emitcontext of the attributable entity it was attached to.
5119         * cs-parser.jay: Use 'current_class', not 'current_container',
5120         when creating a GlobalAttribute.
5121
5122 2005-04-08  Alp Toker  <alp@atoker.com>
5123
5124         * pending.cs: The fix to #58413 failed to compile methods implementing
5125         interfaces with/without params modifiers and vice versa, even though
5126         params modifiers aren't part of the signature. Make the modifier check
5127         less strict as in csc.
5128
5129 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5130             Anoob V E  <projectmonokochi@rediffmail.com>
5131             Harilal P R  <projectmonokochi@rediffmail.com>
5132
5133         Fix #58413.
5134         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5135         modifiers of pending methods.
5136         (PendingImplementation.PendingImplementation): Initialize it.
5137         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5138         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5139         with ParameterData.  Add check for modifiers.
5140         * class.cs (MethodData.Define): Update to changes.
5141
5142 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5143
5144         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5145
5146 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5147
5148         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5149         property.
5150         
5151         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5152         
5153         * rootcontext.cs,
5154         * typemanager.cs: Registered RequiredAttributeAttribute.
5155         
5156 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5157
5158         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5159         Warning CS0169 is back at level 3.
5160         (IMethodData.SetMemberIsUsed): New method.
5161         
5162         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5163         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5164         
5165         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5166
5167         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5168         contants.
5169         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5170         is used.
5171         
5172         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5173         is used.
5174         
5175         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5176         to avoid the problems with nested types.
5177
5178 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5179             Anoob V.E  <projectmonokochi@rediffmail.com>
5180             Harilal P.R  <projectmonokochi@rediffmail.com>
5181             Raja R Harinath  <rharinath@novell.com>
5182
5183         Fix #73820.
5184         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5185         attribute.
5186         * typemanager (GetConstructor): Make public.
5187
5188 2005-04-05  John Luke  <john.luke@gmail.com>
5189             Raja R Harinath  <rharinath@novell.com>
5190
5191         Fix #62232.
5192         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5193         struct too.  Return false quicker in a few cases.
5194         (VerifyUnManaged): Use it.
5195
5196 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5197
5198         Fix #74041.
5199         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5200         not 'unreachable_seen'.
5201
5202 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5203
5204         * attribute.cs (Attribute.GetValue): Removed unused.
5205         
5206         * codegen.cs (CodeGen.TrimExt): Removed unused.
5207         
5208         * cs-parser.jay (output): Removed unused.
5209         
5210         * cs-tokenizer.cs (hex_digits): Removed unused.
5211         
5212         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5213         
5214         * expression.cs (Indirection.LoadExprValue): Removed unused.
5215         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5216         
5217         * iterators.cs (Iterator.param_types): Removed unused.
5218         
5219         * statement.cs (Goto.block): Removed unused.
5220         (ToplevelBlock.did): Removed unused.
5221         (Switch.ResolveConstantSwitch): Removed unused.
5222
5223 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5224
5225         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5226         resetting thingy.
5227
5228 2005-04-19  Martin Baulig  <martin@ximian.com>
5229
5230         Merged r42462 from MCS and made it work for GMCS.
5231
5232         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5233
5234         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5235
5236 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5237
5238         Fix #74232 and cs0208-3.cs.
5239         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5240         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5241         unmanaged type.  Don't use FieldBuilders when 't' is a
5242         TypeBuilder.  Use ModFlags and MemberType fields.
5243         * class.cs (MemberBase.member_type): Rename from MemberType.
5244         (MemberBase.MemberType): New property.  Determines member_type on
5245         demand.
5246         (MemberBase.DoDefine): Don't initialize MemberType here.
5247         (FieldMember.Define): Likewise.
5248
5249 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5250
5251         Fix #74241
5252         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5253         Attributes are emitted there.
5254         
5255 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5256
5257         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5258         keyword in 'partial enum' too.
5259         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5260         is not allowed).
5261         Report from Kamil Skalski <nazgul@omega.pl>.
5262
5263         Fix #74309.
5264         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5265         have partial containers too.
5266
5267         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5268         in block' checks to Block.CheckInvariantMeaningInBlock.
5269         * statement.cs (Block.GetKnownVariableInfo): Make private.
5270         (Block.IsVariableUsedInChildBlock): Remove.
5271         (Block.IsVariableUsedInBlock): Likewise.
5272         (Block.CheckInvariantMeaningInBlock): New.  Show location of
5273         conflicting declaration.
5274         (Block.AddVariable): Make error messages less long-winded and more
5275         specific.  Show location of conflicting declaration.
5276         * parameter.cs (Parameters.Location): New readonly property.
5277
5278 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5279
5280         Clean up semantics of invoking ResolveMemberAccess.
5281         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
5282         can have an instance, ensure that we pass in a non-TypeExpression
5283         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
5284         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
5285         argument.  Update to changes and simplify.
5286         (FieldExpr.Emitinstance): Remove CS0120 check.
5287         (PropertyExpr.EmitInstance): Likewise.
5288         * expression.cs (Argument.Resolve): Likewise.
5289         (Invocation.DoResolve): Update to changes in semantics of
5290         InstanceExpression.
5291
5292 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
5293
5294         Fix #74241
5295         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
5296         customization.
5297         
5298         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
5299
5300 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5301
5302         Fix difference in behaviour with commandline invocation.
5303         * driver.cs (Driver.Reset): New.
5304         (CompilerCallableEntryPoint): Call it.
5305
5306         * statement.cs (If.Resolve): Avoid spurious "uninitialized
5307         variable" warnings if the boolean expression failed to resolve.
5308
5309 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
5310
5311         * attribute.cs: Fix the union of several permissions when some of them
5312         are unrestricted (so the result isn't an unrestricted permission set).
5313         Fix #74036.
5314
5315 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5316
5317         * ecore.cs (MemberExpr): New class.  Convert from interface
5318         IMemberExpr.
5319         (MemberExpr.ResolveMemberAccess): Refactor and move here from
5320         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
5321         error checks.
5322         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
5323         (MethodGroupExpr.IsExplicitImpl): Remove.
5324         (Expression.GetFieldFromEvent): Remove.
5325         (SimpleName.MemberStaticCheck): Remove.
5326         (SimpleName.DoSimpleNameResolve): Update to changes.
5327         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
5328         (MemberAccess.IdenticalNameAndTypeName): Remove.
5329         (MemberAccess.error176): Move to MemberExpr.
5330         (MemberAccess.DoResolve): Update to changes.
5331         (BaseAccess.DoResolve): Likewise.
5332
5333 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
5334
5335         C# 2.0 Conditional attribute class implementation
5336         
5337         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
5338         Analyzes class whether it has attribute which has ConditionalAttribute
5339         and its condition is not defined.
5340         
5341         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
5342         (Class.IsExcluded): New method. Search for at least one defined
5343         condition in ConditionalAttribute of attribute class.
5344
5345 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5346
5347         * ecore.cs (PropertyExpr): Derive from Expression, not
5348         ExpressionStatement.
5349         (PropertyExpr.EmitStatement): Remove.
5350
5351 2005-03-29  Raja R Harinath  <rharinath@novell.com>
5352
5353         Fix #74060.
5354         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
5355         internal field "value__" of an enum be private.  The examples for
5356         "value__" that I found on MSDN all used FieldAttributes.Private.
5357
5358         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
5359         Don't mention IL method attribute names.
5360
5361         Fix #47991.  Remove a TODO.
5362         * statement.cs (Block.Toplevel): Make into a field.
5363         (Block.Parameters): Move into ToplevelBlock.
5364         (Block.known_variables): Rename from child_variable_names.
5365         (Block.Block): Remove variants that take Parameters.  Initialize
5366         'Toplevel' with the immediately surrounding toplevel block.
5367         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
5368         LocalInfo parameter.
5369         (Block.GetKnownVariableInfo): New.
5370         (Block.IsVariableNameUsedInChildBlock): Update.
5371         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
5372         the block, even though it may not be in scope.
5373         (Block.AddVariable): Remove Parameters parameter.  Use
5374         Toplevel.Parameters instead.
5375         (Block.AddConstant): Remove Parameters parameter.
5376         (Block.GetParameterReference): Update to use Toplevel.Parameters.
5377         (Block.IsParamaterReference): Likewise.
5378         (Block.IsLocalParameter): Likewise.  Simplify a lot.
5379         (ToplevelBlock.Parameters): New.  Moved from Block.
5380         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
5381         initialize Parameters to a non-null value.
5382         * cs-parser.jay: Update to changes.
5383         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
5384         simple names that mean different things in the same block.  Use
5385         Block.IsVariableNameUsedInBlock.
5386
5387 2005-03-28  Raja R Harinath  <rharinath@novell.com>
5388
5389         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
5390
5391 2005-03-26  Raja R Harinath  <harinath@acm.org>
5392
5393         Fix #73038.
5394         * assign.cs (Assign.DoResolve): When the RHS of an assignment
5395         fails to resolve, ensure that the LHS is still resolved as an
5396         lvalue.
5397
5398 2005-03-25  Raja R Harinath  <harinath@acm.org>
5399
5400         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
5401         ec.ContainerType.
5402         (Enum.current_ec): Remove.
5403         (Enum.LookupEnumValue): Remove EmitContext argument.
5404         Just uses the one created during DefineType.
5405         (Enum.FindMembers): Update.
5406         * expression.cs (MemberAccess.DoResolve): Update.
5407
5408 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
5409
5410         * assign.cs (Assign.DoResolve): Check for CS1717 when
5411         source and target are same (uses Equals).
5412
5413         * expression.cs (LocalVariableReference, ParameterReference,
5414         This): Implemented Equals, GetHashCode.
5415
5416         * statement.cs (Block.GetParameterReference): Removed useless
5417         local variable.
5418
5419 2005-03-22  Raja R Harinath  <rharinath@novell.com>
5420
5421         Fix cs0128.cs
5422         * statement.cs (Block.AddVariable): Ensure that we skip implicit
5423         blocks before deciding whether the error is cs0136 or cs0128.
5424
5425         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
5426         (using_alias_directive, using_namespace_directive): Pass
5427         MemberName, not an expression to Namespace.UsingAlias and
5428         Namespace.Using.
5429         (MakeName): Use the MemberName of the namespace.
5430         * namespace.cs (Namespace.MemberName): New.
5431         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
5432         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
5433         Likewise.
5434         * decl.cs (MemberName.Name): Make readonly.
5435         (MemberName.FromDotted): New "constructor".
5436         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
5437         (MemberCore.Name): Compute from MemberName on demand.
5438         (MemberCore.SetMemberName): Provide a way to change the
5439         MemberName.
5440         (MemberCore.AddToContainer): Don't take a fullname parameter.
5441         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
5442         fully qualified name of the container to the member name.
5443         (TypeContainer.AddToTypeContainer): Use a fully qualified name
5444         only if the type is a member of the root container.
5445         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
5446         MemberName.Left rather than searching for an embedded ".".
5447         (PartialContainer.CreatePart): Update to changes in RootContext.
5448         (MemberBase.ShortName): Turn into a property.  Use
5449         MemberCore.SetMemberName.
5450         (MemberBase.ExplicitInterfaceName): Remove.
5451         (MemberBase.UpdateMemberName): Remove.
5452         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
5453         (PropertyBase.SetMemberName): New override.
5454         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
5455         (Tree.GetDecl): New.
5456         (Tree.AllDecls): Rename from Decls.
5457         * attribute.cs, enum.cs, report.cs: Update to changes.
5458         * driver.cs (MainDriver): Use MemberName.FromDotted on
5459         RootContext.MainClass.
5460
5461 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
5462
5463         * class.cs (FixedField.Define): Check for CS1664 and more sanity
5464         checks.
5465
5466         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
5467
5468 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
5469
5470         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
5471         property accessor modifiers.
5472
5473         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
5474         fixed buffer attribute (CS1716).
5475         (PropertyMethod.HasCustomAccessModifier): When property accessor
5476         has custom modifier.
5477
5478         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
5479         modifiers.
5480         (PropertyExpr.DoResolveLValue): Add CS0272.
5481
5482 2005-03-17  Miguel de Icaza  <miguel@novell.com>
5483
5484         * convert.cs: When converting to a pointer, use the proper Conv.U
5485         or Conv.I depending on the source data type.
5486
5487         * cs-tokenizer.cs: Make the size for large decimal constants,
5488         fixes #72957.
5489
5490 2005-03-17  Martin Baulig  <martin@ximian.com>
5491
5492         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
5493         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
5494
5495 2005-03-17  Martin Baulig  <martin@ximian.com>
5496
5497         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
5498         to bool so we can return an error condition.
5499         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
5500         returned an error.
5501
5502 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
5503
5504         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
5505         attributes.
5506
5507 2005-03-16  Raja R Harinath  <rharinath@novell.com>
5508
5509         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
5510         Refactor to avoid traversing the list of assemblies, and to avoid
5511         string concatenation.
5512         * typemanager.cs (guid_attr_type): Remove.
5513         (negative_hits, pointers, references): Remove hashes.
5514         (type_hash): New.
5515         (GetConstructedType): New.  Uses type_hash to handle constructed
5516         types (arrays, references, pointers).
5517         (GetReferenceType, GetPointerType): Use it.
5518         (GetNestedType): New.  Uses type_hash to handle nested types of
5519         reflected types.
5520         (LookupType, LookupTypeDirect): Remove.
5521         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
5522         'types' hash and LookupTypeReflection directly.
5523         (params_string, params_object): Use GetConstructedType.
5524         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
5525         top-level types.
5526         (Namespace.Lookup): Use cached_types.
5527         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
5528         provided by old TypeManager.LookupType.
5529         * rootcontext.cs (MakeFQN): Remove.
5530         * decl.cs (DeclSpace.MakeFQN): Likewise.
5531         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
5532         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
5533         TypeManager.GetConstructedType.
5534         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
5535
5536 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
5537
5538         * cs-parser.jay: Fix build.
5539
5540 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
5541
5542         * class.cs (TypeContainer.CircularDepException) New nested
5543         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
5544
5545         * cs-parser.jay: Reports CS1527 for any namespace element.
5546
5547         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
5548         Added CS0407.
5549
5550         * expression.cs (ParameterReference.IsAssigned): Changed error to
5551         CS0269.
5552         (Error_WrongNumArguments): Moved CS0245 detection here.
5553
5554         * statement.cs (Return.Resolve): Add CS1622 report.
5555
5556 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
5557
5558         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
5559
5560 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
5561
5562         * attribute.cs expression.cs: Get rid of some allocations.
5563
5564 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
5565
5566         * doc.cs : just eliminate the latest change.
5567
5568 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5569
5570         * doc.cs : commented out the latest change. It breaks xml-030.cs
5571
5572 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5573
5574         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
5575           fail. So invoke CreateType() in FindDocumentedType().
5576
5577 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5578
5579         * cs-tokenizer.cs : added IsKeyword().
5580         * doc.cs : Detect keyword incorrectly used as identifier.
5581           Allow identifiers prefixed by @.
5582
5583 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
5584
5585         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
5586         It caused exception in namespace resolving (again!).
5587         
5588         * class.cs (Class.ctor): Removed exit.
5589         (PropertyMethod.ctor): ditto.
5590         
5591         * codegen.cs (Codegen.Reset): Reset static data.
5592         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
5593         
5594         * cs-tokenizer.cs (Cleanup): Removed.
5595         
5596         * driver.cs (GetSystemDir): Rewrote to one line command.
5597         It caused problem with unloaded dynamic modules.
5598         (UnixParseOption): Removed Exit.
5599         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
5600         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
5601         Now can be mcs used as library.
5602         
5603         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
5604         empty location.
5605         
5606         * location.cs (Reset): Reset static data.
5607         
5608         * namespace.cs (Reset): Reset static data.
5609         
5610         * report.cs (Report.Reset): Reset static data.
5611         
5612         * rootcontext.cs (RootContext.Reset): Reset static data.
5613         
5614         * tree.cs (RootTypes.ctor): Use Location.Null
5615         
5616         * typemanager.cs (TypeManager.Reset): Reset static data.
5617         (CoreLookupType): Removed Exit.
5618         (TypeHandle.Reset): Reset static data.
5619         
5620 2005-03-10  Raja R Harinath  <rharinath@novell.com>
5621
5622         Fix #73516.
5623         * typemanager.cs (ComputeNamespaces): Import namespaces from
5624         referenced modules too.
5625
5626 2005-03-09  Raja R Harinath  <rharinath@novell.com>
5627
5628         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
5629         than '.'.
5630
5631 2005-03-09  Raja R Harinath  <rharinath@novell.com>
5632
5633         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
5634         enclosing DeclSpace.  This ensures that a name-lookup populates
5635         more caches and there are fewer 'TypeExpression's.  Carve out
5636         nested type lookup into ...
5637         (LookupNestedTypeInHierarchy): ... this.
5638
5639 2005-04-15  Martin Baulig  <martin@ximian.com>
5640
5641         Merged r41590 from MCS and make it work in the generics land.
5642
5643         * generic.cs (TypeParameter.UpdateConstraints): Removed the
5644         `check' argument.
5645
5646         * class.cs (PartialContainer.UpdateConstraints): Removed.
5647         (PartialContainer.CheckConstraints): Removed.
5648         (PartialContainer.SetParameterInfo): Store the constraints here.
5649         (PartialContainer.DefineTypeParameters): New public method;
5650         resolve the type parameter's constraints here.  Note that the
5651         PartialContainer doesn't have an EmitContext anymore, so we must
5652         do this in the ClassPart.
5653
5654 2005-03-09  Raja R Harinath  <rharinath@novell.com>
5655
5656         Clean up a few partial-class semantics.  
5657         Fixes test-357.cs and cs1618-2.cs.
5658         * cs-parser.jay (struct_declaration): Use 'current_class' as
5659         parent of newly-created struct.  Remove call to Register ().
5660         Use 'pop_current_class' to complete handing the current struct.
5661         (interface_declaration): Likewise.
5662         (class_declaration): Likewise.
5663         (enum_declaration): Use 'current_class' as parent of newly created
5664         enum.
5665         (delegate_declaration): Likewise.
5666         (pop_current_class): New function.  This is used to handle closing
5667         up the 'current_class' and 'current_container', and pointing them
5668         to the enclosing class/container.
5669         (CSharpParser): Initialize 'current_class' too.
5670         * decl.cs (MemberCore): Add check for invariant: a partial
5671         container is not a parsed entity, and thus does not enclose any
5672         parsed members.
5673         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
5674         (DeclSpace.BaseTypeExpr): Use it.
5675         (DeclSpace.LookupType): Add check for invariant.
5676         * class.cs (TypeContainer): Add check for invariant: a nested
5677         class should have the same NamespaceEntry as its enclosing class.
5678         (TypeContainer.EmitFieldInitializers): Make virtual.
5679         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
5680         MemberCore.
5681         (TypeContainer.Register): Remove.
5682         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
5683         null.  Use TypeResolveEmitContext for resolving base types and
5684         interfaces.  Move initialization of Parts.TypeBuilder here from
5685         ...
5686         (TypeContainer.DefineNestedTypes): ... here.
5687         (PartialContainer): Take a Namespace not a NamespaceEntry.
5688         (PartialContainer.Create): Don't use Register.  Call the
5689         appropriate Add... function directly.
5690         (ClassPart): Take both the PartialContainer and the enclosing
5691         class as constructor arguments.
5692         (ClassPart.EmitFieldInitializers): Override.
5693         (ClassPart.PartFindNestedTypes): Remove.
5694         (FieldBase.GetInitializerExpression): Resolve the initializer
5695         expression in the emit context of the enclosing class.
5696         * tree.cs (RootTypes): Remove Register ().
5697         
5698 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
5699
5700         * cs-parser.jay: Removed CS0134.
5701         
5702         * driver.cs: Removed CS1901.
5703         
5704         * expression.cs (SizeOf.DoResolve): Don't report CS0233
5705         for predefined types.
5706
5707 2005-03-07  Duncan Mak  <duncan@novell.com>
5708
5709         * codegen.cs (Save):  Catch UnauthorizedAccessException as
5710         well. Fixes bug #73454.
5711
5712 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
5713
5714         * cs-tokenizer.cs (xtoken): Add CS1035.
5715         
5716         * class.cs (MethodData.Define): Add CS0683.
5717         (FieldMember.ctor): Add CS0681.
5718
5719 2005-03-07  Raja R Harinath  <rharinath@novell.com>
5720
5721         * ecore.cs (SimpleName.DoResolve): Rename from
5722         SimpleName.DoResolveAllowStatic.
5723         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
5724         Pass 'intermediate' flag to MemberStaticCheck.
5725         (SimpleName.MemberStaticCheck): Skip "static check" only in case
5726         of "intermediate" lookups via MemberAccess.
5727         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
5728         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
5729
5730 2005-03-07  Raja R Harinath  <rharinath@novell.com>
5731
5732         Fix #73394.
5733         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
5734         slipped in because of variable names that are identical to a
5735         builtin type's BCL equivalent ('string String;', 'int Int32;').
5736         (PropertyExpr.EmitInstance): Likewise.
5737
5738 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
5739
5740         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
5741         
5742         * report.cs (warning_ignore_table): Made public.
5743
5744 2005-03-04  Raja R Harinath  <rharinath@novell.com>
5745
5746         Fix #73282.
5747         * class.cs (MethodData.Emit): Pass 'container' to
5748         container.GetObsoleteAttribute instead of 'container.Parent'.
5749
5750 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
5751
5752         * cs-parser.jay: Add 1534 error test.
5753
5754         * iterators.cs (Yield.CheckContext): Add error 1629.
5755         (Iterator.ctor): Save unsafe modifier.
5756         (MoveNextMethod.DoEmit): Restore unsafe context.
5757
5758         * namespace.cs (UsingAlias): Better error message.
5759
5760 2005-03-03  Dan Winship  <danw@novell.com>
5761
5762         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
5763         the warning message [#73219]
5764
5765 2005-03-03  Raja R Harinath  <rharinath@novell.com>
5766
5767         Fix compile with MCS 1.0.0.0.
5768         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
5769         w_restore to not depend on string constant folding.
5770
5771 2005-03-03  Raja R Harinath  <rharinath@novell.com>
5772
5773         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
5774         CS0246 check to users who passed 'silent = false'.
5775         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
5776         check.
5777         (SimpleName.SimpleNameResolve): Update.
5778         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
5779         (MemberAccess.IdenticalNameAndTypeName): Update.
5780         * doc.cs (FindDocumentedTypeNonArray): Update.
5781
5782 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
5783
5784         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
5785         * parameters.cs (ComputeAndDefineParameters): Remove.
5786         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
5787         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
5788         Use GetParameterInfo.
5789
5790 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
5791
5792         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
5793
5794 2005-03-02  Raja R Harinath  <rharinath@novell.com>
5795
5796         Unify DeclSpace.LookupType and DeclSpace.FindType.
5797         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
5798         is in charge of defining nested types on demand.
5799         (DeclSpace.LookupType): Use it when the current_type is a
5800         TypeBuilder.  Use LookupTypeDirect for reflected types.
5801         (DeclSpace.FindType): Remove.
5802         (DeclSpace.LookupInterfaceOrClass): Likewise.
5803         (DeclSpace.DefineTypeAndParents): Likewise.
5804         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
5805         DeclSpace.LookupType.
5806         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
5807         * typemanager.cs (LookupType): Simplify.
5808         (AddUserType): Remove type from negative_hits.
5809         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
5810         * class.cs (TypeContainer.FindMembers): Move handling of nested
5811         types ...
5812         (TypeContainer.FindMembers_NestedTypes): ... here.
5813         (TypeContainer.FindNestedType): Implement override.
5814         (ClassPart.FindNestedType): Delegate to PartialContainer.
5815         (ClassPart.PartFindNestedType): Looks up the nested types of the
5816         part alone.
5817
5818 2005-04-14  Martin Baulig  <martin@ximian.com>
5819
5820         * generic.cs (ConstructedType): Moved all the type lookup and
5821         nested class logic into SimpleName.
5822         (ConstructedType.ResolveConstructedType): Our underlying type is
5823         already fully resolved; all the type lookup stuff is in
5824         SimpleName.
5825
5826         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
5827         constructed types here instead of in ConstructedType.
5828
5829         * decl.cs (MemberName.GetTypeExpression): Always create a
5830         SimpleName, not a ConstructedType.
5831         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
5832
5833 2005-03-02  Martin Baulig  <martin@ximian.com>
5834
5835         * class.cs (TypeContainer.DoDefineMembers): We also need a default
5836         static constructor in static classes.
5837
5838 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
5839
5840         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
5841         sizeParamIndex is not specified.
5842
5843 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
5844
5845         Fix #73117
5846         * report.cs (WarningMessage.IsEnabled): Missing null check.
5847
5848 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
5849
5850         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
5851         in the fields and not in the properties.
5852
5853 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
5854
5855         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
5856         fields as well.
5857
5858 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
5859
5860         * attribute.cs: Small refactoring (improved robustness).
5861         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
5862         (ValidateGuid): Removed.
5863         (Resolve): Removed referenced to above mentioned.
5864         (GetAttributeUsage): Made private and changed to work without
5865         class assistance.
5866         (GetIndexerAttributeValue): Don't crash.
5867         (GetConditionalAttributeValue): Ditto.
5868         (GetClsCompliantAttributeValue): Ditto.
5869         (ExtractSecurityPermissionSet): All attributes exceptions are
5870         error 648.
5871         (GetPropertyValue): New helper.
5872         (GetMethodImplOptions): New method.
5873         (DefinePInvokeMethod): Reuse common code. Implemented handling of
5874         some missing properties.
5875         
5876         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
5877         (Method.ApplyAttributeBuilder): Updated.
5878         
5879         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
5880         exception.
5881
5882 2005-02-28  Raja R Harinath  <rharinath@novell.com>
5883
5884         Fix #73052.
5885         * report.cs (Report.SymbolRelatedToPreviousError): Handle
5886         non-simple types (array, pointer, reference).
5887
5888 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
5889
5890         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
5891
5892         * class.cs (MethodCore.IsDuplicateImplementation): Special error
5893         for operators.
5894         (Method.CheckBase): Catch wrong destructor here.
5895         (MethodData.Define): Add errors 550, 668.
5896
5897         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
5898
5899         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
5900
5901         * pending.cs (VerifyPendingMethods): Add error 551.
5902
5903         * typemanager.cs (CSharpName): Next error report helper.
5904
5905 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
5906
5907         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
5908         attributes. Removed useless attribute double check.
5909         It saves almost 2MBs for corlib.
5910
5911 2005-02-25  Raja R Harinath  <rharinath@novell.com>
5912
5913         Fix #72924.
5914         * statement.cs (ExpressionStatement.Resolve): Make robust to being
5915         called twice in case of error.
5916
5917 2005-02-23  Chris Toshok  <toshok@ximian.com>
5918
5919         Fix compiler portions of #72827.
5920         * statement.cs (Block.Emit): call Begin/EndScope on the
5921         EmitContext instead of the ILGenerator.
5922
5923         * codegen.cs (EmitContext.BeginScope): new method, call
5924         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
5925         we have one.)
5926         (EmitContext.BeginScope): same, but EndScope and CloseScope
5927
5928         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
5929         offset and call the superclass's OpenScope(int) with it.
5930         (SymbolWriter.CloseScope): get the current il
5931         offset and call superclass's CloseScope(int) with it.
5932
5933 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
5934
5935         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
5936         CS1677 for out and ref as well.
5937
5938         * class.cs (Method.Define): Add error CS1599 detection.
5939         
5940         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
5941         
5942         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
5943         
5944         * delegate.cs (Delegate.Define): Add error CS1599 detection.
5945         
5946         * support.cs.cs (ModifierDesc): New helper method.
5947
5948 2005-02-23  Raja R Harinath  <rharinath@novell.com>
5949             Abin Thomas  <projectmonokochi@rediffmail.com>
5950             Anoob V E  <projectmonokochi@rediffmail.com>
5951             Harilal P R  <projectmonokochi@rediffmail.com>
5952
5953         Fix #57851, #72718.
5954         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
5955         MemberLookup (used for error reporting) actually returns a result.
5956         Fix error report number (122, not 112).
5957
5958 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
5959             Anoob V E  <projectmonokochi@rediffmail.com>
5960             Harilal P R  <projectmonokochi@rediffmail.com>
5961
5962         Fix #71134.
5963         * pending.cs (PendingImplementation.GetAbstractMethods):
5964         Find NonPublic members too.
5965
5966 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
5967
5968         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
5969         Fixed error 217.
5970         
5971         * class.cs (MethodCore.CheckMethodAgainstBase):
5972         Add error 239 report.
5973
5974 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
5975
5976         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
5977         
5978         * class.cs (Operator.Define): Add error 217 report.
5979         
5980 2005-02-21  Raja R Harinath  <rharinath@novell.com>
5981
5982         Fix #68955.
5983         * expression.cs (Invocation.IsApplicable): Make public.
5984         (Invocation.IsParamsMethodApplicable): Likewise.
5985         * delegate.cs (Delegate.VerifyApplicability): Don't use
5986         Invocation.VerifyArgumentCompat for parameter applicability
5987         testing.  Use Invocation.IsApplicable and
5988         Invocation.IsParamsMethodApplicable.
5989
5990 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
5991
5992         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
5993         
5994         * class.cs (Operator.Define): Add error 217 report.
5995         
5996 2005-02-21  Raja R Harinath  <rharinath@novell.com>
5997
5998         * namespace.cs (UsingEntry.Resolve): Undo change below.
5999
6000 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6001
6002         Fix #72756.
6003         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6004         disable the error message when the extended MemberLookup also
6005         fails.
6006         (Expression.MemberLookupFinal): Update.
6007         (SimpleName.DoSimpleNameResolve): Update.
6008         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6009         Don't use MemberLookupFinal.
6010         (New.DoResolve): Update.
6011         (BaseAccess.CommonResolve): Update.
6012
6013 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6014
6015         Fix #72732.
6016         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6017         occured previously, don't resolve again.
6018
6019 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6020
6021         Fix #69949
6022         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6023         argument. Call ResolveAttributeUsage for unresolved.
6024         when types doesn't match ctor arguments.
6025         
6026         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6027         for nested attribute classes.
6028         (Class.attribute_usage): Removed.
6029         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6030         for attribute class.
6031         
6032         * ecore.cs (IsAttribute): Removed.
6033         
6034         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6035         
6036         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6037         now normal types.
6038         (attribute_types): Removed.
6039         (EmitCode): Global attributes are emited as the latest.
6040
6041 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6042
6043         * class.cs (EmitFieldInitializers): Don't emit field initializer
6044         for default values when optimilization is on.
6045         
6046         * constant.cs (Constant.IsDefaultValue): New property.
6047         
6048         * driver.cs: Add /optimize handling.
6049         
6050         * constant.cs,
6051         * ecore.cs,
6052         * literal.cs: Implement new IsDefaultValue property.
6053         
6054         * rootcontext.cs (Optimize): New field, holds /optimize option.
6055
6056 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6057
6058         Fix crasher in re-opened #72347.
6059         * namespace.cs (Namespace.Lookup): Return null if
6060         DeclSpace.DefineType returns null.
6061
6062         Fix #72678.
6063         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6064
6065 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6066
6067         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6068         now returns null if it cannot resolve to an lvalue.
6069         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6070         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6071         returned null.  Remove check for SimpleName.
6072         (EventExpr.DoResolveLValue): New.
6073         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6074         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6075         error from ...
6076         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6077         avoid CS0131 error.
6078         (Unary.ResolveOperator): Move CS0211 check ...
6079         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6080         CS0131 error.
6081         (Unary.DoResolveLValue): Simplify.
6082         (AddressOf.DoResolveLValue): New.
6083         (ArrayAccess.DoResolveLValue): New.
6084
6085 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6086
6087         * attribute.cs (Attribute.Resolve): Add arguments casting for
6088         when types doesn't match ctor arguments.
6089
6090 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6091
6092         Fix parts of #63202.
6093         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6094         lookup of operator in base type.  Ensure that all checks happen
6095         when the operator resolves to an "op_..." method.
6096
6097 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6098
6099         Fix #71992.
6100         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6101         'ignore_cs0104' parameter.  Pass it to ...
6102         (NamespaceEntry.Lookup): ... this.
6103         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6104         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6105         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6106         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6107         Update.  Request that cs0104 errors be ignored.
6108         (ComposedCast.ResolveAsTypeStep): Update.
6109
6110 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6111
6112         Fix #59209.
6113         * expression.cs (Invocation.BetterFunction): Remove support for
6114         comparing virtual functions and their overrides.
6115         (Invocation.IsOverride): New.
6116         (Invocation.OverloadResolve): Don't consider 'override' functions
6117         during candidate selection.  Store them in a lookaside list.
6118         If the selected method is a 'virtual' function, use the list to
6119         find any overrides that are closer to the LHS type.
6120
6121 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6122
6123         * expression.cs (New.DoResolve): Add complex core type reduction.
6124         (New.Constantify): Converts complex core type syntax like 'new int ()'
6125         to simple constant.
6126         
6127 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6128
6129         * decl.cs (EntryType.EntryType): New constructor to create an
6130         updated copy of a cache entry.
6131         (MemberCache.AddMethods): Use it.
6132         (MemberCache.ClearDeclaredOnly): Remove.
6133         (MemberCache.MemberCache): Update.
6134
6135 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6136
6137         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6138         variable.  This one is represents the actual low-level declaration
6139         of the method, as opposed to the semantic level `IsStatic'.   
6140
6141         An anonymous method which is hosted into a static method might be
6142         actually an instance method.  IsStatic would reflect the
6143         container, while MethodIsStatic represents the actual code
6144         generated.
6145
6146         * expression.cs (ParameterReference): Use the new MethodIsStatic
6147         instead of IsStatic.
6148
6149         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6150         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6151         set on the current EmitContext. 
6152
6153         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6154         resolve our casted expression as an LValue.  This triggers the
6155         proper LValue processing that is later required by Assign.
6156
6157         This fixes 72347.
6158
6159         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6160
6161 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6162
6163         C# 2.0 Fixed buffer implementation
6164
6165         * anonymous.cs: Update after RegisterHelperClass renaming.
6166
6167         * attribute.cs (AttributeTester.fixed_buffer_cache):
6168         Cache of external fixed buffers.
6169         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6170         implementation if field is fixed buffer else null.
6171
6172         * class.cs
6173         (TypeContainer.AddField): Accept FieldMember instead of Field.
6174         (FieldBase.IsFieldClsCompliant): Extracted code from
6175         VerifyClsCompliance descendant customization.
6176         (FixedField): New class handles fixed buffer fields.
6177         (FixedFieldExternal): Keeps information about imported fixed
6178         buffer.
6179         (IFixedField): Make access to internal or external fixed buffer
6180         same.
6181
6182         * cs-parser.jay: Add fixed buffer parsing.
6183
6184         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6185         buffer.
6186
6187         * expression.cs (Indirection): Extended implementation to accept
6188         fixed buffer field.
6189         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6190         (ElementAccess.MakePointerAccess): Get type as parameter.
6191         (DoResolve): Add fixed buffer field expression conversion.
6192         (DoResolveLValue): Ditto.
6193         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6194         (ArrayPtr): Derives from FixedBufferPtr.
6195         (ArrayPtr.Emit): Add extra emit for array elements.
6196
6197         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6198
6199         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6200         for compiler generated types.
6201         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6202
6203         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6204         and consume less memory.
6205         (Fixed.Resolve): Add fixed buffer case.
6206
6207         * typemanager.cs (compiler_generated_attr_ctor,
6208         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6209         (HasElementType): Add our own implementation to work on every
6210         runtime.
6211
6212 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6213
6214         * anonymous.cs (CaptureContext): Track whether `this' has been
6215         referenced.   
6216
6217         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6218         only captured `this' if it was implicitly done (instance
6219         methods/variables were used). 
6220
6221         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6222         `this' must be captured.
6223
6224 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6225  
6226         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6227         is null it means that there has been no need to capture anything,
6228         so we just create a sibling.
6229
6230         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6231
6232         Just a partial fix.  The other half is fairly elusive.
6233         
6234 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6235
6236         Fix #52586, cs0121-4.cs.
6237         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6238         and return a hashtable.
6239         (MemberCache.ClearDeclaredOnly): New.
6240         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6241         the method_hash of a base type too.
6242         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6243         type methods.  Overwrite entries with the same MethodHandle so
6244         that the ReflectedType is correct.  The process leaves in base
6245         virtual functions and their overrides as distinct entries.
6246         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6247         matters since it was boxed in a ArrayList before.
6248         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6249         modifier.
6250         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6251         case of a virtual function and its override (choose the overload
6252         as better).
6253         (Invocation.OverloadResolve): Avoid 'override' members during
6254         'applicable_type' calculation.
6255
6256 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6257
6258         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6259         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6260         GetTypeHandle.  It is possible for a reflected type to derive from
6261         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6262         System.Array during mscorlib compilation).
6263         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6264         contain a method_hash, don't create one either.  Don't create a
6265         deep copy of the base cache's method_hash.
6266         (MemberCache.SetupCache): Rename back from DeepCopy.
6267         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6268         already initialized.  If we see an override function, add its
6269         underlying base virtual function to the member_hash too.
6270
6271 2005-02-09  Raja R Harinath  <rharinath@novell.com>
6272
6273         Combine two near-redundant caches.
6274         * typemanager.cs (method_params): Rename from method_internal_params.
6275         (TypeManager.GetParameterData): New.  Replace
6276         Invocation.GetParameterData.
6277         (TypeManager.LookupParametersByBuilder): Remove.
6278         * expression.cs (Invocation.method_parameter_cache): Remove.
6279         (Invocation.GetParameterData): Remove.
6280         Update to changes.
6281         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
6282         Update to changes.
6283
6284 2005-02-08  Raja R Harinath  <rharinath@novell.com>
6285
6286         Fix #72015.
6287         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
6288         TypeManager.multicast_delegate_type is null, resolve it by looking
6289         up "System.MulticastDelegate".
6290         * rootcontext.cs (RootContext.ResolveCore): Simplify.
6291
6292 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
6293             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
6294             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
6295
6296         Fix cs0164.cs.
6297         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
6298         (LabeledStatement.AddReference): New.  Set 'referenced'.
6299         (Goto.Resolve): Use it.
6300
6301 2005-02-05  John Luke  <john.luke@gmail.com>
6302
6303         * driver.cs: remove duplicate -doc line in Usage ()
6304
6305 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6306
6307         * location.cs (Location.AddFile): Fix CS2002 error report.
6308
6309 2005-02-02  Martin Baulig  <martin@ximian.com>
6310
6311         * delegate.cs (Delegate.DefineType): Report an internal error if
6312         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6313         details.        
6314
6315 2005-02-02  Raja R Harinath  <rharinath@novell.com>
6316
6317         Fix a crasher in a variant of #31984.
6318         * const.cs (Constant.CheckBase): New override that defers the
6319         new-or-override check in case the base type hasn't been populated
6320         yet.
6321         (Constant.Define): Ensure the new-or-override check is performed.
6322
6323 2005-02-01  Duncan Mak  <duncan@ximian.com>
6324
6325         * const.cs (LookupConstantValue): Check that `ce' is not null
6326         before calling GetValue ().
6327
6328 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6329
6330         Fix test-334.cs (#69519).
6331         * cs-parser.jay (using_alias_directive): Pass in an expression to
6332         NamespaceEntry.UsingAlias.
6333         (using_namespace_directive): Pass in an expression to
6334         NamespaceEntry.Using.
6335         (namespace_name): Don't flatten to a string.
6336         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
6337         (NamespaceEntry.AliasEntry.Resolve): Lookup using
6338         ResolveAsTypeStep.
6339         (NamespaceEntry.UsingEntry): Likewise.
6340         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
6341         changes.
6342         (NamespaceEntry.LookupForUsing): Remove.
6343         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
6344         names.
6345         (NamespaceEntry.Lookup): Remove support for dotted names.
6346
6347 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6348
6349         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
6350         split into two.
6351         (NamespaceEntry.ImplicitParent): Compute on demand.
6352         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
6353         parallels the current.
6354         (NamespaceEntry.LookupForUsing): Use it.
6355         (NamespaceEntry.Lookup): If the current namespace-entry is
6356         implicit, don't search aliases and using tables.
6357
6358 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6359
6360         Fix #31984.
6361         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
6362         BaseCache here.
6363         (TypeContainer.BaseCache): Compute on demand.
6364         (TypeContainer.FindMembers): Define constants and types if they're
6365         not already created.
6366         (FieldMember.Define): Move resetting of ec.InUnsafe before error
6367         check.
6368         * const.cs (Constant.Define): Make idempotent.
6369
6370 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6371
6372         * pending.cs: Produce better code (no nops produced by using Ldarg
6373         + value).
6374         
6375         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6376         i - 1' it should be arg + 1.
6377
6378         Fixes bug #71819.
6379
6380 2005-01-28  Raja R Harinath  <rharinath@novell.com>
6381
6382         * attribute.cs (Attribute.CheckAttributeType): Make private
6383         non-virtual.
6384         (Attribute.ResolveType): Make virtual.
6385         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
6386         handling of RootContext.Tree.Types.
6387
6388 2005-01-27  Raja R Harinath  <rharinath@novell.com>
6389
6390         Update attribute-handling to use the SimpleName/MemberAccess
6391         mechanisms.
6392         * cs-parser.jay (attribute): Pass in an expression to the
6393         constructors of Attribute and GlobalAttribute.
6394         * attribute.cs (Attribute): Take an expression for the name.
6395         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
6396         passed in attribute name expression.
6397         (Attribute.CheckAttributeType): Use it.
6398         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
6399         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
6400         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
6401         argument to prevent error messages if the lookup fails.
6402
6403 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
6404
6405         * expression.cs (Indirection): Implemented IVariable interface
6406         to support indirection in AddressOf operator.
6407         (PointerArithmetic.Emit): Add optimalization for case where
6408         result can be precomputed.
6409
6410 2005-01-26  Martin Baulig  <martin@ximian.com>
6411
6412         * class.cs (TypeContainer.AttributeTargets): Return the correct
6413         AttributeTargets depending on our `Kind' instead of throwing an
6414         exception; fixes #71632.
6415
6416 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
6417
6418         Fix #71257
6419         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
6420         constant members.
6421
6422 2005-03-17  Martin Baulig  <martin@ximian.com>
6423
6424         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6425         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6426
6427 2005-03-17  Martin Baulig  <martin@ximian.com>
6428
6429         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6430         to bool so we can return an error condition.
6431         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6432         returned an error.
6433
6434 2005-03-17  Martin Baulig  <martin@ximian.com>
6435
6436         * generic.cs (TypeMananager.IsIEnumerable): New public method.
6437
6438         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
6439         converting from an array-type of T to `IEnumerable<T>'.
6440
6441 2005-03-16  Martin Baulig  <martin@ximian.com>
6442
6443         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
6444         (Nullable.LiftedUnaryMutator): New public class.
6445
6446         * expression.cs (UnaryMutator.DoResolve): Added support for
6447         Nullable Types.
6448
6449 2005-03-14  Martin Baulig  <martin@ximian.com>
6450
6451         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
6452
6453 2005-03-14  Martin Baulig  <martin@ximian.com>
6454
6455         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
6456         the comparision operators `<', `>', `<=' and `>='.
6457
6458 2005-03-13  Martin Baulig  <martin@ximian.com>
6459
6460         * generic.cs
6461         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
6462         avoid confusion with the `NullLiteral'.
6463         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
6464
6465 2005-03-13  Martin Baulig  <martin@ximian.com>
6466
6467         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
6468         comparing arbitrary types with the null literal.
6469
6470 2005-03-13  Martin Baulig  <martin@ximian.com>
6471
6472         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
6473         boolean operators '&&', '||', '&' and '|'.
6474         (Nullable.OperatorTrueOrFalse): New public class.
6475
6476         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
6477         instead of a `StaticCallExpr'; added support for nullables.
6478
6479 2005-03-10  Martin Baulig  <martin@ximian.com>
6480
6481         * expression.cs
6482         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
6483         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
6484
6485 2005-03-07  Martin Baulig  <martin@ximian.com>
6486
6487         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
6488         it work if `expr' is not an IMemoryLocation.
6489         (Nullable.Lifted): Implement IMemoryLocation.
6490         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
6491         target type.
6492
6493 2005-03-05  Martin Baulig  <martin@ximian.com>
6494
6495         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
6496         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
6497         (Nullable): Added support for lifted unary and binary operators.
6498
6499         * expression.cs (Unary.DoResolve): Added support for nullable types.
6500         (Binary.DoResolve): Likewise.
6501         (Conditional.DoResolve): Likewise.
6502
6503 2005-03-02  Martin Baulig  <martin@ximian.com>
6504
6505         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
6506
6507         * class.cs (ClassPart.SetParameterInfo): Override this.
6508         (PartialContainer.SetParameterInfo): Override this.
6509         (TypeContainer.CheckConstraints): New protected method.
6510         (PartialContainer.CheckConstraints): Override this and check
6511         whether the same contraints were specified in all parts of a
6512         partial generic type definition.
6513         (PartialContainer.UpdateConstraints): New public method.
6514
6515         * generic.cs (TypeParameter.UpdateConstraints): New public method.
6516
6517 2005-03-02  Martin Baulig  <martin@ximian.com>
6518
6519         Committing a patch from Carlos Alberto Cortez to fix #72887.
6520
6521         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
6522         casts from `T []' to `int []'.
6523
6524 2005-03-02  Martin Baulig  <martin@ximian.com>
6525
6526         * generic.cs (TypeManager.IsEqual): Make this symmetric.
6527
6528         * expression.cs (Binary.ResolveOperator): When resolving a
6529         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
6530         `=='.  Fixes #71866.  See gen-127.cs.
6531
6532 2005-03-02  Martin Baulig  <martin@ximian.com>
6533
6534         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6535         static constructor in static classes.
6536
6537 2005-03-02  Martin Baulig  <martin@ximian.com>
6538
6539         * generic.cs
6540         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
6541         (Nullable.LiftedConversion): Added support for user-defined
6542         conversions.
6543
6544         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
6545
6546         * cs-parser.jay: Use ComposedCast everywhere instead of
6547         NullableType, so we don't need to check for NullableType
6548         everywhere.
6549         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
6550         case where we'll be resolved into a `parenthesized_expression_0'
6551         afterwards.
6552
6553         * convert.cs
6554         (Convert.UserDefinedConversion): Added nullable conversions.
6555
6556 2005-02-28  Martin Baulig  <martin@ximian.com>
6557
6558         * generic.cs (TypeManager.IsNullableType): New static method.
6559         (Nullable): New abstract class.
6560         (Nullable.NullLiteral): New public class.
6561         (Nullable.LiftedConversion): New public class.
6562
6563         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
6564         `builtin_types opt_nullable'.
6565
6566         * convert.cs
6567         (Convert.ImplicitConversionStandard): Added nullable conversions.
6568         (Convert.ExplicitConversionStandard): Likewise.
6569         (Convert.ExplicitConversion): Likewise.
6570
6571 2005-02-26  Martin Baulig  <martin@ximian.com>
6572
6573         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
6574         begin with a "?", for instance "?[]".  Don't do a type lookup if
6575         `dim' is empty.
6576
6577 2005-02-25  Martin Baulig  <martin@ximian.com>
6578
6579         The first part of Nullable Types :-)
6580
6581         * generic.cs (NullableType): New public class.
6582         (NullCoalescingOperator): New public class.
6583         (TypeArguments.Resolve): Add a CS0306 check.
6584
6585         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
6586         (opt_nullable): New rule.
6587         (type): Added `opt_nullable' to `namespace_or_type_name',
6588         `builtin_types' and `pointer_type'.
6589         (array_type): Added `opt_nullable'.
6590         (opt_rank_specifier_or_nullable): New rule; this is the
6591         combination of `opt_rank_specifier' and `opt_nullable'.
6592         (opt_error): New rule; catch errors here.
6593         (nullable_type_or_conditional): New rule; we use this to check for
6594         nullable and still detect the conditional operator.
6595         (local_variable_type): Use `opt_rank_specifier_or_nullable'
6596         instead `opt_rank_specifier'.
6597
6598         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
6599         for nullables.
6600
6601 2005-02-24  Martin Baulig  <martin@ximian.com>
6602
6603         * README, README.Changes: Removed; they're old and obsolete.
6604
6605 2005-02-22  Martin Baulig  <martin@ximian.com>
6606
6607         * generic.cs (TypeParameter.Resolve): If resolving the constraints
6608         returned an error, set `constraints' to null to avoid a crash
6609         later on.
6610         (TypeParameter.ResolveType): Likewise.
6611
6612 2005-02-22  Martin Baulig  <martin@ximian.com>
6613
6614         * generic.cs
6615         (Constraints.ResolveTypes): Protect against being called twice.
6616         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
6617         (TypeParameter.ResolveType): New public method; calls
6618         constraints.ResolveTypes().
6619         (TypeParameter.DefineType): Moved constraints.ResolveType() out
6620         into the new ResolveType().
6621         (GenericMethod.Define): Call ResolveType() on all our
6622         TypeParameter's.        
6623
6624 2005-02-21  Martin Baulig  <martin@ximian.com>
6625
6626         * generic.cs
6627         (TypeManager.generic_nullable_type): New static public field.
6628         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
6629
6630         * rootcontext.cs
6631         (RootContext.ResolveCore): Resolve "System.Nullable`1".
6632
6633 2005-02-15  Martin Baulig  <martin@ximian.com>
6634
6635         * generic.cs (ConstructedType.Constraints): Correctly check
6636         constraints if the argument type is a type parameter; fixes
6637         #72326. 
6638
6639 2005-02-02  Martin Baulig  <martin@ximian.com>
6640
6641         * delegate.cs (Delegate.DefineType): Report an internal error if
6642         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6643         details.        
6644
6645 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6646
6647         * pending.cs: Produce better code (no nops produced by using Ldarg
6648         + value).
6649         
6650         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6651         i - 1' it should be arg + 1.
6652
6653         Fixes bug #71819.
6654         
6655 2005-01-26  Martin Baulig  <martin@ximian.com>
6656
6657         * cs-parser.jay (indexer_declarator): Don't report an error if we
6658         have type parameters since we can be an explicit interface
6659         implementation; fixes #71449.
6660
6661 2005-01-26  Martin Baulig  <martin@ximian.com>
6662
6663         * class.cs (TypeContainer.AttributeTargets): Return the correct
6664         AttributeTargets depending on our `Kind' instead of throwing an
6665         exception; fixes #71632.
6666
6667 2005-01-26  Martin Baulig  <martin@ximian.com>
6668
6669         * delegate.cs (Delegate.DefineType): Correctly define our type
6670         parameters.  Fixes #71483.
6671
6672 2005-01-25  Raja R Harinath  <rharinath@novell.com>
6673
6674         Fix #71602.
6675         * expression.cs (MemberAccess.DoResolve): Don't complain with
6676         cs0572 when the LHS of a member access has identical name and type
6677         name.
6678
6679 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
6680
6681         Fix #71651, #71675
6682         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
6683         CreatePermission.
6684         Create custom PermissionSet only for PermissionSetAttribute.
6685
6686 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
6687
6688         Fix #71649
6689         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
6690         delegates in static class.
6691
6692 2005-01-24  Martin Baulig  <martin@ximian.com>
6693
6694         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
6695         merging an implicit block, just use its reachability.
6696
6697         * statement.cs (Block.Resolve): Make the unreachable code check
6698         work wrt. implicit blocks; see test-337 from #63842.
6699
6700 2005-01-21  Alp Toker  <alp@atoker.com>
6701  
6702         * cs-parser.jay: destructor_declaration's container is PartialContainer
6703         not Class when partial types are used, so use Kind prop instead of
6704         'is'.
6705         
6706 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
6707
6708         * cs-parser.jay: Improve error reporting when an interface
6709         declares new types.
6710
6711 2005-01-20  Dick Porter  <dick@ximian.com>
6712
6713         * support.cs: SeekableStreamReader fix from Sandor Dobos
6714         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
6715         chars are read.  Fixes bug 70369.
6716
6717 2005-01-20  Raja R Harinath  <rharinath@novell.com>
6718
6719         * cs-parser.jay (catch_clause): Simplify current_block handling
6720         somewhat.
6721
6722 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
6723
6724         * convert.cs (ImplicitStandardConversionExists): Synchronize the
6725         code with ImplicitStandardConversion to handle the implicit
6726         conversion of method groups into valid delegate invocations. 
6727
6728         The problem is that in parameter handling we were using this code
6729         path.  Fixes bug #64698
6730
6731 2005-01-19  Raja R Harinath  <rharinath@novell.com>
6732
6733         * cs-parser.jay: Fix several infelicities.
6734         - Avoid assigning to the parser value stack.  Code like 
6735           '$3 = null' is unclean.  Synthesize a value for the code block
6736           instead. 
6737         - Avoid using oob_stack for storing location information.  Use ...
6738         (_mark_): ... this.  New (empty) rule.  Saves the current location
6739         in $$.
6740         (foreach_statement): Avoid using oob_stack for current_block
6741         handling.  Use technique used in for_statement and
6742         using_statement.  Synthesize a value for the code block to store
6743         additional intermediate information.
6744
6745 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
6746
6747         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
6748         of a different type is only allowed to private fields of a
6749         containing type, not on fields of a base class.
6750
6751         See test-174.cs and error cs0122-9.cs
6752
6753 2005-01-13  Raja R Harinath  <rharinath@novell.com>
6754
6755         Fix test-335.cs (bug #58126).
6756         * cs-parser.jay (argument): Split out non-expression parts of the
6757         rule into 'non_simple_argument'.
6758         (invocation_expression): Support parenthesized invocations with
6759         multiple arguments, and with single non-simple arguments.
6760
6761 2005-01-13  Raja R Harinath  <rharinath@novell.com>
6762
6763         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
6764         places.
6765
6766 2005-01-12  Raja R Harinath  <rharinath@novell.com>
6767
6768         Fix cs0038-1.cs, cs1640-6.cs.
6769         * ecore.cs (Expression.Resolve): Remove special-case for
6770         SimpleName in error-handling.
6771         (Expression.almostMatchedMembers): Relax access permission to
6772         protected.
6773         (Expression.MemberLookupFailed): Handle duplicates in
6774         almostMatchedMembers list.
6775         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
6776         * expression.cs (New.DoResolve): Report CS1540 for more cases.
6777         * typemanager.cs (GetFullNameSignature): Use the MethodBase
6778         overload if the passed in MemberInfo is a MethodBase.
6779
6780 2005-01-25  Martin Baulig  <martin@ximian.com>
6781
6782         * doc.cs
6783         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
6784
6785 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
6786
6787         Fix #70749
6788         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
6789         for non-CAS & merge permission sets properly.
6790
6791 2005-01-11  Raja R Harinath  <rharinath@novell.com>
6792
6793         Improve standard-compliance of simple name and member access 
6794         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
6795         * ecore.cs (FullNamedExpression): New abstract base class 
6796         for Namespaces and TypeExpressions.
6797         (ResolveFlags.SimpleName): Remove.
6798         (SimpleName): Remove support for dotted names.
6799         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
6800         DeclSpace.FindType and DeclSpace.LookupType.
6801         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
6802         (Expression.ExprClassName): Make member function.
6803         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
6804         a namespace.  Remove creation of dotted "SimpleName"s.
6805         (MemberAccess.DoResolve): Likewise.
6806         * decl.cs (DeclSpace.Cache): Make private.
6807         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
6808         (DeclSpace.FindType): Update.
6809         (DeclSpace.LookupType): Move here from RootContext.  Return a 
6810         FullNamedExpression.
6811         * namespace.cs (Namespace): Derive from FullNamedExpression
6812         so that it can be part of expression resolution.
6813         (Namespace.Lookup): Return an FullNamedExpression.
6814         (NamespaceEntry.LookupAlias): Lookup aliases only in current
6815         namespace.
6816         * rootcontext.cs (NamespaceLookup): Remove.
6817         (LookupType): Move to DeclSpace.
6818         * attribute.cs (CheckAttributeType): Update.
6819         * doc.cs (FindDocumentedType): Remove allowAlias argument.
6820         (FindDocumentedTypeNonArray): Likewise.
6821
6822 2005-01-11  Raja R Harinath  <rharinath@novell.com>
6823
6824         Fix cs0509.cs, cs1632.cs.
6825         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
6826         is the same as IsInterface.
6827         (TypeContainer.GetClassBases): Likewise.
6828         * statement.cs (LabeledStatement.ig): New field.
6829         (LabeledStatement.LabelTarget): Save ILGenerator which created the
6830         label.
6831         (LabeledStatement.DoEmit): Check that the label was created with
6832         the same ILGenerator.
6833
6834 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
6835
6836         Fix #71058
6837         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
6838         accessors to its properties.
6839
6840         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
6841         from accessors to property.
6842         
6843 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
6844
6845         Fix #70722
6846         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
6847         only for overrides.
6848         
6849 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
6850
6851         * attribute.cs: Check for null and empty strings.  
6852
6853         I have lost another battle to Paolo.
6854
6855 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
6856
6857         Fix #70942
6858         * class.cs (PropertyMethod): Set Parent field in ctors.
6859         (SetMethod.InternalParameters): Add unsafe switch hack.
6860         Override MarkForDuplicationCheck where it is appropriate.
6861
6862         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
6863         It says whether container allows members with the same name.
6864         Base default is no.
6865         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
6866         Removed is_method parameter.
6867
6868 2005-01-06  Duncan Mak  <duncan@ximian.com>
6869
6870         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
6871         because the previous change led to incorrect reporting of CS1032
6872         ("Cannot define/undefine preprocessor symbols after first token in
6873         file"). Instead of using `tokens_seen' as the only flag that
6874         triggers CS1040, introduce `comments_seen'. This new flag is used
6875         to signify having seen comments on the current line, so it is
6876         unset after a newline.
6877
6878 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
6879
6880         * doc.cs : When searching for a type, find nested type too.
6881           This fixes bug #71040.
6882
6883 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
6884
6885         * doc.cs :
6886           - Warn missing member comment on those classes which also does not
6887             have doc comments. Fixed bug #71041.
6888           - Don't warn missing doc comment on default constructor.
6889             Fixed bug #71042.
6890
6891 2005-01-06  Duncan Mak  <duncan@ximian.com>
6892
6893         * cs-tokenizer.cs (xtoken): After handling traditional C-style
6894         comments, set `tokens_seen' to true. This allows us to detect
6895         misplaced preprocessor directives (i.e. not at the beginning of
6896         the a line, nor after whitespaces). In that case, report error
6897         CS1040. This fixes bug #56460.
6898
6899         * cs-parser.jay (interface_member_declaration): Add checks for
6900         IsExplicitImpl, and report CS0541 error if an interface member is
6901         defined as an explicit interface declaration.
6902
6903 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
6904
6905         Fix #70817
6906         * class.cs (PropertyMethod): Set Parent field in ctors.
6907         (SetMethod.InternalParameters): Add unsafe switch hack.
6908         
6909         * decl.cs (MemberCore.Parent): Cannot be readonly.
6910
6911 2005-01-06  Raja R Harinath  <rharinath@novell.com>
6912
6913         * decl.cs (DeclSpace.ResolveType): Remove.
6914         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
6915         Merge in code from ...
6916         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
6917         * class.cs, enum.cs: Update to changes.
6918
6919 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
6920
6921         * anonymous.cs: Ensure that we init the scope of our parent if it
6922         has not been initialized yet.
6923
6924 2004-12-30  Duncan Mak  <duncan@ximian.com>
6925
6926         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
6927         if field.FieldBuilder is null. Fixes #70758.
6928
6929         * convert.cs: Fixed some typos and updated some of the comments.
6930         (ImplicitStandardConversionExists):
6931         (TryImplicitIntConversion): If `target_type' is an interface and
6932         the type of `ic' implements this interface, return true or a new
6933         BoxedCast instead of null. This fixes #70468.
6934
6935 2004-12-29  Duncan Mak  <duncan@ximian.com>
6936
6937         * expression.cs (Argument.Emit): Check that Expr is
6938         IMemoryLocation before casting to it, and report CS1510 otherwise.
6939
6940         This fixes #70402.
6941
6942 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
6943
6944         * statement.cs (Block.ThisVariable): remove the recursion here, to
6945         make the --profile more sane.
6946
6947 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
6948
6949         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
6950         assembly, by JB Evain.
6951
6952 2004-12-17  Raja R Harinath  <rharinath@novell.com>
6953
6954         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
6955           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
6956         "parent" refers to enclosing type/class.  "base" refers to superclass.
6957
6958 2004-12-17  Raja R Harinath  <rharinath@novell.com>
6959
6960         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
6961         Ensure that we only have GlobalAttributes.
6962         * attribute.cs (Attribute.Emit): Make non-virtual.
6963         (GlobalAttribute.Emit): Remove.
6964         (Attribute.Resolve): Make virtual.
6965         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
6966         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
6967         the argument. Don't create one.
6968         (Attribute.GetObsoleteAttribute): Likewise.
6969         (Attribute.GetClsCompliantAttributeValue): Likewise.
6970         * class.cs, decl.cs: Update to changes.
6971
6972 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
6973
6974         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
6975         
6976         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
6977         
6978         * statement.cs (Foreach.Resolve): Add error 186 report.
6979
6980 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
6981
6982         * expression.cs (Conditional.DoResolve): Add warning 429.
6983         
6984         * statement.cs (If.Resolve): Add warning 665.
6985
6986 2004-12-16  Raja R Harinath  <rharinath@novell.com>
6987
6988         New invariant: RootContext.Tree.Types.NamespaceEntry == null
6989         except when in the parser, and in GlobalAttribute.
6990         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
6991         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
6992         RootContext.Tree.Types.NamespaceEntry once work is done.
6993         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
6994         and resets RootContext.Tree.Types.NamespaceEntry.
6995
6996 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
6997
6998         * cs-parser.jay: Don't create a block for every variable.
6999
7000 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7001
7002         * location.cs: Provide extra information.
7003
7004         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7005         variables from the captured environment, it is the ldarg_0.
7006
7007 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7008
7009         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7010         find a conclusion.
7011         
7012         * class.cs: Changed warning level for 169 to avoid developer
7013         displeasure from warning flooding. It will be changed back when they
7014         fix most of current BCL warnings.
7015         
7016         * RootContext.cs: Pushed default WarningLevel to 3.
7017         
7018         * statement.cs: Removed unused variable.
7019
7020 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7021
7022         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7023         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7024         Add error 502 report.
7025         (StaticClass.DefineType): Add error 441 report.
7026         (Class.AllowedModifiersProp): New virtual property as temporary
7027         extension to AllowedModifiers.
7028         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7029         to share implementation with StaticClass and don't call virtual
7030         methods from ctor.
7031         
7032         * driver.cs (MainDriver): Add error 1558 test.
7033
7034         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7035         report. Moved error 36 test here.
7036
7037         * statement.cs (Throw.Resolve): Add error 724 report.
7038
7039         * typemanager.cs: Add out_attribute_type core type.
7040         
7041 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7042
7043         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7044         3018 report.
7045         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7046
7047         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7048         3017 report.
7049         
7050         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7051
7052         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7053         Add error 3023 report.
7054         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7055
7056         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7057         implementation.
7058
7059 2004-12-12  John Luke  <john.luke@gmail.com>
7060
7061         * driver.cs (AddArgs): take -- into account when
7062         adding arguments, fixes bug 65710 
7063
7064 2004-12-12  Martin Baulig  <martin@ximian.com>
7065
7066         * expression.cs (Unary.TryReduceNegative): Added support for
7067         SByteConstant and ByteConstant.
7068         (Unary.Reduce): Check error values from TryReduceNegative().
7069
7070 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7071
7072         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7073         and report exception as error 182.
7074
7075 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7076
7077         * driver.cs (Main): Fix message when there are warnings.
7078
7079 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7080
7081         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7082
7083 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7084
7085         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7086         Reduced number of warnings.
7087         
7088         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7089
7090 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7091
7092         * driver.cs: Removed message.
7093
7094         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7095
7096 2004-12-08    <vargaz@freemail.hu>
7097
7098         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7099
7100 2004-12-08  Martin Baulig  <martin@ximian.com>
7101
7102         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7103         instead of a CS3002 for properties and indexer.
7104
7105 2004-12-08  Martin Baulig  <martin@ximian.com>
7106
7107         * decl.cs (MemberName.ToString): Make this work again.
7108
7109 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7110
7111         * attribute.cs (Resolve): Add error 591 detection.
7112
7113         * class.cs (FieldMember.Define): Add error 1547 detection.
7114         (Indexer.Define): Add error 620 detection.
7115         (Operator.Define): Add error 590 detection.
7116
7117         * ecore.cs: Missing argument for error 79.
7118
7119         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7120         detection.
7121
7122 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7123
7124         Fix #70106
7125         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7126         only.
7127
7128 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7129
7130         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7131           Some operator comments were suppressed.
7132         * doc.cs : Implicit/explicit operator name in doc comments are like
7133           "op_Explicit(type)~returnType", so added suffix handling.
7134
7135 2005-01-21  Alp Toker  <alp@atoker.com>
7136
7137         * cs-parser.jay: destructor_declaration's container is PartialContainer
7138         not Class when partial types are used, so use Kind prop instead of 'is'.
7139
7140 2004-12-12  Martin Baulig  <martin@ximian.com>
7141
7142         * expression.cs (Unary.TryReduceNegative): Added support for
7143         SByteConstant and ByteConstant.
7144         (Unary.Reduce): Check error values from TryReduceNegative().
7145
7146 2004-12-11  Martin Baulig  <martin@ximian.com>
7147
7148         * support.cs (ReflectionParameters.ParameterName): If we have a
7149         `gpd', call `ParameterName' on it.
7150
7151         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7152
7153         * pending.cs (PendingImplementation.DefineProxy): Call
7154         DefineParameter() for all of the MethodBuilder's arguments.
7155
7156 2004-12-09  Martin Baulig  <martin@ximian.com>
7157
7158         * doc.cs (DocUtil): Make this a static class.
7159
7160 2004-12-09  Martin Baulig  <martin@ximian.com>
7161
7162         * expression.cs (Invocation.InferType): Moved the type inference
7163         implementation into TypeManager.
7164
7165         * generics.cs (TypeManager): Moved the type inference
7166         implementation here.
7167
7168 2004-12-09  Martin Baulig  <martin@ximian.com>
7169
7170         * typemanager.cs (TypeManager): Make this a partial class.
7171
7172         * generics.cs
7173         (TypeManager): Move the generics part of `TypeManager' here.
7174
7175 2004-12-08  Martin Baulig  <martin@ximian.com>
7176
7177         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7178         instead of a CS3002 for properties and indexer.  Added CS3024
7179         check for generic interfaces.
7180
7181         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7182         instances are not CLS-compliant.
7183
7184 2004-12-08  Martin Baulig  <martin@ximian.com>
7185
7186         * cs-parser.jay
7187         (void_pointer_expression): New rule for `void*', `void**' etc.
7188         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7189
7190 2004-12-08  Martin Baulig  <martin@ximian.com>
7191
7192         * expression.cs (Invocation.InferType): Removed the hack for
7193         MethodCore.MayUnify().  
7194
7195         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7196         this actually work.
7197
7198         * class.cs (MethodCore.MayUnify): Use
7199         TypeManager.MayBecomeEqualGenericTypes().       
7200
7201 2004-12-08  Martin Baulig  <martin@ximian.com>
7202
7203         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7204         parameter, box it.  Fixes #69233.
7205
7206 2004-12-08  Martin Baulig  <martin@ximian.com>
7207
7208         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7209         have the ctor constraint.  Fixes #68326.
7210
7211 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7212
7213         * cs-parser.jay : interface comment was not consumed because of
7214           extra opt_semicolon before doc handling.
7215
7216 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7217
7218         Fix test-327.cs, test-328.cs, and put in early infrastructure
7219         for eventually fixing #52697.
7220         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7221         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7222         from other methods.
7223         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7224         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7225         (VerifyUsing, error246): Update.
7226         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7227         'NamespaceEntry.LookupNamespaceOrType'.
7228
7229 2004-12-07  Martin Baulig  <martin@ximian.com>
7230
7231         * driver.cs: Call it "BETA SOFTWARE" :-)
7232
7233 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7234
7235         Fix crash on cs0657-17.cs.
7236         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7237         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7238         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7239         the case where the NamespaceEntry gets overwritten.
7240
7241 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7242
7243         Fixed #69195, #56821
7244         * ecore.cs (ResolveBoolean): Tiny refactoring.
7245
7246         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7247         of right expression resolving when left is false constant and
7248         operator is LogicalAnd OR true constant and operator is LogicalOr.
7249
7250         * statement.cs (ResolveUnreachable): Always reports warning.
7251
7252 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7253
7254         * class.cs: Distinguish between 1721 and 1722 (just a little help
7255         for the programmer).
7256
7257 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7258
7259         * delegate.cs: Only allow this on new versions of the language. 
7260
7261 2004-12-02  Duncan Mak  <duncan@ximian.com>
7262
7263         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7264         Expression class.
7265         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7266         here as a static method. Take an additional bool out parameter
7267         `must_do_cs1540_check' for signaling to InstanceResolve.
7268         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7269         member field from PropertyExpr class and made it an argument of
7270         the method instead.
7271         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
7272         check for MarshalByRefObject, and report CS0122 instead of CS1540.
7273         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
7274         and `remove_accessor' as well as InstanceResolve: report CS0122
7275         where applicable.
7276
7277         Fixes #70129.
7278
7279 2004-12-07  Martin Baulig  <martin@ximian.com>
7280
7281         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
7282         and CS0692 where appropriate.
7283
7284 2004-12-06  Martin Baulig  <martin@ximian.com>
7285
7286         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
7287         IsDuplicateImplementation() and improved it.
7288
7289         * expression.cs (Invocation.InferTypeArguments): Added
7290         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
7291         and removed the "ref" modifier from `infered_types'.
7292
7293         * decl.cs (MemberName.ToString): Removed the exception.
7294
7295 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
7296
7297         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
7298           comments are allowed.
7299
7300 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7301
7302         * delegate.cs: Add checks for subtypes in paramaters and return values
7303         in VerifyMethod () to add support for Covariance/Contravariance
7304         in delegates.
7305         
7306 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7307
7308         * report.cs: Remove extra closing parenthesis.
7309
7310         * convert.cs (Error_CannotImplicitConversion): If the name of the
7311         types are the same, provide some extra information.
7312
7313 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
7314
7315         Fix bug #70102
7316         * attribute.cs (Resolve): Improved implementation of params
7317         attribute arguments.
7318
7319         * support.cs (ParameterData): Add HasParams to be faster.
7320
7321 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
7322
7323         all things are for /doc support:
7324
7325         * doc.cs: new file that supports XML documentation generation.
7326         * mcs.exe.sources: added doc.cs.
7327         * driver.cs:
7328           Handle /doc command line option.
7329           Report error 2006 instead of 5 for missing file name for /doc.
7330           Generate XML documentation when required, after type resolution.
7331         * cs-tokenizer.cs:
7332           Added support for picking up documentation (/// and /** ... */),
7333           including a new XmlCommentState enumeration.
7334         * cs-parser.jay:
7335           Added lines to fill Documentation element for field, constant,
7336           property, indexer, method, constructor, destructor, operator, event
7337           and class, struct, interface, delegate, enum.
7338           Added lines to warn incorrect comment.
7339         * rootcontext.cs :
7340           Added Documentation field (passed only when /doc was specified).
7341         * decl.cs:
7342           Added DocComment, DocCommentHeader, GenerateDocComment() and
7343           OnGenerateDocComment() and some supporting private members for
7344           /doc feature to MemberCore.
7345         * class.cs:
7346           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
7347         * delegate.cs:
7348           Added overriden DocCommentHeader.
7349         * enum.cs:
7350           Added overriden DocCommentHeader and GenerateDocComment().
7351
7352 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
7353
7354         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
7355         unwrapping the enumeration values, chain to
7356         DoConstantNumericPromotions again, so we can promote things to the
7357         fundamental types (takes care of enums that are bytes, sbytes).
7358
7359         Fixes bug #62054.
7360
7361 2004-12-01  Raja R Harinath  <rharinath@novell.com>
7362
7363         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
7364         Fix long-standing bug in type-lookup.  Use FindType instead of
7365         LookupType when ec.ResolvingTypeTree.
7366         (Attribute.ResolveType, Attribute.Resolve)
7367         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
7368         Update to changes.
7369         (Attributes.Search): Remove internal version.  Update.
7370         (Attributes.SearchMulti): Update.
7371         (Attributes.GetClsCompliantAttribute): Remove.
7372         (Attributes.GetIndexerNameAttribute): Remove.
7373         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
7374         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
7375         * class.cs (Indexer.Define): Likewise.
7376
7377 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
7378
7379         Fix bug #68790
7380         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
7381         MarshallByReference members access.
7382
7383         * expression.cs: Use CheckMarshallByRefAccess;
7384         Better error CS0197 message.
7385
7386         * report.cs: Print whole related error message.
7387
7388 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7389
7390         * class (GetClassBases): Better error 60 report.
7391         (EventProperty): Disabled warning 67 detection.
7392
7393 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7394
7395         Fix bug #60324
7396         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
7397
7398         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
7399         precise values.
7400
7401 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7402
7403         Fix bug #49488
7404         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
7405
7406         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
7407
7408 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
7409
7410         * attribute.cs (Attribute.Resolve): Refine error reporting and
7411         report a cs0117 if the identifier does not exist, to distinguish
7412         from 0617 which is a miss-use of the actual identifier.
7413
7414         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
7415         between cs0070 and cs0079.
7416
7417         * class.cs (MemberBase.DoDefine): When reporting a wrong
7418         accessibility level, we use MethodCore to compare instead of
7419         Method (this was a regression in some refactoring effort).
7420
7421         So now we correctly report cs0056 again.
7422
7423         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
7424         testing the target_type (which was known to be object_type) and
7425         not the source type (which is anonymous_method).
7426
7427         Fixed reporting of error cs1660.
7428
7429         * expression.cs (UserCast.Source): Expose the underlying cast.
7430
7431         * statement.cs (Switch.SwitchGoverningType): Sort the list of
7432         allowed types to find a match to int32 first (most common).
7433
7434         In addition, it ignores any ImplicitUserConversions that did an
7435         internal implicit conversion (as the switch statement allows only
7436         one integral conversion to exist).
7437
7438         * class.cs (PartialContainer.Create): rename `name' to
7439         `member_name' for clarity.  Then replace the string calls with a
7440         call to MemberName.GetPartialName, as now using
7441         MemberName.ToString is an error (this is due to the side effects
7442         it had, that were fixed in the past).
7443
7444         This will restore the error reporting on a number of partial class
7445         errors that were missusing this (and getting an exception as a
7446         results, which is now just a plain textual warning, because
7447         yyparse debug output would crash otherwise).
7448
7449 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7450
7451         * Makefile (PROGRAM_INSTALL_DIR): Remove.
7452
7453 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7454
7455         * rootcontext.cs (LookupType): Make sure to cache lookups that
7456         don't give us a negative result. This saves about 5% of corlib
7457         compilation time.
7458
7459 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7460
7461         * report.cs (AbstractMessage.Print): messages are sent to stderr
7462
7463         * class.cs (TypeContainer.GetClassBases): It is an error to have a
7464         non-interface in the list of interfaces (at this point, either
7465         parent was properly set, or a base class is being listed in the
7466         interfaces section).
7467
7468         This flags error 1722, and resolves the crash from bug 69259.
7469
7470 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7471
7472         * statement.cs (Using.EmitExpressionFinally): make this work right
7473         for valuetypes. Fixes 69926.
7474
7475 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7476
7477         * const.cs (Const.ChangeType): Cope with the "0 literal can be
7478         converted to an enum" here, before we try to change the underlying
7479         type.  This code exists, but it is a different code path than the
7480         one used while encoding constants.
7481
7482         (ImplicitReferenceConversionExists): In addition, resynchronized
7483         the code here, so it matches the same code in
7484         ImplicitReferenceConversionExists for the `from any class-type S
7485         to any interface-type T'.       
7486
7487 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
7488
7489         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
7490
7491 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
7492
7493         * cs-parser.jay: Use verbosity accordingly. 
7494
7495 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7496
7497         * expression.cs (Unary.ResolveOperator): Do not report warning;
7498         AddressOf reads from variable.
7499         
7500         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
7501
7502 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7503
7504         Fix bug #69462
7505
7506         * attribute.cs (Attributable): Removed CheckTargets.
7507         (Attributes.Emit): Explicit attribute targets are tested here.
7508
7509         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
7510         not enabled for interfaces.
7511
7512         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
7513         (GetAssemblyName): Ouch next bug there.
7514
7515 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7516
7517         * expression.cs: Error 275 added.
7518         
7519 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
7520
7521         Fix bug #69177 (Implemented decimal constant support)
7522
7523         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
7524         (BinaryFold): Add DecimalConstant.
7525
7526         * const.cs (Define): Decimal constant 
7527         (is not constant.
7528         (ChangeType): Add decimal type handling.
7529         (LookupConstantValue): Don't set value for decimal type but
7530         emit DecimalConstantAttribute. Needed for constant optimization.
7531
7532         * constant.cs (ToDecimal): New method.
7533         (ConvertToDecimal): New method.
7534         (IntConstant): Implemented ConvertToDecimal.
7535         (DecimalConstant.Emit): Emit optimized version for decimals in
7536         int range.
7537
7538         * expression.cs (ResolveOperator): Changed order of constant
7539         reduction to work correctly with native types which have
7540         overloaded operators.
7541         (ResolveMemberAccess): Extract constant value from attribute
7542         for decimal type.
7543
7544         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
7545
7546         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
7547         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
7548         (ChangeType): Decimal is special.
7549         (TypeToCoreType): Add decimal type.
7550
7551 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
7552
7553         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
7554         decimal types.
7555
7556 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
7557
7558         * class.cs (EventField.ApplyAttributeBuilder): Fix error
7559         test cs1667-5.cs.
7560
7561 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
7562
7563         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
7564
7565         * pending.cs (PendingImplementation): Grab only interfaces.
7566
7567 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
7568
7569         * statement.cs (ForeachHelperMethods): Add location member and
7570         error 202 detection.
7571
7572 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
7573
7574         * expression.cs (DoResolveBase): Fixed wrong warning for out
7575         variables.
7576
7577 2004-12-04  Martin Baulig  <martin@ximian.com>
7578
7579         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
7580         to check whether the conversion is ok.
7581
7582         * typemanager.cs (TypeManager.GetTypeArguments): Just return
7583         `Type.EmptyTypes' if we're not a generic TypeContainer.
7584
7585 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7586
7587         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
7588         old bug: when converting from the null literal to a pointer,
7589         return an EmptyCast, not the NullLiteral.
7590
7591         This fixes #69921, the recent null_type changes probably made this
7592         bug more prominent.
7593
7594 2004-12-03  Martin Baulig  <martin@ximian.com>
7595
7596         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
7597         method as our child, call AnonymousMethod.Compatible() on it.
7598
7599 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7600
7601         * class.cs (FieldBase): Use an unused bit field from the field to
7602         encode the `has_offset' property from the FieldMember.  This saves
7603         a couple of Ks on bootstrap compilation.
7604
7605         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
7606         method as our child, return the AnonymousMethod resolved
7607         expression.
7608
7609         * expression.cs (New.DoResolve): Allow return values from
7610         NewDelegate to also include AnonymousMethods.
7611
7612         Fixes #70150.
7613
7614 2004-11-29  Raja R Harinath  <rharinath@novell.com>
7615
7616         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
7617         cs1648 report.
7618         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
7619         System.Runtime.InteropServices._Exception, since it's a base
7620         interface of the core type System.Exception in the net_2_0 profile.
7621
7622 2004-11-27  Martin Baulig  <martin@ximian.com>
7623
7624         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
7625
7626 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7627
7628         * Makefile: Convert to use executable.make.
7629         * gmcs.exe.sources: New.
7630
7631 2004-11-25  Martin Baulig  <martin@ximian.com>
7632
7633         * expression.cs (Invocation.InferType): Added support for byref types.
7634
7635 2004-11-25  Martin Baulig  <martin@ximian.com>
7636
7637         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
7638         in TypeManager.TypeToCoreType().
7639
7640 2004-11-25  Martin Baulig  <martin@ximian.com>
7641
7642         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
7643         "Dispose" method from the `current_type'.
7644         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
7645         DoDefineMembers() instead of using the MethodBuilder; this is
7646         required for generic iterators.
7647
7648         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
7649
7650 2004-11-24  Martin Baulig  <martin@ximian.com>
7651
7652         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
7653
7654 2004-11-20  Martin Baulig  <martin@ximian.com>
7655
7656         * expression.cs (Invocation.InferType): Correctly infer generic
7657         instances; see gen-103.cs.
7658         (Invocation.InferTypeArguments): If a generic method doesn't have
7659         any unbound type parameters, we don't need to infer anything.
7660
7661 2004-11-19  Raja R Harinath  <rharinath@novell.com>
7662
7663         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
7664
7665 2004-11-17  Raja R Harinath  <rharinath@novell.com>
7666
7667         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
7668         (TypeHandle.GetMemberCache): New.
7669         (TypeHandle.TypeHandle): Update.
7670         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
7671         (TypeManager.LookupParentInterfacesCache):
7672         Rename from LookupInterfaceCache.  Optimize slightly.
7673         (TypeManager.MemberLookup_FindMembers): Update.
7674         * decl.cs (MemberCache.MemberCache): Set Container to null in the
7675         multi-type variant.
7676         (AddCacheContents): Rename from AddHashtable.
7677         * class.cs (TypeContainer.parent_container): Remove.
7678         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
7679         (TypeContainer.DoDefineMembers): Don't initialize it.
7680         Update to name changes.
7681         
7682 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
7683
7684         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
7685         that factors the code to check access modifiers on override.  
7686
7687         (PropertyBase): Use the code here.
7688
7689         Patch from Lluis S'anchez, fixes bug #69361.
7690
7691 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
7692
7693         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
7694         routine that is used to report the use of a captured variable
7695         whose address has been taken.
7696
7697         There are two checks: one when variables are being captured and
7698         the other check is when the address of a variable is taken. 
7699         
7700         (because an anonymous methods might be resolved before *or* after
7701         the address has been taken) and 
7702
7703         * expression.cs (Conditional.DoResolve): Remove the special
7704         casing that Martin added to trueExpr and falseExpr being both
7705         NullLiteral.  We get the right behavior now just by introducing
7706         the null_type into the compiler. 
7707
7708         * convert.cs (ExplicitConversion): Change the code to use
7709         null_type instead of testing `expr is NullLiteral'.
7710         (ImplicitConversionStandard): use null_type too.
7711         (ImplicitReferenceConversionExists): use null_type too.
7712         (ImplicitReferenceConversion): use null_type too.
7713
7714         * literal.cs: The type of `NullLiteral' is now null_type instead
7715         of object_type. 
7716         (Resolve): Set the type here.
7717
7718         * typemanager.cs: Introduce null_type.
7719
7720 2004-11-18  Martin Baulig  <martin@ximian.com>
7721
7722         * rootcontext.cs
7723         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
7724
7725 2004-11-18  Martin Baulig  <martin@ximian.com>
7726
7727         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
7728
7729 2004-11-18  Martin Baulig  <martin@ximian.com>
7730
7731         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
7732         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
7733         call ResolveConstructedType() on it to resolve it without checking
7734         constraints.
7735         (Constraints.ResolveTypes): Check them here.
7736         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
7737         but don't check constraints.
7738         (ConstructedType.ResolveAsTypeTerminal): Override this and also
7739         check constraints here.
7740         (ConstructedType.ResolveConstructedType): New public method.  This
7741         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
7742         resolve ourselves without checking constraints.
7743
7744         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
7745
7746 2004-11-18  Martin Baulig  <martin@ximian.com>
7747
7748         * decl.cs
7749         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
7750
7751         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
7752
7753 2004-11-18  Martin Baulig  <martin@ximian.com>
7754
7755         * ecore.cs (TypeExpr.ResolveType): Removed.
7756         (Expression.ResolveAsTypeTerminal): We always return a fully
7757         resolved `TypeExpr', so we can just access its `Type'.
7758
7759         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
7760
7761 2004-11-17  Martin Baulig  <martin@ximian.com>
7762
7763         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
7764         sure we don't return any unresolved TypeExpr's.
7765         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
7766         a `TypeExpr'.
7767         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
7768
7769         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
7770         unresolved `ConstructedType's.
7771
7772 2004-11-17  Martin Baulig  <martin@ximian.com>
7773
7774         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
7775
7776 2004-11-17  Martin Baulig  <martin@ximian.com>
7777
7778         * ecore.cs
7779         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
7780
7781         * decl.cs (DeclSpace.ResolveType): Removed.
7782         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
7783
7784 2004-11-17  Martin Baulig  <martin@ximian.com>
7785
7786         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
7787         direction, like FindMembers() does.  Fixes #69546, testcase is in
7788         test-315.cs.    
7789
7790 2004-11-16  Martin Baulig  <martin@ximian.com>
7791
7792         This is based on a patch from Marek Safar, see bug #69082.
7793         Fixes bugs #63705 and #67130.
7794
7795         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
7796         method; create a MemberCache for an interface type and cache the
7797         result.
7798
7799         * decl.cs (IMemberContainer.ParentContainer): Removed.
7800         (IMemberContainer.ParentCache): New property.
7801         (MemberCache.SetupCacheForInterface): Removed.
7802         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
7803         to create a cache for an interface's "parent".
7804
7805         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
7806         interfaces too.
7807
7808 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
7809
7810         * statement.cs: Avoid adding bools to a hashtable.
7811
7812 2004-11-15  Martin Baulig  <martin@ximian.com>
7813
7814         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
7815
7816 2004-11-11  Martin Baulig  <martin@ximian.com>
7817
7818         * typemanager.cs (TypeManager.GetMethodName): New method.
7819
7820         * class.cs (MethodData.Define): Include the generic arity in the
7821         name of an explicit interface; also add it to the method name.
7822
7823         * pending.cs (PendingImplementation.InterfaceMethod): The method
7824         name now includes the generic arity.
7825
7826 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
7827
7828         * expression.cs (Invocation.OverloadResolve): Flag error if we are
7829         calling an unsafe method from a safe location.
7830
7831 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
7832
7833         Fix #69167
7834         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
7835
7836 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
7837
7838         * namespace.cs (VerifyUsing): use GetPartialName instead of
7839         ToString. 
7840
7841 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
7842
7843         * statement.cs (Return.Resolve): Fix regression in typo: if
7844         `in_exc', we have to request a NeedReturnLabel, this was a typo
7845         introduced in the anonymous method check-in.  Fixes #69131.
7846
7847         * Indexers were using the ShortName when defining themselves,
7848         causing a regression in the compiler bootstrap when applying the
7849         patch from 2004-11-02 (first part), now they use their full name
7850         and the bug is gone.
7851
7852 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
7853
7854         * driver.cs: Strip the path from the names of embedded resources. Fixes
7855         #68519.
7856
7857 2004-11-04  Raja R Harinath  <rharinath@novell.com>
7858
7859         Fix error message regression: cs0104-2.cs.
7860         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
7861         (AliasEntry.Resolve): Update.
7862         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
7863         'silent' flag.
7864         (RootContext.LookupType): Update.
7865
7866 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
7867
7868         * cs-parser.jay: Add support for handling accessor modifiers
7869         * class: Add support port accessor modifiers and error checking,
7870         define PropertyMethod.Define as virtual (not abstract anymore)
7871         * ecore.cs: Add checking for proeprties access with access modifiers
7872         * iterators.cs: Modify Accessor constructor call based in the modified
7873         constructor
7874 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
7875
7876         * expression.cs (StringConcat): Handle being called twice,
7877         as when we have a concat in a field init with more than two
7878         ctors in the class
7879
7880 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
7881
7882         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
7883         special case explicit implementations, we should always produce
7884         the .property or .event declaration.
7885         
7886         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
7887         since it will not return correct data if people use this
7888         unresolved in the presence of using statements (see test-313).
7889
7890         * class.cs (MethodData.Define): If we are an explicit interface
7891         implementation, set the method name to the full name of the
7892         interface plus the name of the method.  
7893
7894         Notice that using the method.MethodName.GetFullName() does not
7895         work, as it will only contain the name as declared on the source
7896         file (it can be a shorthand in the presence of using statements)
7897         and not the fully qualifed type name, for example:
7898
7899         using System;
7900
7901         class D : ICloneable {
7902                 object ICloneable.Clone ()  {
7903                 }
7904         }
7905
7906         Would produce a method called `ICloneable.Clone' instead of
7907         `System.ICloneable.Clone'.
7908
7909         * namespace.cs (Alias.Resolve): Use GetPartialName.
7910         
7911 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
7912
7913         * cs-parser.jay: Add error 1055 report.
7914
7915 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
7916
7917         * assign.cs (Assign.DoResolve): Only do the transform of
7918         assignment into a New if the types are compatible, if not, fall
7919         through and let the implicit code deal with the errors and with
7920         the necessary conversions. 
7921
7922 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
7923
7924         * cs-parser.jay: Add error 1031 report.
7925
7926         * cs-tokenizer.cs: Add location for error 1038.
7927
7928 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
7929
7930         * cs-parser.jay: Add error 1016 report.
7931
7932 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
7933
7934         * cs-parser.jay: Add errors 1575,1611 report.
7935
7936 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
7937
7938         * cs-parser.jay: Add error 1001 report.
7939
7940 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
7941
7942         Fix #68850
7943         * attribute.cs (GetMarshal): Add method argument for
7944         caller identification.
7945
7946         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
7947         agument for GetMarshal and RuntimeMissingSupport.
7948
7949 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
7950
7951         * attribute.cs (ExtractSecurityPermissionSet): Removed
7952         TypeManager.code_access_permission_type.
7953
7954         * typemanager.cs: Removed TypeManager.code_access_permission_type.
7955
7956 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
7957
7958         * expression.cs (LocalVariableReference.DoResolveLValue): Check
7959         for obsolete use of a variable here.   Fixes regression on errors
7960         cs0619-25 and cs0619-26.
7961
7962 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
7963
7964         Fix #62358, implemented security attribute encoding.
7965
7966         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
7967         Tests permitted SecurityAction for assembly or other types.
7968         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
7969         data from SecurityPermissionAttribute to PermisionSet class.
7970
7971         * class.cs (ApplyAttributeBuilder): Added special handling
7972         for System.Security.Permissions.SecurityAttribute based types.
7973
7974         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
7975         special handling for System.Security.Permissions.SecurityAttribute
7976         based types.
7977
7978         * enum.cs (ApplyAttributeBuilder): Added special handling
7979         for System.Security.Permissions.SecurityAttribute based types.
7980
7981         * parameter.cs (ApplyAttributeBuilder): Added special handling
7982         for System.Security.Permissions.SecurityAttribute based types.
7983
7984         * rootcontext.cs: Next 2 core types.
7985
7986         * typemanager.cs (TypeManager.security_permission_attr_type):
7987         Built in type for the SecurityPermission Attribute.
7988         (code_access_permission_type): Build in type.
7989
7990 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
7991
7992         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
7993         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
7994         all of this information into
7995         EmitContext.EmitCapturedVariableInstance.
7996         
7997         * codegen.cs (EmitCapturedVariableInstance): move here the
7998         funcionality of emitting an ldarg.0 in the presence of a
7999         remapping.   This centralizes the instance emit code.
8000
8001         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8002         then emit a load of this: it means that we have reached the
8003         topmost ScopeInfo: the one that contains the pointer to the
8004         instance of the class hosting the anonymous method.
8005
8006         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8007         captures to the topmost CaptureContext.
8008
8009 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8010
8011         * expression.cs (LocalVariableReference): Move the knowledge about
8012         the iterators into codegen's EmitCapturedVariableInstance.
8013
8014 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8015
8016         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8017         all code paths return a value from an anonymous method (it is the
8018         same as the 161 error, but for anonymous methods).
8019
8020 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8021
8022         The introduction of anonymous methods in the compiler changed
8023         various ways of doing things in the compiler.  The most
8024         significant one is the hard split between the resolution phase
8025         and the emission phases of the compiler.
8026
8027         For instance, routines that referenced local variables no
8028         longer can safely create temporary variables during the
8029         resolution phase: they must do so from the emission phase,
8030         since the variable might have been "captured", hence access to
8031         it can not be done with the local-variable operations from the runtime.
8032         
8033         * statement.cs 
8034
8035         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8036         is a toplevel block.
8037
8038         (ToplevelBlock): A new kind of Block, these are the blocks that
8039         are created by the parser for all toplevel method bodies.  These
8040         include methods, accessors and anonymous methods.
8041
8042         These contain some extra information not found in regular blocks:
8043         A pointer to an optional CaptureContext (for tracking captured
8044         local variables and parameters).  A pointer to the parent
8045         ToplevelBlock.
8046         
8047         (Return.Resolve): Catch missmatches when returning a value from an
8048         anonymous method (error 1662).
8049         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8050         phase.
8051
8052         (Break.Resolve): ditto.
8053
8054         (SwitchLabel): instead of defining the labels during the
8055         resolution phase, we now turned the public ILLabel and ILLabelCode
8056         labels into methods called GetILLabelCode() and GetILLabel() that
8057         only define the label during the Emit phase.
8058
8059         (GotoCase): Track the SwitchLabel instead of the computed label
8060         (its contained therein).  Emit the code by using
8061         SwitchLabel.GetILLabelCode ().
8062
8063         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8064         whether the Local has been captured or not.
8065
8066         (LocalInfo.IsCaptured): New property, used to tell whether the
8067         local has been captured.
8068         
8069         * anonymous.cs: Vastly updated to contain the anonymous method
8070         support.
8071
8072         The main classes here are: CaptureContext which tracks any
8073         captured information for a toplevel block and ScopeInfo used to
8074         track the activation frames for various local variables.   
8075
8076         Each toplevel block has an optional capture context associated
8077         with it.  When a method contains an anonymous method both the
8078         toplevel method and the anonymous method will create a capture
8079         context.   When variables or parameters are captured, they are
8080         recorded on the CaptureContext that owns them, for example:
8081
8082         void Demo () {
8083              int a;
8084              MyDelegate d = delegate {
8085                  a = 1;
8086              }
8087         }
8088
8089         Here `a' will be recorded as captured on the toplevel
8090         CapturedContext, the inner captured context will not have anything
8091         (it will only have data if local variables or parameters from it
8092         are captured in a nested anonymous method.
8093
8094         The ScopeInfo is used to track the activation frames for local
8095         variables, for example:
8096
8097         for (int i = 0; i < 10; i++)
8098                 for (int j = 0; j < 10; j++){
8099                    MyDelegate d = delegate {
8100                         call (i, j);
8101                    }
8102                 }
8103
8104         At runtime this captures a single captured variable `i', but it
8105         captures 10 different versions of the variable `j'.  The variable
8106         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8107         recorded on a child.  
8108
8109         The toplevel ScopeInfo will also track information like the `this'
8110         pointer if instance variables were referenced (this is necessary
8111         as the anonymous method lives inside a nested class in the host
8112         type of the method). 
8113
8114         (AnonymousMethod): Expanded to track the Toplevel, implement
8115         `AnonymousMethod.Compatible' to tell whether an anonymous method
8116         can be converted to a target delegate type. 
8117
8118         The routine now also produces the anonymous method content
8119
8120         (AnonymousDelegate): A helper class that derives from
8121         DelegateCreation, this is used to generate the code necessary to
8122         produce the delegate for the anonymous method that was created. 
8123
8124         * assign.cs: API adjustments for new changes in
8125         Convert.ImplicitStandardConversionExists.
8126
8127         * class.cs: Adjustments to cope with the fact that now toplevel
8128         blocks are of type `ToplevelBlock'. 
8129
8130         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8131         insteda of standard blocks.
8132
8133         Flag errors if params arguments are passed to anonymous methods.
8134
8135         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8136         `CurrentAnonymousMethod' which points to the current Anonymous
8137         Method.  The variable points to the AnonymousMethod class that
8138         holds the code being compiled.  It is set in the new EmitContext
8139         created for the anonymous method.
8140
8141         (EmitContext.Phase): Introduce a variable and an enumeration to
8142         assist in enforcing some rules about when and where we are allowed
8143         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8144         only one that enfonces this right now).
8145
8146         (EmitContext.HaveCaptureInfo): new helper method that returns
8147         whether we have a CapturedContext initialized.
8148
8149         (EmitContext.CaptureVariable): New method used to register that a
8150         LocalInfo must be flagged for capturing. 
8151
8152         (EmitContext.CapturedParameter): New method used to register that a
8153         parameters must be flagged for capturing. 
8154         
8155         (EmitContext.CapturedField): New method used to register that a
8156         field must be flagged for capturing. 
8157
8158         (EmitContext.HaveCapturedVariables,
8159         EmitContext.HaveCapturedFields): Return whether there are captured
8160         variables or fields. 
8161
8162         (EmitContext.EmitMethodHostInstance): This is used to emit the
8163         instance for the anonymous method.  The instance might be null
8164         (static methods), this (for anonymous methods that capture nothing
8165         and happen to live side-by-side with the current method body) or a
8166         more complicated expression if the method has a CaptureContext.
8167
8168         (EmitContext.EmitTopBlock): Routine that drives the emission of
8169         code: it will first resolve the top block, then emit any metadata
8170         and then emit the code.  The split is done so that we can extract
8171         any anonymous methods and flag any captured variables/parameters.
8172         
8173         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8174         during this phase, the ILGenerator should not be used as labels
8175         and local variables declared here might not be accessible to any
8176         code that is part of an anonymous method.  
8177
8178         Exceptions to this include the temporary variables that are
8179         created by some statements internally for holding temporary
8180         variables. 
8181         
8182         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8183         metadata for a cb
8184
8185         (EmitContext.TemporaryReturn): This method is typically called
8186         from the Emit phase, and its the only place where we allow the
8187         ReturnLabel to be defined other than the EmitMeta.  The reason is
8188         that otherwise we would have to duplicate a lot of logic in the
8189         Resolve phases of various methods that today is on the Emit
8190         phase. 
8191
8192         (EmitContext.NeedReturnLabel): This no longer creates the label,
8193         as the ILGenerator is not valid during the resolve phase.
8194
8195         (EmitContext.EmitThis): Extended the knowledge in this class to
8196         work in anonymous methods in addition to iterators. 
8197
8198         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8199         code is necessary on the stack to access the instance to a local
8200         variable (the variable will be accessed as a field).
8201
8202         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8203         EmitContext.EmitAddressOfParameter): Routines to support
8204         parameters (not completed at this point). 
8205         
8206         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8207         will also remove the parameters.
8208
8209         * convert.cs (Convert): Define a `ConstantEC' which points to a
8210         null.  This is just to prefity some code that uses
8211         ImplicitStandardConversion code and do not have an EmitContext
8212         handy.
8213
8214         The idea is to flag explicitly that at that point in time, it is
8215         known that the conversion will not trigger the delegate checking
8216         code in implicit conversions (which requires a valid
8217         EmitContext). 
8218
8219         Everywhere: pass new EmitContext parameter since
8220         ImplicitStandardConversionExists now requires it to check for
8221         anonymous method conversions. 
8222
8223         (Convert.ImplicitStandardConversionExists): If the type of an
8224         expression is the anonymous_method_type, and the type is a
8225         delegate, we invoke the AnonymousMethod.Compatible method to check
8226         whether an implicit conversion is possible. 
8227
8228         (Convert.ImplicitConversionStandard): Only do implicit method
8229         group conversions if the language level is not ISO_1.
8230
8231         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8232         MethodInfo for the Invoke method.  used by Delegate and
8233         AnonymousDelegate.
8234
8235         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8236         method conversions if the target type is a delegate.
8237
8238         Removed extra debugging nops.
8239
8240         (LocalVariableReference): Turn the `local_info' into a public
8241         field. 
8242
8243         Add `prepared' field, the same hack used for FieldExprs to cope
8244         with composed assignments, as Local variables do not necessarily
8245         operate purely on the stack as they used to: they can be captured
8246         fields. 
8247
8248         Add `temp' for a temporary result, like fields.
8249
8250         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8251
8252         It now copes with Local variables that are captured and emits the
8253         proper instance variable to load it from a field in the captured
8254         case. 
8255
8256         (ParameterReference.DoResolveBase): During the resolve phase,
8257         capture parameters if we are in an anonymous method.
8258
8259         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8260         anonymous method, use the EmitContext helper routines to emit the
8261         parameter reference.
8262
8263         * iterators.cs: Set RemapToProxy to true/false during the
8264         EmitDispose class.
8265
8266         * parameters.cs (GetParameterByName): New helper method. 
8267
8268         * typemanager.cs (anonymous_method_type) a new type that
8269         represents an anonyous method.  This is always an internal type,
8270         used as a fencepost to test against the anonymous-methodness of an
8271         expression. 
8272         
8273 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
8274
8275         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
8276         561 report.
8277         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
8278
8279 2004-11-10  Martin Baulig  <martin@ximian.com>
8280
8281         * expression.cs (Invocation.BetterFunction): If two methods have
8282         equal parameter types, but only one of them is generic, the
8283         non-generic one wins.
8284         (New.DoResolve): Don't set `is_struct' to false if we're a generic
8285         instance; just use `Type.IsValueType' to determine whether
8286         something is a struct or not.
8287         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
8288         so we can be called multiple times.
8289
8290 2004-11-10  Martin Baulig  <martin@ximian.com>
8291
8292         * generic.cs (TypeParameter.DefineConstraints): New public method.
8293         (TypeParameter.CheckAccessLevel): Override this and return true.
8294         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
8295         override ResolveType() anymore.
8296         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
8297
8298 2004-11-10  Martin Baulig  <martin@ximian.com>
8299
8300         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
8301         call DeclSpace.ResolveNestedType() on it.
8302
8303 2004-11-10  Martin Baulig  <martin@ximian.com>
8304
8305         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
8306         non-null, call ParameterModifier() on it.
8307
8308 2004-11-10  Martin Baulig  <martin@ximian.com>
8309
8310         * iterators.cs
8311         (Iterators): Added `current_type' and `this_type' fields.
8312         (Iterators.DefineIterator): Create a new EmitContext and store it
8313         in `ec'; compute `this_type'.
8314
8315 2004-11-10  Martin Baulig  <martin@ximian.com>
8316
8317         * typemanager.cs
8318         (TypeManager.IsPrivateAccessible): New public method.
8319         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
8320
8321 2004-11-10  Martin Baulig  <martin@ximian.com>
8322
8323         * class.cs (TypeContainer.DefineType): Call
8324         TypeBuilder.DefineGenericParameters() before resolving the type
8325         parameters.
8326         (MethodData.parent_method): New protected field.
8327         (MethodData..ctor): Added `MethodInfo parent_method' argument.
8328         (MethodData.Define): Compute `parent_method'.
8329
8330         * decl.cs
8331         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
8332         (MemberCore.GetClsCompliantAttributeValue): Likewise.
8333         (DeclSpace.ec): New protected field; store the EmitContext here.
8334         (DeclSpace.EmitContext): New public property.
8335         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
8336         (DeclSpace.ResolveNestedType): New public method.
8337         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
8338         (DeclSpace.NestedAccessible): Added `Type tb' argument.
8339         (DeclSpace.FamilyAccessible): Likewise.
8340         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
8341         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
8342         EmitContext.
8343
8344         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
8345         field.
8346
8347         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
8348         (Enum.Emit): Don't create a new EmitContext.
8349
8350 2004-10-18  Martin Baulig  <martin@ximian.com>
8351
8352         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
8353         `Type' directly, but call ResolveType() on it.
8354         (Catch.Resolve): Likewise.
8355         (Foreach.Resolve): Likewise.
8356
8357 2004-10-18  Martin Baulig  <martin@ximian.com>
8358
8359         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
8360         `Type' directly, but call ResolveType() on it.
8361         (Probe.DoResolve): Likewise.
8362         (ArrayCreation.LookupType): Likewise.
8363         (TypeOf.DoResolve): Likewise.
8364         (SizeOf.DoResolve): Likewise.
8365
8366 2004-10-18  Raja R Harinath  <rharinath@novell.com>
8367
8368         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
8369         the ResolveType.
8370
8371 2004-10-17  John Luke  <john.luke@gmail.com>
8372
8373         * class.cs (Operator.GetSignatureForError): use CSharpName
8374
8375         * parameter.cs (Parameter.GetSignatureForError): Returns
8376         correct name even if was not defined.
8377
8378 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8379
8380         Fix #65816.
8381         * class.cs (TypeContainer.EmitContext): New property.
8382         (DefineNestedTypes): Create an emitcontext for each part.
8383         (MethodCore.DoDefineParameters): Use container's emitcontext.
8384         Pass type array to InternalParameters.
8385         (MemberBase.DoDefine): Use container's emitcontext.
8386         (FieldMember.Define): Likewise.
8387         (Event.Define): Likewise.
8388         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8389         Pass type array to InternalParameters.
8390         (SetIndexerMethod.GetParameterInfo): Likewise.
8391         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8392         * delegate.cs (Define): Pass emitcontext to
8393         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8394         array to InternalParameters.
8395         * expression.cs (ParameterReference.DoResolveBase): Pass
8396         emitcontext to GetParameterInfo.
8397         (ComposedCast.DoResolveAsTypeStep): Remove check on
8398         ec.ResolvingTypeTree.
8399         * parameter.cs (Parameter.Resolve): Change argument to
8400         EmitContext.  Use ResolveAsTypeTerminal.
8401         (Parameter.GetSignature): Change argument to EmitContext.
8402         (Parameters.ComputeSignature): Likewise.
8403         (Parameters.ComputeParameterTypes): Likewise.
8404         (Parameters.GetParameterInfo): Likewise.
8405         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8406         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8407         * support.cs (InternalParameters..ctor): Remove variant that takes
8408         a DeclSpace.
8409         * typemanager.cs (system_intptr_expr): New.
8410         (InitExpressionTypes): Initialize it.
8411
8412 2004-10-12  Chris Toshok  <toshok@ximian.com>
8413
8414         * cs-parser.jay: fix location for try_statement and catch_clause.
8415
8416 2004-10-18  Martin Baulig  <martin@ximian.com>
8417
8418         * class.cs (FieldMember.Define): Don't access the TypeExpr's
8419         `Type' directly, but call ResolveType() on it.
8420         (MemberBase.DoDefine): Likewise.
8421
8422         * expression.cs (New.DoResolve): Don't access the TypeExpr's
8423         `Type' directly, but call ResolveType() on it.
8424         (ComposedCast.DoResolveAsTypeStep): Likewise.
8425
8426         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
8427         `Type' directly, but call ResolveType() on it.
8428
8429 2004-10-17  John Luke  <john.luke@gmail.com>
8430
8431         * class.cs (Operator.GetSignatureForError): use CSharpName
8432
8433         * parameter.cs (Parameter.GetSignatureForError): Returns
8434         correct name even if was not defined.
8435
8436 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8437
8438         Fix #65816.
8439         * class.cs (TypeContainer.EmitContext): New property.
8440         (DefineNestedTypes): Create an emitcontext for each part.
8441         (MethodCore.DoDefineParameters): Use container's emitcontext.
8442         Pass type array to InternalParameters.
8443         (MemberBase.DoDefine): Use container's emitcontext.
8444         (FieldMember.Define): Likewise.
8445         (Event.Define): Likewise.
8446         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8447         Pass type array to InternalParameters.
8448         (SetIndexerMethod.GetParameterInfo): Likewise.
8449         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8450         * delegate.cs (Define): Pass emitcontext to
8451         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8452         array to InternalParameters.
8453         * expression.cs (ParameterReference.DoResolveBase): Pass
8454         emitcontext to GetParameterInfo.
8455         (ComposedCast.DoResolveAsTypeStep): Remove check on
8456         ec.ResolvingTypeTree.
8457         * parameter.cs (Parameter.Resolve): Change argument to
8458         EmitContext.  Use ResolveAsTypeTerminal.
8459         (Parameter.GetSignature): Change argument to EmitContext.
8460         (Parameters.ComputeSignature): Likewise.
8461         (Parameters.ComputeParameterTypes): Likewise.
8462         (Parameters.GetParameterInfo): Likewise.
8463         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8464         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8465         * support.cs (InternalParameters..ctor): Remove variant that takes
8466         a DeclSpace.
8467         * typemanager.cs (system_intptr_expr): New.
8468         (InitExpressionTypes): Initialize it.
8469
8470 2004-10-12  Chris Toshok  <toshok@ximian.com>
8471
8472         * cs-parser.jay: fix location for try_statement and catch_clause.
8473
8474 2004-10-07  Raja R Harinath  <rharinath@novell.com>
8475
8476         More DeclSpace.ResolveType avoidance.
8477         * decl.cs (MemberCore.InUnsafe): New property.
8478         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
8479         with newly created EmitContext.
8480         (FieldMember.Define): Likewise.
8481         * delegate.cs (Delegate.Define): Likewise.
8482         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
8483         only if normal name-lookup fails.
8484         (TypeExpr.DoResolve): Enable error-checking.
8485         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
8486         (SizeOf.DoResolve): Likewise.
8487         (ComposedCast.DoResolveAsTypeStep): Likewise.
8488         (StackAlloc.DoResolve): Likewise.
8489         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
8490         (Block.Unsafe): New property.
8491         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
8492         (Unsafe): Set 'unsafe' flag of contained block.
8493         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
8494         (Fixed.Resolve): Likewise.
8495         (Catch.Resolve): Likewise.
8496         (Using.ResolveLocalVariableDecls): Likewise.
8497         (Foreach.Resolve): Likewise.
8498
8499 2004-10-05  John Luke <john.luke@gmail.com>
8500
8501         * cs-parser.jay: add location to error CS0175
8502
8503 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
8504
8505         * ecore.cs (Expression.Constantity): Add support for turning null
8506         into a constant.
8507
8508         * const.cs (Const.Define): Allow constants to be reference types
8509         as long as the value is Null.
8510
8511 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
8512
8513         * namespace.cs (NamespaceEntry.Using): No matter which warning
8514         level is set, check if this namespace name has already been added.
8515
8516 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
8517
8518         * expression.cs: reftype [!=]= null should always use br[true,false].
8519         # 67410
8520
8521 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
8522
8523         Fix #67108
8524         * attribute.cs: Enum conversion moved to 
8525         GetAttributeArgumentExpression to be applied to the all
8526         expressions.
8527
8528 2004-10-01  Raja R Harinath  <rharinath@novell.com>
8529
8530         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
8531         * class.c (TypeContainer.DefineType): Flag error if
8532         base types aren't accessible due to access permissions.
8533         * decl.cs (DeclSpace.ResolveType): Move logic to
8534         Expression.ResolveAsTypeTerminal.
8535         (DeclSpace.ResolveTypeExpr): Thin layer over
8536         Expression.ResolveAsTypeTerminal.
8537         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
8538         Refactor code into NestedAccess.  Use it.
8539         (DeclSpace.NestedAccess): New.
8540         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
8541         argument to silence errors.  Check access permissions.
8542         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
8543         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
8544         (Cast.DoResolve): Likewise.
8545         (New.DoResolve): Likewise.
8546         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
8547         (TypeOf.DoResolve): Likewise.
8548
8549         * expression.cs (Invocation.BetterConversion): Return the Type of
8550         the better conversion.  Implement section 14.4.2.3 more faithfully.
8551         (Invocation.BetterFunction): Make boolean.  Make correspondence to
8552         section 14.4.2.2 explicit.
8553         (Invocation.OverloadResolve): Update.
8554         (Invocation): Remove is_base field.
8555         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
8556         (Invocation.Emit): Likewise.
8557
8558 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
8559
8560         * cs-parser.jay: Reverted 642 warning fix.
8561
8562 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8563
8564         Fix bug #66615
8565         * decl.cs (FindMemberWithSameName): Indexer can have more than
8566         1 argument.
8567
8568 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8569
8570         * expression.cs (LocalVariableReference.DoResolveLValue):
8571         Do not report warning 219 for out values.
8572         (EmptyExpression.Null): New member to avoid extra allocations.
8573
8574 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8575
8576         * cs-parser.jay: Fix wrong warning 642 report.
8577
8578         * cs-tokenizer.cs (CheckNextToken): New helper;
8579         Inspect next character if is same as expected.
8580
8581 2004-09-23  Martin Baulig  <martin@ximian.com>
8582
8583         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
8584         (Convert.ImplicitReferenceConversionExists): Likewise.
8585
8586 2004-11-09  Raja R Harinath  <rharinath@novell.com>
8587
8588         * Makefile (DISTFILES): Comment out a few missing files.
8589
8590 2004-10-29  Raja R Harinath  <rharinath@novell.com>
8591
8592         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
8593         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
8594         (gmcs.exe): Invoke bootstrap-libs.
8595         (clean-local): Clean the net_2_0_bootstrap profile too.
8596         (PROGRAM_INSTALL_DIR): New.
8597         (install-local): Use it.
8598
8599 2004-10-13  Martin Baulig  <martin@ximian.com>
8600
8601         * generic.cs (TypeManager.InflatedConstraints): New nested class.
8602         (TypeParameter.DefineType): If we're a method type parameter and
8603         that method is overriding something, "inflate" its constraints.
8604
8605 2004-10-12  Martin Baulig  <martin@ximian.com>
8606
8607         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
8608         and have type arguments, create and resolve a ConstructedType.
8609
8610 2004-10-12  Martin Baulig  <martin@ximian.com>
8611
8612         * decl.cs (MemberCache.FindMemberToOverride): Use
8613         TypeManager.IsEqual() to compare the parameters and Type.Equals()
8614         to compare the invocationType.
8615
8616         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
8617         When comparing two type parameters, only do the signature-only
8618         comparision for method type parameters.
8619
8620 2004-10-11  Martin Baulig  <martin@ximian.com>
8621
8622         * report.cs: Don't make --fatal abort on warnings, we have
8623         -warnaserror for that.
8624
8625 2004-10-11  Martin Baulig  <martin@ximian.com>
8626
8627         * typemanager.cs
8628         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
8629         (TypeManager.IsEqual): Call ourself recursively instead of using
8630         Type.IsEqual(). 
8631
8632 2004-10-11  Martin Baulig  <martin@ximian.com>
8633
8634         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
8635         on our own type parameters, not on the ones we inherit from a containing
8636         class.
8637
8638         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
8639         the comparision.
8640
8641         * generic.cs (TypeParameter.Define): We may only be called once.
8642
8643         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
8644         instead of TypeManager.IsEqual().
8645
8646 2004-09-28  Martin Baulig  <martin@ximian.com>
8647
8648         * generic.cs
8649         (GenericConstraints.EffectiveBaseClass): New public property.
8650         (TypeParameter.GenericConstraints): New public property.
8651         (ConstructedType.CheckConstraints): Improved.
8652
8653         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
8654         (Convert.TypeParameterConversion): New private method; use this in
8655         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
8656         for all conversions related to type parameters.
8657
8658 2004-09-24  Martin Baulig  <martin@ximian.com>
8659
8660         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
8661         type parameter conversions for type parameters which are known to
8662         be reference types.
8663
8664 2004-09-24  Martin Baulig  <martin@ximian.com>
8665
8666         * generic.cs (GenericConstraints): Added `IsReferenceType' and
8667         `IsValueType' properties.
8668
8669         * support.cs (ReflectionConstraints): Use
8670         Type.GetGenericParameterConstraints() instead of the old hack.
8671
8672 2004-09-24  Martin Baulig  <martin@ximian.com>
8673
8674         * generic.cs (GenericConstraints): Moved here and made it an
8675         abstract class.
8676
8677         * support.cs (GenericConstraints): Moved to generic.cs.
8678
8679 2004-09-24  Martin Baulig  <martin@ximian.com>
8680
8681         * support.cs
8682         (ReflectionConstraints): Un-nested this class and made it public.
8683
8684         * typemanager.cs
8685         (TypeManager.GetTypeParameterConstraints): New public method.
8686         (TypeManager.HasConstructorConstraint): Use the attributes.
8687
8688 2004-09-24  Martin Baulig  <martin@ximian.com>
8689
8690         * support.cs (GenericConstraints): Replaced `HasConstructor',
8691         `IsReferenceType' and `IsValueType' with `Attributes'.
8692         (ReflectionParameters.ReflectionConstraints): Removed the Create()
8693         method and made the .ctor public.
8694
8695         * generic.cs (Constraints.Attributes): New public property.
8696         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
8697         `IsReferenceType' -> `HasReferenceTypeConstraint' and
8698         `IsValueType' -> `HasValueTypeConstraint'.
8699
8700 2004-09-23  Martin Baulig  <martin@ximian.com>
8701
8702         * generic.cs (Constraints): Reflect latest runtime changes.
8703
8704 2004-09-23  Martin Baulig  <martin@ximian.com>
8705
8706         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
8707         (Convert.ImplicitReferenceConversionExists): Likewise.
8708
8709 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8710
8711         * class.cs (Operator.Define): Add error 448 and 559 report.
8712         
8713 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
8714
8715         * class.cs (MemberBase.IsTypePermitted): New protected
8716         method for checking error CS0610.
8717
8718 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
8719
8720         * class.cs (TypeContainer.HasExplicitLayout): New property
8721         Returns whether container has StructLayout attribute set Explicit.
8722         (FieldMember): New abstract class for consts and fields.
8723         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
8724         (Field): Reuse FieldMember.
8725
8726         * const.cs (Const): Reuse FieldMember.
8727
8728         * rootcontext.cs: EmitConstants call moved to class.
8729
8730 2004-09-22  Martin Baulig  <martin@ximian.com>
8731
8732         Marek and me just fixed one of our oldest bugs: #28562 :-)
8733
8734         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
8735
8736         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
8737         we're an EnumConstant, just return that.
8738         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
8739         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
8740         to get the value which'll actually be written into the attribute.
8741         However, we have to use GetValue() to access the attribute's value
8742         in the compiler.        
8743
8744 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
8745
8746         * constant.cs (Constant.IsNegative): New abstract property
8747         IsNegative.
8748
8749         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
8750         (StackAlloc.DoResolve): Reused IsNegative.
8751
8752 2004-09-22  Martin Baulig  <martin@ximian.com>
8753
8754         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
8755         public method; like LookupTypeContainer, but also works for
8756         generic instances.
8757
8758         * report.cs (Report.SymbolRelatedToPreviousError): Use
8759         TypeManager.LookupGenericTypeContainer().       
8760
8761 2004-09-22  Martin Baulig  <martin@ximian.com>
8762
8763         Thanks to Peter Sestoft for this bug report.
8764
8765         * expression.cs (Conditional): If both the `trueExpr' and the
8766         `falseExpr' is a NullLiteral, return a NullLiteral.
8767
8768 2004-09-22  Martin Baulig  <martin@ximian.com>
8769
8770         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
8771         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
8772         for the "get_Current" call.
8773
8774 2004-09-21  Martin Baulig  <martin@ximian.com>
8775
8776         * convert.cs (Convert.ImplicitReferenceConversion): When
8777         converting to an interface type, first check whether we're
8778         converting from a reference type.
8779
8780 2004-09-14  Martin Baulig  <martin@ximian.com>
8781
8782         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
8783
8784 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
8785
8786         Fixed bug #61902
8787         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
8788         called and is obsolete then this member suppress message
8789         when call is inside next [Obsolete] method or type.
8790
8791         * expression.cs: Use TestObsoleteMethodUsage member.
8792
8793 2004-09-14  Martin Baulig  <martin@ximian.com>
8794
8795         * genericparser.cs: Removed.
8796
8797 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
8798
8799         * class.cs (MethodCore.CheckBase): Fix bug #65757.
8800
8801 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
8802
8803         * attribute.cs (Attribute.Resolve): Add error 653 report.
8804
8805         * class.cs (Class.ApplyAttributeBuilder): Add error 641
8806         report.
8807         (Method.ApplyAttributeBuilder): Add error 685 report.
8808         (Operator.Define): Add error 564 report.
8809
8810         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
8811
8812         * expression.cs (Invocation.DoResolve): Add error
8813         245 and 250 report.
8814
8815         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
8816         error 674 report.
8817
8818 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
8819
8820         * class.cs (ConstructorInitializer.Resolve):
8821         Wrong error number (515->516).
8822
8823 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
8824
8825         * class.cs (Indexer.Define): Add error 631 report.
8826
8827 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
8828
8829         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
8830
8831 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
8832
8833         * expression.cs (Probe.DoResolve): Add error CS0241 report.
8834
8835 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
8836
8837         * cs-parser.jay: Added error CS0241 report.
8838
8839 2004-09-10  Raja R Harinath  <rharinath@novell.com>
8840
8841         * cs-parser.jay (fixed_statement): Introduce a scope for the
8842         declaration in the 'fixed' statement.
8843
8844 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
8845
8846         * cs-parser.jay: Added CS0230 error report.
8847
8848 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
8849
8850         * cs-parser.jay: Added errors CS0231 and CS0257 report.
8851
8852 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
8853
8854         * expression.cs (Argument.Resolve): Added error CS0192 and
8855         CS0199 report.
8856
8857 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
8858
8859         C# 2.0 #pragma warning feature
8860
8861         * cs-tokenizer.cs (PreProcessPragma): New method; 
8862         Handles #pragma directive.
8863
8864         * report.cs (WarningRegions): New class; Support
8865         class for #pragma warning directive. It tests whether
8866         warning is enabled for a given line.
8867
8868 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
8869
8870         * const.cs: Add more descriptive error report, tahnks to
8871         Sebastien. 
8872
8873 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
8874
8875         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
8876
8877 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
8878
8879         * expression.cs: Apply patch from Ben: Remove dead code from
8880         ArrayCreation, and remove the TurnintoConstant call in const.cs,
8881         as that code just threw an exception anwyays.
8882
8883         * const.cs: Remove the call to the turnintoconstant, for details
8884         see bug: #63144
8885         
8886         * literal.cs: The type of the null-literal is the null type;  So
8887         we use a placeholder type (literal.cs:System.Null, defined here)
8888         for it.
8889
8890         * expression.cs (Conditional.DoResolve): Remove some old code that
8891         is no longer needed, conversions have been fixed.
8892
8893         (ArrayCreationExpression.DoResolve): Return false if we fail to
8894         resolve the inner expression.
8895
8896 2004-09-07  Raja R Harinath  <rharinath@novell.com>
8897
8898         Fix test-290.cs.
8899         * cs-parser.jay (delegate_declaration): Record a delegate
8900         declaration as a type declaration.
8901         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
8902
8903 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
8904
8905         * parameter.cs: Do not crash if the type can not be resolved. 
8906
8907         * expression.cs: Report errors with unsafe pointers, fixes #64896
8908
8909 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
8910
8911         * expression.cs: Pointer arith always needs to do a conv.i
8912         if the operand is a long. fix 65320
8913
8914 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
8915
8916         Fixed cs0619-37.cs, cs0619-38.cs
8917
8918         * enum.cs (GetObsoleteAttribute): Removed.
8919
8920         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
8921         on Enum member is double staged. The first is tested member
8922         and then enum.
8923
8924 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
8925
8926         Fixed #56986, #63631, #65231
8927
8928         * class.cs: (TypeContainer.AddToMemberContainer): New method,
8929         adds member to name container.
8930         (TypeContainer.AddToTypeContainer): New method, adds type to
8931         name container.
8932         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
8933         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
8934         AddOperator): Simplified by reusing AddToMemberContainer.
8935         (TypeContainer.UserDefinedStaticConstructor): Changed to property
8936         instead of field.
8937         (Method.CheckForDuplications): Fixed implementation to test all
8938         possibilities.
8939         (MemberBase): Detection whether member is explicit interface
8940         implementation is now in constructor.
8941         (MemberBase.UpdateMemberName): Handles IndexerName.
8942         (Accessor): Changed to keep also location information.
8943         (AbstractPropertyEventMethod): Is derived from MemberCore.
8944         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
8945         will be emited or not.
8946         (PropertyBase.AreAccessorsDuplicateImplementation):
8947         Tests whether accessors are not in collision with some method.
8948         (Operator): Is derived from MethodCore to simplify common
8949         operations.
8950
8951         * decl.cs (Flags.TestMethodDuplication): Test for duplication
8952         must be performed.
8953         (DeclSpace.AddToContainer): Adds the member to defined_names
8954         table. It tests for duplications and enclosing name conflicts.
8955
8956         * enum.cs (EnumMember): Clean up to reuse the base structures
8957
8958 2004-09-03  Martin Baulig  <martin@ximian.com>
8959
8960         Merged latest changes into gmcs.  Please keep this comment in
8961         here, it makes it easier for me to see what changed in MCS since
8962         the last time I merged.
8963
8964 2004-09-03  Martin Baulig  <martin@ximian.com>
8965
8966         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
8967         into TypeContainer, to make partial classes work again.
8968
8969 2004-09-03  Martin Baulig  <martin@ximian.com>
8970
8971         * rootcontext.cs (RootContext.V2): Removed.
8972
8973 2004-03-23  Martin Baulig  <martin@ximian.com>
8974
8975         * expression.cs (Invocation.OverloadResolve): Added `bool
8976         may_fail' argument and use it instead of the Location.IsNull() hack.
8977
8978 2004-09-09  Martin Baulig  <martin@ximian.com>
8979
8980         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
8981
8982 2004-09-09  Martin Baulig  <martin@ximian.com>
8983
8984         * generic.cs (TypeParameter.DefineType): Added support for
8985         explicit interface methods.
8986
8987 2004-09-09  Martin Baulig  <martin@ximian.com>
8988
8989         * README.Changes: New document.  Started to list important changes
8990         between MCS and GMCS here.
8991
8992 2004-09-08  Martin Baulig  <martin@ximian.com>
8993
8994         * class.cs
8995         (TypeContainer.CheckRecursiveDefinition): New protected method.
8996         (TypeContainer.DefineType): Move the CS0146 check into
8997         CheckRecursiveDefinition().     
8998
8999 2004-09-06  Martin Baulig  <martin@ximian.com>
9000
9001         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9002         types for the constructor constraint.
9003
9004 2004-09-03  Martin Baulig  <martin@ximian.com>
9005
9006         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9007         into TypeContainer, to make partial classes work again.
9008
9009 2004-09-03  Martin Baulig  <martin@ximian.com>
9010
9011         * rootcontext.cs (RootContext.V2): Removed.
9012
9013 2004-03-23  Martin Baulig  <martin@ximian.com>
9014
9015         * expression.cs (Invocation.OverloadResolve): Added `bool
9016         may_fail' argument and use it instead of the Location.IsNull() hack.
9017
9018 2004-09-03  Martin Baulig  <martin@ximian.com>
9019
9020         Merged latest changes into gmcs.  Please keep this comment in
9021         here, it makes it easier for me to see what changed in MCS since
9022         the last time I merged.
9023
9024 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9025
9026         Fix #61128.
9027         * expression.cs (BetterConversion): Don't allow either conversion 
9028         to be null.  Remove redundant implicit conversion test when 'q ==
9029         null' -- when this function is invoked, we already know that the
9030         implicit conversion exists.
9031         (BetterFunction): Assume that 'best' is non-null.  Remove
9032         redundant reimplementation of IsApplicable when 'best' is null.
9033         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9034         number of arguments.
9035         (IsAncestralType): Extract from OverloadResolve.
9036         (OverloadResolve): Make robust to the MethodGroupExpr being
9037         unsorted.  Implement all the logic of Section 14.5.5.1, and
9038         support overloading of methods from multiple applicable types.
9039         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9040
9041         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9042         (RealError, Warning): Append type of report to related symbol.
9043
9044 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9045
9046         * enum.cs: Fixed CLS-Compliance checks for enum members.
9047         Error tests cs3008-8.cs, cs3014-8.cs
9048
9049 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9050
9051         Fixed bug #62342, #63102
9052         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9053         like ImplementMethod.
9054
9055 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9056
9057         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9058         Fixed bug #65170.
9059
9060 2004-09-02  Martin Baulig  <martin@ximian.com>
9061
9062         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9063         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9064         on the MethodBase.
9065
9066 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9067
9068         C# 2.0 Static classes implemented
9069
9070         * class.cs (TypeContainer): instance_constructors,
9071         initialized_fields, initialized_static_fields,
9072         default_constructor, base_inteface_types are protected to be
9073         accessible from StaticClass.
9074         (TypeContainer.DefineDefaultConstructor): New virtual method
9075         for custom default constructor generating
9076         (StaticClass): New class to handle "Static classes" feature.
9077
9078         * cs-parser.jay: Handle static keyword on class like instance
9079         of StaticClass.
9080
9081         * driver.cs: Added "/langversion" command line switch with two
9082         options (iso-1, default).
9083
9084 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9085
9086         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9087
9088 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9089
9090         * delegate.cs: Style.
9091
9092 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9093
9094         * delegate.cs: Add seperate instance expr field for miguel.
9095
9096 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9097
9098         * PointerArithmetic (Resolve): make sure we are not doing
9099         pointer arith on void*. Also, make sure we are resolved
9100         by not setting eclass until resolve.
9101
9102         All callers: Make sure that PointerArithmetic gets resolved.
9103
9104 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9105
9106         * ArrayCreation (LookupType): If the type does not resolve 
9107         to an array, give an error.
9108
9109 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9110
9111         * statement.cs (Try.Resolve): Fixed bug #64222
9112
9113 2004-08-27  Martin Baulig  <martin@ximian.com>
9114
9115         * class.cs
9116         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9117         crash here.     
9118
9119 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9120
9121         * ecore.cs (Constantify): Get underlying type via
9122         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9123         Windows in special cases.
9124
9125 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9126
9127         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9128         for obtaining also private methods.
9129         (GetRemoveMethod): Used GetRemoveMethod (true)
9130         for obtaining also private methods.
9131
9132 2004-09-02  Martin Baulig  <martin@ximian.com>
9133
9134         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9135         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9136         on the MethodBase.
9137
9138 2004-08-27  Martin Baulig  <martin@ximian.com>
9139
9140         * class.cs
9141         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9142         crash here.     
9143
9144 2004-08-25  Martin Baulig  <martin@ximian.com>
9145
9146         * support.cs (ReflectionParameters..ctor): If this is a generic
9147         method, retrieve and store its type parameters.
9148         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9149         (ReflectionParameters.GenericConstraints): The argument specifies
9150         the type parameter, not the method parameter.
9151         (InternalParameters.GenericConstraints): Likewise.
9152
9153         * generic.cs (TypeParameter.DefineType): Correctly handle
9154         constraints wrt. generic methods in interfaces and their
9155         implementations.        
9156
9157 2004-08-24  Martin Baulig  <martin@ximian.com>
9158
9159         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9160         (Constraints.IsSubclassOf): New internal method.
9161
9162         * typemanager.cs (TypeManager.FindMembers): Added special support
9163         for GenericTypeParameterBuilder's.      
9164         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9165         type parameters.
9166
9167 2004-08-24  Martin Baulig  <martin@ximian.com>
9168
9169         * typemanager.cs
9170         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9171         this for accessibility checks.
9172         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9173         IsNestedFamilyAccessible.
9174         (TypeManager.IsSubclassOf): New method, do what the name actually
9175         says.   
9176
9177 2004-08-24  Martin Baulig  <martin@ximian.com>
9178
9179         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9180         as a SimpleName, include the generic arity.
9181
9182 2004-08-24  Martin Baulig  <martin@ximian.com>
9183
9184         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9185         MethodAttributes.HideBySig for operators.
9186
9187 2004-08-23  Martin Baulig  <martin@ximian.com>
9188
9189         Back to the old error reporting system :-)
9190
9191         * report.cs (Message): Removed.
9192         (Report.MessageData, ErrorData, WarningData): Removed.
9193         (Report.Error, Warning): Back to the old system.
9194
9195 2004-08-23  Martin Baulig  <martin@ximian.com>
9196
9197         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9198
9199         * class.cs (TypeContainer.ParentContainer): New public virtual
9200         method; replaces the explicit interface implementation.
9201         (ClassPart.ParentContainer): Override.
9202
9203 2004-08-23  Martin Baulig  <martin@ximian.com>
9204
9205         * statement.cs (Switch): Added support for constant switches; see
9206         #59428 or test-285.cs.
9207
9208 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9209
9210         Fixed bug #62740.
9211         * statement.cs (GetEnumeratorFilter): Removed useless
9212         logic because C# specs is strict. GetEnumerator must be
9213         public.
9214
9215 2004-08-22  Martin Baulig  <martin@ximian.com>
9216
9217         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9218         a switch and may break, reset the barrier.  Fixes #59867.
9219
9220 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9221
9222         CLS-Compliance speed up (~5% for corlib)
9223
9224         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9225         New method. Tests container for CLS-Compliant names
9226
9227         * class.cs (TypeContainer.VerifyClsName): New method.
9228         Checks whether container name is CLS Compliant.
9229         (Constructor): Implements IMethodData.
9230
9231         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9232         low-case table for CLS Compliance test.
9233         (MemberCache.VerifyClsParameterConflict): New method.
9234         Checks method parameters for CS3006 error.
9235
9236         * enum.cs (EnumMember): Is derived from MemberCore.
9237         (Enum.VerifyClsName): Optimized for better performance.
9238
9239 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9240
9241         * report.cs: Renamed Error_T to Error and changed all
9242         references.
9243
9244 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9245
9246         * class.cs (TypeContainer.IndexerArrayList): New inner class
9247         container for indexers.
9248         (TypeContainer.DefaultIndexerName): New constant for default
9249         indexer name. Replaced all "Item" with this constant.
9250         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9251
9252         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9253         DefaultMemberAttribute constructor.
9254
9255 2004-08-05  Martin Baulig  <martin@ximian.com>
9256
9257         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9258         Fix bug #59429.
9259
9260 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9261
9262         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9263         multi platforms problem.
9264
9265         * compiler.csproj: Included shared files.
9266
9267 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9268
9269         Fix bug 60333, 55971 in the more general way
9270         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9271         Added arg_type argument for constant conversion.
9272         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
9273
9274 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9275
9276         Fix bug #59760
9277         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
9278         OperatorArrayList, MethodCoreArrayList for typecontainer
9279         containers. Changed class member types to these new types.
9280         (MethodArrayList.DefineMembers): Added test for CS0659.
9281
9282 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
9283
9284         * cfold.cs: Synchronize the folding with the code in expression.cs
9285         Binary.DoNumericPromotions for uint operands.
9286
9287         * attribute.cs: Revert patch from Raja, it introduced a regression
9288         while building Blam-1.2.1 (hard to isolate a test case).
9289
9290 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9291
9292         Fix for #55382
9293         * class.cs:
9294         (TypeContainer.Define): Renamed to DefineContainerMembers because of
9295         name collision.
9296         (MethodCore.parent_method): New member. The method we're overriding
9297         if this is an override method.
9298         (MethodCore.CheckBase): Moved from Method class and made common.
9299         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
9300         private.
9301         (MethodCore.CheckForDuplications): New abstract method. For custom
9302         member duplication search in a container
9303         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
9304         method and its return type.
9305         (Event.conflict_symbol): New member. Symbol with same name in the
9306         parent class.
9307
9308         * decl.cs:
9309         (MemberCache.FindMemberWithSameName): New method. The method
9310         is looking for conflict with inherited symbols.
9311
9312 2004-08-04  Martin Baulig  <martin@ximian.com>
9313
9314         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9315
9316         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9317
9318 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9319
9320         * report.cs (Message): New enum for better error, warning reference in
9321         the code.
9322         (MessageData): New inner abstract class. It generally handles printing of
9323         error and warning messages.
9324         Removed unused Error, Warning, Message methods.
9325
9326 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9327
9328         Fix for cs0592-8.cs test
9329         * attribute.cs
9330         (Attributable.ValidAttributeTargets): Made public.
9331         (Attribute.ExplicitTarget): New member for explicit target value.
9332         (Attribute.CheckTargets): Now we translate explicit attribute
9333         target to Target here.
9334
9335 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
9336
9337         * ecore.cs (MethodGroupExpr): new IsBase property.
9338
9339         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
9340
9341         * delegate.cs (DelegateCreation): store a MethodGroupExpr
9342         rather than an instance expr.
9343
9344         (DelegateCreation.Emit): Use the method group rather than
9345         the instance expression. Also, if you have base.Foo as the
9346         method for a delegate, make sure to emit ldftn, not ldftnvirt.
9347
9348         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
9349
9350         (NewDelegate.DoResolve): Only check for the existance of Invoke
9351         if the method is going to be needed. Use MethodGroupExpr.
9352
9353         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
9354
9355         * expression.cs: For pointer arith., make sure to use
9356         the size of the type, not the size of the pointer to
9357         the type.
9358
9359 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9360
9361         Fix for #60722
9362         * class.cs (Class): Added error CS0502 test.
9363
9364 2004-08-03  John Luke  <jluke@cfl.rr.com>
9365             Raja R Harinath  <rharinath@novell.com>
9366
9367         Fix for #60997.
9368         * attribute.cs (Attribute.complained_before): New flag.
9369         (Attribute.ResolveType, Attribute.Resolve),
9370         (Attribute.DefinePInvokeMethod): Set it.
9371         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
9372         
9373 2004-08-03  Martin Baulig  <martin@ximian.com>
9374
9375         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9376         use a user-defined operator; we still need to do numeric
9377         promotions in case one argument is a builtin type and the other
9378         one has an implicit conversion to that type.  Fixes #62322.
9379
9380 2004-08-18  Martin Baulig  <martin@ximian.com>
9381
9382         * class.cs (Method.Define): Use the correct method name when
9383         creating the MethodBuilder for a generic method.
9384
9385 2004-08-17  Martin Baulig  <martin@ximian.com>
9386
9387         * generic.cs (Constraints): Support type parameter constraints.
9388
9389 2004-08-16  Martin Baulig  <martin@ximian.com>
9390
9391         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
9392         (Token.GENERIC_DIMENSION): New token; this is returned if we
9393         encounter an unbound generic type in a typeof() expression.
9394
9395         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
9396         this token is only generated while parsing a typeof() expression.
9397         (typeof_expression): Removed the old unbound_type hack.
9398
9399         * generic.cs (TypeArguments.IsUnbound): New public property.
9400
9401         * decl.cs (MemberName): Added support for unbound types.
9402
9403 2004-08-14  Martin Baulig  <martin@ximian.com>
9404
9405         * typemanager.cs
9406         (TypeManager.IsEqualGenericInstance): New static method.
9407         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
9408         just used to check accessibility, so follow the rules of 26.1.6.        
9409
9410         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
9411         ConstructedType instead of a TypeExpression if we have type arguments.
9412
9413         * cs-parser.jay (typeof_expression): Support unbound generic types.
9414
9415         * ecore.cs (UnboundTypeExpression): New public class.
9416
9417 2004-08-12  Martin Baulig  <martin@ximian.com>
9418
9419         * typemanager.cs (TypeManager.IsNestedChildOf): Use
9420         TypeManager.IsEqual() rather than `=='.
9421
9422         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
9423         generic instances as well.
9424
9425 2004-08-12  Martin Baulig  <martin@ximian.com>
9426
9427         * expression.cs (Invocation.InferType): We can only infer method
9428         type parameters.  Fixes #62647.
9429
9430 2004-08-11  Martin Baulig  <martin@ximian.com>
9431
9432         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
9433         before resolving the base classes.
9434
9435 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
9436
9437         * Makefile: install .mdb file too.
9438
9439 2004-08-05  Martin Baulig  <martin@ximian.com>
9440
9441         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
9442         initializer, the current type is just the TypeBuilder, not the
9443         instantiated generic type.
9444         (FieldExpr.IsFieldInitializer): New public property.
9445
9446 2004-08-04  Martin Baulig  <martin@ximian.com>
9447
9448         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9449
9450         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9451
9452 2004-08-03  Martin Baulig  <martin@ximian.com>
9453
9454         * class.cs (MethodData.Define): If we're an explicit
9455         implementation, remove the generic arity from the type name.
9456
9457 2004-08-03  Martin Baulig  <martin@ximian.com>
9458
9459         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9460         use a user-defined operator; we still need to do numeric
9461         promotions in case one argument is a builtin type and the other
9462         one has an implicit conversion to that type.  Fixes #62322.
9463
9464 2004-08-02  Martin Baulig  <martin@ximian.com>
9465
9466         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
9467         `TypeExpr[]' array.
9468         (TypeContainer.GetClassBases): Return the unexpanded list of
9469         interfaces; we expand them later.
9470         (TypeContainer.DefineType): After creating the TypeBuilder, call
9471         TypeManager.ExpandInterfaces() to get an expanded and resolved
9472         list of interfaces.
9473
9474         * ecore.cs (TypeExpr.GetInterfaces): Removed
9475
9476         * generics.cs (Constraints.InterfaceConstraints): Remove.
9477         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
9478         register the interface constraints.
9479
9480         * typemanager.cs
9481         (TypeManager.AddUserType): Removed the `ifaces' argument.
9482         (TypeManager.AddTypeParameter): Likewise.
9483         (TypeManager.AddUserInterface): Removed, was unused.
9484         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
9485         `TypeExpr[]' array for the interfaces.
9486         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
9487         has been defined, returns a list of the resolved interfaces types.
9488         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
9489         (TypeManager.GetExplicitInterfaces): Likewise.  
9490
9491 2004-08-02  Martin Baulig  <martin@ximian.com>
9492
9493         * expression.cs (Invocation.EmitCall): If we're invoking a method
9494         on a type parameter, use the new `Constrained' prefix opcode.
9495
9496 2004-08-02  Martin Baulig  <martin@ximian.com>
9497
9498         * statement.cs (LocalInfo.Flags): Added `IsThis'.
9499         (LocalInfo.IsThis): New public property.
9500         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
9501
9502 2004-08-01  Martin Baulig  <martin@ximian.com>
9503
9504         * class.cs (TypeContainer.GetClassBases): Don't set the default
9505         here since we may get called from GetPartialBases().
9506         (TypeContainer.DefineType): If GetClassBases() didn't return a
9507         parent, use the default one.
9508
9509 2004-07-30  Martin Baulig  <martin@ximian.com>
9510
9511         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
9512
9513         * class.cs (SourceMethod): New public class, derive from the
9514         symbol writer's ISourceMethod.
9515         (Method): Use the new symbol writer API.
9516
9517         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
9518         as argument and use the new symbol writer.
9519
9520         * location.cs
9521         (SourceFile): Implement the symbol writer's ISourceFile.
9522         (Location.SymbolDocument): Removed.
9523         (Location.SourceFile): New public property.
9524
9525         * symbolwriter.cs: Use the new symbol writer API.
9526
9527 2004-07-30  Raja R Harinath  <rharinath@novell.com>
9528
9529         * Makefile (install-local): Remove.  Functionality moved to
9530         executable.make.
9531
9532 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
9533
9534         * Makefile: Install mcs.exe.config file together with mcs.exe.
9535         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
9536         correct runtime version.
9537         
9538 2004-07-25  Martin Baulig  <martin@ximian.com>
9539
9540         * class.cs
9541         (TypeContainer.RegisterOrder): Removed, this was unused.
9542         (TypeContainer, interface_order): Removed.
9543         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
9544         TypeContainer as argument since we can also be called with a
9545         `PartialContainer' for a partial class/struct/interface.
9546         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
9547         of checking whether we're an `Interface' - we could be a
9548         `PartialContainer'.
9549         (PartialContainer.Register): Override; call
9550         AddClass()/AddStruct()/AddInterface() on our parent.
9551
9552         * cs-parser.jay (interface_member_declaration): Add things to the
9553         `current_container', not the `current_class'.
9554
9555         * rootcontext.cs (RegisterOrder): The overloaded version which
9556         takes an `Interface' was unused, removed.
9557
9558         * typemanager.cs (TypeManager.LookupInterface): Return a
9559         `TypeContainer', not an `Interface'.
9560         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
9561         contain a `PartialContainer' for an interface, so check it's
9562         `Kind' to figure out what it is.
9563
9564 2004-07-25  Martin Baulig  <martin@ximian.com>
9565
9566         * class.cs (Class.DefaultTypeAttributes): New public constant.
9567         (Struct.DefaultTypeAttributes): Likewise.
9568         (Interface.DefaultTypeAttributes): Likewise.
9569         (PartialContainer.TypeAttr): Override this and add the
9570         DefaultTypeAttributes.
9571
9572 2004-07-25  Martin Baulig  <martin@ximian.com>
9573
9574         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
9575         we can just use the `Parent' field instead.
9576
9577 2004-07-25  Martin Baulig  <martin@ximian.com>
9578
9579         * class.cs (TypeContainer.Emit): Renamed to EmitType().
9580
9581 2004-07-25  Martin Baulig  <martin@ximian.com>
9582
9583         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
9584         our parts before defining any methods.
9585         (TypeContainer.VerifyImplements): Make this virtual.
9586         (ClassPart.VerifyImplements): Override and call VerifyImplements()
9587         on our PartialContainer.
9588
9589 2004-07-25  Martin Baulig  <martin@ximian.com>
9590
9591         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
9592
9593         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
9594         argument, we can just use the `Parent' field instead.
9595
9596         * class.cs
9597         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
9598         (MemberBase.DoDefine): Likewise.
9599
9600 2004-07-24  Martin Baulig  <martin@ximian.com>
9601
9602         * decl.cs (MemberCore.Parent): New public field.
9603         (DeclSpace.Parent): Moved to MemberCore.
9604
9605         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
9606         (MemberBase.ctor): Added TypeContainer argument, pass it to our
9607         parent's .ctor.
9608         (FieldBase, Field, Operator): Likewise.
9609         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
9610         (EventField, Event): Likewise.
9611
9612 2004-07-23  Martin Baulig  <martin@ximian.com>
9613
9614         * class.cs (PartialContainer): New public class.
9615         (ClassPart): New public class.
9616         (TypeContainer): Added support for partial classes.
9617         (TypeContainer.GetClassBases): Splitted some of the functionality
9618         out into GetNormalBases() and GetPartialBases().
9619
9620         * cs-tokenizer.cs (Token.PARTIAL): New token.
9621         (Tokenizer.consume_identifier): Added some hacks to recognize
9622         `partial', but only if it's immediately followed by `class',
9623         `struct' or `interface'.
9624
9625         * cs-parser.jay: Added support for partial clases.
9626
9627 2004-07-23  Martin Baulig  <martin@ximian.com>
9628
9629         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
9630         a `DeclSpace' and also made it readonly.
9631         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
9632         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
9633         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
9634
9635         * cs-parser.jay: Pass the `current_class', not the
9636         `current_container' (at the moment, this is still the same thing)
9637         to a new Method, Property, Event, Indexer or Constructor.
9638
9639 2004-07-23  Martin Baulig  <martin@ximian.com>
9640
9641         * cs-parser.jay (CSharpParser): Added a new `current_class' field
9642         and removed the `current_interface' one.
9643         (struct_declaration, class_declaration, interface_declaration):
9644         Set `current_class' to the newly created class/struct/interface;
9645         set their `Bases' and call Register() before parsing their body.
9646
9647 2004-07-23  Martin Baulig  <martin@ximian.com>
9648
9649         * class.cs (Kind): New public enum.
9650         (TypeContainer): Made this class abstract.
9651         (TypeContainer.Kind): New public readonly field.
9652         (TypeContainer.CheckDef): New public method; moved here from
9653         cs-parser.jay.
9654         (TypeContainer.Register): New public abstract method.
9655         (TypeContainer.GetPendingImplementations): New public abstract
9656         method.
9657         (TypeContainer.GetClassBases): Removed the `is_class' and
9658         `is_iface' parameters.
9659         (TypeContainer.DefineNestedTypes): Formerly known as
9660         DoDefineType().
9661         (ClassOrStruct): Made this class abstract.
9662
9663         * tree.cs (RootTypes): New public type. 
9664
9665 2004-07-20  Martin Baulig  <martin@ximian.com>
9666
9667         * tree.cs (Tree.RecordNamespace): Removed.
9668         (Tree.Namespaces): Removed.
9669
9670         * rootcontext.cs (RootContext.IsNamespace): Removed.
9671
9672         * cs-parser.jay (namespace_declaration): Just create a new
9673         NamespaceEntry here.
9674
9675 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
9676
9677         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
9678         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
9679         entry to make sure it runs in the correct runtime version.
9680         
9681 2004-07-18  Martin Baulig  <martin@ximian.com>
9682
9683         * generic.cs (ConstructedType.CheckConstraints): Improved
9684         constraints checking.
9685
9686 2004-07-18  Martin Baulig  <martin@ximian.com>
9687
9688         * expression.cs (Invocation.BetterMethod): Call
9689         TypeManager.TypeToCoreType() on all types and removed my previous
9690         hack; we're already doig the right thing here.
9691
9692 2004-07-17  Martin Baulig  <martin@ximian.com>
9693
9694         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
9695
9696 2004-07-16  Martin Baulig  <martin@ximian.com>
9697
9698         * iterators.cs: Added generics support.
9699
9700 2004-07-16  Martin Baulig  <martin@ximian.com>
9701
9702         * iterators.cs: Rewrote this.  We're now using one single Proxy
9703         class for both the IEnumerable and the IEnumerator interface and
9704         `Iterator' derives from Class so we can use the high-level API.
9705
9706         * class.cs (TypeContainer.AddIterator): New method.
9707         (TypeContainer.DoDefineType): New protected virtual method, which
9708         is called from DefineType().
9709         (TypeContainer.DoDefineMembers): Call DefineType() and
9710         DefineMembers() on all our iterators.
9711         (TypeContainer.Emit): Call Emit() on all our iterators.
9712         (TypeContainer.CloseType): Call CloseType() on all our iterators.
9713
9714         * codegen.cs (EmitContext.CurrentIterator): New public field.
9715
9716 2004-07-15  Martin Baulig  <martin@ximian.com>
9717
9718         * typemanager.cs
9719         (TypeManager.not_supported_exception_type): New type.   
9720
9721 2004-07-14  Martin Baulig  <martin@ximian.com>
9722
9723         * typemanager.cs
9724         (TypeManager.generic_ienumerable_type): New type.
9725         (TypeManager.generic_ienumerator_type): New type.
9726
9727         * rootcontext.cs
9728         (RootContext.interfaces_first_stage): Added
9729         "System.Collections.Generic.IEnumerator`1" and
9730         "System.Collections.Generic.IEnumerable`1".     
9731
9732 2004-07-14  Martin Baulig  <martin@ximian.com>
9733
9734         * iterators.cs: Use real error numbers.
9735
9736 2004-07-14  Martin Baulig  <martin@ximian.com>
9737
9738         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
9739         requires this to be a System.Collection.IEnumerable and not a
9740         class implementing that interface.
9741         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
9742
9743 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
9744
9745         * class.cs: Fixed previous fix, it broke some error tests.
9746
9747 2004-07-12  Martin Baulig  <martin@ximian.com>
9748
9749         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
9750         Fixes #61293.
9751
9752 2004-07-14  Martin Baulig  <martin@ximian.com>
9753
9754         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
9755         an exclamation mark (!) for the generic arity to reflect the
9756         latest spec changes; ie. use "System.Collections.Generic.IList`1".
9757
9758 2004-07-13  Martin Baulig  <martin@ximian.com>
9759
9760         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
9761         specifiers being part of a type argument.
9762
9763 2004-07-13  Martin Baulig  <martin@ximian.com>
9764
9765         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
9766         name for generic types.
9767
9768 2004-07-13  Martin Baulig  <martin@ximian.com>
9769
9770         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
9771         bit to fix #60119.
9772
9773 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
9774
9775         * assign.cs (LocalTemporary): Add new argument: is_address,If
9776         `is_address' is true, then the value that we store is the address
9777         to the real value, and not the value itself.
9778         
9779         * ecore.cs (PropertyExpr): use the new local temporary
9780         stuff to allow us to handle X.Y += z (where X is a struct)
9781
9782 2004-07-08  Martin Baulig  <martin@ximian.com>
9783
9784         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
9785         not always return, just like we're doing in Using.Resolve().
9786
9787 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
9788
9789         * cs-parser.jay (fixed_statement): flag this as Pinned.
9790
9791 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
9792
9793         * typemanager.cs (TypeManager): Removed MakePinned method, this
9794         mechanism is replaced with the .NET 2.x compatible mechanism of
9795         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
9796
9797         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
9798         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
9799         `IsFixed' property which has a different meaning.
9800
9801 2004-07-02  Raja R Harinath  <rharinath@novell.com>
9802
9803         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
9804         visible from inside a nested class, not just the names of the
9805         immediately enclosing class.
9806         Fix for bug #60730.
9807
9808 2004-06-24  Raja R Harinath  <rharinath@novell.com>
9809
9810         * expression.cs (BetterConversion): Remove buggy special-case
9811         handling of "implicit constant expression conversions".  At this
9812         point, we already know that the conversion is possible -- we're
9813         only checking to see which is better.
9814
9815 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
9816
9817         * cs-parser.jay: Added error CS0210 test.
9818
9819 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
9820
9821         * cs-parser.jay: Added error CS0134 test.
9822
9823 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
9824
9825         Fix bug #52507
9826         * cs-parser.jay: Added error CS0145 test.
9827
9828 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
9829
9830         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
9831
9832 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
9833         
9834         * expression.cs (StackAlloc.Resolve): The argument may not
9835         be a constant; deal with this case.
9836         
9837 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
9838
9839         * attribute.cs (IndexerName_GetIndexerName): Renamed to
9840         GetIndexerAttributeValue.
9841         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
9842
9843         * class.cs (Indexer.Define): Added error tests for CS0415,
9844         CS0609.
9845
9846 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
9847
9848         * attribute.cs (Attribute.Resolve): Keep field code in sync with
9849         property code.
9850
9851 2004-06-23  Martin Baulig  <martin@ximian.com>
9852
9853         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
9854         neither return nor throw, reset the barrier as well.  Fixes #60457.
9855
9856 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
9857
9858         * class.cs : EventAttributes is now set to None by default.
9859           This fixes bug #60459.
9860
9861 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
9862
9863         Fix bug #60219
9864         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
9865         Don't throw exception but return null (it's sufficient now).
9866
9867 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
9868
9869         * typemanager.cs (GetArgumentTypes): Faster implementation.
9870
9871 2004-06-18  Martin Baulig  <martin@ximian.com>
9872
9873         * attribute.cs (Attribute.Resolve): Check whether we're an
9874         EmptyCast which a Constant child.  Fixes #60333.
9875
9876 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
9877
9878         * statement.cs (EmitCollectionForeach): Account for the fact that
9879         not all valuetypes are in areas which we can take the address of.
9880         For these variables, we store to a temporary variable. Also, make
9881         sure that we dont emit a `callvirt' on a valuetype method.
9882
9883 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
9884
9885         * expression.cs (StackAlloc.DoReSolve): Added test for
9886         negative parameter (CS0247).
9887
9888 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
9889
9890         Fix bug #59792
9891         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
9892
9893 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
9894
9895         Fix bug #59781
9896         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
9897         ulong.
9898
9899 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
9900
9901         Fix bug #58254 & cs1555.cs, cs1556.cs
9902         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
9903
9904 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
9905
9906         * cs-parser.jay: Added error CS1669 test for indexers.
9907
9908 2004-06-18  Martin Baulig  <martin@ximian.com>
9909
9910         * generics.cs (GenericMethod.ctor): Don't take an Attributes
9911         argument.  Fixes #60441.
9912
9913 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
9914         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
9915         The name needs to have the actual name of the method in order
9916         for other tests (such as the one in OverloadResolve for Invoke
9917         on a delegate) to work. As well, it does not really help
9918         error reporting because the method group had multiple methods.
9919         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
9920         Make profiling work.
9921         
9922 2004-06-13  Martin Baulig  <martin@ximian.com>
9923
9924         * cs-parser.jay: Don't allow generic attributes.
9925
9926 2004-06-13  Martin Baulig  <martin@ximian.com>
9927
9928         * class.cs (MemberBase.DoDefineBase): New protected method.
9929         (MemberBase.DoDefine): Compute the `flags' in the new
9930         DoDefineBase() which must be called first.
9931         (Method.Define): Call DoDefineBase() first so we have the flags
9932         when defining the generic method.
9933
9934         * cs-parser.jay (interface_method_declaration): Support generic methods.
9935
9936 2004-06-13  Martin Baulig  <martin@ximian.com>
9937
9938         * decl.cs (TypeName): Removed.
9939         (MemberName): Removed TypeName and MemberNow; now we just have
9940         MemberName.
9941
9942         * cs-parser.jay: Don't distinguish between type arguments and type
9943         parameters in the grammar and simplified the rules a bit.  The
9944         reduce/reduce conflicts are now gone (except the one we inherited
9945         from mcs).
9946
9947 2004-06-11  Martin Baulig  <martin@ximian.com>
9948
9949         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
9950         call this twice: for params and varargs methods.
9951
9952 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
9953
9954         * class.cs:
9955         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
9956
9957 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
9958
9959         * attribute.cs (Attribute.GetValidTargets): Made public.
9960
9961         * class.cs: 
9962         (AbstractPropertyEventMethod): New class for better code sharing.
9963         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
9964         CS1667 report.
9965         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
9966
9967 2004-06-09  Martin Baulig  <martin@ximian.com>
9968
9969         * cs-parser.jay: Removed a reduce/reduce conflict.
9970
9971 2004-06-03  Martin Baulig  <martin@ximian.com>
9972
9973         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
9974         GetSimpleName() and return a SimpleName.
9975
9976         * ecore.cs (SimpleName.Arguments): New public field.
9977         (SimpleName): Added overloaded ctor which takes an additional
9978         TypeArguments argument.
9979         (SimpleName.SimpleNameResolve): Added support for generic methods.
9980         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
9981         formerly in MemberAccess.DoResolve(), but we also need it in
9982         SimpleNameResolve().
9983
9984         * expression.cs (MemberAccess.DoResolve): Use the new
9985         MethodGroupExpr.ResolveGeneric().       
9986
9987 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
9988
9989         * decl.cs: If possible, use lookuptypedirect here. We can only do
9990         this if there is no `.' after the namespace. Avoids using
9991         LookupType, which does lots of slow processing.
9992         (FindNestedType) New method, does what it says :-).
9993         * namespace.cs: use LookupTypeDirect.
9994         * rootcontext.cs: use membercache, if possible.
9995         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
9996
9997 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
9998
9999         * expression.cs:
10000         According to the spec, 
10001
10002         In a member access of the form E.I, if E is a single identifier,
10003         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10004         field, property, localvariable, or parameter with the same type as
10005         the meaning of E as a type-name (§3.8), then both possible
10006         meanings of E are permitted.
10007
10008         We did not check that E as a simple-name had the same type as E as
10009         a type name.
10010
10011         This trivial check gives us 5-7% on bootstrap time.
10012
10013 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10014
10015         * expression.cs (Invocation.OverloadResolve): Avoid the
10016         use of hashtables and boxing here by allocating on demand.
10017
10018 2004-05-30  Martin Baulig  <martin@ximian.com>
10019
10020         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10021         we're doing a silent lookup.  Don't try to lookup nested types in
10022         TypeManager.object_type (thanks to Ben Maurer).
10023
10024 2004-05-30  Martin Baulig  <martin@ximian.com>
10025
10026         Committing a patch from Ben Maurer.
10027
10028         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10029
10030 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10031
10032         * convert.cs: add a trivial cache for overload operator resolution.
10033
10034 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10035
10036         * attribute.cs
10037         (AttributeTester.GetObsoleteAttribute): Returns instance of
10038         ObsoleteAttribute when type is obsolete.
10039
10040         * class.cs
10041         (TypeContainer.VerifyObsoleteAttribute): Override.
10042         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10043         (MethodCode.VerifyObsoleteAttribute): Override.
10044         (MemberBase.VerifyObsoleteAttribute): Override.
10045
10046         * decl.cs
10047         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10048         and report proper error.
10049
10050         *delegate.cs
10051         (Delegate.VerifyObsoleteAttribute): Override.
10052
10053         * ecore.cs
10054         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10055         and report proper error.
10056         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10057
10058         * enum.cs
10059         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10060         and enum member.
10061
10062         * expression.cs
10063         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10064         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10065         Added test for ObsoleteAttribute.
10066
10067         * statement.cs
10068         (Catch): Derived from Statement.
10069
10070 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10071
10072         * decl.cs: If possible, use lookuptypedirect here. We can only do
10073         this if there is no `.' after the namespace. Avoids using
10074         LookupType, which does lots of slow processing.
10075         (FindNestedType) New method, does what it says :-).
10076         * namespace.cs: use LookupTypeDirect.
10077         * rootcontext.cs: use membercache, if possible.
10078         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10079
10080 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10081
10082         * expression.cs:
10083         According to the spec, 
10084
10085         In a member access of the form E.I, if E is a single identifier,
10086         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10087         field, property, localvariable, or parameter with the same type as
10088         the meaning of E as a type-name (§3.8), then both possible
10089         meanings of E are permitted.
10090
10091         We did not check that E as a simple-name had the same type as E as
10092         a type name.
10093
10094         This trivial check gives us 5-7% on bootstrap time.
10095
10096 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10097
10098         Fixed bug #59071 & cs0160.cs
10099         * statement.cs (Try.Resolve): Check here whether order of catch
10100         clauses matches their dependencies.
10101
10102 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10103
10104         Fixed bug #58624
10105         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10106         unsafe type.
10107
10108 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10109
10110         * expression.cs (Invocation.OverloadResolve): Avoid the
10111         use of hashtables and boxing here by allocating on demand.
10112
10113 2004-05-30  Martin Baulig  <martin@ximian.com>
10114
10115         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10116         we're doing a silent lookup.  Don't try to lookup nested types in
10117         TypeManager.object_type (thanks to Ben Maurer).
10118
10119 2004-05-30  Martin Baulig  <martin@ximian.com>
10120
10121         Committing a patch from Ben Maurer.
10122
10123         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10124
10125 2004-05-29  Martin Baulig  <martin@ximian.com>
10126
10127         * class.cs (IMethodData.ShouldIgnore): New method.
10128
10129         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10130         `Location' argument, we don't need it anywhere.  Use
10131         `IMethodData.ShouldIgnore ()' instead of
10132         `MethodData.GetMethodFlags ()'.
10133         (TypeManager.AddMethod): Removed.
10134         (TypeManager.AddMethod2): Renamed to AddMethod.
10135
10136 2004-05-29  Martin Baulig  <martin@ximian.com>
10137
10138         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10139
10140         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10141         converting from a class type S to an interface type and we already
10142         have an object on the stack, don't box it again.  Fixes #52578.
10143
10144 2004-05-29  Martin Baulig  <martin@ximian.com>
10145
10146         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10147         Added support for `params' parameters.  Fixes #59267.
10148
10149 2004-05-29  Martin Baulig  <martin@ximian.com>
10150
10151         * literal.cs (NullPointer): Provide a private .ctor which sets
10152         `type' to TypeManager.object_type.  Fixes #59048.
10153
10154 2004-05-29  Martin Baulig  <martin@ximian.com>
10155
10156         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10157         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10158
10159         * ecore.cs (EventExpr.instance_expr): Make the field private.
10160
10161 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10162
10163         Fixed bug #50080 & cs0214-2.cs
10164         * expression.cs (Cast.DoResolve): Check unsafe context here.
10165         
10166         * statement.cs (Resolve.DoResolve): Likewise.
10167
10168 2004-05-26  Martin Baulig  <martin@ximian.com>
10169
10170         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10171
10172         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10173         (RootContext.LookupType): Pass down the `silent' flag.
10174
10175 2004-05-25  Martin Baulig  <martin@ximian.com>
10176
10177         * expression.cs
10178         (MethodGroupExpr.IdenticalTypeName): New public property.
10179         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10180         expression actually refers to a type.
10181
10182 2004-05-25  Martin Baulig  <martin@ximian.com>
10183
10184         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10185         for #56176 and made it actually work.
10186
10187 2004-05-25  Martin Baulig  <martin@ximian.com>
10188
10189         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10190         (FieldExpr, PropertyExpr): Override and implement
10191         CacheTemporaries.  Fixes #52279.
10192
10193 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10194
10195         * location.cs: In the new compiler listing a file twice is a
10196         warning, not an error.
10197
10198 2004-05-24  Martin Baulig  <martin@ximian.com>
10199
10200         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10201         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10202
10203 2004-05-24  Martin Baulig  <martin@ximian.com>
10204
10205         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10206         walking the `using' list.  Fixes #53921.
10207
10208 2004-05-24  Martin Baulig  <martin@ximian.com>
10209
10210         * const.cs (Const.LookupConstantValue): Added support for
10211         EmptyCast's; fixes #55251.
10212
10213 2004-05-24  Martin Baulig  <martin@ximian.com>
10214
10215         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10216         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10217         which does the CS0135 check.  The reason is that we first need to
10218         check whether the variable actually exists.
10219
10220 2004-05-24  Martin Baulig  <martin@ximian.com>
10221
10222         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10223         than RootContext.LookupType() to find the explicit interface
10224         type.  Fixes #58584.
10225
10226 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10227
10228         * Makefile: Simplify.  Use executable.make.
10229         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10230
10231 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10232
10233         * decl.cs:
10234         * enum.cs:
10235         Use the invariant culture when doing String.Compare for CLS case
10236         sensitivity.
10237         
10238 2004-05-23  Martin Baulig  <martin@ximian.com>
10239
10240         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10241         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10242
10243         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10244
10245 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10246
10247         * class.cs (MemberBase.Define): Reuse MemberType member for 
10248         resolved type. Other methods can use it too.
10249
10250 2004-05-23  Martin Baulig  <martin@ximian.com>
10251
10252         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10253         the variable also exists in the current block (otherwise, we need
10254         to report a CS0103).  Fixes #58670.
10255
10256 2004-05-23  Martin Baulig  <martin@ximian.com>
10257
10258         * flowanalysis.cs (Reachability.Reachable): Compute this
10259         on-the-fly rather than storing it as a field.
10260
10261 2004-05-23  Martin Baulig  <martin@ximian.com>
10262
10263         * flowanalysis.cs (Reachability.And): Manually compute the
10264         resulting `barrier' from the reachability.      
10265        
10266 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10267
10268         Fix bug #57835
10269         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10270         instance of ObsoleteAttribute when symbol is obsolete.
10271
10272         * class.cs
10273         (IMethodData): Extended interface for ObsoleteAttribute support.
10274
10275 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10276
10277         * attribute.cs: Fix bug #55970
10278
10279 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10280
10281         Fix bug #52705
10282         * attribute.cs
10283         (GetObsoleteAttribute): New method. Creates the instance of
10284         ObsoleteAttribute.
10285         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
10286         ObsoleteAttribute when member is obsolete.
10287         (AttributeTester.Report_ObsoleteMessage): Common method for
10288         Obsolete error/warning reporting.
10289
10290         * class.cs
10291         (TypeContainer.base_classs_type): New member for storing parent type.
10292
10293         * decl.cs
10294         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
10295         for this MemberCore.
10296
10297 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10298
10299         * attribute.cs, const.cs: Fix bug #58590
10300
10301 2004-05-21  Martin Baulig  <martin@ximian.com>
10302
10303         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
10304         out parameters if the end of the method is unreachable.  Fixes
10305         #58098. 
10306
10307 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10308
10309         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
10310         Hari was right, why extra method.
10311
10312 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10313
10314         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
10315
10316 2004-05-20  Martin Baulig  <martin@ximian.com>
10317
10318         * delegate.cs: Convert this file to Unix mode - like the original
10319         version in mcs is.
10320
10321 2004-05-20  Martin Baulig  <martin@ximian.com>
10322
10323         * attribute.cs: Convert this file to Unix mode - like the original
10324         version in mcs is.
10325
10326 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
10327
10328        Fix bug #58688 (MCS does not report error when the same attribute
10329        is assigned twice)
10330
10331        * attribute.cs (Attribute.Emit): Distinction between null and default.
10332
10333 2004-05-19  Raja R Harinath  <rharinath@novell.com>
10334
10335        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
10336        of a top-level attribute without an attribute target.
10337        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
10338        Make non-static.
10339        (Attribute.Conditional_GetConditionName), 
10340        (Attribute.Obsolete_GetObsoleteMessage): Update.
10341        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
10342        part of ScanForIndexerName.
10343        (Attribute.CanIgnoreInvalidAttribute): New function.
10344        (Attribute.ScanForIndexerName): Move to ...
10345        (Attributes.ScanForIndexerName): ... here.
10346        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
10347        (Attributes.Search): New internal variant that can choose not to
10348        complain if types aren't resolved.  The original signature now
10349        complains.
10350        (Attributes.GetClsCompliantAttribute): Use internal variant, with
10351        complaints suppressed.
10352        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
10353        only if it not useful.
10354        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
10355        top-level for attributes that are shared between the assembly
10356        and a top-level class.
10357        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
10358        * class.cs: Update to reflect changes.
10359        (DefineIndexers): Fuse loops.
10360        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
10361        a couple more variants of attribute names.
10362
10363 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
10364
10365         Fix bug #52585 (Implemented explicit attribute declaration)
10366
10367         * attribute.cs:
10368         (Attributable.ValidAttributeTargets): New abstract method. It gets
10369         list of valid attribute targets for explicit target declaration.
10370         (Attribute.Target): It holds target itself.
10371         (AttributeSection): Removed.
10372         (Attribute.CheckTargets): New method. It checks whether attribute
10373         target is valid for the current element.
10374
10375         * class.cs:
10376         (EventProperty): New class. For events that are declared like
10377         property (with add and remove accessors).
10378         (EventField): New class. For events that are declared like field.
10379         class.cs
10380
10381         * cs-parser.jay: Implemented explicit attribute target declaration.
10382
10383         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
10384         Override ValidAttributeTargets.
10385
10386         * parameter.cs:
10387         (ReturnParameter): Class for applying custom attributes on 
10388         the return type.
10389         (ParameterAtribute): New class. Class for applying custom
10390         attributes on the parameter type.
10391
10392 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
10393
10394         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
10395         definitions. 
10396
10397         (Method): Allow UNSAFE here.
10398
10399         * modifiers.cs: Support unsafe reporting.
10400
10401 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
10402
10403         * decl.cs: Fix bug #58478.
10404
10405 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10406
10407         * statement.cs: When checking for unreachable code on an EmptyStatement,
10408         set the location. Fixes bug #58488.
10409
10410 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
10411
10412         * driver.cs: Add -pkg handling.
10413
10414         From Gonzalo: UseShelLExecute=false
10415
10416 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
10417
10418         * attribute.cs:
10419         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
10420         for attribute.
10421         (Attribute.IsClsCompliaceRequired): Moved to base for better
10422         accesibility.
10423         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
10424         when attribute is AttributeUsageAttribute.
10425         (Attribute.GetValidTargets): Simplified.
10426         (Attribute.GetAttributeUsage): New method returns AttributeUsage
10427         attribute for this type.
10428         (Attribute.ApplyAttributes): Method renamed to Emit and make
10429         non-static.
10430         (GlobalAttributeSection): New class for special handling of global
10431         attributes (assembly, module).
10432         (AttributeSection.Emit): New method.
10433
10434         * class.cs: Implemented Attributable abstract methods.
10435         (MethodCore.LabelParameters): Moved to Parameter class.
10436         (Accessor): Is back simple class.
10437         (PropertyMethod): Implemented Attributable abstract class.
10438         (DelegateMethod): Implemented Attributable abstract class.
10439         (Event): New constructor for disctintion between normal Event
10440         and Event with accessors.
10441
10442         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
10443
10444         * codegen.cs, const.cs, decl.cs, delegate.cs:
10445         (CommonAssemblyModulClass): Implemented Attributable abstract class
10446         and simplified.
10447
10448         * enum.cs: Implement IAttributeSupport interface.
10449         (EnumMember): New class for emum members. Implemented Attributable
10450         abstract class
10451
10452         * parameter.cs:
10453         (ParameterBase): Is abstract.
10454         (ReturnParameter): New class for easier [return:] attribute handling.
10455
10456         * typemanager.cs: Removed builder_to_attr.
10457
10458 2004-05-11  Raja R Harinath  <rharinath@novell.com>
10459
10460         Fix bug #57151.
10461         * attribute.cs (Attribute.GetPositionalValue): New function.
10462         * class.cs (TypeContainer.VerifyMembers): New function.
10463         (TypeContainer.Emit): Use it.
10464         (ClassOrStruct): New base class for Class and Struct.
10465         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
10466         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
10467         class.
10468         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
10469         then each non-static field should have a FieldOffset attribute.
10470         Otherwise, none of the fields should have a FieldOffset attribute.
10471         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
10472         and FieldOffset attributes.
10473         * typemanager.cs (TypeManager.struct_layout_attribute_type)
10474         (TypeManager.field_offset_attribute_type): New core types.
10475         (TypeManager.InitCoreTypes): Initialize them.
10476
10477 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
10478
10479         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
10480         Return correct type.
10481         From bug #58270.
10482
10483 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
10484
10485         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
10486         be implicitly converted to ulong.
10487         
10488         * expression.cs: The logic for allowing operator &, | and ^ worked
10489         was wrong, it worked before because we did not report an error in
10490         an else branch.  Fixes 57895.
10491
10492         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
10493         allow volatile fields to be reference types.
10494
10495 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
10496
10497         * driver.cs: Add support for /debug-
10498
10499 2004-05-07  Raja R Harinath  <rharinath@novell.com>
10500
10501         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
10502         Add a 'complain' parameter to silence errors.
10503         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
10504         silently overlooked type-resolutions.
10505         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
10506         to reflect changes.
10507         (Attributes.Search): New function.
10508         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
10509         (Attributes.GetAttributeFullName): Remove hack.
10510         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
10511         Update to reflect changes.
10512         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10513         Use Attributes.Search instead of nested loops.
10514
10515 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
10516
10517         * decl.cs:
10518         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
10519         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
10520         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
10521
10522         * report.cs: (Report.Warning): Renamed to Warning_T because of
10523         parameter collision.
10524
10525 2004-05-05  Raja R Harinath  <rharinath@novell.com>
10526
10527         * expression.cs (MemberAccess.ResolveMemberAccess):
10528         Exit with non-zero status after Report.Error.
10529         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
10530         Likewise.
10531         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
10532
10533 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10534
10535         * support.cs: Don't hang when the file is empty.
10536
10537 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10538
10539         * support.cs: In SeekableStreamReader, compute the preamble size of the
10540           underlying stream. Position changes should take into account that initial
10541           count of bytes.
10542
10543 2004-05-03  Todd Berman  <tberman@sevenl.net>
10544
10545         * driver.cs: remove unused GetSysVersion function.
10546
10547 2004-05-03  Todd Berman  <tberman@sevenl.net>
10548
10549         * driver.cs: Remove the hack from saturday, as well as the hack
10550         from jackson (LoadAssemblyFromGac), also adds the CWD to the
10551         link_paths to get that bit proper.
10552
10553 2004-05-01  Todd Berman  <tberman@sevenl.net>
10554
10555         * driver.cs: Try a LoadFrom before a Load, this checks the current
10556         path. This is currently a bug in mono that is be fixed, however, this
10557         provides a workaround for now. This will be removed when the bug
10558         is fixed.
10559
10560 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
10561
10562         * CryptoConvert.cs: Updated to latest version. Fix issue with 
10563         incomplete key pairs (#57941).
10564
10565 2004-05-01  Todd Berman  <tberman@sevenl.net>
10566
10567         * driver.cs: Remove '.' from path_chars, now System.* loads properly
10568         from the GAC
10569
10570 2004-04-30  Jackson Harper  <jackson@ximian.com>
10571
10572         * codegen.cs: Open keys readonly.
10573         
10574 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10575
10576         * typemanager.cs: don't report cyclic struct layout when a struct
10577         contains 2 or more fields of the same type. Failed for Pango.AttrShape
10578         which has 2 Pango.Rectangle fields.
10579
10580 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
10581
10582         * expression.cs: Handle IntPtr comparisons with IL code
10583         rather than a method call.
10584
10585 2004-04-29  Martin Baulig  <martin@ximian.com>
10586
10587         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
10588         the list of PropertyInfo's in class hierarchy and find the
10589         accessor.  Fixes #56013.
10590
10591 2004-04-29  Martin Baulig  <martin@ximian.com>
10592
10593         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
10594
10595 2004-04-29  Martin Baulig  <martin@ximian.com>
10596
10597         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
10598
10599         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
10600
10601 2004-04-29  Martin Baulig  <martin@ximian.com>
10602
10603         * class.cs (ConstructorInitializer.Resolve): Check whether the
10604         parent .ctor is accessible.  Fixes #52146.
10605
10606 2004-04-29  Martin Baulig  <martin@ximian.com>
10607
10608         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
10609
10610         * statement.cs (Using.EmitLocalVariableDecls): Use
10611         TypeManager.idisposable_type, not typeof (IDisposable).
10612         (Foreach.EmitCollectionForeach): Added support for valuetypes.
10613
10614 2004-04-29  Martin Baulig  <martin@ximian.com>
10615
10616         * class.cs (Event.Define): Don't emit the field and don't set
10617         RTSpecialName and SpecialName for events on interfaces.  Fixes
10618         #57703. 
10619
10620 2004-04-29  Raja R Harinath  <rharinath@novell.com>
10621
10622         Refactor Attribute.ApplyAttributes.
10623         * attribute.cs (Attributable): New base class for objects that can
10624         have Attributes applied on them.
10625         (Attribute): Make AttributeUsage fields public.
10626         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
10627         (Attribute.IsInternalCall): New property.
10628         (Attribute.UsageAttr): Convert to a public read-only property.
10629         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
10630         (Attribute.ResolveType, Attribute.Resolve)
10631         (Attribute.ScanForIndexerName): Update to reflect changes.
10632         (Attribute.CheckAttributeTarget): Re-format.
10633         (Attribute.ApplyAttributes): Refactor, to various
10634         Attributable.ApplyAttributeBuilder methods.
10635         * decl.cs (MemberCore): Make Attributable.
10636         * class.cs (Accessor): Make Attributable.
10637         (MethodData.ApplyAttributes): Use proper attribute types, not
10638         attribute names.
10639         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
10640         (TypeContainer.ApplyAttributeBuilder)
10641         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
10642         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
10643         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
10644         (Operator.ApplyAttributeBuilder): New factored-out methods.
10645         * const.cs (Const.ApplyAttributeBuilder): Likewise.
10646         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
10647         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
10648         * parameter.cs (ParameterBase): New Attributable base class
10649         that can also represent Return types.
10650         (Parameter): Update to the changes.
10651
10652 2004-04-29  Jackson Harper  <jackson@ximian.com>
10653
10654         * driver.cs: Prefer the corlib system version when looking for
10655         assemblies in the GAC. This is still a hack, but its a better hack
10656         now.
10657         
10658 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
10659
10660         * decl.cs, enum.cs: Improved error 3005 reporting.
10661   
10662         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
10663         (related_symbols): New private member for list of symbols
10664         related to reported error/warning.
10665         
10666         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
10667
10668 2004-04-29  Martin Baulig  <martin@ximian.com>
10669
10670         * ecore.cs (Expression.Constantify): If we're an enum and
10671         TypeManager.TypeToCoreType() doesn't give us another type, use
10672         t.UnderlyingSystemType.  Fixes #56178.  
10673
10674 2004-04-29  Martin Baulig  <martin@ximian.com>
10675
10676         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
10677         interfaces and for each interface, only add members directly
10678         declared in that interface.  Fixes #53255.
10679
10680 2004-04-28  Martin Baulig  <martin@ximian.com>
10681
10682         * expression.cs (ConditionalLogicalOperator): Use a temporary
10683         variable for `left' to avoid that we evaluate it more than once;
10684         bug #52588.
10685
10686 2004-04-28  Martin Baulig  <martin@ximian.com>
10687
10688         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
10689         `void[]' (CS1547).
10690
10691 2004-04-28  Martin Baulig  <martin@ximian.com>
10692
10693         * statement.cs (LocalInfo.Resolve): Check whether the type is not
10694         void (CS1547).
10695
10696         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
10697         whether the type is not void (CS1547).
10698
10699 2004-04-28  Martin Baulig  <martin@ximian.com>
10700
10701         * expression.cs (Unary.DoResolveLValue): Override this and report
10702         CS0131 for anything but Operator.Indirection.
10703
10704 2004-04-28  Martin Baulig  <martin@ximian.com>
10705
10706         Committing a patch from Ben Maurer; see bug #50820.
10707
10708         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
10709         check for classes.
10710
10711         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
10712         classes.        
10713
10714 2004-04-28  Martin Baulig  <martin@ximian.com>
10715
10716         Committing a patch from Ben Maurer; see bug #50820.
10717
10718         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
10719         check for classes.
10720
10721         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
10722         classes.        
10723
10724 2004-04-28  Martin Baulig  <martin@ximian.com>
10725
10726         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
10727         (Block.AddLabel): Call DoLookupLabel() to only search in the
10728         current block.
10729
10730 2004-04-28  Martin Baulig  <martin@ximian.com>
10731
10732         * cfold.cs (ConstantFold.BinaryFold): Added special support for
10733         comparing StringConstants and NullLiterals in Equality and Inequality.
10734
10735 2004-04-28  Jackson Harper  <jackson@ximian.com>
10736
10737         * driver.cs: Attempt to load referenced assemblies from the
10738         GAC. This is the quick and dirty version of this method that
10739         doesnt take into account versions and just takes the first
10740         canidate found. Will be good enough for now as we will not have more
10741         then one version installed into the GAC until I update this method.
10742
10743 2004-04-28  Martin Baulig  <martin@ximian.com>
10744
10745         * typemanager.cs (TypeManager.CheckStructCycles): New public
10746         static method to check for cycles in the struct layout.
10747
10748         * rootcontext.cs (RootContext.PopulateTypes): Call
10749         TypeManager.CheckStructCycles() for each TypeContainer.
10750         [Note: We only need to visit each type once.]
10751
10752 2004-04-28  Martin Baulig  <martin@ximian.com>
10753
10754         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
10755
10756         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
10757         success and added `out object value'.  Use a `bool resolved' field
10758         to check whether we've already been called rather than
10759         `ConstantValue != null' since this breaks for NullLiterals.
10760
10761 2004-04-28  Raja R Harinath  <rharinath@novell.com>
10762
10763         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
10764         setting of this flag, since the 'set' method may be non-public.
10765
10766 2004-04-28  Raja R Harinath  <rharinath@novell.com>
10767
10768         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
10769         check on current_vector.Block.
10770
10771 2004-04-27  Martin Baulig  <martin@ximian.com>
10772
10773         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
10774         a field initializer.  Fixes #56459.
10775
10776 2004-04-27  Martin Baulig  <martin@ximian.com>
10777
10778         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
10779         we're not attempting to use an indexer.  Fixes #52154.
10780
10781 2004-04-27  Martin Baulig  <martin@ximian.com>
10782
10783         * statement.cs (Return): Don't create a return label if we don't
10784         need it; reverts my change from January 20th.  Thanks to Ben
10785         Maurer for this.
10786
10787 2004-04-27  Martin Baulig  <martin@ximian.com>
10788
10789         According to the spec, `goto' can only leave a nested scope, but
10790         never enter it.
10791
10792         * statement.cs (Block.LookupLabel): Only lookup in the current
10793         block, don't recurse into parent or child blocks.
10794         (Block.AddLabel): Check in parent and child blocks, report
10795         CS0140/CS0158 if we find a duplicate.
10796         (Block): Removed this indexer for label lookups.
10797         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
10798         this already does the error reporting for us.
10799
10800         * flowanalysis.cs
10801         (FlowBranching.UsageVector.Block): New public variable; may be null.
10802         (FlowBranching.CreateSibling): Added `Block' argument.
10803         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
10804         label for the target of a `goto' and check whether we're not
10805         leaving a `finally'.
10806
10807 2004-04-27  Martin Baulig  <martin@ximian.com>
10808
10809         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
10810         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
10811         just for returns).
10812
10813 2004-04-27  Martin Baulig  <martin@ximian.com>
10814
10815         * statement.cs (Block.AddLabel): Also check for implicit blocks
10816         and added a CS0158 check.
10817
10818 2004-04-27  Martin Baulig  <martin@ximian.com>
10819
10820         * flowanalysis.cs (FlowBranchingLoop): New class.
10821         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
10822         UsageVector's instead of an ArrayList.
10823         (FlowBranching.Label): Likewise.
10824         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
10825         (FlowBranching.AddBreakVector): New method.
10826
10827 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
10828
10829         * attribute.cs: Small regression fix: only convert the type if we
10830         the type is different, fixes System.Drawing build.
10831
10832 2004-04-27  Martin Baulig  <martin@ximian.com>
10833
10834         * attribute.cs (Attribute.Resolve): If we have a constant value
10835         for a named field or property, implicity convert it to the correct
10836         type.
10837
10838 2004-04-27  Raja R Harinath  <rharinath@novell.com>
10839
10840         * statement.cs (Block.Block): Implicit blocks share
10841         'child_variable_names' fields with parent blocks.
10842         (Block.AddChildVariableNames): Remove.
10843         (Block.AddVariable): Mark variable as "used by a child block" in
10844         every surrounding block.
10845         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
10846         been used in a child block, complain about violation of "Invariant
10847         meaning in blocks" rule.
10848         * cs-parser.jay (declare_local_variables): Don't use
10849         AddChildVariableNames.
10850         (foreach_statement): Don't create an implicit block: 'foreach'
10851         introduces a scope.
10852
10853 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
10854
10855         * convert.cs (ImplicitNumericConversion): 0 is also positive when
10856         converting from 0L to ulong.  Fixes 57522.
10857
10858 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
10859
10860         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
10861         derived class hides via 'new' keyword field from base class (test-242.cs).
10862         TODO: Handle this in the more general way.
10863         
10864         * class.cs (CheckBase): Ditto.
10865
10866 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
10867
10868         * decl.cs (caching_flags): New member for storing cached values
10869         as bit flags.
10870         (MemberCore.Flags): New enum where bit flags for caching_flags
10871         are defined.
10872         (MemberCore.cls_compliance): Moved to caching_flags.
10873         (DeclSpace.Created): Moved to caching_flags.
10874
10875         * class.cs: Use caching_flags instead of DeclSpace.Created
10876         
10877 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
10878
10879         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
10880         if we are only a derived class, not a nested class.
10881
10882         * typemanager.cs: Same as above, but do this at the MemberLookup
10883         level (used by field and methods, properties are handled in
10884         PropertyExpr).   Allow for the qualified access if we are a nested
10885         method. 
10886
10887 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
10888
10889         * class.cs: Refactoring.
10890         (IMethodData): New inteface; Holds links to parent members
10891         to avoid member duplication (reduced memory allocation).
10892         (Method): Implemented IMethodData interface.
10893         (PropertyBase): New inner classes for get/set methods.
10894         (PropertyBase.PropertyMethod): Implemented IMethodData interface
10895         (Event): New inner classes for add/remove methods.
10896         (Event.DelegateMethod): Implemented IMethodData interface.
10897
10898         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
10899         EmitContext (related to class.cs refactoring).
10900
10901 2004-04-21  Raja R Harinath  <rharinath@novell.com>
10902
10903         * delegate.cs (Delegate.VerifyApplicability): If the number of
10904         arguments are the same as the number of parameters, first try to
10905         verify applicability ignoring  any 'params' modifier on the last
10906         parameter.
10907         Fixes #56442.
10908
10909 2004-04-08  Martin Baulig  <martin@ximian.com>
10910
10911         Merged latest changes into gmcs.  Please keep this comment in
10912         here, it makes it easier for me to see what changed in MCS since
10913         the last time I merged.
10914
10915 2004-04-16  Raja R Harinath  <rharinath@novell.com>
10916
10917         * class.cs (TypeContainer.AddIndexer): Use
10918         'ExplicitInterfaceName' to determine if interface name was
10919         explicitly specified.  'InterfaceType' is not initialized at this time.
10920         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
10921         Indexers array is already in the required order.  Initialize
10922         'IndexerName' only if there are normal indexers.
10923         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
10924         (TypeContainer.Emit): Emit DefaultMember attribute only if
10925         IndexerName is initialized.
10926         Fixes #56300.
10927
10928 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
10929
10930         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
10931         Fixes #57007
10932
10933 2004-04-15  Raja R Harinath  <rharinath@novell.com>
10934
10935         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
10936         attributes.
10937         Fix for #56456.
10938
10939         * attribute.cs (Attribute.Resolve): Check for duplicate named
10940         attributes.
10941         Fix for #56463.
10942
10943 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
10944
10945         * iterators.cs (MarkYield): track whether we are in an exception,
10946         and generate code accordingly.  Use a temporary value to store the
10947         result for our state.
10948
10949         I had ignored a bit the interaction of try/catch with iterators
10950         since their behavior was not entirely obvious, but now it is
10951         possible to verify that our behavior is the same as MS .NET 2.0
10952
10953         Fixes 54814
10954
10955 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
10956
10957         * iterators.cs: Avoid creating temporaries if there is no work to
10958         do. 
10959
10960         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
10961         Enumerations, use TypeManager.EnumToUnderlying and call
10962         recursively. 
10963
10964         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
10965         bug #57013
10966
10967         (This.Emit): Use EmitContext.EmitThis to emit our
10968         instance variable.
10969
10970         (This.EmitAssign): Ditto.
10971
10972         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
10973         codepaths, we will move all the functionality into
10974         Mono.CSharp.This 
10975
10976         (FieldExpr.EmitAssign): Ditto.
10977
10978         This fixes several hidden bugs that I uncovered while doing a code
10979         review of this today.
10980
10981         * codegen.cs (EmitThis): reworked so the semantics are more clear
10982         and also support value types "this" instances.
10983
10984         * iterators.cs: Changed so that for iterators in value types, we
10985         do not pass the value type as a parameter.  
10986
10987         Initialization of the enumerator helpers is now done in the caller
10988         instead of passing the parameters to the constructors and having
10989         the constructor set the fields.
10990
10991         The fields have now `assembly' visibility instead of private.
10992
10993 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
10994
10995         * expression.cs (Argument.Resolve): Check if fields passed as ref
10996         or out are contained in a MarshalByRefObject.
10997
10998         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
10999         another compiler type.
11000
11001 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11002
11003         * class.cs (Indexer.Define): use the new name checking method.
11004         Also, return false on an error.
11005         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11006         (is_identifier_[start/part]_character): make static.
11007
11008 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11009
11010         * expression.cs (Binary.ResolveOperator): Do no append strings
11011         twice: since we can be invoked more than once (array evaluation)
11012         on the same concatenation, take care of this here.  Based on a fix
11013         from Ben (bug #56454)
11014
11015 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11016
11017         * codegen.cs: Fix another case where CS1548 must be reported (when 
11018         delay-sign isn't specified and no private is available #56564). Fix
11019         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11020         error when MCS is used on the MS runtime and we need to delay-sign 
11021         (which seems unsupported by AssemblyBuilder - see #56621).
11022
11023 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11024
11025         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11026         (TypeManager.ComputeNamespaces): Faster implementation for
11027         Microsoft runtime.
11028
11029         * compiler.csproj: Updated AssemblyName to mcs.
11030
11031 2004-05-11  Jackson Harper  <jackson@ximian.com>
11032
11033         * Makefile: Preserve MONO_PATH
11034         
11035 2004-05-11  Jackson Harper  <jackson@ximian.com>
11036
11037         * Makefile: Use mono and mcs to build gmcs
11038         
11039 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11040
11041         * codegen.cs: Add patch from Robert Shade
11042         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11043         sync with mcs.
11044
11045 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11046
11047         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11048         incomplete key pairs (#57941).
11049
11050 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11051
11052         * codegen.cs: Fix another case where CS1548 must be reported (when 
11053         delay-sign isn't specified and no private is available #56564). Fix
11054         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11055         error when MCS is used on the MS runtime and we need to delay-sign 
11056         (which seems unsupported by AssemblyBuilder - see #56621).
11057
11058 2004-04-29  Jackson Harper  <jackson@ximian.com>
11059
11060         * Makefile: Set MONO_PATH to use the bootstrap corlib
11061         * driver.cs: Check the GAC for referenced assemblies.
11062                 
11063 2004-04-29  Martin Baulig  <martin@ximian.com>
11064
11065         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11066
11067 2004-04-07  Martin Baulig  <martin@ximian.com>
11068
11069         * expression.cs (Binary.ResolveOperator): Added special case for
11070         Equality/Inequality between a type parameter and a null literal.
11071
11072 2004-04-07  Martin Baulig  <martin@ximian.com>
11073
11074         * convert.cs: Check null literal -> type parameter conversions.
11075
11076 2004-04-07  Martin Baulig  <martin@ximian.com>
11077
11078         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11079         `class' and `struct' constraints.
11080
11081 2004-04-07  Martin Baulig  <martin@ximian.com>
11082
11083         * generic.cs (SpecialConstraint): New public enum.
11084         (Constraints.Resolve): Added support for the `class' and `struct'
11085         constraints.
11086
11087         * cs-parser.jay (type_parameter_constraint): Added support for the
11088         `class' and `struct' constraints.
11089
11090 2004-04-07  Martin Baulig  <martin@ximian.com>
11091
11092         * support.cs (GenericConstraints): Replaced `Types' by
11093         `ClassConstraint' and `InterfaceConstraints'; added
11094         `HasClassConstraint'.   
11095
11096 2004-04-07  Martin Baulig  <martin@ximian.com>
11097
11098         * generic.cs
11099         (Constraints.InterfaceConstraints): New public property.
11100         (Constraints.Types): Make this property public
11101         (TypeParameter): Implement IMemberContainer.
11102         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11103         instead of a TypeBuilder/MethodBuilder; pass the interface
11104         constraints to TypeManager.AddTypeParameter().
11105         (TypeParameter.DefineType): Just take an EmitContext and no
11106         TypeBuilder/MethodBuilder.  Use the new public API.
11107
11108         * typemanager.cs (TypeManager.AddTypeParameter): Added
11109         `TypeExpr[]' argument; add the interfaces to the
11110         `builder_to_ifaces' hash.
11111         (TypeManager.LookupMemberContainer): For
11112         GenericTypeParameterBuilders, get the TypeParameter from the
11113         `builder_to_type_param'.
11114         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11115         the TypeParameter and call FindMembers on it.
11116
11117 2004-04-07  Martin Baulig  <martin@ximian.com>
11118
11119         * class.cs
11120         (MethodCore.GenericMethod): Moved this field here from Method.
11121         (MethodCore.IsDuplicateImplementation): Take the number of type
11122         parameters into account if we're a generic method.
11123
11124         * expression.cs (Invocation.InferTypeArguments): Don't return true
11125         if `arguments' is null; we still need to check whether we actually
11126         don't need to infer anything in this case.
11127         (MemberAccess): Merged the functionality from GenericMemberAccess
11128         into this class.
11129
11130         * generic.cs (GenericMemberAccess): Removed.
11131
11132 2004-04-05  Martin Baulig  <martin@ximian.com>
11133
11134         * decl.cs (MemberCore): For generic classes, interfaces and
11135         structs, `Name' now includes the number of type parameters
11136         ("Stack!1.Node!1").
11137         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11138         encode the number of type arguments in the type name.
11139
11140         * expression.cs (Expression.MemberLookup): Removed the
11141         `num_type_args' argument; we now encode the number of type
11142         arguments in the type name.
11143
11144         * ecore.cs (SimpleName): Encode the number of type arguments in
11145         the type name itself.
11146
11147         * generic.cs (ConstructedType): Likewise.
11148
11149         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11150         `MemberName'; we now include the number of type parameters in the
11151         type name.
11152
11153         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11154         (TypeManager.MemberLookup): Removed the
11155         `num_type_args' argument; we now encode the number of type
11156         arguments in the type name.     
11157
11158 2004-04-03  Martin Baulig  <martin@ximian.com>
11159
11160         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11161         (MemberCore.MemberName): Moved here from MemberBase.
11162         (DeclSpace.SetParameterInfo): Just take the constraints as an
11163         ArrayList; we already have the type parameters in our
11164         `MemberName'; also do the CS0080 reporting here.
11165
11166         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11167         `IDENTIFIER opt_type_parameter_list'; when constructing our
11168         `MemberName', it'll already include our type parameters.
11169         (class_declaration, interface_declaration): Likewise.
11170         (delegate_declaration): Likewise.
11171         (MakeName): Take a MemberName and return a MemberName.
11172         The following two changes are required to avoid shift/reduce conflicts:
11173         (member_name): Don't include a TypeName anymore; ie. this is now
11174         just 'IDENTIFIER opt_type_parameter_list'.
11175         (property_declaration, event_declaration): Use a
11176         `namespace_or_type_name' instead of a `member_name'.            
11177
11178 2004-04-03  Martin Baulig  <martin@ximian.com>
11179
11180         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11181         `MemberName' class.
11182         (TypeName): Formerly known as MemberName.
11183
11184         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11185         instead of a `MemberName'.
11186
11187         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11188         (member_name): New rule; create a MemberName.
11189
11190 2004-04-02  Martin Baulig  <martin@ximian.com>
11191
11192         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11193         (CS0305 and CS0308).
11194
11195 2004-04-02  Martin Baulig  <martin@ximian.com>
11196
11197         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11198         support for nested types.
11199
11200 2004-04-02  Martin Baulig  <martin@ximian.com>
11201
11202         * ecore.cs (IAlias): New public interface.
11203         (TypeExpr, TypeExpression): Implement IAlias.
11204         (TypeAliasExpression): New public class.
11205
11206         * namespace.cs (Namespace): Implement IAlias.
11207         (Namespace.Lookup): Return an IAlias instead on an object.
11208         (Namespace.DefineName): Take an IAlias instead of an object.
11209         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11210         an object.
11211         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11212         Expression.
11213         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11214         object.
11215         (NamespaceEntry.Lookup): Likewise.
11216
11217         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11218         instead of a Type.      
11219
11220         * decl.cs (DeclSpace): Implement IAlias.
11221         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11222
11223         * generic.cs (ConstructedType): Improved error checking.
11224
11225 2004-04-02  Martin Baulig  <martin@ximian.com>
11226
11227         * convert.cs: Added type parameter conversions.
11228
11229         * ecore.cs
11230         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11231         (ClassCast.Emit): If the source type is a type parameter, box it.
11232         If the target type is a type parameter, emit an `unbox.any'
11233         instead of a `classcast'.1      
11234
11235 2004-04-01  Martin Baulig  <martin@ximian.com>
11236
11237         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11238
11239 2004-04-01  Martin Baulig  <martin@ximian.com>
11240
11241         * generic.cs (ConstructedType.CheckConstraints): Use
11242         Convert.ImplicitStandardConversionExists(); user-defined implicit
11243         conversions are not allowed according to the spec.
11244
11245 2004-03-30  Martin Baulig  <martin@ximian.com>
11246
11247         * expression.cs (New): Added support for type parameters.
11248
11249         * typemanager.cs
11250         (TypeManager.activator_type): New public static field.
11251         (TypeManager.activator_create_instance): Likewise.
11252
11253 2004-03-30  Martin Baulig  <martin@ximian.com>
11254
11255         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11256         public method.
11257
11258 2004-03-30  Martin Baulig  <martin@ximian.com>
11259
11260         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11261         the spec here: the argument type must be convertible to the
11262         constraints.
11263
11264 2004-03-30  Martin Baulig  <martin@ximian.com>
11265
11266         * generic.cs
11267         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11268         TypeManager.AddTypeParameter().
11269         (ConstructedType.CheckConstraints): Re-enable this and actually
11270         check whether we have a constructor constraint.
11271
11272         * typemanager.cs
11273         (TypeManager.builder_to_type_param): New static field.
11274         (TypeManager.AddTypeParameter): New static method.
11275         (TypeManager.LookupTypeParameter): New public method.
11276
11277 2004-03-30  Martin Baulig  <martin@ximian.com>
11278
11279         * generic.cs (TypeParameter.DefineType): Return a boolean and use
11280         the new API to actually define the constructor constraint.
11281
11282         * typemanager.cs
11283         (TypeManager.new_constraint_attr_type): New static field.
11284         (TypeManager.InitCoreTypes): Initialize it.
11285
11286 2004-03-30  Martin Baulig  <martin@ximian.com>
11287
11288         * generic.cs (Constraints): Completed error checking, use correct
11289         error numbers.
11290
11291 2004-03-29  Martin Baulig  <martin@ximian.com>
11292
11293         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
11294
11295         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11296         public version which takes a `ParameterData pd' instead of an
11297         `ArrayList args'.
11298
11299 2004-03-29  Martin Baulig  <martin@ximian.com>
11300
11301         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
11302         not a MethodInfo.       
11303
11304 2004-03-29  Martin Baulig  <martin@ximian.com>
11305
11306         * expression.cs (Argument.ResolveMethodGroup): If we're a
11307         ConstructedType, call GetMemberAccess() on it.  
11308
11309 2004-03-29  Martin Baulig  <martin@ximian.com>
11310
11311         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
11312         (MethodCore.CheckGenericOverride): When overriding a generic
11313         method, check whether the constraints match.
11314
11315         * support.cs (GenericConstraints): New public interface.
11316         (ParameterData.GenericConstraints): New public method.
11317
11318         * parameter.cs (Parameter.Resolve): Check whether we're a generic
11319         method parameter and compute our constraints if appropriate.
11320         (Parameter.GenericConstraints): New public property.
11321
11322         * generic.cs (Constraints): Implement GenericConstraints.
11323
11324 2004-03-29  Martin Baulig  <martin@ximian.com>
11325
11326         * decl.cs (MemberCache.FindMemberToOverride): Use
11327         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
11328
11329 2004-03-29  Martin Baulig  <martin@ximian.com>
11330
11331         * generic.cs (GenericMethod.Define): Resolve our type parameters.
11332
11333 2004-03-29  Martin Baulig  <martin@ximian.com>
11334
11335         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
11336         not allowed on non-generic declarations").
11337
11338 2004-03-29  Martin Baulig  <martin@ximian.com>
11339
11340         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11341         public version of this method.
11342
11343         * class.cs (MethodCore.IsDuplicateImplementation): Use
11344         Invocation.InferTypeArguments() to check this.
11345
11346 2004-03-29  Martin Baulig  <martin@ximian.com>
11347
11348         * convert.cs: Use TypeManager.IsDelegateType() instead of
11349         comparing types correctly.
11350
11351 2004-03-29  Martin Baulig  <martin@ximian.com>
11352
11353         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
11354         types directly to make it work for generic instances.
11355
11356         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
11357
11358 2004-03-29  Martin Baulig  <martin@ximian.com>
11359
11360         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
11361         support for arrays.     
11362
11363 2004-03-24  Martin Baulig  <martin@ximian.com>
11364
11365         * decl.cs (DeclSpace.FindType): Also use
11366         TypeManager.CheckGeneric() for types from the using clauses.
11367
11368 2004-03-23  Martin Baulig  <martin@ximian.com>
11369
11370         * expression.cs (Invocation.OverloadResolve): Added `bool
11371         may_fail' argument and use it instead of the Location.IsNull() hack.
11372
11373 2004-03-23  Martin Baulig  <martin@ximian.com>
11374
11375         * expression.cs (Invocation.InferType): Use correct type inference
11376         rules here.     
11377
11378 2004-03-23  Martin Baulig  <martin@ximian.com>
11379
11380         * ecore.cs (MethodGroupExpr.Name): Use
11381         TypeManager.CSharpSignature() instead of just the name.
11382
11383         * expression.cs (Invocation.OverloadResolve): Provide better error
11384         reporting.
11385         (Invocation.DoResolve): OverloadResolve() never returns null
11386         without reporting an error, so removed the error -6 reporting here.
11387
11388 2004-03-23  Martin Baulig  <martin@ximian.com>
11389
11390         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
11391         generic methods.
11392
11393         * cs-parser.jay (delegate_declaration): Support generic delegates.
11394
11395         * delegate.cs: Support generic delegates.
11396
11397 2004-03-22  Martin Baulig  <martin@ximian.com>
11398
11399         * expression.cs (Invocation.InferParamsTypeArguments): New static
11400         method; does type inference for params arguments.
11401
11402 2004-03-21  Martin Baulig  <martin@ximian.com>
11403
11404         * typemanager.cs (TypeManager.IsGenericMethod): New public static
11405         method; checks whether a method is a generic method.    
11406
11407         * expression.cs (Invocation.InferTypeArguments): New static method;
11408         infer type arguments for generic method invocation.
11409
11410         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
11411         property; we set this to true if we're resolving a generic method
11412         invocation and the user specified type arguments, ie. we're not
11413         doing type inference.
11414
11415 2004-03-20  Martin Baulig  <martin@ximian.com>
11416
11417         * class.cs (MethodData.DeclaringType): New public property.
11418         (MethodData.Define): Set DeclaringType here.
11419         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
11420         instead of OperatorMethodBuilder.DeclaringType.
11421
11422 2004-03-20  Martin Baulig  <martin@ximian.com>
11423
11424         * cs-tokenizer.cs (xtoken): Return a special
11425         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
11426
11427         * cs-parser.jay (default_value_expression): Switch to the new
11428         syntax (14.5.13).
11429
11430 2004-03-19  Martin Baulig  <martin@ximian.com>
11431
11432         * decl.cs (MemberName): New class.  We use this to "construct"
11433         namespace_or_type_name's.
11434
11435         * generics.cs (TypeArguments.GetDeclarations): New public method;
11436         returns the type arguments as a string[] and reports a CS0081 if
11437         one of them is not an identifier.
11438
11439         * class.cs (MemberBase): The .ctor now takes the name as a
11440         MemberName instead of a string.
11441         (MemberBase.ExplicitInterfaceName): Changed type from string to
11442         Expression.
11443         (MemberBase.DoDefine): If we're an explicit implementation, the
11444         InterfaceType may be a generic instance.
11445
11446         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
11447         (namespace_name): Call MemberName.GetName () to transform the
11448         MemberName into a string and ensure we don't have any type
11449         arguments.
11450         (type_name): Call MemberName.GetTypeExpression() to transfrom the
11451         MemberName into an expression.
11452         (method_header): Use namespace_or_type_name instead of member_name.     
11453
11454 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
11455
11456         * rootcontext.cs: Add new types to the boot resolution.
11457
11458         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
11459         MulticastDelegate is not allowed.
11460
11461         * typemanager.cs: Add new types to lookup: System.TypedReference
11462         and ArgIterator.
11463
11464         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
11465         check for TypedReference or ArgIterator, they are not allowed. 
11466
11467         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
11468         makes us properly catch 1510 in some conditions (see bug 56016 for
11469         details). 
11470
11471 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
11472
11473         * CryptoConvert.cs: update from corlib version
11474         with endian fixes.
11475
11476 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
11477
11478         * class.cs (Indexer.Define): Check indexername declaration
11479
11480 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
11481
11482         * attribute.cs (IsClsCompliant): Fixed problem with handling
11483         all three states (compliant, not-compliant, undetected).
11484
11485 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
11486
11487         * attribute.cs (Attribute): Location is now public.
11488         (Resolve): Store resolved arguments (pos_values) in attribute class.
11489         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
11490         (GetClsCompliantAttributeValue): New method that gets
11491         CLSCompliantAttribute value.
11492         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
11493         if exists else null.
11494         (AttributeTester): New class for CLS-Compliant verification routines.
11495
11496         * class.cs (Emit): Add CLS-Compliant verification.
11497         (Method.GetSignatureForError): Implemented.
11498         (Constructor.GetSignatureForError): Implemented
11499         (Constructor.HasCompliantArgs): Returns if constructor has
11500         CLS-Compliant arguments.
11501         (Constructor.Emit): Override.
11502         (Construcor.IsIdentifierClsCompliant): New method; For constructors
11503         is needed to test only parameters.
11504         (FieldBase.GetSignatureForError): Implemented.
11505         (TypeContainer): New member for storing base interfaces.
11506         (TypeContainer.FindMembers): Search in base interfaces too.
11507
11508         * codegen.cs (GetClsComplianceAttribute): New method that gets
11509         assembly or module CLSCompliantAttribute value.
11510         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
11511         for assembly.
11512         (ModuleClass.Emit): Add error 3012 test.
11513
11514         * const.cs (Emit): Override and call base for CLS-Compliant tests.
11515
11516         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
11517         state for all decl types.
11518         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
11519         if CLS-Compliant tests are required.
11520         (IsClsCompliaceRequired): New method. Analyze whether code
11521         must be CLS-Compliant.
11522         (IsExposedFromAssembly): New method. Returns true when MemberCore
11523         is exposed from assembly.
11524         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
11525         value or gets cached value.
11526         (HasClsCompliantAttribute): New method. Returns true if MemberCore
11527         is explicitly marked with CLSCompliantAttribute.
11528         (IsIdentifierClsCompliant): New abstract method. This method is
11529         used to testing error 3005.
11530         (IsIdentifierAndParamClsCompliant): New method. Common helper method
11531         for identifier and parameters CLS-Compliant testing.
11532         (VerifyClsCompliance): New method. The main virtual method for
11533         CLS-Compliant verifications.
11534         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
11535         null. I don't know why is null (too many public members !).
11536         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
11537         and get value of first CLSCompliantAttribute that found.
11538
11539         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
11540         (VerifyClsCompliance): Override and add extra tests.
11541
11542         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
11543         clscheck- disable CLS-Compliant verification event if assembly is has
11544         CLSCompliantAttribute(true).
11545
11546         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
11547         ApllyAttribute is now called in emit section as in the other cases.
11548         Possible future Emit integration.
11549         (IsIdentifierClsCompliant): New override.
11550         (VerifyClsCompliance): New override.
11551         (GetEnumeratorName): Returns full enum name.
11552
11553         * parameter.cs (GetSignatureForError): Implemented.
11554
11555         * report.cs (WarningData): New struct for Warning message information.
11556         (LocationOfPreviousError): New method.
11557         (Warning): New method. Reports warning based on the warning table.
11558         (Error_T): New method. Reports error based on the error table.
11559
11560         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
11561         verifications are done here.
11562
11563         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
11564
11565         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
11566         CLSCompliantAttribute.
11567         (all_imported_types): New member holds all imported types from other
11568         assemblies.
11569         (LoadAllImportedTypes): New method fills static table with exported types
11570         from all referenced assemblies.
11571         (Modules): New property returns all assembly modules.
11572
11573 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
11574
11575         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
11576         throwing a parser error.
11577
11578         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
11579         which removes the hardcoded get_/set_ prefixes for properties, as
11580         IL allows for the properties to be named something else.  
11581
11582         Bug #56013
11583
11584         * expression.cs: Do not override operand before we know if it is
11585         non-null.  Fix 56207
11586
11587 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11588
11589         * typemanager.cs: support for pinned variables.
11590
11591 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11592
11593         * decl.cs, typemanager.cs: Avoid using an arraylist
11594         as a buffer if there is only one result set.
11595
11596 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11597
11598         * expression.cs: Make sure you cant call a static method
11599         with an instance expression, bug #56174.
11600
11601 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
11602
11603         * class.cs (IsDuplicateImplementation): Improve error reporting to
11604         flag 663 (method only differs in parameter modifier).
11605
11606         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
11607         in preprocessor directives.
11608
11609         * location.cs (LookupFile): Allow for the empty path.
11610
11611         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
11612         better approach for some of that patch, but its failing with the
11613         CharSet enumeration.  For now try/catch will do.
11614
11615         * typemanager.cs: Do not crash if a struct does not have fields.
11616         Fixes 56150.
11617
11618 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
11619
11620         * expression.cs: cs0213, cant fix a fixed expression.
11621         fixes 50231.
11622
11623 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
11624
11625         * cs-parser.jay: detect invalid embeded statements gracefully.
11626         bug #51113.
11627
11628 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
11629
11630         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
11631         As a regex:
11632         s/
11633         the invocation type may not be a subclass of the tye of the item/
11634         The type of the item must be a subclass of the invocation item.
11635         /g
11636
11637         Fixes bug #50820.
11638
11639 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
11640
11641         * attribute.cs: Added methods to get a string and a bool from an
11642         attribute. Required to information from AssemblyKeyFileAttribute,
11643         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
11644         * codegen.cs: Modified AssemblyName creation to include support for
11645         strongnames. Catch additional exceptions to report them as CS1548.
11646         * compiler.csproj: Updated include CryptoConvert.cs.
11647         * compiler.csproj.user: Removed file - user specific configuration.
11648         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
11649         Mono.Security assembly. The original class is maintained and tested in
11650         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
11651         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
11652         like CSC 8.0 (C# v2) supports.
11653         * Makefile: Added CryptoConvert.cs to mcs sources.
11654         * rootcontext.cs: Added new options for strongnames.
11655
11656 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
11657
11658         * driver.cs: For --expect-error, report error code `2'
11659         if the program compiled with no errors, error code `1' if
11660         it compiled with an error other than the one expected.
11661
11662 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
11663
11664         * compiler.csproj: Updated for Visual Studio .NET 2003.
11665         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
11666         * compiler.sln: Updated for Visual Studio .NET 2003.
11667
11668 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
11669
11670         * expression.cs: Fix bug #47234. We basically need to apply the
11671         rule that we prefer the conversion of null to a reference type
11672         when faced with a conversion to 'object' (csc behaviour).
11673
11674 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11675
11676         * statement.cs: Shorter form for foreach, eliminates
11677         a local variable. r=Martin.
11678
11679 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11680
11681         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
11682         checks if we can use brtrue/brfalse to test for 0.
11683         * expression.cs: use the above in the test for using brtrue/brfalse.
11684         cleanup code a bit.
11685
11686 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11687
11688         * expression.cs: Rewrite string concat stuff. Benefits:
11689
11690         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
11691         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
11692         rather than a concat chain.
11693
11694         * typemanager.cs: Add lookups for more concat overloads.
11695
11696 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11697
11698         * expression.cs: Emit shorter il code for array init.
11699
11700         newarr
11701         dup
11702         // set 1
11703
11704         // set 2
11705
11706         newarr
11707         stloc.x
11708
11709         ldloc.x
11710         // set 1
11711
11712         ldloc.x
11713         // set 2
11714
11715 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
11716
11717         * statement.cs: Before, two switch blocks would be merged if the
11718         total size of the blocks (end_item - begin_item + 1) was less than
11719         two times the combined sizes of the blocks.
11720
11721         Now, it will only merge if after the merge at least half of the
11722         slots are filled.
11723
11724         fixes 55885.
11725
11726 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
11727
11728         * class.cs : csc build fix for GetMethods(). See bug #52503.
11729
11730 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
11731
11732         * expression.cs: Make sure fp comparisons work with NaN.
11733         This fixes bug #54303. Mig approved this patch a long
11734         time ago, but we were not able to test b/c the runtime
11735         had a related bug.
11736
11737 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
11738
11739         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
11740
11741 2004-03-19  Martin Baulig  <martin@ximian.com>
11742
11743         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
11744         two overloads may unify for some type parameter substitutions and
11745         report a CS0408 if appropriate.
11746
11747 2004-03-19  Martin Baulig  <martin@ximian.com>
11748
11749         * class.cs (MemberCore.IsDuplicateImplementation): Report the
11750         error here and not in our caller.
11751
11752 2004-03-19  Martin Baulig  <martin@ximian.com>
11753
11754         * interface.cs: Completely killed this file.
11755         (Interface): We're now a TypeContainer and live in class.cs.
11756
11757         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
11758         argument; we're now also called for interfaces.
11759         (TypeContainer.DefineMembers): Allow this method being called
11760         multiple times.
11761         (TypeContainer.GetMethods): New public method; formerly known as
11762         Interface.GetMethod().  This is used by PendingImplementation.
11763         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
11764         it's now private and non-static.
11765         (Interface): Moved this here; it's now implemented similar to
11766         Class and Struct.
11767         (Method, Property, Event, Indexer): Added `bool is_interface'
11768         argument to their .ctor's.
11769         (MemberBase.IsInterface): New public field.
11770
11771         * cs-parser.jay: Create normal Method, Property, Event, Indexer
11772         instances instead of InterfaceMethod, InterfaceProperty, etc.
11773         (opt_interface_base): Removed; we now use `opt_class_base' instead.
11774         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
11775
11776 2004-03-19  Martin Baulig  <martin@ximian.com>
11777
11778         * class.cs (MethodCore.IsDuplicateImplementation): New private
11779         method which does the CS0111 checking.
11780         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
11781         Use IsDuplicateImplementation().
11782
11783 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
11784
11785         * decl.cs (FindMemberToOverride): New method to find the correct
11786         method or property to override in the base class.
11787         * class.cs
11788             - Make Method/Property use the above method to find the
11789               version in the base class.
11790             - Remove the InheritableMemberSignatureCompare as it is now
11791               dead code.
11792
11793         This patch makes large code bases much faster to compile, as it is
11794         O(n) rather than O(n^2) to do this validation.
11795
11796         Also, it fixes bug 52458 which is that nested classes are not
11797         taken into account when finding the base class member.
11798
11799         Reviewed/Approved by Martin.
11800
11801 2004-03-17  Martin Baulig  <martin@ximian.com>
11802
11803         * expression.cs (MemberAccess.DoResolve): Take the parent's number
11804         of type arguments into account; use the `real_num_type_args'
11805         approach like in DoResolveAsTypeStep().
11806
11807         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
11808         nested types.
11809
11810 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
11811
11812         * interface.cs: In all interface classes removed redundant
11813         member initialization.
11814
11815 2004-03-16  Martin Baulig  <martin@ximian.com>
11816
11817         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
11818
11819 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
11820
11821         * decl.cs (DefineTypeAndParents): New helper method to define a
11822         type's containers before the type itself is defined;  This is a
11823         bug exposed by the recent changes to Windows.Forms when an
11824         implemented interface was defined inside a class that had not been
11825         built yet.   
11826
11827         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
11828
11829         (Check): Loop correctly to report errors modifiers
11830         (UNSAFE was not in the loop, since it was the same as TOP).
11831
11832         * interface.cs: Every interface member now takes a ModFlags,
11833         instead of a "is_new" bool, which we set on the base MemberCore. 
11834
11835         Every place where we called "UnsafeOk" in the interface, now we
11836         call the proper member (InterfaceMethod.UnsafeOK) instead to get
11837         the unsafe settings from the member declaration instead of the
11838         container interface. 
11839
11840         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
11841
11842         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
11843         `set_indexer_name' to the pending bits (one per type).
11844
11845         We fixed a bug today that was picking the wrong method to
11846         override, since for properties the existing InterfaceMethod code
11847         basically ignored the method name.  Now we make sure that the
11848         method name is one of the valid indexer names.
11849
11850 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
11851  
11852         * support.cs (SeekableStreamReader): Keep track of stream byte
11853         positions and don't mix them with character offsets to the buffer.
11854
11855         Patch from Gustavo Giráldez
11856
11857 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
11858
11859         * interface.cs (InterfaceSetGetBase): Removed double member
11860         initialization, base class does it as well.
11861
11862 2004-03-13  Martin Baulig  <martin@ximian.com>
11863
11864         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
11865         when compiling corlib.
11866
11867 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
11868
11869         * convert.cs (ExplicitConversion): We were reporting an error on
11870         certain conversions (object_type source to a value type, when the
11871         expression was `null') before we had a chance to pass it through
11872         the user defined conversions.
11873
11874         * driver.cs: Replace / and \ in resource specifications to dots.
11875         Fixes 50752
11876
11877         * class.cs: Add check for duplicate operators.  Fixes 52477
11878
11879 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
11880
11881         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
11882         that are in the middle of the statements, not only at the end.
11883         Fixes #54987
11884
11885         * class.cs (TypeContainer.AddField): No longer set the
11886         `HaveStaticConstructor' flag, now we call it
11887         `UserDefineStaticConstructor' to diferentiate the slightly
11888         semantic difference.
11889
11890         The situation is that we were not adding BeforeFieldInit (from
11891         Modifiers.TypeAttr) to classes that could have it.
11892         BeforeFieldInit should be set to classes that have no static
11893         constructor. 
11894
11895         See:
11896
11897         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
11898
11899         And most importantly Zoltan's comment:
11900
11901         http://bugzilla.ximian.com/show_bug.cgi?id=44229
11902
11903         "I think beforefieldinit means 'it's ok to initialize the type sometime 
11904          before its static fields are used', i.e. initialization does not need
11905          to be triggered by the first access to the type. Setting this flag
11906          helps the JIT to compile better code, since it can run the static
11907          constructor at JIT time, and does not need to generate code to call it
11908          (possibly lots of times) at runtime. Unfortunately, mcs does not set
11909          this flag for lots of classes like String. 
11910          
11911          csc sets this flag if the type does not have an explicit static 
11912          constructor. The reasoning seems to be that if there are only static
11913          initalizers for a type, and no static constructor, then the programmer
11914          does not care when this initialization happens, so beforefieldinit
11915          can be used.
11916          
11917          This bug prevents the AOT compiler from being usable, since it 
11918          generates so many calls to mono_runtime_class_init that the AOT code
11919          is much slower than the JITted code. The JITted code is faster, 
11920          because it does not generate these calls if the vtable is type is
11921          already initialized, which is true in the majority of cases. But the
11922          AOT compiler can't do this."
11923
11924 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
11925
11926         * class.cs (MethodData.Emit): Refactor the code so symbolic
11927         information is generated for destructors;  For some reasons we
11928         were taking a code path that did not generate symbolic information
11929         before. 
11930
11931 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
11932
11933         * class.cs: Create a Constructor.CheckBase method that
11934         takes care of all validation type code. The method
11935         contains some code that was moved from Define.
11936
11937         It also includes new code that checks for duplicate ctors.
11938         This fixes bug #55148.
11939
11940 2004-03-09  Joshua Tauberer <tauberer@for.net>
11941
11942         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
11943         a { ... }-style array creation invokes EmitStaticInitializers
11944         which is not good for reference-type arrays.  String, decimal
11945         and now null constants (NullCast) are not counted toward
11946         static initializers.
11947
11948 2004-03-05  Martin Baulig  <martin@ximian.com>
11949
11950         * location.cs (SourceFile.HasLineDirective): New public field;
11951         specifies whether the file contains or is referenced by a "#line"
11952         directive.
11953         (Location.DefineSymbolDocuments): Ignore source files which
11954         either contain or are referenced by a "#line" directive.        
11955
11956 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
11957
11958         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
11959         direct access to our parent, so check the method inline there.
11960
11961 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
11962
11963         * expression.cs (Invocation.EmitCall): Miguel's last commit
11964         caused a regression. If you had:
11965
11966             T t = null;
11967             t.Foo ();
11968
11969         In Foo the implict this would be null.
11970
11971 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
11972
11973         * expression.cs (Invocation.EmitCall): If the method is not
11974         virtual, do not emit a CallVirt to it, use Call.
11975
11976         * typemanager.cs (GetFullNameSignature): Improve the method to
11977         cope with ".ctor" and replace it with the type name.
11978
11979         * class.cs (ConstructorInitializer.Resolve): Now the method takes
11980         as an argument the ConstructorBuilder where it is being defined,
11981         to catch the recursive constructor invocations.
11982
11983 2004-03-16  Martin Baulig  <martin@ximian.com>
11984
11985         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
11986         ConstructedType, call ResolveType() on it to get the type rather
11987         than just using `expr.Type'.
11988
11989 2004-03-16  Martin Baulig  <martin@ximian.com>
11990
11991         * generics.cs (ConstructedType.GetMemberAccess): Take the
11992         EmitContext instead on the TypeExpr and use
11993         ec.TypeContainer.CurrentType/ec.ContainerType.
11994
11995 2004-03-16  Martin Baulig  <martin@ximian.com>
11996
11997         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
11998         parameters before aliases.
11999
12000 2004-03-16  Martin Baulig  <martin@ximian.com>
12001
12002         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12003         New oublic function; checks whether two generic instances may become
12004         equal under some instantiations (26.3.1).
12005
12006         * class.cs (TypeContainer.Define): Call
12007         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12008         error.
12009
12010 2004-03-16  Martin Baulig  <martin@ximian.com>
12011
12012         * class.cs (TypeContainer.GetClassBases): Moved
12013         Error_TypeParameterAsBase() here and also check whether the base
12014         class is not an attribute.
12015
12016 2004-03-16  Martin Baulig  <martin@ximian.com>
12017
12018         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12019
12020 2004-03-16  Martin Baulig  <martin@ximian.com>
12021
12022         * class.cs (Error_TypeParameterAsBase): Use correct error number
12023         here (CS0689).  
12024
12025 2004-03-16  Martin Baulig  <martin@ximian.com>
12026
12027         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12028         for generics.
12029
12030         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12031         error reporting.
12032
12033 2004-03-15  Martin Baulig  <martin@ximian.com>
12034
12035         * typemanager.cs (TypeManager.GetFullName): New public method.
12036         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12037         argument; only return members with the correct number of type
12038         arguments.
12039         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12040         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12041         whether the number of type arguments matches.
12042
12043         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12044         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12045
12046         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12047         field; it's set by the protected .ctor when we're actually a
12048         GenericMemberAccess.
12049         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12050         arguments and pass it to MemberLookupFinal ().
12051
12052         * ecore.cs (Expression.MemberLookup): Added `int
12053         num_type_arguments' argument; only return members with the correct
12054         number of type arguments.
12055         (Expression.MemberLookupFailed): Check whether the MemberLookup
12056         failed because we did not have the correct number of type
12057         arguments; report CS0305 in this case.
12058
12059         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12060         `e.ResolveAsTypeTerminal()' already did so.
12061
12062 2004-03-15  Martin Baulig  <martin@ximian.com>
12063
12064         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12065         we're a ConstructedType; in this case, the caller must report an
12066         error (for instance CS0131).
12067
12068         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12069         (TypeArguments.Resolve): Actually report errors here.
12070
12071 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12072
12073         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12074         `set_indexer_name' to the pending bits (one per type).
12075
12076         We fixed a bug today that was picking the wrong method to
12077         override, since for properties the existing InterfaceMethod code
12078         basically ignored the method name.  Now we make sure that the
12079         method name is one of the valid indexer names.
12080
12081 2004-03-15  Martin Baulig  <martin@ximian.com>
12082
12083         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12084         for generic instances.
12085
12086 2004-03-13  Martin Baulig  <martin@ximian.com>
12087
12088         * class.cs (TypeContainer.DefineType): Call
12089         TypeManager.AddUserType() immediately after creating the
12090         TypeBuilder; pass all type parameters when creating the
12091         CurrentType.
12092
12093         * decl.cs (DeclSpace.FindNestedType): New public method.
12094         (DeclSpace.FindType): Added `int num_type_args' argument; only
12095         return types with the correct number of type parameters.
12096         (DeclSpace.CountTypeParams): New public property.
12097
12098         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12099         the number of type parameters; defaults to zero.
12100
12101         * generic.cs (TypeArguments.Count): New public property.
12102         (ConstructedType.DoResolveAsTypeStep): First call
12103         ds.FindNestedType() to find out whether we're nested in the
12104         current generic type; in this case, we inherit all type parameters
12105         from the current class.
12106
12107         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12108         num_type_args' argument.
12109         (RootContext.LookupType): Added overloaded version which takes the
12110         number of type arguments; only return types with the correct
12111         number of type arguments.
12112
12113         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12114         checks whether `Type t' has `int num_type_args'.
12115
12116 2004-03-13  Martin Baulig  <martin@ximian.com>
12117
12118         * generic.cs (GenericMethod.DefineType): New method; calls
12119         DefineType() on all the type parameters.
12120
12121         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12122         (MethodData.Define): If we're a generic method, call
12123         GenericMethod.DefineType() to define the type parameters.       
12124
12125 2004-03-10  Martin Baulig  <martin@ximian.com>
12126
12127         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12128         instead of IsAssignableFrom.    
12129
12130 2004-03-10  Martin Baulig  <martin@ximian.com>
12131
12132         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12133
12134         * support.cs (ParameterData.HasArrayParameter): New property.
12135         (ReflectionParameters.ctor): Take a MethodBase instead of a
12136         ParameterInfo[].  If we have any type parameters, get the generic
12137         method definition and ask it whether we have variable arguments.
12138
12139 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12140
12141         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12142         routines to check if a type is an enumerable/enumerator allow
12143         classes that implement the IEnumerable or IEnumerator interfaces.
12144
12145         * class.cs (Property, Operator): Implement IIteratorContainer, and
12146         implement SetYields.
12147
12148         (Property.Define): Do the block swapping for get_methods in the
12149         context of iterators.   We need to check if Properties also
12150         include indexers or not.
12151
12152         (Operator): Assign the Block before invoking the
12153         OperatorMethod.Define, so we can trigger the Iterator code
12154         replacement. 
12155
12156         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12157         Property and Operator classes are not created when we parse the
12158         declarator but until we have the block completed, so we use a
12159         singleton SimpleIteratorContainer.Simple to flag whether the
12160         SetYields has been invoked.
12161
12162         We propagate this setting then to the Property or the Operator to
12163         allow the `yield' to function.
12164
12165 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12166
12167         * codegen.cs: Implemented attribute support for modules.
12168         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12169         Assembly/Module functionality.
12170
12171         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12172         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12173         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12174
12175 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12176
12177         * interface.cs (FindMembers): The operation is performed on all base
12178         interfaces and not only on the first. It is required for future CLS Compliance patch.
12179
12180 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12181
12182         * statement.cs, codegen.cs:
12183         This patch deals with patterns such as:
12184
12185         public class List : IEnumerable {
12186
12187                 public MyEnumerator GetEnumerator () {
12188                         return new MyEnumerator(this);
12189                 }
12190
12191                 IEnumerator IEnumerable.GetEnumerator () {
12192                         ...
12193                 }
12194                 
12195                 public struct MyEnumerator : IEnumerator {
12196                         ...
12197                 }
12198         }
12199
12200         Before, there were a few things we did wrong:
12201         1) we would emit callvirt on a struct, which is illegal
12202         2) we emited ldarg when we needed to emit ldarga
12203         3) we would mistakenly call the interface methods on an enumerator
12204         type that derived from IEnumerator and was in another assembly. For example:
12205
12206         public class MyEnumerator : IEnumerator
12207
12208         Would have the interface methods called, even if there were public impls of the
12209         method. In a struct, this lead to invalid IL code.
12210
12211 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12212
12213         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12214           renamed to Emit.
12215
12216         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12217
12218 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12219
12220         * cs-parser.jay: Fix small regression: we were not testing V2
12221         compiler features correctly.
12222
12223         * interface.cs: If the emit context is null, then create one
12224
12225 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12226
12227         * decl.cs (GetSignatureForError): New virtual method to get full name
12228           for error messages.
12229
12230         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12231           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12232
12233         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12234           Duplicated members and code in these classes has been removed.
12235           Better encapsulation in these classes.
12236
12237 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12238
12239         * assign.cs (Assign.DoResolve): When dealing with compound
12240         assignments, there is a new rule in ECMA C# 2.4 (might have been
12241         there before, but it is documented here) that states that in:
12242
12243         a op= b;
12244
12245         If b is of type int, and the `op' is a shift-operator, then the
12246         above is evaluated as:
12247
12248         a = (int) a op b 
12249
12250         * expression.cs (Binary.ResolveOperator): Instead of testing for
12251         int/uint/long/ulong, try to implicitly convert to any of those
12252         types and use that in pointer arithmetic.
12253
12254         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12255         method to print information for from the type, not from the
12256         null-method we were given.
12257
12258 2004-02-01  Duncan Mak  <duncan@ximian.com>
12259
12260         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12261         parsing for cmd, fixes bug #53694.
12262
12263 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12264
12265         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12266         in the member name duplication tests. Property and operator name duplication
12267         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12268
12269 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12270
12271         * interface.cs (PopulateMethod): Fixed crash when interface method
12272         returns not existing type (error test cs0246-3.cs).
12273
12274 2004-02-02  Ravi Pratap M <ravi@ximian.com>
12275
12276         * cs-parser.jay (interface_accessors): Re-write actions to also
12277         store attributes attached to get and set methods. Fix spelling
12278         while at it.
12279
12280         (inteface_property_declaration): Modify accordingly.
12281
12282         (InterfaceAccessorInfo): New helper class to store information to pass
12283         around between rules that use interface_accessors.
12284
12285         * interface.cs (Emit): Apply attributes on the get and set
12286         accessors of properties and indexers too.
12287
12288         * attribute.cs (ApplyAttributes): Modify accordingly to use the
12289         right MethodBuilder when applying attributes to the get and set accessors.
12290
12291 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
12292
12293         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
12294
12295 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
12296
12297         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
12298
12299 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
12300
12301         * cs-parser.jay: Remove YIELD token, instead use the new grammar
12302         changes that treat `yield' specially when present before `break'
12303         or `return' tokens.
12304
12305         * cs-tokenizer.cs: yield is no longer a keyword.
12306
12307 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
12308
12309         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
12310         setting for default constructors.
12311         For default constructors are almost every time set wrong Modifier. The
12312         generated IL code has been alright. But inside mcs this values was
12313         wrong and this was reason why several of my CLS Compliance tests
12314         failed.
12315
12316 2004-02-27  Martin Baulig  <martin@ximian.com>
12317
12318         * generics.cs (ConstructedType.ResolveType): Make the nested type
12319         stuff actually work.
12320
12321 2004-02-25  Martin Baulig  <martin@ximian.com>
12322
12323         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
12324         property; returns the type parameters just from the current type,
12325         ie. with the ones from outer classes.
12326         (DeclSpace.LookupGeneric): First search in the current class, then
12327         in outer classes.
12328         (DeclSpace.initialize_type_params): When hiding a type parameter
12329         from an outer class, put it into the `type_param_list' anyways.
12330
12331         * expression.cs (MemberAccess.expr): Made this field protected.
12332
12333         * class.cs (TypeContainer.Define): The `CurrentType' just contains
12334         the type parameters from the current class.
12335
12336         * generic.cs (ConstructedType.ResolveType): Support nested generic
12337         types by taking the type parameters which we inherit from outer
12338         classes into account.
12339         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
12340         support for nested generic types.
12341
12342 2004-02-23  Martin Baulig  <martin@ximian.com>
12343
12344         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
12345         field and check whether we're nested inside a generic type.
12346         (DeclSpace.ResolveType): If we're resolving to a generic type
12347         definition, create a ConstructedType and return its resolved type.
12348         (DeclSpace.initialize_type_params): New private method;
12349         initializes the `type_param_list' field from the type parameters
12350         from this and all enclosing classes.
12351         (DeclSpace.TypeParameters): Call initialize_type_params() unless
12352         we're already initialized.
12353
12354 2004-02-23  Martin Baulig  <martin@ximian.com>
12355
12356         * class.cs (Method.Define): Create the generic method before
12357         calling DoDefine().
12358         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
12359         the TypeContainer one); we use this for generic methods.
12360
12361         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
12362         parent's TypeBuilder.
12363
12364 2004-02-18  Martin Baulig  <martin@ximian.com>
12365
12366         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
12367         to check for equality.
12368
12369 2004-02-05  Martin Baulig  <martin@ximian.com>
12370
12371         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
12372         `ec.TypeContainer.CurrentType', use it instead of
12373         `ec.ContainerType' to check whether we're in the type's ctor.
12374
12375 2004-01-29  Martin Baulig  <martin@ximian.com>
12376
12377         * expression.cs (Invocation.DoResolve): If we're a
12378         `ConstructedType', then we're actually a generic method, so
12379         rewrite the expr as a GenericMemberAccess.
12380
12381         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
12382         here; manually parse it into a string.
12383
12384 2004-01-28  Martin Baulig  <martin@ximian.com>
12385
12386         * typemanager.cs (TypeManager.IsEqual): New static method.
12387         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
12388         check for equality instead of using `=='.
12389
12390 2004-01-26  Martin Baulig  <martin@ximian.com>
12391
12392         * decl.cs (DeclSpace.CurrentType): New public field.
12393
12394         * expression.cs (This.ResolveBase): If we have an
12395         `ec.TypeContainer.CurrentType', use it instead of
12396         `ec.ContainerType'.
12397
12398         * class.cs (TypeContainer.DefineType): If we're a generic type,
12399         create the `CurrentType' (unresolved).
12400         (TypeContainer.GenericType): New private field.
12401         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
12402         it and store it in `GenericType' before creating the MemberCache.
12403         (TypeContainer.GetMembers): If we have a `GenericType', call
12404         TypeManager.FindMembers() on it.
12405
12406         * interface.cs (Interface.GenericType): New private field.
12407         (Interface.DefineType): If we're a generic type, create the
12408         `CurrentType' (unresolved).
12409         (Interface.DefineMembers): If we have a `CurrentType', resolve it
12410         and store it in `GenericType' before creating the MemberCache.
12411         (Interface.GetMembers): If we have a `GenericType', call
12412         TypeManager.FindMembers() on it.
12413
12414 2004-01-22  Martin Baulig  <martin@ximian.com>
12415
12416         * cs-parser.jay (namespace_or_type_name): Return an Expression,
12417         not a QualifiedIdentifier.  This is what `type_name_expression'
12418         was previously doing.
12419         (type_name_expression): Removed; the code is now in
12420         `namespace_or_type_name'.
12421         (qualified_identifier): Removed, use `namespace_or_type_name'
12422         instead.
12423         (QualifiedIdentifier): Removed this class.      
12424
12425 2004-01-22  Martin Baulig  <martin@ximian.com>
12426
12427         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
12428         not a string as alias name.
12429
12430 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
12431
12432         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
12433         #52730 bug, and instead compute correctly the need to use a
12434         temporary variable when requesting an address based on the
12435         static/instace modified of the field and the constructor.
12436  
12437 2004-01-21  Martin Baulig  <martin@ximian.com>
12438
12439         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
12440         class and namespace before looking up aliases.  Fixes #52517.
12441
12442 2004-01-21  Martin Baulig  <martin@ximian.com>
12443
12444         * flowanalysis.cs (UsageVector.Merge): Allow variables being
12445         assinged in a 'try'; fixes exception4.cs.
12446
12447 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12448         * class.cs : Implemented parameter-less constructor for TypeContainer
12449
12450         * decl.cs: Attributes are now stored here. New property OptAttributes
12451
12452         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
12453
12454         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
12455
12456 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12457
12458         * typemanager.cs (CSharpSignature): Now reports also inner class name.
12459           (CSharpSignature): New method for indexer and property signature.
12460
12461 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12462
12463         * pending.cs (IsVirtualFilter): Faster implementation.
12464
12465 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12466
12467         * typemanager.cs: Avoid inclusion of same assembly more than once.
12468
12469 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12470
12471         * cs-parser.jay: Fixed problem where the last assembly attribute
12472           has been applied also to following declaration (class, struct, etc.)
12473           
12474 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12475
12476         * class.cs: Added error CS0538, CS0539 reporting.
12477         Fixed crash on Microsoft runtime when field type is void.
12478
12479         * cs-parser.jay: Added error CS0537 reporting.
12480
12481         * pending.cs: Added error CS0535 reporting.
12482         Improved error report for errors CS0536, CS0534.
12483
12484 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
12485
12486         Merge a few bits from the Anonymous Method MCS tree.
12487
12488         * statement.cs (ToplevelBlock): New class for toplevel methods,
12489         will hold anonymous methods, lifted variables.
12490
12491         * cs-parser.jay: Create toplevel blocks for delegates and for
12492         regular blocks of code. 
12493
12494 2004-01-20  Martin Baulig  <martin@ximian.com>
12495
12496         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
12497         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
12498         and `NeedExplicitReturn'; added `IsLastStatement'.
12499         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
12500         have a `ReturnLabel' or we're not unreachable.
12501
12502         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
12503         child's reachability; don't just override ours with it.  Fixes
12504         #58058 (lluis's example).
12505         (FlowBranching): Added public InTryOrCatch(), InCatch(),
12506         InFinally(), InLoop(), InSwitch() and
12507         BreakCrossesTryCatchBoundary() methods.
12508
12509         * statement.cs (Return): Do all error checking in Resolve().
12510         Unless we are the last statement in a top-level block, always
12511         create a return label and jump to it.
12512         (Break, Continue): Do all error checking in Resolve(); also make
12513         sure we aren't leaving a `finally'.
12514         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
12515         statement in a top-level block.
12516         (Block.Flags): Added `IsDestructor'.
12517         (Block.IsDestructor): New public property.
12518
12519 2004-01-20  Martin Baulig  <martin@ximian.com>
12520
12521         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
12522
12523 2004-01-20  Martin Baulig  <martin@ximian.com>
12524
12525         * statement.cs (Statement.ResolveUnreachable): New public method.
12526         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
12527         (Block.Resolve): Resolve unreachable statements.
12528
12529 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12530
12531         * expression.cs: We need to fix the case where we do
12532         not have a temp variable here.
12533
12534         * assign.cs: Only expression compound assignments need
12535         temporary variables.
12536
12537 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12538
12539         * flowanalysis.cs: Reduce memory allocation in a few ways:
12540           - A block with no variables should not allocate a bit
12541             vector for itself.
12542           - A method with no out parameters does not need any tracking
12543             for assignment of the parameters, so we need not allocate
12544             any data for it.
12545           - The arrays:
12546                 public readonly Type[] VariableTypes;
12547                 public readonly string[] VariableNames;
12548             Are redundant. The data is already stored in the variable
12549             map, so we need not allocate another array for it.
12550           - We need to add alot of checks for if (params | locals) == null
12551             due to the first two changes.
12552
12553 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
12554
12555         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
12556         implement IMemoryLocation, we store a copy on a local variable and
12557         take the address of it.  Patch from Benjamin Jemlich
12558
12559         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
12560         to use a special "type_name_expression" rule which reduces the
12561         number of "QualifiedIdentifier" classes created, and instead
12562         directly creates MemberAccess expressions.
12563
12564 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
12565
12566         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
12567         that fixes #52853.  Null literal assignment to ValueType
12568
12569         * class.cs (MethodData.Emit): Instead of checking the name of the
12570         method to determine if its a destructor, create a new derived
12571         class from Method called Destructor, and test for that.  
12572
12573         * cs-parser.jay: Create a Destructor object instead of a Method.  
12574
12575         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
12576
12577         Fixes: 52933
12578
12579 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
12580
12581         * expression.cs (Binary.ResolveOperator): Perform an implicit
12582         conversion from MethodGroups to their delegate types on the
12583         Addition operation.
12584
12585         * delegate.cs: Introduce a new class DelegateCreation that is the
12586         base class for `NewDelegate' and `ImplicitDelegateCreation',
12587         factor some code in here.
12588
12589         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
12590         conversion from MethodGroups to compatible delegate types. 
12591
12592         * ecore.cs (Expression.Resolve): Do not flag error 654
12593         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
12594         we allow conversions from MethodGroups to delegate types now.
12595
12596         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
12597         assignments in v2 either.
12598
12599 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
12600
12601         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
12602         static read-only fields in ctors.
12603
12604         Applied patch from Benjamin Jemlich 
12605
12606         * expression.cs (UnaryMutator): Avoid leaking local variables. 
12607
12608 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
12609
12610         * cs-tokenizer.cs (IsCastToken): Allow the various native types
12611         here to return true, as they can be used like this:
12612
12613                 (XXX) int.MEMBER ()
12614
12615         Fixed 49836 and all the other dups
12616
12617 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
12618
12619         * driver.cs: Implement /win32res and /win32icon.
12620
12621 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
12622
12623         * cs-parser.jay: Add a rule to improve error handling for the
12624         common mistake of placing modifiers after the type.
12625
12626 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
12627
12628         * cs-parser.jay (interface_event_declaration): Catch
12629         initialization of events on interfaces, and report cs0068
12630
12631         * cs-parser.jay (interface_event_declaration): Catch
12632         initialization of events. 
12633
12634         * ecore.cs: Better report missing constructors.
12635
12636         * expression.cs (Binary.ResolveOperator): My previous bug fix had
12637         the error reporting done in the wrong place.  Fix.
12638
12639         * expression.cs (Binary.ResolveOperator): Catch the 
12640         operator + (E x, E y) error earlier, and later allow for implicit
12641         conversions in operator +/- (E e, U x) from U to the underlying
12642         type of E.
12643
12644         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
12645         52596, if the container class is abstract, the default constructor
12646         is protected otherwise its public (before, we were always public).
12647
12648         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
12649         fixed statement.
12650
12651         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
12652         Jemlich that fixes bug #52597, MCS was generating invalid code for
12653         idisposable structs.   Thanks to Ben for following up with this
12654         bug as well.
12655
12656 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
12657
12658         * driver.cs: Allow assemblies without code to be generated, fixes
12659         52230.
12660
12661 2004-01-07  Nick Drochak <ndrochak@gol.com>
12662
12663         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
12664
12665 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
12666
12667         * cs-parser.jay: Add rules to improve error reporting if fields or
12668         methods are declared at the namespace level (error 116)
12669
12670         * Add rules to catch event add/remove
12671
12672 2004-01-04  David Sheldon <dave-mono@earth.li>
12673
12674   * expression.cs: Added matching ")" to error message for 
12675   CS0077
12676
12677 2004-01-03 Todd Berman <tberman@gentoo.org>
12678
12679         * ecore.cs, attribute.cs:
12680         Applying fix from #52429.
12681
12682 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12683
12684         * ecore.cs, expression.cs, statement.cs:
12685         Total rewrite of how we handle branching. We
12686         now handle complex boolean expressions with fewer
12687         jumps. As well if (x == 0) no longer emits a ceq.
12688
12689         if (x is Foo) is much faster now, because we generate
12690         better code.
12691
12692         Overall, we get a pretty big improvement on our benchmark
12693         tests. The code we generate is smaller and more readable.
12694
12695         I did a full two-stage bootstrap. The patch was reviewed
12696         by Martin and Miguel.
12697
12698 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12699
12700         * cs-parser.jay: Make primary_expression not take a QI.
12701         we dont need this because the member_access rule covers
12702         us here. So we replace the rule with just IDENTIFIER.
12703
12704         This has two good effects. First, we remove a s/r conflict.
12705         Second, we allocate many fewer QualifiedIdentifier objects.
12706
12707 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12708
12709         * attribute.cs: Handle MarshalAs attributes as pseudo, and
12710         set the correct information via SRE. This prevents
12711         hanging on the MS runtime. Fixes #29374.
12712
12713 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12714
12715         * convert.cs: correctly handle conversions to value types
12716         from Enum and ValueType as unboxing conversions.
12717
12718         Fixes bug #52569. Patch by Benjamin Jemlich.
12719
12720 2004-01-02  Ravi Pratap  <ravi@ximian.com>
12721
12722         * expression.cs (BetterConversion): Prefer int -> uint
12723         over int -> ulong (csc's behaviour). This fixed bug #52046.
12724
12725 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
12726
12727         * decl.cs (MemberCache.FindMembers): now returns a
12728         MemberInfo [].
12729
12730         * typemanager.cs: In general, go with with ^^.
12731         (CopyNewMethods): take an IList.
12732         (RealMemberLookup): Only allocate an arraylist
12733         if we copy from two sets of methods.
12734
12735         This change basically does two things:
12736         1) Fewer array lists allocated due to CopyNewMethods.
12737         2) the explicit cast in MemberList costed ALOT.
12738
12739 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
12740
12741         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
12742         a hashtable to avoid needless string allocations when an identifier is
12743         used more than once (the common case).
12744
12745 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
12746
12747         * pending.cs: MS's TypeBuilder.GetInterfaces ()
12748         is broken, it will not return anything. So, we
12749         have to use the information we have in mcs to
12750         do the task.
12751
12752         * typemanager.cs: Add a cache for GetInterfaces,
12753         since this will now be used more often (due to ^^)
12754
12755         (GetExplicitInterfaces) New method that gets the
12756         declared, not effective, interfaces on a type
12757         builder (eg, if you have interface IFoo, interface
12758         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
12759         { IBar }.
12760
12761         This patch makes MCS able to bootstrap itself on
12762         Windows again.
12763
12764 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
12765
12766         * expression.cs: Remove the Nop's that Miguel put
12767         in by mistake.
12768
12769 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12770
12771         * report.cs, codegen.cs: Give the real stack trace to
12772         the error when an exception is thrown.
12773
12774 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12775
12776         * decl.cs: only allocate hashtables for ifaces if 
12777         it is an iface!
12778
12779 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12780
12781         * expression.cs: fix the error from cs0121-2.cs
12782         (a parent interface has two child interfaces that
12783         have a function with the same name and 0 params
12784         and the function is called through the parent).
12785
12786 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12787
12788         * class.cs, rootcontext.cs, typmanager.cs: do not
12789         leak pointers.
12790
12791 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12792
12793         * codegen.cs: remove stack for the ec flow branching.
12794         It is already a linked list, so no need.
12795
12796 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12797
12798         * Makefile: Allow custom profiler here.
12799
12800 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
12801
12802         * typemanager.cs (LookupType):
12803           - Use a static char [], because split takes
12804             a param array for args, so it was allocating
12805             every time.
12806           - Do not store true in a hashtable, it boxes.
12807
12808 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
12809
12810         * flowanalysis.cs: bytify common enums.
12811
12812 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
12813
12814         * modifiers.cs: Add a new set of flags for the
12815         flags allowed on explicit interface impls.
12816         * cs-parser.jay: catch the use of modifiers in
12817         interfaces correctly.
12818         * class.cs: catch private void IFoo.Blah ().
12819
12820         All related to bug #50572.
12821
12822 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
12823
12824         * decl.cs: Rewrite the consistant accessability checking.
12825         Accessability is not linear, it must be implemented in
12826         a tableish way. Fixes #49704.
12827
12828 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
12829
12830         * expression.cs: Handle negation in a checked context.
12831         We must use subtraction from zero. Fixes #38674.
12832
12833 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12834
12835         * class.cs: Ignore static void main in DLLs.
12836         * rootcontext.cs: Handle the target type here,
12837         since we are have to access it from class.cs
12838         * driver.cs: account for the above.
12839
12840 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12841
12842         * report.cs: Give line numbers and files if available.
12843
12844 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
12845
12846         * driver.cs: Implement /addmodule.
12847
12848         * typemanager.cs:  Change 'modules' field so it now contains Modules not
12849         ModuleBuilders.
12850
12851 2003-12-20  Martin Baulig  <martin@ximian.com>
12852
12853         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
12854         (FieldBase.IsAssigned): Removed this field.
12855         (FieldBase.SetAssigned): New public method.
12856         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
12857
12858 2003-12-20  Martin Baulig  <martin@ximian.com>
12859
12860         * expression.cs (LocalVariableReference.DoResolve): Don't set
12861         `vi.Used' if we're called from DoResolveLValue().
12862
12863         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
12864         returns the usage vector it just merged into the current one -
12865         pass this one to UsageWarning().
12866         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
12867         of the `EmitContext', don't call this recursively on our children.
12868
12869 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
12870
12871         * driver.cs: Implement /target:module.
12872
12873 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
12874
12875         * support.cs (CharArrayHashtable): New helper class.
12876
12877         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
12878         char arrays, not strings, so we can avoid creating a string in
12879         consume_identifier if the identifier is a keyword.
12880
12881 2003-12-16  Martin Baulig  <martin@ximian.com>
12882
12883         * statement.cs (LocalInfo.Assigned): Removed this property.
12884         (LocalInfo.Flags): Removed `Assigned'.
12885         (LocalInfo.IsAssigned): New public method; takes the EmitContext
12886         and uses flow analysis.
12887         (Block.UsageWarning): Made this method private.
12888         (Block.Resolve): Call UsageWarning() if appropriate.
12889
12890         * expression.cs (LocalVariableReference.DoResolve): Always set
12891         LocalInfo.Used here.
12892
12893 2003-12-13  Martin Baulig  <martin@ximian.com>
12894
12895         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
12896         any value here; we're now using flow analysis to figure out
12897         whether a statement/block returns a value.
12898
12899 2003-12-13  Martin Baulig  <martin@ximian.com>
12900
12901         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
12902         working again.
12903         (FlowBranching.MergeFinally): Don't call
12904         `branching.CheckOutParameters()' here, this is called in
12905         MergeTopBlock().
12906         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
12907         when adding the `finally' vector.       
12908
12909 2003-12-13  Martin Baulig  <martin@ximian.com>
12910
12911         * flowanalysis.cs
12912         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
12913         actually work and also fix #48962.
12914
12915 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12916
12917         * decl.cs: Do not check System.Object for nested types,
12918         since we know it does not have any. Big bang for buck:
12919
12920         BEFORE:
12921            Run 1:   8.35 seconds
12922            Run 2:   8.32 seconds
12923            corlib:  17.99 seconds
12924         AFTER:
12925            Run 1:   8.17 seconds
12926            Run 2:   8.17 seconds
12927            corlib:  17.39 seconds
12928
12929 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12930
12931         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
12932         time we are returning 0 members, so we save alot here.
12933
12934 2003-12-11  Martin Baulig  <martin@ximian.com>
12935
12936         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
12937         `MergeChild()', also just take the `FlowBranching' as argument;
12938         call Merge() on it and return the result.
12939         (FlowBranching.Merge): We don't need to do anything if we just
12940         have one sibling.
12941
12942 2003-12-11  Martin Baulig  <martin@ximian.com>
12943
12944         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
12945         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
12946         Maurer for this idea.
12947
12948 2003-12-11  Martin Baulig  <martin@ximian.com>
12949
12950         * flowanalysis.cs (MergeResult): This class is now gone; we now
12951         use the `UsageVector' for this.  The reason for this is that if a
12952         branching just has one sibling, we don't need to "merge" them at
12953         all - that's the next step to do.
12954         (FlowBranching.Merge): We now return a `UsageVector' instead of a
12955         `MergeResult'.
12956
12957 2003-12-11  Martin Baulig  <martin@ximian.com>
12958
12959         Reworked flow analyis and made it more precise and bug-free.  The
12960         most important change is that we're now using a special `Reachability'
12961         class instead of having "magic" meanings of `FlowReturns'.  I'll
12962         do some more cleanups and optimizations and also add some more
12963         documentation this week.
12964
12965         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
12966         largely reworked this class.
12967         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
12968         the new `Reachability' class instead of having "magic" values here.
12969         (FlowBranching): We're now using an instance of `Reachability'
12970         instead of having separate `Returns', `Breaks' etc. fields.
12971
12972         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
12973         based on flow analysis; ignore the return value of block.Emit ().
12974
12975 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
12976
12977         * driver.cs typemanager.cs: Find the mono extensions to corlib even
12978         if they are private.
12979
12980 2003-12-09  Martin Baulig  <martin@ximian.com>
12981
12982         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
12983         call them directly on the UsageVector.
12984
12985 2003-12-09  Martin Baulig  <martin@ximian.com>
12986
12987         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
12988         Changed return type from `FlowReturns' to `Reachability'.
12989
12990 2003-12-09  Martin Baulig  <martin@ximian.com>
12991
12992         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
12993         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
12994         `Reachable' fields with a single `Reachability' one.
12995
12996 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
12997
12998         * class.cs (FindMembers): Remove foreach's.
12999
13000         Bootstrap times:
13001
13002         BEFORE
13003                 Run 1:   8.74 seconds
13004                 Run 2:   8.71 seconds
13005
13006         AFTER
13007                 Run 1:   8.64 seconds
13008                 Run 2:   8.58 seconds
13009
13010
13011 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13012
13013         * cs-parser.jay:
13014         * gen-treedump.cs:
13015         * statement.cs:
13016         This patch does a few things:
13017                 1. EmptyStatement is now a singleton, so it is never reallocated.
13018                 2. All blah is EmptyStatement constructs have been changed to
13019                    blah == EmptyStatement.Value, which is much faster and valid
13020                    now that EmptyStatement is a singleton.
13021                 3. When resolving a block, rather than allocating a new array for
13022                    the non-empty statements, empty statements are replaced with
13023                    EmptyStatement.Value
13024                 4. Some recursive functions have been made non-recursive.
13025         Mainly the performance impact is from (3), however (1) and (2) are needed for
13026         this to work. (4) does not make a big difference in normal situations, however
13027         it makes the profile look saner.
13028
13029         Bootstrap times:
13030
13031         BEFORE
13032         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13033         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13034         Total memory allocated: 56397 KB
13035
13036         AFTER
13037         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13038         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13039         Total memory allocated: 55666 KB
13040
13041 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13042
13043         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13044         than the hashtable in a hashtable version
13045
13046         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13047         we always end up concating a string. This results in a huge perf
13048         loss, because many strings have to be tracked by the GC. In this
13049         patch, we first use a hashtable that works with two keys, so that
13050         the strings do not need to be concat'ed.
13051
13052         Bootstrap times:
13053         BEFORE
13054                 Run 1:   8.74 seconds
13055                 Run 2:   8.71 seconds
13056
13057         AFTER
13058                 Run 1:   8.65 seconds
13059                 Run 2:   8.56 seconds
13060
13061 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13062
13063         * Makefile: Add a new target `do-time' that does a quick and simple
13064         profile, leaving easy to parse output.
13065
13066 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13067
13068         * codegen.cs (Init): Create the dynamic assembly with 
13069         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13070
13071 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13072
13073         * support.cs: Make the PtrHashtable use only one
13074         instance of its comparer.
13075
13076 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13077
13078         * typemanager.cs: Fix lookup of GetNamespaces.
13079
13080 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13081
13082         * expression.cs: Removed redundant line.
13083
13084         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13085         ArrayLists, use for loops with bounds.  
13086
13087         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13088         arraylist.
13089
13090         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13091         arraylists, use for loop with bounds.
13092
13093         The above three changes give us a 0.071 second performance
13094         improvement out of 3.294 seconds down to 3.223.  On my machine
13095         the above changes reduced the memory usage by 1,387 KB during
13096         compiler bootstrap.
13097
13098         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13099         QualifiedIdentifiers.  Before we created a new string through
13100         concatenation, and mostly later on, the result would be
13101         manipulated by DecomposeQI through string manipulation.
13102
13103         This reduced the compiler memory usage for bootstrapping from
13104         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13105         compile times in 0.05 seconds.
13106
13107 2003-11-28  Dick Porter  <dick@ximian.com>
13108
13109         * support.cs: Do string compares with the Invariant culture.
13110
13111         * rootcontext.cs: 
13112         * gen-treedump.cs: 
13113         * expression.cs: 
13114         * driver.cs: 
13115         * decl.cs: 
13116         * codegen.cs: 
13117         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13118         the comparison is done with the Invariant culture.
13119
13120 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13121
13122         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13123         GetEnumerator method.
13124
13125         (ProbeCollectionType): Iterate starting at the most specific type
13126         upwards looking for a GetEnumerator
13127
13128         * expression.cs: Shift count can be up to 31 for int/uint and 63
13129         for long/ulong.
13130
13131 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13132
13133         * statement.cs (Block.LookupLabel): Also look for the label on the
13134         children blocks.  Use a hash table to keep track of visited
13135         nodes. 
13136
13137         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13138         we actually did transform the other operand, otherwise fall back
13139         to the common codepath that casts to long.
13140
13141         * cs-tokenizer.cs: Use the same code pattern as the int case.
13142         Maybe I should do the parsing myself, and avoid depending on the
13143         Parse routines to get this done.
13144
13145 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13146
13147         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13148         which fixes bug 51347.  This time test it.
13149
13150         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13151         attributes for example can not tell the difference between these.
13152         The difference was only a syntax feature of the language. 
13153
13154         * attribute.cs: Apply attributes to delegates.
13155
13156         * delegate.cs: Call the apply attributes method.
13157
13158 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13159
13160         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13161         comparing 0 vs Byte.MinValue, not the value
13162
13163         (ImplicitConversionRequired): When reporting a conversion error,
13164         use error 31 to print out the constant error instead of the
13165         simpler 29.
13166
13167         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13168         which fixes bug 51347.
13169
13170 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13171
13172         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13173         which fixes the -warnaserror command line option.
13174
13175 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13176
13177         * cfold.cs (DoNumericPromotions): During constant folding of
13178         additions on UIntConstant, special case intconstants with
13179         IntConstants like we do on the expression binary operator. 
13180
13181 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13182
13183         * convert.cs (ImplicitReferenceConversion): We were missing a case
13184         (System.Enum are not value types or class types, so we need to
13185         classify them separatedly).
13186
13187         * driver.cs: We do not support error 2007.
13188
13189 2003-11-12 Jackson Harper <jackson@ximian.com>
13190
13191         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13192         system directory. Also use the full file name so users can
13193         libraries names mscorlib-o-tron.dll in a non system dir.
13194         
13195 2004-01-04  David Sheldon <dave-mono@earth.li>
13196
13197         * expression.cs: Added matching ")" to error message for CS0077.
13198
13199 2003-12-19  Martin Baulig  <martin@ximian.com>
13200
13201         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13202         static method; see documentation in the method.
13203         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13204
13205         * convert.cs (Convert.ImplicitReferenceConversion,
13206         Convert.ImplicitReferenceConversionExists): Add support for
13207         generic type declarations; see gen-36.cs.
13208
13209 2003-12-19  Martin Baulig  <martin@ximian.com>
13210
13211         * pending.cs (Pending.InterfaceMethod): Use
13212         `Type.IsAssignableFrom()' instead of `=='.
13213
13214 2003-12-18  Martin Baulig  <martin@ximian.com>
13215
13216         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13217         byref types first.
13218
13219         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13220         `expr_type.Equals (target_type)' instead of `=='.
13221
13222 2003-12-08  Martin Baulig  <martin@ximian.com>
13223
13224         * generics.cs (Constraints.Types): Removed.
13225         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13226         to Type's.
13227         (Constraints.ResolveTypes): New public method; resolves the
13228         TypeExpr's to Type's.
13229         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13230         longer takes the constraints.
13231         (TypeParameter.DefineMethod): Likewise.
13232         (TypeParameter.DefineType): New public method.  Calls
13233         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13234         the constraints.
13235
13236 2003-12-08  Martin Baulig  <martin@ximian.com>
13237
13238         * convert.cs (Convert.ImplicitConversionStandard): Use
13239         `expr_type.Equals (target_type)' instead of `=='.
13240
13241 2003-12-08  Martin Baulig  <martin@ximian.com>
13242
13243         * typemanager.cs (TypeManager.GetReferenceType): Call
13244         `Type.MakeByRefType ()'.
13245
13246 2003-12-08  Martin Baulig  <martin@ximian.com>
13247
13248         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13249         just has some special meaning in some situations.  For instance,
13250         it is allowed to use `where' as the name of a variable etc.
13251
13252 2003-12-04  Martin Baulig  <martin@ximian.com>
13253
13254         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13255         `Type.MakeArrayType()' for array types.
13256
13257 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13258
13259         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13260         debugging message.
13261
13262         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13263         corlib to compile.
13264
13265 2003-11-16  Martin Baulig  <martin@ximian.com>
13266
13267         * codegen.cs (EmitContext.IsGeneric): Removed.
13268
13269         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13270         ResolveGeneric() on the DeclSpace.
13271
13272 2003-11-16  Martin Baulig  <martin@ximian.com>
13273
13274         * generic.cs (TypeArguments.Resolve):
13275         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
13276         `ResolveType()' on it to get the Type.
13277
13278 2003-11-15  Martin Baulig  <martin@ximian.com>
13279
13280         * generic.cs (ConstructedType.GetInterfaces): Override this.
13281
13282 2003-11-14  Martin Baulig  <martin@ximian.com>
13283
13284         * interface.cs (Interface.DefineType): Define all type parameters
13285         before adding the interfaces we inherit.
13286
13287 2003-11-11  Martin Baulig  <martin@ximian.com>
13288
13289         * generic.cs (ConstructedType.ResolveType): Always call
13290         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
13291
13292 2003-11-10  Martin Baulig  <martin@ximian.com>
13293
13294         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
13295         (TypeManager.InitCoreTypes): Initialize them here, but instead of
13296         calling `ResolveType()' on them, directly assign their `Type'.
13297
13298 2003-11-08  Martin Baulig  <martin@ximian.com>
13299
13300         * generic.cs (ConstructedType): Override `IsClass' etc.
13301
13302 2003-11-08  Martin Baulig  <martin@ximian.com>
13303
13304         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
13305         return value and the `out parent' parameter.
13306         (TypeContainer.DefineType): Moved the CS0644 check into
13307         GetClassBases().  Don't pass the interface types to the
13308         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
13309         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
13310
13311         * ecore.cs (TypeExpr.IsAttribute): New property.
13312         (TypeExpr.GetInterfaces): New method.
13313
13314         * interface.cs (Interface.GetInterfaceTypeByName): Return a
13315         TypeExpr instead of a Type.
13316         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
13317         (Interface.DefineType): Don't pass the interface types to the
13318         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
13319         them later and then call `TypeBulider.AddInterfaceImplementation()'.
13320
13321         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
13322         instead of a `Type[]'.
13323         (TypeManager.RegisterBuilder): Likewise.
13324         (TypeManager.AddUserInterface): Likewise.
13325         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
13326         `Type[]' and also return a `TypeExpr[]'.
13327         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
13328
13329 2003-11-08  Martin Baulig  <martin@ximian.com>
13330
13331         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
13332         Expression.     
13333
13334 2003-11-08  Martin Baulig  <martin@ximian.com>
13335
13336         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
13337         TypeManager.ResolveExpressionTypes().
13338
13339         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
13340         instead of an Expression.
13341         (TypeExpr): This is now an abstract base class for `TypeExpression'.
13342         (TypeExpression): New public class; formerly known as `TypeExpr'.
13343
13344         * expression.cs (ComposedCast): Derive from TypeExpr.
13345
13346         * typemanager.cs (TypeManager.system_*_expr): These are now
13347         TypExpr's instead of Expression's.
13348         (TypeManager.ResolveExpressionTypes): New public static function;
13349         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
13350         of them.        
13351
13352 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
13353
13354         * expression.cs (New.DoResolve): Do not dereference value that
13355         might be a null return.
13356
13357         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
13358         sure that the constant value has the right type.  Fixes an
13359         unreported bug, similar to 50425.
13360
13361         * const.cs (Const.LookupConstantValue): Call
13362         ImplicitStandardConversionExists before doing a conversion to
13363         avoid havng the TypeManager.ChangeType do conversions.
13364
13365         Reduced the number of casts used
13366
13367         (Const.ChangeType): New routine to enable reuse of the constant
13368         type changing code from statement.
13369
13370         * typemanager.cs (ChangeType): Move common initialization to
13371         static global variables.
13372
13373         Fixes #50425.
13374
13375         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
13376         every value type to go through, even if it was void.  Fix that. 
13377
13378         * cs-tokenizer.cs: Use is_identifier_start_character on the start
13379         character of the define, and the is_identifier_part_character for
13380         the rest of the string.
13381
13382 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
13383
13384         * expression.cs (UnaryMutator.EmitCode): When I updated
13385         LocalVariableReference.DoResolve, I overdid it, and dropped an
13386         optimization done on local variable references.
13387
13388 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
13389
13390         * ecore.cs: Convert the return from Ldlen into an int.
13391
13392 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
13393
13394         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
13395         the accessibility, this is a special case for toplevel non-public
13396         classes (internal for instance).
13397
13398 2003-10-20  Nick Drochak <ndrochak@gol.com>
13399
13400         * ecore.cs: Fix typo and build.  Needed another right paren.
13401
13402 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
13403
13404         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
13405         `internal' case regular and protected, but not allowing protected
13406         to be evaluated later.  Bug 49840
13407
13408 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
13409
13410         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
13411         to kb.Nlast, and not the kb.nFirst to isolate the switch
13412         statement.
13413
13414         Extract the underlying type, so enumerations of long/ulong are
13415         treated like long/ulong.
13416
13417 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
13418
13419         * expression.cs (New): Overload the meaning of RequestedType to
13420         track the possible creation of the NewDelegate type, since
13421         DoResolve is invoked more than once for new constructors on field
13422         initialization.
13423
13424         See bugs: #48800 and #37014
13425
13426         * cs-parser.jay (declare_local_constants): Take an arraylist
13427         instead of a single constant.
13428
13429         (local_constant_declaration): It should take a
13430         constant_declarators, not a constant_declarator.  Fixes 49487
13431
13432         * convert.cs: Fix error report.
13433
13434 2003-10-13 Jackson Harper <jackson@ximian.com>
13435
13436         * typemanager.cs (TypeToCoreType): Add float and double this fixes
13437         bug #49611
13438         
13439 2003-11-03  Martin Baulig  <martin@ximian.com>
13440
13441         * expression.cs (ArrayAccess.GetStoreOpcode): Added
13442         `out bool has_type_arg'; if set, we need to pass the type to
13443         ig.Emit().
13444         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
13445         Stelem_Any/Ldelem_Any for generic parameters.   
13446
13447 2003-11-02  Martin Baulig  <martin@ximian.com>
13448
13449         * expression.cs (Invocation.EmitCall): Use
13450         `TypeManager.IsValueType()' to check whether it's a value type.
13451         Don't set `struct_call' when calling a method on a type parameter.
13452
13453 2003-11-02  Martin Baulig  <martin@ximian.com>
13454
13455         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
13456         and removed the TypeBuilder argument.
13457
13458         * typemanager.cs (TypeManager.IsValueType): Return
13459         `t.IsGenericParameter || t.IsValueType'.
13460
13461 2003-10-25  Martin Baulig  <martin@ximian.com>
13462
13463         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
13464         call ConstructedType.Resolve() on it.
13465
13466         * generic.cs (ConstructedType.Resolve): Set `type' on success.
13467
13468 2003-10-25  Martin Baulig  <martin@ximian.com>
13469
13470         * class.cs (TypeContainer.GetClassBases): Changed
13471         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
13472         CS8214 reporting here.
13473         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
13474         instead of a `Type' for our parent.  In case of a recursive
13475         declaration (see tests/gen-23.cs for an example), our parent is a
13476         ConstructedType and it doesn't have its type set.  So, first
13477         create our own TypeBuilder, then call constructed.Resolve() to get
13478         the parent's type and finally TypeBuilder.SetParent() it.
13479
13480         * ecore.cs (TypeExpr.Name): New public virtual property.
13481
13482         * generic.cs
13483         (ConstructedType): We're now a TypeExpr and not just an Expression.
13484         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
13485         arguments here; this is done later.
13486         (ConstructedType.Resolve): New public method to resolve the type
13487         arguments and bind them.
13488
13489 2003-10-21  Martin Baulig  <martin@ximian.com>
13490
13491         * convert.cs: Use `TypeManager.IsValueType' instead of
13492         'type.IsValueType' everywhere.
13493
13494         * typemanager.cs (TypeManager.IsValueType): Return true for type
13495         parameters.  The reason for this is that we need to box a type
13496         parameter when converting it to a reference type.
13497
13498         * cs-parser.jay: Added support for default value expressions.
13499
13500         * generics.cs (DefaultValueExpression): New public class.       
13501
13502 2003-10-17  Martin Baulig  <martin@ximian.com>
13503
13504         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
13505         TypeContainer so we can also use this for Interfaces.
13506         (TypeParameter.Resolve): Likewise.
13507
13508         * interface.cs (Interface.DefineType): Added support for generic
13509         interfaces.
13510
13511         * cs-parser.jay: Added support for generic structs and interfaces.
13512
13513 2003-10-17  Martin Baulig  <martin@ximian.com>
13514
13515         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
13516         call generic methods :-)
13517
13518 2003-10-16  Martin Baulig  <martin@ximian.com>
13519
13520         * cs-parser.jay (namespace_or_type_name): Only create a
13521         GenericMemberAccess if we actually have type arguments.
13522
13523 2003-10-13  Martin Baulig  <martin@ximian.com>
13524
13525         * class.cs (Method.Define): If we're a generic method, call
13526         TypeBuilder.DefineGenericMethod () before resolving
13527         the parameters.
13528         (MethodData): Added .ctor which takes an additional MethodBuilder
13529         argument; this is used for generic methods.
13530         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
13531         we already have a MethodBuilder.
13532
13533 2003-10-10  Martin Baulig  <martin@ximian.com>
13534
13535         * class.cs (Method): Added .ctor which takes a `GenericMethod'
13536         instead of a `DeclSpace'.  This is used for generic methods.
13537
13538         * cs-parser.jay (method_header): Added support for generic
13539         methods; create a `GenericMethod' instance and pass it to the
13540         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
13541         parameters and locals.
13542
13543         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
13544         since we already have the location.  Check whether we're a generic
13545         type declaration or a generic method and create the correct type
13546         parameter.
13547
13548         * generic.cs (TypeParameter.DefineMethod): New public method.
13549         (GenericMethod): New public class; derives from DeclSpace and is
13550         used for generic methods.       
13551
13552 2003-10-09  Martin Baulig  <martin@ximian.com>
13553
13554         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
13555         to the .ctor.
13556         (MethodCore.DoDefineParameters): Removed the TypeContainer
13557         argument; use the DeclSpace which was passed to the .ctor instead.
13558         (MethodCore.CheckParameter): Take a DeclSpace instead of a
13559         TypeContainer; we only need a DeclSpace here.
13560
13561 2003-10-09  Martin Baulig  <martin@ximian.com>
13562
13563         * class.cs (MethodData): Added additional `DeclSpace ds' argument
13564         to the .ctor.
13565         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
13566         EmitContext's .ctor.    
13567
13568 2003-10-09  Martin Baulig  <martin@ximian.com>
13569
13570         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
13571         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
13572         AsAccessible(), moved them as well.
13573
13574         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
13575
13576 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
13577
13578         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
13579         generation for >=, as spotted by Paolo, bug 48679.  
13580         Patch from David Waite.
13581
13582         * cs-tokenizer.cs: Add handling for #pragma.
13583
13584         * cs-parser.jay: Allow for both yield and yield return in the
13585         syntax.  The anti-cobolization of C# fight will go on!
13586
13587         * class.cs (TypeBuilder.DefineType): Catch error condition here
13588         (Parent.DefineType erroring out and returning null).
13589
13590         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
13591         coping with enumerations variables, we were mistakenly processing
13592         them as a regular value type instead of built-in types.  Fixes the
13593         bug #48063
13594
13595         * typemanager.cs (IsBuiltinOrEnum): New method.
13596
13597 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
13598
13599         * cs-parser.jay: Upgrade: yield now needs the return clause.
13600
13601 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
13602
13603         * cs-parser.jay : Renamed yyName to yyNames related to jay.
13604
13605 2003-09-29  Martin Baulig  <martin@ximian.com>
13606
13607         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
13608         inflated generic methods.
13609
13610         * generics.cs (ConstructedType): Distinguish between open and
13611         closed constructed types; correctly resolve the arguments.
13612
13613 2003-09-22  Martin Baulig  <martin@ximian.com>
13614
13615         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
13616         all type arguments meet their constraints.
13617
13618 2003-09-19  Martin Baulig  <martin@ximian.com>
13619
13620         * decl.cs (MemberCache.SetupCacheForInterface): Take a
13621         `MemberCache parent' argument.  Normally, an interface doesn't
13622         have a parent type except System.Object, but we use this in gmcs
13623         for generic type parameters.
13624
13625 2003-09-18  Martin Baulig  <martin@ximian.com>
13626
13627         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
13628         on `type.IsInterface'; don't check whether the type has a parent
13629         to determine whether it's an interface.
13630
13631 2003-09-17  Martin Baulig  <martin@ximian.com>
13632
13633         * generic.cs (ConstructedType.ToString): Always use `name' as the
13634         type name.
13635
13636 2003-09-15  Martin Baulig  <martin@ximian.com>
13637
13638         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
13639
13640         * generic.cs (Constraints.Resolve): New public method; this is
13641         called to resolve the constraint types and to check whether all
13642         the constraints are correct.
13643         (Constraints.Types): New public property.
13644         (TypeParameter.Resolve): New public method; resolves all the
13645         type's constraints.
13646
13647         * class.cs (TypeContainer.DefineType): Call
13648         TypeParameter.Resolve() before actually defining the type.
13649
13650 2003-09-15  Martin Baulig  <martin@ximian.com>
13651
13652         * class.cs (TypeContainer.DefineType): Added an error flag to
13653         avoid reporting duplicate CS0146's ("class definition is
13654         circular.").
13655
13656         * driver.cs (Driver.MainDriver): Abort if
13657         RootContext.ResolveTree() reported any errors.
13658
13659 2003-09-07  Martin Baulig  <martin@ximian.com>
13660
13661         * report.cs (Error, Warning): Added overloaded versions which take
13662         a `params object[] args' and call String.Format().
13663
13664 2003-09-07  Martin Baulig  <martin@ximian.com>
13665
13666         * decl.cs (DeclSpace..ctor): Don't call
13667         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
13668         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
13669         (DeclSpace.RecordDecl): New method.
13670
13671         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
13672
13673 2003-09-02  Ravi Pratap  <ravi@ximian.com>
13674
13675         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
13676         value attributes to be applied to ParameterBuilders.
13677
13678         * class.cs (MethodCore.LabelParameters): Make static and more
13679         generic so that it can be used from other places - like interface
13680         methods, for instance.
13681
13682         * interface.cs (Interface.Emit): Call LabelParameters before
13683         emitting attributes on the InterfaceMethod.
13684
13685 2003-09-07  Martin Baulig  <martin@ximian.com>
13686
13687         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
13688         if the number of type parameters doesn't match.
13689
13690 2003-09-04  Martin Baulig  <martin@ximian.com>
13691
13692         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
13693         for arrays of generic type params (ie. `!0[]').
13694
13695 2003-09-04  Martin Baulig  <martin@ximian.com>
13696
13697         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
13698         for the moment.
13699
13700 2003-09-04  Martin Baulig  <martin@ximian.com>
13701
13702         * decl.cs (DeclSpace.LookupGeneric): New method.
13703         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
13704         moment.
13705
13706         * generic.cs (TypeParameterExpr): Take a TypeParameter as
13707         argument, not just a string.
13708         (TypeParameter.Define): New public method; this is called to
13709         actually define the generic parameter; after this, you can use the
13710         new `Type' property to get the type.
13711
13712 2003-09-04  Martin Baulig  <martin@ximian.com>
13713
13714         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
13715         is now an ArrayList; initialize the result of the `TypeParameters'
13716         property here.
13717         (DeclSpace.GetGenericData): Removed.
13718         (DeclSpace.LookupGeneric): Temporarily removed; we need to
13719         implement this in a different way.
13720         (DeclSpace.GetTypeParameters): Removed; there's now a
13721         `TypeParameters' property.
13722         (DeclSpace.TypeParameters): New public property.
13723
13724         * generic.cs (Constraints): Make this class public.
13725         (TypeParameter): New public class.
13726
13727 2003-09-04  Martin Baulig  <martin@ximian.com>
13728
13729         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
13730         generic parameters.
13731
13732         * class.cs (TypeContainer.DefineType): Call
13733         TypeBuilder.DefineGenericParameter () on all generic parameters if
13734         this is a generic type.
13735
13736 2003-08-28  Martin Baulig  <martin@ximian.com>
13737
13738         * sample-stack.il: Compile this with ilasm: "ilasm /dll
13739         sample-stack.il".
13740
13741         * sample-hello.cs: Compile this with gmcs: "gmcs
13742         /r:sample-stack.dll sample-hello.cs".
13743
13744 2003-08-28  Martin Baulig  <martin@ximian.com>
13745
13746         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
13747         the parameters to the generic type.
13748
13749 2003-08-28  Martin Baulig  <martin@ximian.com>
13750
13751         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
13752
13753 2003-08-28  Martin Baulig  <martin@ximian.com>
13754
13755         * cs-parser.jay (opt_type_argument_list): Use
13756         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
13757         (primary_expression): Replace `qualified_identifier' with `type_name'.
13758         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
13759
13760         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
13761         parser to check whether it is syntactically a type parameter list;
13762         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
13763         this case.
13764
13765 2003-08-26  Martin Baulig  <martin@ximian.com>
13766
13767         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
13768         resolving aliases; fixes #47927.
13769
13770 2003-08-26  Martin Baulig  <martin@ximian.com>
13771
13772         * statement.cs (Using.DoResolve): This is internally emitting a
13773         try/finally clause, so we need to set ec.NeedExplicitReturn if we
13774         do not always return.  Fixes #47681.
13775
13776 2003-08-26  Martin Baulig  <martin@ximian.com>
13777
13778         * decl.cs (MemberCore): Moved WarningNotHiding(),
13779         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
13780         into MemberBase.
13781         (AdditionResult): Make this nested in DeclSpace.
13782         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
13783         argument; call NamespaceEntry.Define() unless we're nested in a
13784         class or struct.
13785
13786         * namespace.cs (Namespace.DefineName): New public function.  This
13787         is called from DeclSpace's .ctor to add 
13788         (Namespace.Lookup): Include DeclSpaces in the lookup.
13789
13790         * class.cs (Operator): Derive from MemberBase, not MemberCore.
13791
13792         * const.cs (Const): Derive from MemberBase, not MemberCore.     
13793
13794 2003-08-25  Martin Baulig  <martin@ximian.com>
13795
13796         * convert.cs (Convert.ExplicitReferenceConversion): When
13797         converting from an interface type to a class, unbox if the target
13798         type is a struct type.  Fixes #47822.
13799
13800 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13801
13802         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
13803         #47854.
13804
13805 2003-08-22  Martin Baulig  <martin@ximian.com>
13806
13807         * class.cs (TypeManager.DefineType): When defining a nested type,
13808         call DefineType() on our parent; fixes #47801.
13809
13810 2003-08-22  Martin Baulig  <martin@ximian.com>
13811
13812         * class.cs (MethodData.Define): While checking if a method is an
13813         interface implementation, improve the test a bit more to fix #47654.
13814
13815 2003-08-22  Martin Baulig  <martin@ximian.com>
13816
13817         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
13818         correctly; fixes #47722.
13819
13820 2003-08-22  Martin Baulig  <martin@ximian.com>
13821
13822         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
13823         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
13824
13825         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
13826
13827 2003-08-22  Martin Baulig  <martin@ximian.com>
13828
13829         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
13830         can only be assigned in static constructors.  Fixes #47161.
13831
13832 2003-08-22  Martin Baulig  <martin@ximian.com>
13833
13834         Rewrote and improved the flow analysis code.
13835
13836         * flowbranching.cs (FlowBranching): Make this class abstract.
13837         (FlowBranching.CreateBranching): New static function to create a
13838         new flow branching.
13839         (FlowBranchingBlock, FlowBranchingException): New classes.
13840         (FlowBranching.UsageVector.Type): New public readonly field.
13841         (FlowBranching.UsageVector.Breaks): Removed the setter.
13842         (FlowBranching.UsageVector.Returns): Removed the setter.
13843         (FlowBranching.UsageVector): Added Break(), Return(),
13844         NeverReachable() and Throw() methods to modify the reachability.
13845         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
13846         done by FlowBranching.Merge().
13847         (FlowBranching.UsageVector.MergeChild): New method; merges the
13848         merge result into the current vector.
13849         (FlowBranching.Merge): New abstract method to merge a branching.
13850
13851 2003-08-12  Martin Baulig  <martin@ximian.com>
13852
13853         * expression.cs (Indirection.CacheTemporaries): Create the
13854         LocalTemporary with the pointer type, not its element type.
13855
13856 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
13857
13858         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
13859         token was a keyword or not.
13860
13861         Add `error' options where an IDENTIFIER was expected;  Provide
13862         CheckToken and CheckIdentifierToken convenience error reporting
13863         functions. 
13864
13865         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
13866
13867         * decl.cs: Rename `NamespaceEntry Namespace' public field into
13868         NameSpaceEntry NameSpaceEntry.
13869
13870         (LookupInterfaceOrClass): Avoid creating a full qualified name
13871         from namespace and name: avoid doing lookups when we know the
13872         namespace is non-existant.   Use new Tree.LookupByNamespace which
13873         looks up DeclSpaces based on their namespace, name pair.
13874
13875         * driver.cs: Provide a new `parser verbose' to display the
13876         exception thrown during parsing.  This is turned off by default
13877         now, so the output of a failure from mcs is more graceful.
13878
13879         * namespace.cs: Track all the namespaces defined in a hashtable
13880         for quick lookup.
13881
13882         (IsNamespace): New method
13883
13884 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
13885
13886         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
13887         we know that we need to concatenate (full typename can never be
13888         null). 
13889
13890         * class.cs: ditto.
13891
13892         * statement.cs: Use a bitfield;  Do not initialize to null things
13893         which are done by the constructor by default.
13894
13895         * cs-parser.jay: bug fix, parameter was 4, not 3.
13896
13897         * expression.cs: Just use the property;
13898
13899         * statement.cs: No need for GetVariableInfo method.
13900
13901 2003-08-08  Martin Baulig  <martin@ximian.com>
13902
13903         * flowanalysis.cs (FlowReturns): This is now nested in the
13904         `FlowBranching' class.
13905         (MyBitVector): Moved this here from statement.cs.
13906         (FlowBranching.SiblingType): New enum type.
13907         (FlowBranching.CreateSibling): Added `SiblingType' argument.
13908
13909 2003-08-07  Martin Baulig  <martin@ximian.com>
13910
13911         * flowanalysis.cs (FlowBranchingType): This is now nested in the
13912         `FlowBranching' class and called `BranchingType'.
13913
13914 2003-08-07  Martin Baulig  <martin@ximian.com>
13915
13916         * flowanalysis.cs: Moved all the control flow analysis code into
13917         its own file.
13918
13919 2003-08-07  Martin Baulig  <martin@ximian.com>
13920
13921         * assign.cs (Assign.DoResolve): `target' must either be an
13922         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
13923         #37319.
13924
13925 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
13926
13927         * expression.cs (BinaryMethod): This kind of expression is created by the
13928         Binary class if it determines that the operator has to be handled
13929         by a method.
13930
13931         (BinaryDelegate): This kind of expression is created if we are
13932         dealing with a + or - operator on delegates.
13933
13934         (Binary): remove method, argumetns, and DelegateOperator: when
13935         dealing with methods, 
13936
13937         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
13938
13939         * statement.cs (Block): use bitfields for the three extra booleans
13940         we had in use.   Remove unused topblock parameter.
13941
13942         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
13943
13944         * assign.cs: Drop extra unneeded tests.
13945
13946 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
13947
13948         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
13949
13950         * statement.cs (Foreach): Use VariableStorage instead of
13951         LocalBuilders.   
13952
13953         * codegen.cs (VariableStorage): New class used by clients that
13954         require a variable stored: locals or fields for variables that
13955         need to live across yield.
13956
13957         Maybe provide a convenience api for EmitThis+EmitLoad?
13958
13959         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
13960         these bad boys.
13961
13962 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
13963
13964         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
13965         RemapParameterLValue): New methods that are used to turn a
13966         precomputed FieldInfo into an expression like this:
13967
13968                 instance.FieldInfo
13969
13970         The idea is to use this instead of making LocalVariableReference
13971         have more than one meaning.
13972
13973         * cs-parser.jay: Add error production to BASE.
13974
13975         * ecore.cs: Deal with TypeManager.GetField returning null, which
13976         is now a valid return value.
13977
13978         (FieldExprNoAddress): New expression for Fields whose address can
13979         not be taken.
13980
13981         * expression.cs (LocalVariableReference): During the resolve
13982         phases, create new expressions if we are in a remapping context.
13983         Remove code that dealt with remapping here.
13984
13985         (ParameterReference): same.
13986
13987         (ProxyInstance): New expression, like the `This' expression, but
13988         it is born fully resolved.  We know what we are doing, so remove
13989         the errors that are targeted to user-provided uses of `this'.
13990
13991         * statement.cs (Foreach): our variable is now stored as an
13992         Expression;  During resolution, follow the protocol, dont just
13993         assume it will return this.
13994
13995 2003-08-06  Martin Baulig  <martin@ximian.com>
13996
13997         * support.cs (SeekableStreamReader.cs): New public class.
13998
13999         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14000         SeekableStreamReader instead of the normal StreamReader.
14001
14002 2003-08-04  Martin Baulig  <martin@ximian.com>
14003
14004         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14005         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14006         deambiguate casts and delegate invocations.
14007         (parenthesized_expression): Use the new tokens to ensure this is
14008         not a cast of method invocation.
14009
14010         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14011         when reading a `)' and Deambiguate_CloseParens () was previously
14012         called.
14013
14014         * expression.cs (ParenthesizedExpression): New class.  This is
14015         just used for the CS0075 test.
14016         (Binary.DoResolve): Check for CS0075.   
14017
14018 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14019
14020         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14021         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14022         reference comparison.
14023
14024         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14025         examine the ReturnType for equality - this is necessary in the
14026         cases of implicit and explicit operators whose signature also
14027         includes the return type.
14028
14029 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14030
14031         * namespace.cs: Cache the result of the namespace computation,
14032         instead of computing it every time.
14033
14034 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14035
14036         * decl.cs: Use a global arraylist that we reuse over invocations
14037         to avoid excesive memory consumption.  Reduces memory usage on an
14038         mcs compile by one meg (45 average).
14039
14040         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14041         private, work around that.
14042
14043 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14044
14045         * literal.cs (IntLiteral): Define Zero and One static literals. 
14046
14047         * cs-parser.jay (integer_literal): use static literals to reduce
14048         memory usage for the most used literals (0, 1 and -1).  211kb
14049         reduced in memory usage.
14050
14051         Replace all calls to `new ArrayList' with `new
14052         ArrayList(4)' which is a good average number for most allocations,
14053         and also requires only 16 bytes of memory for its buffer by
14054         default. 
14055
14056         This reduced MCS memory usage in seven megabytes for the RSS after
14057         bootstrapping.
14058
14059 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14060
14061         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14062         handle params methods the correct way by forming only one
14063         applicable set with params and normal methods in them. Earlier we
14064         were looking at params methods only if we found no normal methods
14065         which was not the correct thing to do.
14066
14067         (Invocation.BetterFunction): Take separate arguments indicating
14068         when candidate and the best method are params methods in their
14069         expanded form.
14070
14071         This fixes bugs #43367 and #46199.
14072
14073         * attribute.cs: Documentation updates.
14074
14075         (CheckAttribute): Rename to CheckAttributeTarget.
14076         (GetValidPlaces): Rename to GetValidTargets.
14077
14078         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14079         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14080
14081         Fixes bug #44468.
14082
14083 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14084
14085         * codegen.cs: Compute IsGeneric correctly.
14086
14087         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14088         resolution. 
14089
14090         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14091         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14092         regressions, and I was chasing more bugs than I required.
14093
14094         * interface.cs: Use expressions for base type names (like classes
14095         and structs have been doing for a while now), and resolve that.
14096         This patch should probably go into head as well.
14097
14098         This makes it one less user of FindType.
14099
14100 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14101
14102         This compiler can not self host currently.  Need to fix that.
14103         
14104         * Makefile: compile to `gmcs.exe'
14105
14106         * driver.cs: Turn on v2 by default on gmcs.
14107
14108         * generic.cs (ConstructedType): Does no longer take a container
14109         type argument;  That will be taken care of later.
14110
14111         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14112         Use SimpleName to resolve for now, so we can continue the work on
14113         the parser, until we get Type.GetType that understands generics.
14114
14115         (ConstructedType.ToString): Implement
14116
14117         (TypeArguments.Resolve): Resolve the child expressions as types. 
14118         
14119         * cs-parser.jay: Rename interface_constraints to
14120         type_parameter_constraints
14121
14122         (namespace_or_type_name): Only use constructed types for the basic
14123         construction, we will deal with identifier<...> later.
14124
14125         (type/type_name): No longer call DecomposeQI, as
14126         namespace_or_type_name is always decoded now.
14127         
14128 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14129
14130         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14131         closely: we eliminate methods in base types when we have an
14132         applicable method in a top-level type.
14133
14134         Please see section 14.5.5.1 for an exact description of what goes
14135         on. 
14136
14137         This fixes bug #45127 and a host of other related to corlib compilation.
14138
14139         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14140         array is the method corresponding to the top-level type (this is
14141         because of the changes made to icall.c) so we change this
14142         accordingly.
14143
14144         (MethodGroupExpr.Name): This too.
14145
14146         * typemanager.cs (GetElementType): New method which does the right
14147         thing when compiling corlib. 
14148
14149         * everywhere: Make use of the above in the relevant places.
14150
14151 2003-07-22  Martin Baulig  <martin@ximian.com>
14152
14153         * cs-parser.jay (invocation_expression): Moved
14154         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14155         `cast_expression', but create a InvocationOrCast which later
14156         resolves to either an Invocation or a Cast.
14157
14158         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14159         method; call this before EmitStatement() to make sure that this
14160         expression can be used as a statement.
14161
14162         * expression.cs (InvocationOrCast): New class; resolves to either
14163         an Invocation or a Cast.
14164
14165         * statement.cs (StatementExpression): Call ResolveStatement() on
14166         the ExpressionStatement before emitting it.
14167
14168 2003-07-21  Martin Baulig  <martin@ximian.com>
14169
14170         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14171         `ref' and `out' attributes match; fixes #46220.
14172         (MemberAccess.ResolveMemberAccess): You can't reference a type
14173         through an expression; fixes #33180.
14174         (Indexers.GetIndexersForType): Don't return the indexers from
14175         interfaces the class implements; fixes #46502.
14176
14177 2003-07-21  Martin Baulig  <martin@ximian.com>
14178
14179         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14180         CS0661 checks; fixes bug #30442.
14181
14182 2003-07-21  Martin Baulig  <martin@ximian.com>
14183
14184         * decl.cs (AdditionResult): Added `Error'.
14185
14186         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14187
14188         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14189         cs0031.cs actually work.
14190
14191  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14192  
14193         * cs-parser.jay (namespace_name): do not use
14194         namespace_or_type_name, use qualified_identifier, because
14195         namespace_or_type_name will soon return a composed expression
14196         instead of a string.
14197  
14198         (namespace_or_type_name): Instead of returning a string, now this
14199         production returns an expression.
14200  
14201         * codegen.cs (EmitContext): Setup IsGeneric property based on
14202         whether our DeclSpace is generic, our the method is generic.
14203  
14204         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14205         the method is generic.
14206  
14207         * cs-parser.jay (type_arguments, opt_type_argument_list,
14208         type_parameters, type_parameter_list, opt_type_parameter_list,
14209         type_parameter,, opt_type_parameter_constraints_clauses,
14210         type_parameter_constraints_clauses,
14211         type_parameter_constraint_clause, type_parameter_constraint,
14212         interface_constraints): Add new production
14213  
14214         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14215         DeclSpace is generic or not.
14216  
14217         (DeclSpace.SetParameterInfo): New routine, used to set the
14218         parameter info for a type.
14219  
14220         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14221         returns a GenericTypeExpr
14222  
14223         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14224         generic, lookup the generic argument.
14225  
14226         * attribute.cs: Do not allow TypeParameterExpressions in
14227         Attributes.
14228  
14229         * class.cs: Do not allow the Main method to be defined in a
14230         Generic container.
14231  
14232         * expression.cs (SizeOf): Do not allow generic types to be used as
14233         arguments to sizeof.
14234  
14235         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14236         it: whether a type is generic or not.  Only works for types we are
14237         currently building for now.
14238         
14239 2003-07-20  Martin Baulig  <martin@ximian.com>
14240
14241         * namespace.cs: Fixed that bug which caused a crash when compiling
14242         the debugger's GUI.
14243
14244 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14245
14246         * typemanager.cs (LookupTypeReflection): Never expose types which
14247         are NotPublic, NestedPrivate, NestedAssembly, or
14248         NestedFamANDAssem.  We used to return these, and later do a check
14249         that would report a meaningful error, but the problem is that we
14250         would not get the real match, if there was a name override.
14251
14252 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14253
14254         * namespace.cs (Namespace, Name): Do not compute the namespace
14255         name dynamically, compute it in the constructor.  This reduced
14256         memory usage by 1697 KB.
14257
14258         * driver.cs: Use --pause to pause at the end.
14259
14260 2003-07-17  Peter Williams  <peter@newton.cx>
14261
14262         * Makefile: Change the name of the test target so that it doesn't
14263         conflict with the recursive test target.
14264
14265 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14266
14267         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14268         AddressOf): Do not use EmitThis, that was wrong, use the actual
14269         this pointer.
14270
14271 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
14272
14273         * class.cs (MethodData.Define): While checking if a method is an
14274         interface implementation, improve the test: If we are not public
14275         (use new test here: use the computed MethodAttributes directly,
14276         instead of the parsed modifier flags) check if the `implementing'
14277         method comes from an interface or not.
14278
14279         * pending.cs (VerifyPendingMethods): Slightly better error
14280         message.
14281
14282         * makefile: add test target that does the mcs bootstrap.
14283
14284 2003-07-16  Ravi Pratap  <ravi@ximian.com>
14285
14286         * interface.cs (Define): Do nothing here since there are no
14287         members to populate etc. Move the attribute emission out of here
14288         since this was just totally the wrong place to put it. Attribute
14289         application happens during the 'Emit' phase, not in the 'Define'
14290         phase.
14291
14292         (Emit): Add this method and move the attribute emission here
14293
14294         * rootcontext.cs (EmitCode): Call the Emit method on interface
14295         types too.
14296
14297 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14298
14299         * expression.cs (OverloadResolve): Report error only if Location
14300         is not 'Null' which means that there was a probe going on.
14301
14302 2003-07-14  Martin Baulig  <martin@ximian.com>
14303
14304         * expression.cs (ConditionalLogicalOperator): New public class to
14305         implement user defined conditional logical operators.
14306         This is section 14.11.2 in the spec and bug #40505.
14307
14308 2003-07-14  Martin Baulig  <martin@ximian.com>
14309
14310         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
14311
14312 2003-07-14  Martin Baulig  <martin@ximian.com>
14313
14314         * codegen.cs (EmitContext.InFixedInitializer): New public field.
14315
14316         * ecore.cs (IVariable.VerifyFixed): New interface method.
14317
14318         * expression.cs (Unary.ResolveOperator): When resolving the `&'
14319         operator, check whether the variable is actually fixed.  Fixes bug
14320         #36055.  Set a variable definitely assigned when taking its
14321         address as required by the spec.
14322
14323         * statement.cs (LocalInfo.IsFixed): New field.
14324         (LocalInfo.MakePinned): Set `IsFixed' to true.
14325
14326 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14327
14328         * attribute.cs (Attribute.Resolve): While doing a Member lookup
14329         for .ctors, ensure that we only ask for members declared in the
14330         attribute type (BindingFlags.DeclaredOnly).
14331
14332         Fixes bug #43632.
14333
14334         * expression.cs (Error_WrongNumArguments): Report error 1501
14335         correctly the way CSC does.
14336
14337 2003-07-13  Martin Baulig  <martin@ximian.com>
14338
14339         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
14340         lookup on the fully qualified name, to make things like "X.X" work
14341         where "X.X" is a fully qualified type name, but we also have a
14342         namespace "X" in the using list.  Fixes #41975.
14343
14344 2003-07-13  Martin Baulig  <martin@ximian.com>
14345
14346         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
14347         function. If we're a CompoundAssign, we need to create an embedded
14348         CompoundAssign, not an embedded Assign.
14349         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
14350         Fixes #45854.
14351
14352 2003-07-13  Martin Baulig  <martin@ximian.com>
14353
14354         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
14355         work to fix bug #46088.
14356
14357 2003-07-13  Ravi Pratap <ravi@ximian.com>
14358
14359         * class.cs (Operator.Emit): Do not emit attributes here - it is
14360         taken care of by the Method class that we delegate too. This takes
14361         care of bug #45876.
14362
14363 2003-07-10  Martin Baulig  <martin@ximian.com>
14364
14365         * expression.cs (TypeOfVoid): New class.
14366         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
14367
14368 2003-07-10  Martin Baulig  <martin@ximian.com>
14369
14370         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
14371         bug #35957.
14372
14373 2003-07-10  Martin Baulig  <martin@ximian.com>
14374
14375         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
14376         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
14377
14378         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
14379
14380         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
14381
14382 2003-07-10  Martin Baulig  <martin@ximian.com>
14383
14384         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
14385         of decimal.  Fixes #42850.
14386
14387         NOTE: I also fixed the created byte blob, but this doesn't work on
14388         the MS runtime and csc never produces any byte blobs for decimal
14389         arrays.
14390
14391 2003-07-10  Martin Baulig  <martin@ximian.com>
14392
14393         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
14394         structs; fixes #32068.
14395         (Block.AddChildVariableNames): Fixed #44302.
14396
14397 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14398
14399         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
14400
14401 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14402
14403         * attribute.cs: And this test is onger needed.
14404
14405 2003-07-08  Martin Baulig  <martin@ximian.com>
14406
14407         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
14408         inaccessible types.  Fixes #36313.
14409
14410         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
14411
14412         * namespace.cs (NamespaceEntry): Create implicit entries for all
14413         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
14414         implicit entries for N1.N2 and N1.
14415
14416 2003-07-08  Martin Baulig  <martin@ximian.com>
14417
14418         Rewrote the handling of namespaces to fix a lot of the issues
14419         wrt. `using' aliases etc.
14420
14421         * namespace.cs (Namespace): Splitted this class into a
14422         per-assembly `Namespace' and a per-file `NamespaceEntry'.
14423
14424         * typemanager.cs (TypeManager.IsNamespace): Removed.
14425         (TypeManager.ComputeNamespaces): Only compute namespaces from
14426         loaded assemblies here, not the namespaces from the assembly we're
14427         currently compiling.
14428
14429 2003-07-08  Martin Baulig  <martin@ximian.com>
14430
14431         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
14432
14433 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14434
14435         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
14436         already fixed it.  
14437
14438         I thought about the memory savings here, but LookupTypeReflection
14439         is used under already very constrained scenarios.  Compiling
14440         corlib or mcs only exposes one hit, so it would not really reduce
14441         any memory consumption.
14442
14443 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14444
14445         * typemanager.cs: fixes bug #45889 by only adding public types from
14446         other assemblies to the list of known types.
14447
14448 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14449
14450         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
14451         on the type we resolved.
14452
14453 2003-07-05  Martin Baulig  <martin@ximian.com>
14454
14455         * pending.cs (PendingImplementation.ParentImplements): Don't
14456         create the proxy if the parent is abstract.
14457
14458         * class.cs (TypeContainer.DefineIndexers): Process explicit
14459         interface implementations first.  Fixes #37714.
14460
14461 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
14462
14463         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
14464         defined recursively;  but since we modify the input parameters
14465         (left is set to `this' temporarily), we reset this value if the
14466         left_is_explicit is false, which gives the original semantics to
14467         the code.  
14468
14469         * literal.cs (NullPointer): new class used to represent a null
14470         literal in a pointer context.
14471
14472         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
14473         type is a pointer, use a NullPointer object instead of a
14474         NullLiteral.   Closes 43687
14475
14476         (ExplicitConversion): Convert pointer values using
14477         the conv opcode to the proper type.
14478
14479         * ecore.cs (New): change ValueTypeVariable property into a method,
14480         that returns whether the valuetype is suitable for being used.
14481
14482         * expression.cs (Binary.DoNumericPromotions): Only return if we
14483         the int constant was a valid uint, and we can return both left and
14484         right as uints.  If not, we continue processing, to trigger the
14485         type conversion.  This fixes 39018.
14486
14487         * statement.cs (Block.EmitMeta): During constant resolution, set
14488         the CurrentBlock property on the emitcontext, so that we resolve
14489         constants propertly.
14490
14491 2003-07-02  Martin Baulig  <martin@ximian.com>
14492
14493         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
14494         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
14495
14496         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
14497         than emitting it here.
14498
14499         * statement.cs: Fixed some more flow analysis bugs.
14500
14501 2003-07-02  Martin Baulig  <martin@ximian.com>
14502
14503         * class.cs (MethodData.Define): When implementing interface
14504         methods, set Final unless we're Virtual.
14505
14506         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
14507         check work for interface methods.
14508
14509 2003-07-01  Martin Baulig  <martin@ximian.com>
14510
14511         * ecore.cs (EmitContext.This): Replaced this property with a
14512         GetThis() method which takes a Location argument.  This ensures
14513         that we get the correct error location for a CS0188.
14514
14515 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
14516
14517         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
14518         ImplicitStandardConversion.
14519
14520         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
14521
14522 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
14523
14524         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
14525         optimization.
14526
14527 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
14528
14529         * class.cs (Constructor.Define): Turn off initlocals for unsafe
14530         constructors.
14531
14532         (MethodData.Define): Turn off initlocals for unsafe methods.
14533
14534 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
14535
14536         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
14537         complete;  Fixes #37521.
14538
14539         * delegate.cs: Use Modifiers.TypeAttr to compute the
14540         TypeAttributes, instead of rolling our own.  This makes the flags
14541         correct for the delegates.
14542
14543 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
14544
14545         * class.cs (Constructor.Define): Set the private flag for static
14546         constructors as well.
14547
14548         * cs-parser.jay (statement_expression): Set the return value to
14549         null, to avoid a crash when we catch an error.
14550
14551 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
14552
14553         * cs-parser.jay: Applied patch from Jackson that adds support for
14554         extern and unsafe modifiers to destructor declarations.
14555
14556         * expression.cs: Report error 21 if the user is trying to index a
14557         System.Array.
14558
14559         * driver.cs: Add an error message, suggested by the bug report.
14560
14561         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
14562         if we do not have a ": this ()" constructor initializer.  Fixes 45149
14563
14564 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
14565
14566         * namespace.cs: Add some information to reduce FAQs.
14567
14568 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
14569
14570         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
14571         underlying enumeration types.  Fixes #43915.
14572
14573         * expression.cs: Treat ushort/short as legal values to be used in
14574         bitwise operations.
14575
14576 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
14577
14578         * delegate.cs: transfer custom attributes for paramenters from
14579         the delegate declaration to Invoke and BeginInvoke.
14580
14581 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
14582
14583         * attribute.cs: handle custom marshalers and emit marshal info
14584         for fields, too.
14585
14586 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
14587
14588         * makefile.gnu: Added anonymous.cs to the compiler sources.
14589
14590 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
14591
14592         * iterators.cs: Change the name of the proxy class to include two
14593         underscores.
14594
14595         * cs-parser.jay: Update grammar to include anonymous methods.
14596
14597         * anonymous.cs: new file.
14598
14599 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
14600
14601         * class.cs (Field.Define): Add missing test for pointers and
14602         safety. 
14603
14604 2003-05-27  Ravi Pratap  <ravi@ximian.com>
14605
14606         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
14607         we use the stobj opcode.
14608
14609         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
14610         since it wasn't the correct fix. 
14611
14612         It still is puzzling that we are required to use stobj for IntPtr
14613         which seems to be a ValueType.
14614
14615 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
14616
14617         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
14618         during regular simple name resolution.   Now, the trick is that
14619         instead of returning for processing the simplename, we do a
14620         TypeManager.LookupType (ie, a rooted lookup as opposed to a
14621         contextual lookup type).   If a match is found, return that, if
14622         not, return for further composition.
14623
14624         This fixes long-standing 30485.
14625
14626         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14627         using the address to initialize an object, do an Stobj instead of
14628         using the regular Stelem.
14629
14630         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
14631         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
14632         Because if we are a BaseIndexerAccess that value will be true.
14633         Fixes 43643.
14634
14635         * statement.cs (GotoCase.Resolve): Return after reporting an
14636         error, do not attempt to continue. 
14637
14638         * expression.cs (PointerArithmetic.Emit): If our operand is a
14639         long, convert our constants to match the operand before
14640         multiplying.  Convert to I type before adding.   Fixes 43670.
14641
14642 2003-05-14  Ravi Pratap  <ravi@ximian.com>
14643
14644         * enum.cs (ImplicitConversionExists) : Rename to
14645         ImplicitEnumConversionExists to remove ambiguity. 
14646
14647         * ecore.cs (NullCast): New type of cast expression class which
14648         basically is very similar to EmptyCast with the difference being
14649         it still is a constant since it is used only to cast a null to
14650         something else
14651         (eg. (string) null)
14652
14653         * convert.cs (ImplicitReferenceConversion): When casting a null
14654         literal, we return a NullCast.
14655
14656         * literal.cs (NullLiteralTyped): Remove - I don't see why this
14657         should be around anymore.
14658
14659         The renaming (reported was slightly wrong). Corrections:
14660
14661         ConvertImplicitStandard -> ImplicitConversionStandard
14662         ConvertExplicitStandard -> ExplicitConversionStandard
14663
14664         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
14665         before passing them in !
14666
14667         * convert.cs (ImplicitConversionStandard): When comparing for
14668         equal expr and target types, ensure that expr is not a
14669         NullLiteral.
14670
14671         In general, we must not be checking (expr_type ==
14672         target_type) in the top level conversion methods
14673         (ImplicitConversion, ExplicitConversion etc). This checking is
14674         done in the methods that they delegate to.
14675
14676 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
14677
14678         * convert.cs: Move Error_CannotConvertType,
14679         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
14680         ImplicitNumericConversion, ImplicitConversionExists,
14681         ImplicitUserConversionExists, StandardConversionExists,
14682         FindMostEncompassedType, FindMostSpecificSource,
14683         FindMostSpecificTarget, ImplicitUserConversion,
14684         ExplicitUserConversion, GetConversionOperators,
14685         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
14686         TryImplicitIntConversion, Error_CannotConvertImplicit,
14687         ConvertImplicitRequired, ConvertNumericExplicit,
14688         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
14689         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
14690         its own file.
14691
14692         Perform the following renames:
14693
14694         StandardConversionExists -> ImplicitStandardConversionExists
14695         ConvertImplicit -> ImplicitConversion
14696         ConvertImplicitStandard -> ImplicitStandardConversion
14697         TryImplicitIntConversion -> ImplicitIntConversion
14698         ConvertImplicitRequired -> ImplicitConversionRequired
14699         ConvertNumericExplicit -> ExplicitNumericConversion
14700         ConvertReferenceExplicit -> ExplicitReferenceConversion
14701         ConvertExplicit -> ExplicitConversion
14702         ConvertExplicitStandard -> ExplicitStandardConversion
14703
14704 2003-05-19  Martin Baulig  <martin@ximian.com>
14705
14706         * statement.cs (TypeInfo.StructInfo): Made this type protected.
14707         (TypeInfo): Added support for structs having structs as fields.
14708
14709         * ecore.cs (FieldExpr): Implement IVariable.
14710         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
14711         VariableInfo for the field.
14712
14713 2003-05-18  Martin Baulig  <martin@ximian.com>
14714
14715         * expression.cs (This.DoResolve): Report a CS0027 if we're
14716         emitting a field initializer.
14717
14718 2003-05-18  Martin Baulig  <martin@ximian.com>
14719
14720         * expression.cs (This.ResolveBase): New public function.
14721         (This.DoResolve): Check for CS0188.
14722
14723         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
14724         This.Resolve().
14725
14726         * ecore.cs (MethodGroupExpr.DoResolve): Set the
14727         `instance_expression' to null if we don't have any non-static
14728         methods.
14729
14730 2003-05-18  Martin Baulig  <martin@ximian.com>
14731
14732         Reworked the way how local variables and parameters are handled by
14733         the flow analysis code.
14734
14735         * statement.cs (TypeInfo, VariableMap): New public classes.
14736         (VariableInfo): New public class.  This is now responsible for
14737         checking whether a variable has been assigned.  It is used for
14738         parameters and local variables.
14739         (Block.EmitMeta): Take the InternalParameters as argument; compute
14740         the layout of the flow vectors here.
14741         (Block.LocalMap, Block.ParameterMap): New public properties.
14742         (FlowBranching): The .ctor doesn't get the InternalParameters
14743         anymore since Block.EmitMeta() now computes the layout of the flow
14744         vector.
14745         (MyStructInfo): This class is now known as `StructInfo' and nested
14746         in `TypeInfo'; we don't access this directly anymore.
14747
14748         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
14749         property and removed IsAssigned(), IsFieldAssigned(),
14750         SetAssigned() and SetFieldAssigned(); we now call them on the
14751         VariableInfo so we don't need to duplicate this code everywhere.
14752
14753         * expression.cs (ParameterReference): Added `Block block' argument
14754         to the .ctor.
14755         (LocalVariableReference, ParameterReference, This): The new
14756         VariableInfo class is now responsible for all the definite
14757         assignment stuff.
14758
14759         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
14760         IsParameterAssigned, SetParameterAssigned): Removed.
14761
14762 2003-05-18  Martin Baulig  <martin@ximian.com>
14763
14764         * typemanager.cs (InitCoreTypes): Try calling
14765         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
14766         the 3-args-version.  Corlib now also needs our `void_type'.
14767         (GetMethod): Added overloaded version which takes an optional
14768         `bool report_errors' to allow lookups of optional methods.
14769
14770 2003-05-12  Martin Baulig  <martin@ximian.com>
14771
14772         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
14773         only used for locals and not for parameters.
14774
14775 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
14776
14777         * support.cs (InternalParameters.ParameterType): Return the
14778         ExternalType of the parameter.
14779
14780         * parameter.cs (Parameter.ExternalType): drop the two arguments,
14781         they were unused.
14782
14783 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
14784
14785         * class.cs (MethodData.Define): Do not set the `newslot' on
14786         interface members, if they are also flagged as "override".
14787
14788         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
14789         better code for ++i and i++.  This only works for static fields
14790         and local variables.
14791
14792         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
14793         want to pull the DeclSpace out of the builder_to_declspace instead
14794         of the TypeBuilder (like in TypeContainer.FindMembers).
14795
14796         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
14797         instead of LookupTypeContainer.  Fixes the crash on .NET for
14798         looking up interface members.
14799
14800         * const.cs: Create our own emit context during the Definition
14801         stage, so that constants are evaluated in the proper context, when
14802         a recursive definition happens.
14803
14804 2003-05-11  Martin Baulig  <martin@ximian.com>
14805
14806         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
14807         new block for a switch section.
14808         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
14809         the adding/lookup in the switch block.  Fixes #39828.
14810
14811 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
14812
14813         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
14814         functionality: I needed to convert the data after I had performed
14815         the add/sub operation into the operands type size.
14816
14817         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
14818         pass the type for the box operation, otherwise the resulting
14819         object would have been of type object.
14820
14821         (BoxedCast): Add constructor to specify the type to box as.
14822
14823 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
14824
14825         * iterators.cs: I was reusing the `count' variable inadvertently,
14826         take steps to not allow this to happen.
14827
14828 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
14829
14830         * attribute.cs (Attribute.Resolve): Params attributes are encoded
14831         by creating an array at the point where the params starts and
14832         putting all those arguments there, then adjusting the size of the
14833         array.
14834
14835 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
14836
14837         * expression.cs (New.AddressOf): Implement interface
14838         IMemoryLocation.  This is used when the `new' operator is used in
14839         the context of an invocation to a method on a value type.
14840
14841         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
14842         example. 
14843
14844         * namespace.cs: Also check the using aliases here.
14845
14846         * driver.cs: Move the test for using validity after the types have
14847         been entered, so we do a single pass that also includes the using
14848         aliases. 
14849
14850         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
14851         in the regular case.   CreateSiblingForFinally is doing extra
14852         error checking.
14853
14854         * attribute.cs (GetAttributeArgumentExpression): Store the result
14855         on an out value, and use the return value to indicate failure
14856         instead of using null (which is a valid return for Constant.GetValue).
14857
14858         * statement.cs: Perform the analysis flow for the increment
14859         portion after the statement, because this will be the real flow of
14860         execution.  Fixes #42385
14861
14862         * codegen.cs (EmitContext.EmitArgument,
14863         EmitContext.EmitStoreArgument): New helper functions when the
14864         RemapToProxy flag is set.
14865
14866         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
14867         function.
14868
14869         Add support for remapping parameters. 
14870
14871         * iterators.cs: Propagate parameter values;  Store parameter
14872         values in the proxy classes.
14873
14874 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
14875
14876         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
14877         need a proxy reference;  I do not know what I was thinking
14878
14879         * cs-parser.jay (constructor_initializer): catch another error,
14880         and display nice message.
14881
14882         (field_declaration): catch void field declaration
14883         to flag a better error. 
14884
14885         * class.cs (MemberBase.CheckBase): Report an error instead of a
14886         warning if a new protected member is declared in a struct. 
14887         (Field.Define): catch the error of readonly/volatile.
14888
14889         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
14890
14891         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
14892         volatile variable is taken
14893
14894 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
14895
14896         * statement.cs (Fixed.Resolve): Report an error if we are not in
14897         an unsafe context.
14898
14899 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
14900
14901         * typemanager.cs: reuse the code that handles type clashes for
14902         delegates and enumerations.
14903
14904         * class.cs (Report28): Always report.
14905
14906         * expression.cs (EncodeAsAttribute): Allow nulls here.
14907
14908 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
14909
14910         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
14911         the functionality for testing whether an expression is valid for
14912         an attribute here.  Also handle the case of arrays of elements
14913         being stored. 
14914
14915         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
14916         encoding a linear array into an array of objects that are suitable
14917         to be passed to an CustomAttributeBuilder.
14918
14919         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
14920
14921         * ecore.cs: (FieldExpr): Handle field remapping here.
14922
14923         * iteratators.cs: Pass the instance variable (if the method is an
14924         instance method) to the constructors, so we can access the field
14925         variables on the class.
14926
14927         TODO: Test this with structs.  I think the THIS variable on
14928         structs might have to be a pointer, and not a refenrece
14929
14930 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
14931
14932         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
14933         local variables to fields in a proxy class.
14934
14935         * iterators.cs (PopulateProxy): Rename our internal fields to
14936         <XXX>.  
14937         Create a <THIS> field if we are an instance method, so we can
14938         reference our parent container variables.
14939         (MapVariable): Called back from the EmitContext code to enter a
14940         new variable to field mapping into the proxy class (we just create
14941         a FieldBuilder).
14942
14943         * expression.cs
14944         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
14945         for using the remapped locals to fields.
14946
14947         I placed the code here, because that gives the same semantics to
14948         local variables, and only changes the Emit code.
14949
14950         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
14951         statements inside iterators.
14952         (VariableInfo): Add a FieldBuilder for the cases when we are
14953         remapping local variables to fields in a proxy class
14954
14955         * ecore.cs (SimpleNameResolve): Avoid testing two times for
14956         current_block != null.
14957
14958         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
14959         not cope with strings, as it has been moved to the
14960         TableSwitchEmit.  Fixed bug in switch generation.
14961
14962         * expression.cs (New.DoResolve): Provide more context for the user
14963         when reporting an error.
14964
14965         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
14966         pointers. 
14967
14968         * expression.cs (MemberAccess.DoResolve): When we get a type back,
14969         check the permissions for it.  Note than in a type-resolution
14970         context the check was already present in DeclSpace.ResolveType,
14971         but was missing from the MemberAccess.
14972
14973         (ArrayCreation.CheckIndices): warn if the user has
14974         more nested levels of expressions, but there are no more
14975         dimensions specified.  Avoids crash on bug 41906.
14976
14977 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
14978
14979         * statement.cs (Block): replace Implicit bool, for a generic
14980         flags.   
14981         New flag: `Unchecked'.  This is used during the EmitMeta phase
14982         (which is out-of-line with the regular Resolve/Emit process for a
14983         statement, as this is done ahead of time, but still gets a chance
14984         to call constant resolve).
14985
14986         (Block.Flags): new enum for adding a new flag.
14987
14988         (Block.EmitMeta): track the state of unchecked.
14989
14990         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
14991         to enable constant resolution to work there as well.
14992
14993 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
14994
14995         * typemanager.cs (ienumerable_type): Also look up
14996         System.Collections.IEnumerable. 
14997
14998 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
14999
15000         TODO: Test more than one conditional per method.
15001
15002         * class.cs (Indexer.Define): Report the location where the user is
15003         referencing the unsupported feature.
15004
15005         (MethodData): Overload the use of `conditionals' to
15006         minimize the creation of needless ArrayLists.   This saves roughly
15007         212kb on my machine.
15008
15009         (Method): Implement the new IIteratorContainer interface.
15010         (Method.SetYields): Implement the method by setting the ModFlags
15011         to contain METHOD_YIELDS.
15012
15013         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15014         which just got set to null.
15015
15016         * iterators.cs: New file.
15017
15018         (Yield, YieldBreak): New statements.
15019
15020         * statement.cs (Return.Resolve): Flag an error if we are used in
15021         an iterator method.
15022
15023         * codegen.cs (InIterator): New flag set if the code is being
15024         compiled in an iterator method.
15025
15026         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15027         internal modifier, and we just use it to avoid adding extra
15028         fields, as this is seldom used.  
15029
15030         * cs-parser.jay: Add yield_statement (yield and yield break).
15031
15032         * driver.cs: New flag -v2 to turn on version 2 features. 
15033
15034         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15035         hashtable when v2 is enabled.
15036
15037 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15038
15039         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15040         there is already a namespace defined with this name.
15041
15042         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15043         people upgraded their corlibs.
15044
15045         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15046         always use fully qualified types, no need to use the compiler
15047         front end.
15048
15049         (TypeManager.IsNamespace): Use binarysearch.
15050
15051         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15052         AddDelegate): I did not quite use the new IsValid API properly: I
15053         have to pass the short-name and the fullname.  I was passing only
15054         the basename instead of the fullname sometimes. 
15055
15056         (TypeContainer.DefineType): call NamespaceClash.
15057
15058         * interface.cs (Interface.DefineType): use NamespaceClash before
15059         defining the type.
15060
15061         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15062         defining the type.
15063
15064         * enum.cs: (Enum.DefineType): use NamespaceClash before
15065         defining the type.
15066
15067         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15068         speed increase.  First, use the negative_hits cache when we get a
15069         negative.  Second, add the type with its full original name
15070         instead of the new . and + encoded name (reflection uses + to
15071         separate type from a nested type).  Use LookupTypeReflection
15072         directly which bypasses the type->name hashtable (that we already
15073         know does not contain the type.
15074
15075         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15076         location/container type. 
15077
15078         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15079
15080 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15081
15082         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15083
15084         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15085         method is being referenced in the method group from a static
15086         context, and report error 120 if so.
15087
15088         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15089         Error118. 
15090
15091         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15092         is created, we create the A namespace).
15093
15094         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15095         Fixes #41591
15096
15097 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15098
15099         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15100         invocation to ModuleBuilder.GetType with the same values will
15101         return a new type instance, so we need to cache its return
15102         values. 
15103
15104         * expression.cs (Binary.ResolveOperator): Only allow the compare
15105         operators on enums if they are of the same type.
15106
15107         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15108         types of ValueType on their own case.  Before we were giving them
15109         the same treatment as objects.
15110
15111         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15112         fullname.  Short name is used to compare against container name.
15113         Fullname is used to check against defined namespace names.
15114
15115         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15116         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15117
15118         (Method.CheckBase): Call parent.
15119         (MemberBase.CheckBase): Check for protected members on sealed
15120         classes.
15121         (PropertyBase.CheckBase): Call parent.
15122         (Field.Define): Call parent.
15123
15124         * report.cs: Negative error codes are now mapped to 8000 - code,
15125         so that the display is render more nicely.
15126
15127         * typemanager.cs: Do not use try/catch, instead report a regular
15128         error. 
15129
15130         (GetPointerType, GetReferenceType): These methods provide
15131         mechanisms to obtain the T* and T& from a T.  We had the code
15132         previously scattered around the code base, and it also used
15133         TypeManager.LookupType that would go through plenty of caches.
15134         This one goes directly to the type source.
15135
15136         In some places we did the Type.GetType followed by
15137         ModuleBuilder.GetType, but not in others, so this unifies the
15138         processing as well.
15139
15140         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15141         statements now that we have namespace information.
15142
15143         * typemanager.cs (IsNamespace): New method, returns whether the
15144         string presented is a namespace or not.
15145
15146         (ComputeNamespaces): New public entry point, computes the list of
15147         available namespaces, using the GetNamespaces API call in Mono, or
15148         the slower version in MS.NET.   
15149
15150         Now before we start the semantic analysis phase, we have a
15151         complete list of namespaces including everything that the user has
15152         provided.
15153
15154         Deleted old code to cache namespaces in .nsc files.
15155
15156 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15157
15158         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15159         class/struct location definition Location for the implicit
15160         constructor location.
15161
15162         (Operator.Define): Use the location of the operator for the
15163         implicit Method definition.
15164
15165         (Constructor.Emit): use the constructor location for the implicit
15166         base initializer constructor.
15167
15168         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15169         and the Expression class now contains two new methods:
15170
15171         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15172         isolate type lookup from the rest of the resolution process.
15173
15174         Since we use Expressions to hold type definitions due to the way
15175         we parse the input we have historically overloaded Resolve to
15176         perform the Type lookups if a special flag is passed.  Now this is
15177         eliminated and two methods take their place. 
15178
15179         The differences in the two methods between xStep and xTerminal is
15180         that xStep is involved in our current lookup system that uses
15181         SimpleNames to compose a name, while xTerminal is used just to
15182         catch the case where the simplename lookup failed.
15183
15184 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15185
15186         * expression.cs (ResolveMemberAccess): Remove redundant code.
15187         TypeExpr expressions are always born fully resolved.
15188
15189         * interface.cs (PopulateMethod): Do not lookup the types twice.
15190         We were doing it once during SemanticAnalysis and once during
15191         PopulateMethod.
15192
15193         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15194         in local variable type definitions, were being returned as a
15195         SimpleName (we decomposed everything into a string), that is
15196         because primary_expression was being used instead of a type in the
15197         grammar (reduce/reduce conflicts).
15198
15199         The part that was wrong is that we converted the expression into a
15200         string (an oversimplification in one hand, compounded with primary
15201         expressions doing string concatenation).
15202
15203         So things like:
15204
15205         A.B.C [] x;
15206
15207         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15208         using clauses from working on this particular context.  And a type
15209         was being matched directly against "A.B.C[]".
15210
15211         We now use the correct approach, and allow for ComposedCast to be
15212         part of the unary expression.  So the "A.B.C []" become a composed
15213         cast of "A.B.C" (as a nested group of MemberAccess with a
15214         SimpleName at the end) plus the rank composition "[]". 
15215
15216         Also fixes 35567
15217
15218 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15219
15220         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15221         for the access level checking.
15222
15223         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15224         `TypeContainer container', because I kept getting confused when I
15225         was debugging this code.
15226
15227         * expression.cs (Indexers): Instead of tracking getters/setters,
15228         we now track them in parallel.  We create one arraylist less, but
15229         most importantly it is possible now for the LValue code to find a
15230         matching get for a set.
15231
15232         (IndexerAccess.DoResolveLValue): Update the code.
15233         GetIndexersForType has been modified already to extract all the
15234         indexers from a type.  The code assumed it did not.
15235
15236         Also make the code set the correct return type for the indexer.
15237         This was fixed a long time ago for properties, but was missing for
15238         indexers.  It used to be void_type.
15239
15240         (Binary.Emit): Test first for doubles instead of
15241         floats, as they are more common.
15242
15243         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15244         when dealing with floats and the <=, >= operators.  This fixes bug
15245         #39314 
15246
15247         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15248         to load the array value by emitting a load on the foreach variable
15249         type.  This was incorrect.  
15250
15251         We now emit the code to load an element using the the array
15252         variable type, and then we emit the conversion operator.
15253
15254         Fixed #40176
15255
15256 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15257
15258         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15259
15260 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15261
15262         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15263         test for protection before we test for signatures. 
15264
15265         (MethodSignature.ToString): implement.
15266
15267         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15268         to the case where we reduced into a LongConstant.
15269
15270         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15271         depend on whether the information is acurrate, because the
15272         Microsoft runtime will always claim that the array type is public,
15273         regardless of the real state.
15274
15275         If the type is a pointer, another problem happens: the type is
15276         reported as non-public in Microsoft.  
15277
15278         In both cases we have to call CheckAccessLevel recursively with
15279         the underlying type as the argument to be tested.
15280
15281 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
15282
15283         * assign.cs (Assign.Emit): If we are dealing with a compound
15284         assignment expression, we should use the code path that stores the
15285         intermediate result in a temporary value.  This fixes #40903.
15286
15287         *expression.cs (Indirection.ToString): Provide ToString method for
15288         debugging. 
15289
15290 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
15291
15292         * class.cs: Null out fields holding references to Block objects so
15293         they can be garbage collected.
15294
15295         * expression.cs (OverloadResolve): Remove unused local.
15296
15297 2003-04-07  Martin Baulig  <martin@ximian.com>
15298
15299         * codegen.cs (EmitContext.CurrentFile): New public field.
15300         (EmitContext.Mark): Use the CurrentFile to check whether the
15301         location is in the correct file.
15302         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
15303
15304 2003-04-07  Martin Baulig  <martin@ximian.com>
15305
15306         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
15307
15308         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
15309         location.  [FIXME: The location argument which gets passed to this
15310         method is sometimes wrong!]
15311
15312 2003-04-07  Nick Drochak <ndrochak@gol.com>
15313
15314         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
15315
15316 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
15317
15318         * expression.cs (Indirection.EmitAssign): We were using the
15319         temporary, but returning immediately instead of continuing the
15320         EmitAssing flow.
15321
15322 2003-04-06  Martin Baulig  <martin@ximian.com>
15323
15324         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
15325         if it's a nested child, but also deriving from the outer class.
15326         See test 190.cs.
15327
15328         * typemanager.cs (IsNestedChildOf): Make this work if it's a
15329         nested child, but also deriving from the outer class.  See
15330         test-190.cs.
15331         (FilterWithClosure): We may access private members of the outer
15332         class if we're a nested child and deriving from the outer class.
15333         (RealMemberLookup): Only set `closure_private_ok' if the
15334         `original_bf' contained BindingFlags.NonPublic.
15335
15336 2003-04-05  Martin Baulig  <martin@ximian.com>
15337
15338         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
15339         probe if its a type parameter, and if so, flag an error.
15340
15341         * decl.cs: Move here the SetParameterInfo code from class.cs.
15342         Handle IsGeneric here.
15343
15344         Handle a variety of errors in the parameter info definition.
15345
15346         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
15347         type parameters here.
15348
15349         * cs-parser.jay (class_declaration): report errors for parameters
15350         here as well.
15351
15352 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
15353
15354         * generic.cs: New file, contains support code for generics.
15355
15356         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
15357         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
15358
15359         Update parser for the above removals.
15360
15361         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
15362         now taken care of in the parser.
15363
15364 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
15365
15366         * class.cs (Event.Define): Do not allow abstract events to have
15367         initializers. 
15368
15369 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
15370
15371         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
15372         block in event declarations.
15373
15374         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
15375         value type, get its address.
15376
15377         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
15378         leaving a class on the stack instead of a boolean value (int
15379         0/1).  Change the code so we compare against null, and then the
15380         result against zero.
15381
15382         * class.cs (TypeContainer.GetClassBases): We were checking for the
15383         parent class being sealed too late.
15384
15385         * expression.cs (Binary.Emit): For <= and >= when dealing with
15386         floating point values, use cgt.un and clt.un instead of cgt and
15387         clt alone.
15388
15389 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
15390
15391         * statement.cs: Apply the same optimization as MS: skip the 
15392         GetEnumerator returning an IEnumerator, and use the one returning a 
15393         CharEnumerator instead. This allows us to avoid the try-finally block 
15394         and the boxing.
15395
15396 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
15397
15398         * cs-parser.jay: Attributes cannot be applied to
15399                          namespaces. Fixes #40473
15400
15401 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15402
15403         * class.cs:
15404         (Add*): check if the name is valid using the full name for constants,
15405         fields, properties and events.
15406
15407 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
15408
15409         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
15410         char constants to be part of the enumeration.
15411
15412         * expression.cs (Conditional.DoResolve): Add support for operator
15413         true. Implements the missing functionality from 14.12
15414
15415         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
15416         operator true/false as required by the spec.
15417
15418         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
15419         implicit conversion to boolean.
15420
15421         * statement.cs (Statement.ResolveBoolean): A boolean expression is
15422         also one where the type implements `operator true'. 
15423
15424         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
15425         get an expression that will invoke operator true based on an
15426         expression.  
15427
15428         (GetConversionOperators): Removed the hack that called op_True
15429         here.  
15430
15431         (Expression.ResolveBoolean): Move this from Statement.
15432
15433 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
15434
15435         * ecore.cs (FieldExpr): do not allow initialization of initonly
15436         fields on derived classes
15437
15438 2003-03-13  Martin Baulig  <martin@ximian.com>
15439
15440         * statement.cs (Block.Emit): Call ig.BeginScope() and
15441         ig.EndScope() when compiling with debugging info; call
15442         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
15443
15444 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
15445
15446         * expression.cs (Indexers): Do not construct immediately, allow
15447         for new members to be appended as we go.  Fixes 38143
15448
15449 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15450
15451         * expression.cs: save/restore context when resolving an unchecked
15452         expression.
15453
15454 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
15455
15456         * cfold.cs: Catch division by zero in modulus operator during
15457         constant folding.
15458
15459 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
15460
15461         * interface.cs (Interface.DefineMembers): Avoid defining members
15462         twice. 
15463
15464 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
15465
15466         * driver.cs: handle the +/- options for -noconfig
15467
15468         * statement.cs (Unckeched.Resolve): Also track the state of
15469         unchecked in the Resolve phase.
15470
15471 2003-02-27  Martin Baulig  <martin@ximian.com>
15472
15473         * ecore.cs (Expression.MemberLookup): Don't create a
15474         MethodGroupExpr for something which is not a method.  Fixes #38291.
15475
15476 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
15477
15478         * class.cs (MemberBase.CheckParameters): Also check that the type
15479         is unmanaged if it is a pointer.
15480
15481         * expression.cs (SizeOf.Resolve): Add location information.
15482
15483         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
15484         a managed type is declared.
15485
15486         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
15487         parameter modifiers as well.  Fixes bug 38606
15488
15489         * class.cs: Very sad.  Am backing out the speed up changes
15490         introduced by the ArrayList -> Array in the TypeContainer, as they
15491         were not actually that much faster, and introduced a bug (no error
15492         reports on duplicated methods).
15493
15494         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
15495         source first, this will guarantee that we have a valid expression
15496         before calling in lower levels functions that will require a
15497         resolved object.  Then use this original_source in the
15498         target.ResolveLValue instead of the original source that was
15499         passed to us.
15500
15501         Another change.  Use target.Resolve instead of LValueResolve.
15502         Although we are resolving for LValues, we will let the Assign code
15503         take care of that (it will be called again from Resolve).  This
15504         basically allows code like this:
15505
15506         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
15507         class Y { void A (X x) { x [0] += o; }
15508
15509         The problem was that the indexer was trying to resolve for
15510         set_Item (idx, object o) and never finding one.  The real set_Item
15511         was set_Item (idx, X).  By delaying the process we get the right
15512         semantics. 
15513
15514         Fixes bug 36505
15515
15516 2003-02-23  Martin Baulig  <martin@ximian.com>
15517
15518         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
15519         while calling DoEmit ().
15520
15521         * codegen.cs (EmitContext.Mark): Don't mark locations in other
15522         source files; if you use the #line directive inside a method, the
15523         compiler stops emitting line numbers for the debugger until it
15524         reaches the end of the method or another #line directive which
15525         restores the original file.
15526
15527 2003-02-23  Martin Baulig  <martin@ximian.com>
15528
15529         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
15530
15531 2003-02-23  Martin Baulig  <martin@ximian.com>
15532
15533         * statement.cs (Block.AddChildVariableNames): We need to call this
15534         recursively, not just for our immediate children.
15535
15536 2003-02-23  Martin Baulig  <martin@ximian.com>
15537
15538         * class.cs (Event.Define): Always make the field private, like csc does.
15539
15540         * typemanager.cs (TypeManager.RealMemberLookup): Make events
15541         actually work, fixes bug #37521.
15542
15543 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
15544
15545         * delegate.cs: When creating the various temporary "Parameters"
15546         classes, make sure that we call the ComputeAndDefineParameterTypes
15547         on those new parameters (just like we do with the formal ones), to
15548         allow them to be resolved in the context of the DeclSpace.
15549
15550         This fixes the bug that Dick observed in Bugzilla #38530.
15551
15552 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
15553
15554         * expression.cs (ResolveMemberAccess): When resolving a constant,
15555         do not attempt to pull a constant if the value was not able to
15556         generate a valid constant.
15557
15558         * const.cs (LookupConstantValue): Do not report more errors than required.
15559
15560 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15561
15562         * expression.cs: fixes bug #38328.
15563
15564 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
15565
15566         * class.cs: Changed all the various members that can be part of a
15567         class from being an ArrayList to be an Array of the right type.
15568         During the DefineType type_list, interface_list, delegate_list and
15569         enum_list are turned into types, interfaces, delegates and enums
15570         arrays.  
15571
15572         And during the member population, indexer_list, event_list,
15573         constant_list, field_list, instance_constructor_list, method_list,
15574         operator_list and property_list are turned into their real arrays.
15575
15576         Although we could probably perform this operation earlier, for
15577         good error reporting we need to keep the lists and remove the
15578         lists for longer than required.
15579
15580         This optimization was triggered by Paolo profiling the compiler
15581         speed on the output of `gen-sample-program.pl' perl script. 
15582
15583         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
15584         not crash in methods like MemberLookupFailed that use this field.  
15585
15586         This problem arises when the compiler fails to resolve a type
15587         during interface type definition for example.
15588
15589 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
15590
15591         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
15592         inherit from System.Object, so we have to stop at null, not only
15593         when reaching System.Object.
15594
15595 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
15596
15597         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
15598         DeclaredOnly because the parent indexer might have had a different
15599         name, but did not loop until the top of the hierarchy was reached.
15600
15601         The problem this one fixes is 35492: when a class implemented an
15602         indexer from an interface, we were getting the interface method
15603         (which was abstract) and we were flagging an error (can not invoke
15604         abstract method).
15605
15606         This also keeps bug 33089 functioning, and test-148 functioning.
15607
15608         * typemanager.cs (IsSpecialMethod): The correct way of figuring
15609         out if a method is special is to see if it is declared in a
15610         property or event, or whether it is one of the predefined operator
15611         names.   This should fix correctly #36804.
15612
15613 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
15614
15615         The goal here is to remove the dependency on EmptyCast.Peel ().
15616         Killing it completely.
15617
15618         The problem is that currently in a number of places where
15619         constants are expected, we have to "probe" for an EmptyCast, and
15620         Peel, which is not the correct thing to do, as this will be
15621         repetitive and will likely lead to errors. 
15622
15623         The idea is to remove any EmptyCasts that are used in casts that
15624         can be reduced to constants, so we only have to cope with
15625         constants. 
15626
15627         This bug hunt was triggered by Bug 37363 and the desire to remove
15628         the duplicate pattern where we were "peeling" emptycasts to check
15629         whether they were constants.  Now constants will always be
15630         constants.
15631
15632         * ecore.cs: Use an enumconstant here instead of wrapping with
15633         EmptyCast.  
15634
15635         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
15636         throwing me off.  By handling this we can get rid of a few hacks.
15637
15638         * statement.cs (Switch): Removed Peel() code.
15639
15640 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
15641
15642         * class.cs: Location information for error 508
15643
15644         * expression.cs (New.DoResolve): Add a guard against double
15645         resolution of an expression.  
15646
15647         The New DoResolve might be called twice when initializing field
15648         expressions (see EmitFieldInitializers, the call to
15649         GetInitializerExpression will perform a resolve on the expression,
15650         and later the assign will trigger another resolution
15651
15652         This leads to bugs (#37014)
15653
15654         * delegate.cs: The signature for EndInvoke should contain any ref
15655         or out parameters as well.  We were not doing this in the past. 
15656
15657         * class.cs (Field.Define): Do not overwrite the type definition
15658         inside the `volatile' group.  Turns out that volatile enumerations
15659         were changing the type here to perform a validity test, which
15660         broke conversions. 
15661
15662 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
15663
15664         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
15665         and structs, we do not want to load the instance variable
15666
15667         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
15668         enum_type has to be handled like an object reference (implicit
15669         conversions exists from this to object), but the regular IsClass
15670         and IsValueType tests will never return true for this one.
15671
15672         Also we use TypeManager.IsValueType instead of type.IsValueType,
15673         just for consistency with the rest of the code (this is only
15674         needed if we ever use the construct exposed by test-180.cs inside
15675         corlib, which we dont today).
15676
15677 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
15678
15679         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
15680         just InternalCall.
15681
15682 2003-02-09  Martin Baulig  <martin@ximian.com>
15683
15684         * namespace.cs (Namespace..ctor): Added SourceFile argument.
15685         (Namespace.DefineNamespaces): New static public method; this is
15686         called when we're compiling with debugging to add all namespaces
15687         to the symbol file.
15688
15689         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
15690         pass it to the Namespace's .ctor.
15691
15692         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
15693         and MethodBase arguments; pass the namespace ID to the symwriter;
15694         pass the MethodBase instead of the token to the symwriter.
15695         (SymbolWriter.DefineNamespace): New method to add a namespace to
15696         the symbol file.
15697
15698 2003-02-09  Martin Baulig  <martin@ximian.com>
15699
15700         * symbolwriter.cs: New file.  This is a wrapper around
15701         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
15702         methods here in near future.
15703
15704 2003-02-09  Martin Baulig  <martin@ximian.com>
15705
15706         * codegen.cs (EmitContext.Mark): Just pass the arguments to
15707         ILGenerator.MarkSequencePoint() which are actually used by the
15708         symbol writer.
15709
15710 2003-02-09  Martin Baulig  <martin@ximian.com>
15711
15712         * location.cs (SourceFile): New public sealed class.  This
15713         contains the name and an index which is used in the location's token.
15714         (Location): Reserve an appropriate number of bits in the token for
15715         the source file instead of walking over that list, this gives us a
15716         really huge performance improvement when compiling with debugging.
15717
15718         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
15719         `SourceFile' argument instead of a string.
15720         (Driver.ProcessFile): Add all the files via Location.AddFile(),
15721         but don't parse/tokenize here, we need to generate the list of all
15722         source files before we do that.
15723         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
15724         the files.
15725
15726         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
15727         instead of a string.
15728
15729         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
15730         of a string.
15731
15732 2003-02-09  Martin Baulig  <martin@ximian.com>
15733
15734         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
15735         filename on `#line default'.
15736
15737 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
15738
15739         * statement.cs: don't clear the pinned var when the fixed statement
15740         returns from the method (fixes bug#37752).
15741
15742 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
15743
15744         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
15745         to IsValueType.
15746
15747 2003-02-07  Martin Baulig  <martin@ximian.com>
15748
15749         * driver.cs: Removed the `--debug-args' command line argument.
15750
15751         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
15752         automatically by the AsssemblyBuilder.
15753         (CodeGen.InitializeSymbolWriter): We don't need to call any
15754         initialization function on the symbol writer anymore.  This method
15755         doesn't take any arguments.
15756
15757 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
15758
15759         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
15760         from referenced assemblies as well.
15761
15762 2003-02-02  Martin Baulig  <martin@ximian.com>
15763
15764         * class.cs (MethodData.Emit): Generate debugging info for external methods.
15765
15766 2003-02-02  Martin Baulig  <martin@ximian.com>
15767
15768         * class.cs (Constructor.Emit): Open the symbol writer before
15769         emitting the constructor initializer.
15770         (ConstructorInitializer.Emit): Call ec.Mark() to allow
15771         single-stepping through constructor initializers.
15772
15773 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
15774
15775         * class.cs: Handle error 549: do not allow virtual methods in
15776         sealed classes. 
15777
15778 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
15779
15780         * decl.cs: Check access levels when resolving types
15781
15782 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
15783
15784         * statement.cs: Add parameters and locals set in catch blocks that might 
15785         return to set vector
15786
15787 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
15788
15789         * class.cs (Operator): Set the SpecialName flags for operators.
15790
15791         * expression.cs (Invocation.DoResolve): Only block calls to
15792         accessors and operators on SpecialName methods.
15793
15794         (Cast.TryReduce): Handle conversions from char constants.
15795
15796
15797 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
15798
15799         * statement.cs: small memory and time optimization in FlowBranching.
15800
15801 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
15802
15803         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
15804         problem that the last fix but in the other sid (Set).
15805
15806         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
15807         access when there is no indexer in the hierarchy.
15808
15809 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
15810
15811         * class.cs: Combine some if statements.
15812
15813 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15814
15815         * driver.cs: fixed bug #37187.
15816
15817 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
15818
15819         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
15820         any indexer, it's needed to build a list with all the indexers in the
15821         hierarchy (AllGetters), else we have problems. Fixes #35653.
15822
15823 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
15824
15825         * class.cs (MethodData.Define): It is wrong for an interface
15826         implementation to be static in both cases: explicit and implicit.
15827         We were only handling this in one case.
15828
15829         Improve the if situation there to not have negations.
15830
15831         * class.cs (Field.Define): Turns out that we do not need to check
15832         the unsafe bit on field definition, only on usage.  Remove the test.
15833
15834 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15835
15836         * driver.cs: use assembly.Location instead of Codebase (the latest
15837         patch made mcs fail when using MS assemblies).
15838
15839 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
15840
15841         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
15842         get the path to *corlib.dll.
15843
15844 2003-01-21  Nick Drochak <ndrochak@gol.com>
15845
15846         * cs-tokenizer.cs:
15847         * pending.cs:
15848         * typemanager.cs: Remove compiler warnings
15849
15850 2003-01-20  Duncan Mak  <duncan@ximian.com>
15851
15852         * AssemblyInfo.cs: Bump the version number to 0.19.
15853
15854 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15855
15856         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
15857
15858 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
15859
15860         * class.cs (Constructor::Emit): Emit debugging info for constructors.
15861
15862 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
15863
15864         * cs-parser.jay: Small fix: we were not comparing the constructor
15865         name correctly.   Thanks to Zoltan for the initial pointer.
15866
15867 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
15868
15869         * cs-tokenizer.cs: Set file name when specified with #line
15870
15871 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
15872
15873         * cs-parser.jay: Only perform the constructor checks here if we
15874         are named like the class;  This will help provider a better
15875         error.  The constructor path is taken when a type definition is
15876         not found, but most likely the user forgot to add the type, so
15877         report that rather than the constructor error.
15878
15879 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
15880
15881         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
15882         allocations.
15883
15884 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
15885
15886         * cs-parser.jay: Add cleanup call.
15887
15888 2003-01-13  Duncan Mak  <duncan@ximian.com>
15889
15890         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
15891         consistent with other methods.
15892
15893 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
15894
15895         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
15896
15897 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
15898
15899         * attribute.cs: only set GuidAttr to true when we have a
15900         GuidAttribute.
15901
15902 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15903
15904         * ecore.cs:
15905         * expression.cs:
15906         * typemanager.cs: fixes to allow mcs compile corlib with the new
15907         Type.IsSubclassOf fix.
15908
15909 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
15910
15911         * expression.cs (LocalVariableReference.DoResolve): Classify a
15912         constant as a value, not as a variable.   Also, set the type for
15913         the variable.
15914
15915         * cs-parser.jay (fixed_statement): take a type instead of a
15916         pointer_type, so we can produce a better error message later.
15917
15918         * statement.cs (Fixed.Resolve): Flag types that are not pointers
15919         as an error.  
15920
15921         (For.DoEmit): Make inifinite loops have a
15922         non-conditional branch back.
15923
15924         (Fixed.DoEmit): First populate the pinned variables, then emit the
15925         statement, then clear the variables.  Before I was emitting the
15926         code once for each fixed piece.
15927
15928
15929 2003-01-08  Martin Baulig  <martin@ximian.com>
15930
15931         * statement.cs (FlowBranching.MergeChild): A break in a
15932         SWITCH_SECTION does not leave a loop.  Fixes #36155.
15933
15934 2003-01-08  Martin Baulig  <martin@ximian.com>
15935
15936         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
15937         lives in the same number space than `param_map'.  Fixes #36154.
15938
15939 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
15940
15941         * cs-parser.jay (constructor_declaration): Set the
15942         Constructor.ModFlags before probing for it.  This makes the
15943         compiler report 514, 515 and 132 (the code was there, but got
15944         broken). 
15945
15946         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
15947         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
15948         (GotoCase.Resolve): Set `Returns' to ALWAYS.
15949
15950 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
15951
15952         * enum.cs: create the enum static fields using the enum type.
15953
15954 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
15955
15956         * class.cs: don't try to create the ParamBuilder for the return
15957         type if it's not needed (and handle it breaking for the ms runtime
15958         anyway).
15959
15960 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
15961
15962         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
15963
15964 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
15965
15966         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
15967         the command.   This showed up while compiling the JANET source
15968         code, which used \r as its only newline separator.
15969
15970 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
15971
15972         * class.cs (Method.Define): If we are an operator (because it
15973         reuses our code), then set the SpecialName and HideBySig.  #36128
15974
15975 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
15976
15977         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
15978         exception, report error 120 `object reference required'.
15979
15980         * driver.cs: Add --pause option, used during to measure the size
15981         of the process as it goes with --timestamp.
15982
15983         * expression.cs (Invocation.DoResolve): Do not allow methods with
15984         SpecialName to be invoked.
15985
15986 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
15987
15988         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
15989         number before adding it.
15990
15991 2002-12-21  Ravi Pratap  <ravi@ximian.com>
15992
15993         * ecore.cs (StandardImplicitConversion): When in an unsafe
15994         context, we allow conversion between void * to any other pointer
15995         type. This fixes bug #35973.
15996
15997 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
15998
15999         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16000         is not thrown when extensionless outputs are used 
16001
16002 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16003
16004         * rootcontext.cs: fixed compilation of corlib.
16005
16006 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16007
16008         * attribute.cs (Attributes.Contains): Add new method.
16009
16010         * class.cs (MethodCore.LabelParameters): if the parameter is an
16011         `out' parameter, check that no attribute `[In]' has been passed.
16012
16013         * enum.cs: Handle the `value__' name in an enumeration.
16014
16015 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16016
16017         * decl.cs: Added special case to allow overrides on "protected
16018         internal" methods
16019
16020 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16021
16022         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16023         since it makes much more sense.
16024
16025         (Attributes.ctor): Don't require a Location parameter.
16026
16027         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16028
16029         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16030         since we already have that information per attribute.
16031
16032         * everywhere : make appropriate changes.
16033
16034         * class.cs (LabelParameters): Write the code which actually
16035         applies attributes to the return type. We can't do this on the MS
16036         .NET runtime so we flag a warning in the case an exception is
16037         thrown.
16038
16039 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16040
16041         * const.cs: Handle implicit null conversions here too.
16042
16043 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16044
16045         * class.cs (MethodCore.LabelParameters): Remove the extra
16046         Type [] parameter since it is completely unnecessary. Instead
16047         pass in the method's attributes so that we can extract
16048         the "return" attribute.
16049
16050 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16051
16052         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16053         of ignoring it and letting the compile continue.
16054
16055         * typemanager.cs (ChangeType): use an extra argument to return an
16056         error condition instead of throwing an exception.
16057
16058 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16059
16060         * expression.cs (Unary.TryReduce): mimic the code for the regular
16061         code path.  Perform an implicit cast in the cases where we can
16062         implicitly convert to one of the integral types, and then reduce
16063         based on that constant.   This fixes bug #35483.
16064
16065 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16066
16067         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16068
16069 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16070
16071         * namespace.cs: fixed bug #35489.
16072
16073 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16074
16075         * class.cs: Remove some dead code.
16076
16077         * cs-parser.jay: Estimate the number of methods needed
16078         (RootContext.MethodCount);
16079
16080         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16081         numbers instead of StringBuilders.
16082
16083         * support.cs (PtrHashtable): Add constructor with initial size;
16084         We can now reduce reallocations of the method table.
16085
16086 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16087
16088         * attribute.cs (ApplyAttributes): Keep track of the emitted
16089         attributes on a per-target basis. This fixes bug #35413.
16090
16091 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16092
16093         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16094         default to the Windows 1252 encoding.
16095
16096         (UnixParseOption): Support version, thanks to Alp for the missing
16097         pointer. 
16098
16099         * AssemblyInfo.cs: Add nice assembly information.
16100
16101         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16102         (bug 35169).
16103
16104         * cs-parser.jay: Allow a trailing comma before the close bracked
16105         in the attribute_section production.
16106
16107         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16108         address of the instance was being taken, I will take this out,
16109         because we take the address of the object immediately here.
16110
16111 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16112
16113         * typemanager.cs (AreMultipleAllowed): Take care of the most
16114         obvious case where attribute type is not in the current assembly -
16115         stupid me ;-)
16116
16117 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16118
16119         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16120         definitions, instead of doing that afterwards.  
16121
16122         Also we use a nice little hack, depending on the constructor, we
16123         know if we are a "composed" name or a simple name.  Hence, we
16124         avoid the IndexOf test, and we avoid 
16125
16126         * codegen.cs: Add code to assist in a bug reporter to track down
16127         the source of a compiler crash. 
16128
16129 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16130
16131         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16132         types have been emitted for a given element and flag an error
16133         if something which does not have AllowMultiple set is used more
16134         than once.
16135
16136         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16137         attribute types and their corresponding AllowMultiple properties
16138
16139         (AreMultipleAllowed): Check the property for a given type.
16140
16141         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16142         property in the case we have a TypeContainer.
16143
16144         (Attributes.AddAttribute): Detect duplicates and just skip on
16145         adding them. This trivial fix catches a pretty gross error in our
16146         attribute emission - global attributes were being emitted twice!
16147
16148         Bugzilla bug #33187 is now fixed.
16149
16150 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16151
16152         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16153         instead of pp_and).
16154
16155         * expression.cs (Binary.ResolveOperator): I can only use the
16156         Concat (string, string, string) and Concat (string, string,
16157         string, string) if the child is actually a concatenation of
16158         strings. 
16159
16160 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16161
16162         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16163         context where we need a 2-character lookahead.
16164
16165         * pending.cs (PendingImplementation): Rework so we can keep track
16166         of interface types all the time, and flag those which were
16167         implemented by parents as optional.
16168
16169 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16170
16171         * expression.cs (Binary.ResolveOperator): Use
16172         String.Concat(string,string,string) or
16173         String.Concat(string,string,string,string) when possible. 
16174
16175         * typemanager: More helper methods.
16176
16177
16178 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16179
16180         * pending.cs: remove the bogus return from GetMissingInterfaces()
16181         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16182
16183 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16184
16185         * namespace.cs: avoid duplicated 'using xxx' being added to
16186         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16187         when we get more than one 'using' statement for the same namespace.
16188         Report a CS0105 warning for it.
16189
16190 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16191
16192         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16193         of calling getChar/putback, uses internal knowledge of it.    
16194
16195         (xtoken): Reorder tokenizer so most common patterns are checked
16196         first.  This reduces the compilation time in another 5% (from 8.11s
16197         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16198
16199         The parsing time is 22% of the compilation in mcs, and from that
16200         64% is spent on the tokenization process.  
16201
16202         I tried using a binary search for keywords, but this is slower
16203         than the hashtable.  Another option would be to do a couple of
16204         things:
16205
16206                 * Not use a StringBuilder, instead use an array of chars,
16207                   with a set value.  Notice that this way we could catch
16208                   the 645 error without having to do it *afterwards*.
16209
16210                 * We could write a hand-parser to avoid the hashtable
16211                   compares altogether.
16212
16213         The identifier consumption process takes 37% of the tokenization
16214         time.  Another 15% is spent on is_number.  56% of the time spent
16215         on is_number is spent on Int64.Parse:
16216
16217                 * We could probably choose based on the string length to
16218                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16219                   computations. 
16220
16221         Another 3% is spend on wrapping `xtoken' in the `token' function.
16222
16223         Handle 0xa0 as whitespace (#34752)
16224
16225 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16226
16227         * typemanager.cs (IsCLRType): New routine to tell whether a type
16228         is one of the builtin types.  
16229
16230         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16231         typecode in more places instead of doing pointer comparissions.
16232         We could leverage some knowledge about the way the typecodes are
16233         laid out.
16234
16235         New code to cache namespaces in assemblies, it is currently not
16236         invoked, to be used soon.
16237
16238         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16239
16240         * expression.cs (Binary.ResolveOperator): specially handle
16241         strings, and do not perform user-defined operator overloading for
16242         built-in types.
16243
16244 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16245
16246         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16247         internalcall as it is a pretty simple operation;  Avoid whenever
16248         possible to call Char.IsLetter.
16249
16250         (consume_identifier): Cut by half the number of
16251         hashtable calls by merging the is_keyword and GetKeyword behavior.
16252
16253         Do not short-circuit, because if we do, we
16254         report errors (ie, #if false && true would produce an invalid
16255         directive error);
16256
16257
16258 2002-11-24  Martin Baulig  <martin@ximian.com>
16259
16260         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16261         check constant ranges and report a CS0221.  Fixes #33186.
16262
16263 2002-11-24  Martin Baulig  <martin@ximian.com>
16264
16265         * cs-parser.jay: Make this work for uninitialized variable
16266         declarations in the `for' initializer.  Fixes #32416.
16267
16268 2002-11-24  Martin Baulig  <martin@ximian.com>
16269
16270         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16271         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
16272
16273 2002-11-24  Martin Baulig  <martin@ximian.com>
16274
16275         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
16276         argument; if true, we also check for user-defined conversions.
16277         This is only needed if both arguments are of a user-defined type.
16278         Fixes #30443, added test-175.cs.
16279         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
16280
16281         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
16282
16283 2002-11-24  Martin Baulig  <martin@ximian.com>
16284
16285         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
16286         function to get the store opcode.
16287         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
16288         only emit the Ldelema if the store opcode is Stobj.  You must run
16289         both test-34 and test-167 to test this.  Fixes #34529.
16290
16291 2002-11-23  Martin Baulig  <martin@ximian.com>
16292
16293         * ecore.cs (Expression.MemberLookup): Added additional
16294         `qualifier_type' argument which is used when we're being called
16295         from MemberAccess.DoResolve() and null if we're called from a
16296         SimpleName lookup.
16297         (Expression.MemberLookupFailed): New method to report errors; this
16298         does the CS1540 check and reports the correct error message.
16299
16300         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
16301         argument for the CS1540 check and redone the way how we're dealing
16302         with private members.  See the comment in the source code for details.
16303         (FilterWithClosure): Reverted this back to revision 1.197; renamed
16304         `closure_start_type' to `closure_qualifier_type' and check whether
16305         it's not null.  It was not this filter being broken, it was just
16306         being called with the wrong arguments.
16307
16308         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
16309         and pass it the correct `qualifier_type'; this also does the error
16310         handling for us.
16311
16312 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
16313
16314         * expression.cs (Invocation.EmitParams): If the we are dealing
16315         with a non-built-in value type, load its address as well.
16316
16317         (ArrayCreation): Use a a pretty constant instead
16318         of the hardcoded value 2.   Use 6 instead of 2 for the number of
16319         static initializers.  
16320
16321         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
16322         because they are not really value types, just glorified integers. 
16323
16324         * driver.cs: Do not append .exe, the CSC compiler does not do it.
16325
16326         * ecore.cs: Remove redundant code for enumerations, make them use
16327         the same code path as everything else, fixes the casting issue
16328         with enumerations in Windows.Forms.
16329
16330         * attribute.cs: Do only cast to string if it is a string, the
16331         validation happens later.
16332
16333         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
16334         people upgrade their corlibs.
16335
16336         * ecore.cs: Oops, enumerations were not following the entire code path
16337
16338 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
16339
16340         * typemanager.cs (FilterWithClosure): Commented out the test for
16341         1540 in typemanager.cs, as it has problems when accessing
16342         protected methods from a parent class (see test-174.cs). 
16343
16344         * attribute.cs (Attribute.ValidateGuid): new method.
16345         (Attribute.Resolve): Use above.
16346
16347 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
16348
16349         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
16350
16351         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
16352         handling for enumerations, as we only needed the TypeContainer
16353         functionality to begin with (this is required for the fix below to
16354         work for enums that reference constants in a container class for
16355         example). 
16356
16357         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
16358
16359         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
16360         a valid TypeBuilder to perform lookups on.o
16361
16362         * class.cs (InheritableMemberSignatureCompare): Use true in the
16363         call to GetGetMethod and GetSetMethod, because we are comparing
16364         the signature, and we need to get the methods *even* if they are
16365         private. 
16366
16367         (PropertyBase.CheckBase): ditto.
16368
16369         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
16370         GotoCase.Resolve): Use Peel on EmpytCasts.
16371
16372         * ecore.cs (EmptyCast): drop child, add Peel method.
16373
16374 2002-11-17  Martin Baulig  <martin@ximian.com>
16375
16376         * ecore.cs (EmptyCast.Child): New public property.
16377
16378         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
16379         label resolved to an EmptyCast.  Fixes #34162.
16380         (GotoCase.Resolve): Likewise.
16381         (Block.EmitMeta): Likewise.
16382
16383 2002-11-17  Martin Baulig  <martin@ximian.com>
16384
16385         * expression.cs (Invocation.BetterConversion): Prefer int over
16386         uint; short over ushort; long over ulong for integer literals.
16387         Use ImplicitConversionExists instead of StandardConversionExists
16388         since we also need to check for user-defined implicit conversions.
16389         Fixes #34165.  Added test-173.cs.
16390
16391 2002-11-16  Martin Baulig  <martin@ximian.com>
16392
16393         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
16394         with the `true' and `false' literals.  Fixes #33151.
16395
16396 2002-11-16  Martin Baulig  <martin@ximian.com>
16397
16398         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
16399         October 22nd; don't do the cs1540 check for static members.
16400
16401         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
16402         now using our own filter here and doing the cs1540 check again.
16403
16404 2002-11-16  Martin Baulig  <martin@ximian.com>
16405
16406         * support.cs (InternalParameters): Don't crash if we don't have
16407         any fixed parameters.  Fixes #33532.
16408
16409 2002-11-16  Martin Baulig  <martin@ximian.com>
16410
16411         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
16412         when looking up static methods to make this work on Windows.
16413         Fixes #33773.
16414
16415 2002-11-16  Martin Baulig  <martin@ximian.com>
16416
16417         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
16418         a setter rather than using PropertyInfo.CanWrite.
16419
16420 2002-11-15  Nick Drochak  <ndrochak@gol.com>
16421
16422         * class.cs: Allow acces to block member by subclasses. Fixes build
16423         breaker.
16424
16425 2002-11-14  Martin Baulig  <martin@ximian.com>
16426
16427         * class.cs (Constructor.Emit): Added the extern/block check.
16428         Fixes bug #33678.
16429
16430 2002-11-14  Martin Baulig  <martin@ximian.com>
16431
16432         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
16433         iteration while looking for indexers, this is needed because the
16434         indexer may have a different name in our base classes.  Fixed the
16435         error reporting (no indexers at all, not get accessor, no
16436         overloaded match).  Fixes bug #33089.
16437         (IndexerAccess.DoResolveLValue): Likewise.
16438
16439 2002-11-14  Martin Baulig  <martin@ximian.com>
16440
16441         * class.cs (PropertyBase.CheckBase): Make this work for multiple
16442         indexers.  Fixes the first part of bug #33089.
16443         (MethodSignature.InheritableMemberSignatureCompare): Added support
16444         for properties.
16445
16446 2002-11-13  Ravi Pratap  <ravi@ximian.com>
16447
16448         * attribute.cs (Attribute.Resolve): Catch the
16449         NullReferenceException and report it since it isn't supposed to
16450         happen. 
16451
16452 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
16453
16454         * expression.cs (Binary.EmitBranchable): Also handle the cases for
16455         LogicalOr and LogicalAnd that can benefit from recursively
16456         handling EmitBranchable.  The code now should be nice for Paolo.
16457
16458 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
16459
16460         * typemanager.cs (LookupType): Added a negative-hit hashtable for
16461         the Type lookups, as we perform quite a number of lookups on
16462         non-Types.  This can be removed once we can deterministically tell
16463         whether we have a type or a namespace in advance.
16464
16465         But this might require special hacks from our corlib.
16466
16467         * TODO: updated.
16468
16469         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
16470         and double which avoids a conversion from an integer to a double.
16471
16472         * expression.cs: tiny optimization, avoid calling IsConstant,
16473         because it effectively performs the lookup twice.
16474
16475 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
16476
16477         But a bogus return here to keep the semantics of the old code
16478         until the Mono runtime is fixed.
16479
16480         * pending.cs (GetMissingInterfaces): New method used to remove all
16481         the interfaces that are already implemented by our parent
16482         classes from the list of pending methods. 
16483
16484         * interface.cs: Add checks for calls after ResolveTypeExpr.
16485
16486 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
16487
16488         * class.cs (Class.Emit): Report warning 67: event not used if the
16489         warning level is beyond 3.
16490
16491         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
16492         being a NullLiteral.
16493
16494         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
16495         specifiers. 
16496
16497         * class.cs (TypeContainer.GetClassBases): Cover a missing code
16498         path that might fail if a type can not be resolved.
16499
16500         * expression.cs (Binary.Emit): Emit unsigned versions of the
16501         operators. 
16502
16503         * driver.cs: use error 5.
16504
16505 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
16506
16507         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
16508
16509 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
16510
16511         * cs-parser.jay (switch_section): A beautiful patch from Martin
16512         Baulig that fixed 33094.
16513
16514 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
16515
16516         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
16517         Check whether the base is abstract and report an error if so.
16518
16519         * expression.cs (IndexerAccess.DoResolveLValue,
16520         IndexerAccess.DoResolve): ditto. 
16521
16522         (Invocation.DoResolve): ditto.
16523
16524         (Invocation.FullMethodDesc): Improve the report string.
16525
16526         * statement.cs (Block): Eliminate IsVariableDefined as it is
16527         basically just a wrapper for GetVariableInfo.
16528
16529         * ecore.cs (SimpleName): Use new 
16530
16531         * support.cs (ReflectionParamter.ParameterType): We unwrap the
16532         type, as we return the actual parameter ref/unref state on a
16533         different call.
16534
16535 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
16536
16537         * support.cs: Return proper flags REF/OUT fixing the previous
16538         commit.  
16539
16540         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
16541         not used to mean `ref' but `ref or out' in ParameterReference
16542
16543         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
16544         full type signature instead of calling TypeManger.CSharpName
16545         ourselves. 
16546
16547         * support.cs (InternalParameters.ParameterDesc): Do not compare
16548         directly to the modflags, because REF/OUT will actually be bitsets
16549         if set. 
16550
16551         * delegate.cs (VerifyMethod): Check also the modifiers.
16552
16553         * cs-tokenizer.cs: Fix bug where floating point values with an
16554         exponent where a sign was missing was ignored.
16555
16556         * driver.cs: Allow multiple assemblies to be specified in a single
16557         /r: argument
16558
16559 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
16560
16561         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
16562         because identifiers after a parenthesis would end up in this kind
16563         of production, and we needed to desamiguate it for having casts
16564         like:
16565
16566                 (UserDefinedType *) xxx
16567
16568 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
16569
16570         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
16571         we should set on the Bindingflags.NonPublic, but not turn on
16572         private_ok.  private_ok controls whether a Private member is
16573         returned (this is chekced on the filter routine), while the
16574         BindingFlags.NonPublic just controls whether private/protected
16575         will be allowed.   This fixes the problem part of the problem of
16576         private properties being allowed to be used in derived classes.
16577
16578         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
16579         so we can call the children DoResolveLValue method (this will
16580         properly signal errors on lvalue assignments to base properties)
16581
16582         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
16583         getter are null, and we have a property info, we know that this
16584         happened because the lookup failed, so we report an error 122 for
16585         protection level violation.
16586
16587         We also silently return if setter and getter are null in the
16588         resolve functions, this condition only happens if we have flagged
16589         the error before.  This is the other half of the problem. 
16590
16591         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
16592         not have accessibility information, that is why we were returning
16593         true in the filter function in typemanager.cs.
16594
16595         To properly report 122 (property is inaccessible because of its
16596         protection level) correctly, we report this error in ResolveAccess
16597         by failing if both the setter and the getter are lacking (ie, the
16598         lookup failed). 
16599
16600         DoResolve and DoLResolve have been modified to check for both
16601         setter/getter being null and returning silently, the reason being
16602         that I did not want to put the knowledge about this error in upper
16603         layers, like:
16604
16605         int old = Report.Errors;
16606         x = new PropertyExpr (...);
16607         if (old != Report.Errors)
16608                 return null;
16609         else
16610                 return x;
16611
16612         So the property expr is returned, but it is invalid, so the error
16613         will be flagged during the resolve process. 
16614
16615         * class.cs: Remove InheritablePropertySignatureCompare from the
16616         class, as we no longer depend on the property signature to compute
16617         whether it is possible to implement a method or not.
16618
16619         The reason is that calling PropertyInfo.GetGetMethod will return
16620         null (in .NET, in Mono it works, and we should change this), in
16621         cases where the Get Method does not exist in that particular
16622         class.
16623
16624         So this code:
16625
16626         class X { public virtual int A { get { return 1; } } }
16627         class Y : X { }
16628         class Z : Y { public override int A { get { return 2; } } }
16629
16630         Would fail in Z because the parent (Y) would not have the property
16631         defined.  So we avoid this completely now (because the alternative
16632         fix was ugly and slow), and we now depend exclusively on the
16633         method names.
16634
16635         (PropertyBase.CheckBase): Use a method-base mechanism to find our
16636         reference method, instead of using the property.
16637
16638         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
16639         routines are gone now.
16640
16641         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
16642         names, they were incorrectly named.
16643
16644         * cs-tokenizer.cs: Return are more gentle token on failure. 
16645
16646         * pending.cs (PendingImplementation.InterfaceMethod): This routine
16647         had an out-of-sync index variable, which caused it to remove from
16648         the list of pending methods the wrong method sometimes.
16649
16650 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
16651
16652         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
16653         CanWrite, because those refer to this particular instance of the
16654         property, and do not take into account the fact that we can
16655         override single members of a property.
16656
16657         Constructor requires an EmitContext.  The resolution process does
16658         not happen here, but we need to compute the accessors before,
16659         because the resolution does not always happen for properties.
16660
16661         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
16662         subclass, before we did not update this flag, but we did update
16663         bindingflags. 
16664
16665         (GetAccessors): Drop this routine, as it did not work in the
16666         presence of partially overwritten set/get methods. 
16667
16668         Notice that this broke the cs1540 detection, but that will require
16669         more thinking. 
16670
16671 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16672
16673         * class.cs:
16674         * codegen.cs:
16675         * driver.cs: issue a warning instead of an error if we don't support
16676         debugging for the platform. Also ignore a couple of errors that may
16677         arise when trying to write the symbols. Undo my previous patch.
16678
16679 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16680
16681         * driver.cs: ignore /debug switch except for Unix platforms.
16682
16683 2002-10-23  Nick Drochak  <ndrochak@gol.com>
16684
16685         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
16686
16687 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
16688
16689         * driver.cs: Do not make mcs-debug conditional, so we do not break
16690         builds that use it.
16691
16692         * statement.cs (UsageVector.MergeChildren): I would like Martin to
16693         review this patch.  But basically after all the children variables
16694         have been merged, the value of "Breaks" was not being set to
16695         new_breaks for Switch blocks.  I think that it should be set after
16696         it has executed.  Currently I set this to the value of new_breaks,
16697         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
16698         conservative, but I do not understand this code very well.
16699
16700         I did not break anything in the build, so that is good ;-)
16701
16702         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
16703
16704 2002-10-20  Mark Crichton  <crichton@gimp.org>
16705
16706         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
16707
16708 2002-10-20  Nick Drochak  <ndrochak@gol.com>
16709
16710         * cfold.cs: Fixed compile blocker.
16711
16712 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
16713
16714         * driver.cs: I was chekcing the key, not the file.
16715
16716 2002-10-19  Ravi Pratap  <ravi@ximian.com>
16717
16718         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
16719         message that we were generating - we just need to silently return
16720         a null.
16721
16722 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
16723
16724         * class.cs (Event.Define): Change my previous commit, as this
16725         breaks the debugger.  This is a temporary hack, as it seems like
16726         the compiler is generating events incorrectly to begin with.
16727
16728         * expression.cs (Binary.ResolveOperator): Added support for 
16729         "U operator - (E x, E y)"
16730
16731         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
16732         y)".
16733
16734         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
16735         init-only variables, but this path did not take into account that
16736         there might be also instance readonly variables.  Correct this
16737         problem. 
16738
16739         This fixes bug 32253
16740
16741         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
16742         delegates as well.
16743
16744         * driver.cs: Change the extension for modules to `netmodule'
16745
16746         * cs-parser.jay: Improved slightly the location tracking for
16747         the debugger symbols.
16748
16749         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
16750         modifiers that were specified instead of the hardcoded value
16751         (FamAndAssem).  This was basically ignoring the static modifier,
16752         and others.  Fixes 32429.
16753
16754         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
16755         fixed a bug in the process (32476)
16756
16757         * expression.cs (ArrayAccess.EmitAssign): Patch from
16758         hwang_rob@yahoo.ca that fixes bug 31834.3
16759
16760 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
16761
16762         * driver.cs: Make the module extension .netmodule.
16763
16764 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
16765
16766         * driver.cs: Report an error if the resource file is not found
16767         instead of crashing.
16768
16769         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
16770         false, like Emit does.
16771
16772 2002-10-16  Nick Drochak  <ndrochak@gol.com>
16773
16774         * typemanager.cs: Remove unused private member.  Also reported mcs
16775         bug to report this as a warning like csc.
16776
16777 2002-10-15  Martin Baulig  <martin@gnome.org>
16778
16779         * statement.cs (Statement.Emit): Made this a virtual method; emits
16780         the line number info and calls DoEmit().
16781         (Statement.DoEmit): New protected abstract method, formerly knows
16782         as Statement.Emit().
16783
16784         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
16785
16786 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
16787
16788         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
16789         have fixed a remaining problem: not every AddXXXX was adding a
16790         fully qualified name.  
16791
16792         Now everyone registers a fully qualified name in the DeclSpace as
16793         being defined instead of the partial name.  
16794
16795         Downsides: we are slower than we need to be due to the excess
16796         copies and the names being registered this way.  
16797
16798         The reason for this is that we currently depend (on the corlib
16799         bootstrap for instance) that types are fully qualified, because
16800         we dump all the types in the namespace, and we should really have
16801         types inserted into the proper namespace, so we can only store the
16802         basenames in the defined_names array.
16803
16804 2002-10-10  Martin Baulig  <martin@gnome.org>
16805
16806         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
16807         from bug #31834, see the bug report for a testcase which is
16808         miscompiled.
16809
16810 2002-10-10  Martin Baulig  <martin@gnome.org>
16811
16812         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
16813         flow analysis code for this.
16814
16815         * statement.cs (Do, While, For): Tell the flow analysis code about
16816         infinite loops.
16817         (FlowBranching.UsageVector): Added support for infinite loops.
16818         (Block.Resolve): Moved the dead code elimination here and use flow
16819         analysis to do it.
16820
16821 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
16822
16823         * class.cs (Field.Define): Catch cycles on struct type
16824         definitions. 
16825
16826         * typemanager.cs (IsUnmanagedtype): Do not recursively check
16827         fields if the fields are static.  We only need to check instance
16828         fields. 
16829
16830         * expression.cs (As.DoResolve): Test for reference type.
16831
16832         * statement.cs (Using.ResolveExpression): Use
16833         ConvertImplicitRequired, not ConvertImplicit which reports an
16834         error on failture
16835         (Using.ResolveLocalVariableDecls): ditto.
16836
16837         * expression.cs (Binary.ResolveOperator): Report errors in a few
16838         places where we had to.
16839
16840         * typemanager.cs (IsUnmanagedtype): Finish implementation.
16841
16842 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
16843
16844         * expression.cs: Use StoreFromPtr instead of extracting the type
16845         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
16846
16847         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
16848         an enumeration value to a System.Enum, but System.Enum is not a
16849         value type, but an class type, so we need to box.
16850
16851         (Expression.ConvertExplicit): One codepath could return
16852         errors but not flag them.  Fix this.  Fixes #31853
16853
16854         * parameter.cs (Resolve): Do not allow void as a parameter type.
16855
16856 2002-10-06  Martin Baulig  <martin@gnome.org>
16857
16858         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
16859         if it's a class type and not a struct.  Fixes #31815.
16860
16861 2002-10-06  Martin Baulig  <martin@gnome.org>
16862
16863         * statement.cs: Reworked the flow analysis code a bit to make it
16864         usable for dead code elimination.
16865
16866 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16867
16868         * cs-parser.jay: allow empty source files. Fixes bug #31781.
16869
16870 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
16871
16872         * expression.cs (ComposedCast.DoResolveType): A quick workaround
16873         to fix the test 165, will investigate deeper.
16874
16875 2002-10-04  Martin Baulig  <martin@gnome.org>
16876
16877         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
16878         finally blocks actually work.
16879         (Try.Resolve): We don't need to create a sibling for `finally' if
16880         there is no finally block.
16881
16882 2002-10-04  Martin Baulig  <martin@gnome.org>
16883
16884         * class.cs (Constructor.Define): The default accessibility for a
16885         non-default constructor is private, not public.
16886
16887 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
16888
16889         * class.cs (Constructor): Make AllowedModifiers public, add
16890         EXTERN.
16891
16892         * cs-parser.jay: Perform the modifiers test here, as the
16893         constructor for the Constructor class usually receives a zero
16894         because of the way we create it (first we create, later we
16895         customize, and we were never checking the modifiers).
16896
16897         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
16898         is a version of LookupTypeReflection that includes the type-name
16899         cache.  This can be used as a fast path for functions that know
16900         the fully qualified name and are only calling into *.GetType() to
16901         obtain a composed type.
16902
16903         This is also used by TypeManager.LookupType during its type
16904         composition.
16905
16906         (LookupType): We now also track the real type name, as sometimes
16907         we can get a quey for the real type name from things like
16908         ComposedCast.  This fixes bug 31422.
16909
16910         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
16911         complete type fullname, it does not have to go through the type
16912         resolution system to obtain the composed version of the type (for
16913         obtaining arrays or pointers).
16914
16915         (Conditional.Emit): Use the EmitBoolExpression to
16916         generate nicer code, as requested by Paolo.
16917
16918         (ArrayCreation.CheckIndices): Use the patch from
16919         hwang_rob@yahoo.ca to validate the array initializers. 
16920
16921 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
16922
16923         * class.cs (ConstructorInitializer.Emit): simplify code by using
16924         Invocation.EmitCall, and at the same time, fix the bugs in calling
16925         parent constructors that took variable arguments. 
16926
16927         * ecore.cs (Expression.ConvertNumericExplicit,
16928         Expression.ImplicitNumericConversion): Remove the code that
16929         manually wrapped decimal (InternalTypeConstructor call is now gone
16930         as well).
16931
16932         * expression.cs (Cast.TryReduce): Also handle decimal types when
16933         trying to perform a constant fold on the type.
16934
16935         * typemanager.cs (IsUnmanagedtype): Partially implemented.
16936
16937         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
16938         that only turned off an error report, and did nothing else. 
16939
16940 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
16941
16942         * driver.cs: Handle and ignore /fullpaths
16943
16944 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
16945
16946         * expression.cs (Binary.ResolveOperator): Catch the case where
16947         DoNumericPromotions returns true, 
16948
16949         (Binary.DoNumericPromotions): Simplify the code, and the tests.
16950
16951 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
16952
16953         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
16954         report error 70.
16955
16956 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
16957
16958         * ecore.cs (ConvertNumericExplicit): It is not enough that the
16959         conversion exists, but it is also required that the conversion be
16960         performed.  This manifested in "(Type64Enum) 2".  
16961
16962         * class.cs (TypeManager.AddMethod): The fix is not to change
16963         AddEnum, because that one was using a fully qualified name (every
16964         DeclSpace derivative does), but to change the AddMethod routine
16965         that was using an un-namespaced name.  This now correctly reports
16966         the duplicated name.
16967
16968         Revert patch until I can properly fix it.  The issue
16969         is that we have a shared Type space across all namespaces
16970         currently, which is wrong.
16971
16972         Options include making the Namespace a DeclSpace, and merge
16973         current_namespace/current_container in the parser.
16974
16975 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
16976
16977         * cs-parser.jay: Improve error reporting when we get a different
16978         kind of expression in local_variable_type and
16979         local_variable_pointer_type. 
16980
16981         Propagate this to avoid missleading errors being reported.
16982
16983         * ecore.cs (ImplicitReferenceConversion): treat
16984         TypeManager.value_type as a target just like object_type.   As
16985         code like this:
16986
16987         ValueType v = 1;
16988
16989         Is valid, and needs to result in the int 1 being boxed before it
16990         is assigned to the value type v.
16991
16992         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
16993         to validate the enumeration name.
16994
16995         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
16996         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
16997         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
16998
16999         * ecore.cs (TryImplicitIntConversion): When doing an
17000         implicit-enumeration-conversion, check if the type is 64-bits and
17001         perform a conversion before passing to EnumConstant.
17002
17003 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17004
17005         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17006         report ambiguous type references.  Unlike the MS version, we
17007         report what the ambiguity is.   Innovation at work ;-)
17008
17009         (DeclSpace.FindType): Require a location argument to
17010         display when we display an ambiguous error.
17011
17012         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17013
17014         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17015
17016         * expression.cs (EmitDynamicInitializers): Apply patch from
17017         hwang_rob@yahoo.ca that fixes the order in which we emit our
17018         initializers. 
17019
17020 2002-09-21  Martin Baulig  <martin@gnome.org>
17021
17022         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17023         delegate takes no arguments.
17024
17025 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17026
17027         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17028         from integers.
17029
17030         * expression.cs: Extract the underlying type.
17031
17032         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17033
17034         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17035
17036 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17037
17038         * class.cs (TypeContainer.DefineType): We can not use the nice
17039         PackingSize with the size set to 1 DefineType method, because it
17040         will not allow us to define the interfaces that the struct
17041         implements.
17042
17043         This completes the fixing of bug 27287
17044
17045         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17046         means also structs.  This fixes part of the problem. 
17047         (Expresion.ImplicitReferenceConversionExists): ditto.
17048
17049         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17050         error if there were no errors reported during the type lookup
17051         process, to avoid duplicates or redundant errors.  Without this
17052         you would get an ambiguous errors plus a type not found.  We have
17053         beaten the user enough with the first error.  
17054
17055         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17056         reference. 
17057
17058         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17059         during the resolution process, stop the lookup, this avoids
17060         repeated error reports (same error twice).
17061
17062         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17063
17064         * typemanager.cs (LookupType): Redo the type lookup code to match
17065         the needs of System.Reflection.  
17066
17067         The issue is that System.Reflection requires references to nested
17068         types to begin with a "+" sign instead of a dot.  So toplevel
17069         types look like: "NameSpace.TopLevelClass", and nested ones look
17070         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17071         levels. 
17072
17073 2002-09-19  Martin Baulig  <martin@gnome.org>
17074
17075         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17076         says that a method always returns or always throws an exception,
17077         don't report the CS0161.
17078
17079         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17080         set `Returns = new_returns'.
17081
17082 2002-09-19  Martin Baulig  <martin@gnome.org>
17083
17084         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17085         to an enum constant, check for a CS0176.
17086
17087 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17088
17089         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17090         for operators that must be in pairs and report errors.
17091
17092         * ecore.cs (SimpleName.DoResolveType): During the initial type
17093         resolution process, when we define types recursively, we must
17094         check first for types in our current scope before we perform
17095         lookups in the enclosing scopes.
17096
17097         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17098
17099         (Invocation.VerifyArgumentsCompat): Call
17100         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17101         I thought we were supposed to always call this, but there are a
17102         few places in the code where we dont do it.
17103
17104 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17105
17106         * driver.cs: Add support in -linkres and -resource to specify the
17107         name of the identifier.
17108
17109 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17110
17111         * ecore.cs (StandardConversionExists): Sync with the conversion
17112         code: allow anything-* to void* conversions.
17113
17114         (FindMostSpecificSource): Use an Expression argument
17115         instead of a Type, because we might be handed over a Literal which
17116         gets a few more implicit conversions that plain types do not.  So
17117         this information was being lost.
17118
17119         Also, we drop the temporary type-holder expression when not
17120         required.
17121
17122 2002-09-17  Martin Baulig  <martin@gnome.org>
17123
17124         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17125         this is an explicit interface implementation.
17126
17127 2002-09-17  Martin Baulig  <martin@gnome.org>
17128
17129         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17130         different `IndexerName' attributes.
17131
17132         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17133         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17134         virtual CommonResolve().
17135
17136 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17137
17138         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17139         and convert that to the UnderlyingType.
17140
17141         * statement.cs (Foreach.Resolve): Indexers are just like variables
17142         or PropertyAccesses.
17143
17144         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17145         inside quoted strings, we were not doing this before.
17146
17147 2002-09-16  Martin Baulig  <martin@gnome.org>
17148
17149         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17150         resolve it.  This is needed for the definite assignment check of the
17151         instance expression, fixes bug #29846.
17152         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17153
17154 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17155
17156         * parameter.cs: Fix compile error.  Cannot reference static member
17157         from an instance object.  Is this an mcs bug?
17158
17159 2002-09-14  Martin Baulig  <martin@gnome.org>
17160
17161         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17162         multiple times.  Fixes bug #30295, added test-166.cs.
17163
17164 2002-09-14  Martin Baulig  <martin@gnome.org>
17165
17166         * statement.cs (Block.Emit): Don't emit unreachable code.
17167         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17168         `break' statements.
17169         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17170
17171 2002-09-14  Martin Baulig  <martin@gnome.org>
17172
17173         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17174         is set.
17175
17176 2002-09-14  Martin Baulig  <martin@gnome.org>
17177
17178         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17179         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17180         be false on the ms runtime.
17181
17182 2002-09-13  Martin Baulig  <martin@gnome.org>
17183
17184         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17185         the CS0038 error message.
17186
17187 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17188
17189         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17190         constant inside, return it.
17191
17192 2002-09-12  Martin Baulig  <martin@gnome.org>
17193
17194         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17195         implicit conversion can be done between enum types.
17196
17197         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17198         check whether an implicit conversion to the current enum's UnderlyingType
17199         exists and report an error if not.
17200
17201         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17202         without debugging support.
17203
17204         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17205         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17206
17207 2002-09-12  Martin Baulig  <martin@gnome.org>
17208
17209         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17210
17211         * ecore.cs (IMemberExpr.DeclaringType): New property.
17212         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17213         nonstatic member of an outer type (CS0038).
17214
17215 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17216
17217         * driver.cs: Activate the using-error detector at warning level
17218         4 (at least for MS-compatible APIs).
17219
17220         * namespace.cs (VerifyUsing): Small buglett fix.
17221
17222         * pending.cs (PendingImplementation): pass the container pointer. 
17223
17224         * interface.cs (GetMethods): Allow for recursive definition.  Long
17225         term, I would like to move every type to support recursive
17226         definitions, not the current ordering mechanism that we have right
17227         now.
17228
17229         The situation is this: Attributes are handled before interfaces,
17230         so we can apply attributes to interfaces.  But some attributes
17231         implement interfaces, we will now handle the simple cases
17232         (recursive definitions will just get an error).  
17233
17234         * parameter.cs: Only invalidate types at the end if we fail to
17235         lookup all types.  
17236
17237 2002-09-09  Martin Baulig  <martin@gnome.org>
17238
17239         * ecore.cs (PropertyExpr.Emit): Also check for
17240         TypeManager.system_int_array_get_length so this'll also work when
17241         compiling corlib.  Fixes #30003.
17242
17243 2002-09-09  Martin Baulig  <martin@gnome.org>
17244
17245         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17246         and throw an exception if we can't get the type's size.  Fixed #30040,
17247         added test-165.cs.
17248
17249 2002-09-09  Martin Baulig  <martin@gnome.org>
17250
17251         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17252
17253         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17254         context.  Fixes bug #30027.
17255
17256         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17257         virtual functions.  Fixes bug #30043, added test-164.cs.
17258
17259 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17260
17261         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17262
17263 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17264
17265         * driver.cs: Use an object to get the windows codepage since it's not a
17266         static property.
17267
17268 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17269
17270         * statement.cs (For.Emit): for infinite loops (test == null)
17271         return whether there is a break inside, not always "true".
17272
17273         * namespace.cs (UsingEntry): New struct to hold the name of the
17274         using definition, the location where it is defined, and whether it
17275         has been used in a successful type lookup.
17276
17277         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
17278         strings.
17279
17280         * decl.cs: ditto.
17281
17282 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17283
17284         * attribute.cs : Fix incorrect code which relied on catching
17285         a NullReferenceException to detect a null being passed in
17286         where an object was expected.
17287
17288 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
17289
17290         * statement.cs (Try): flag the catch variable as assigned
17291
17292         * expression.cs (Cast): Simplified by using ResolveType instead of
17293         manually resolving.
17294
17295         * statement.cs (Catch): Fix bug by using ResolveType.
17296
17297 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17298
17299         * expression.cs (BetterConversion): Special case for when we have
17300         a NullLiteral as the argument and we have to choose between string
17301         and object types - we choose string the way csc does.
17302
17303         * attribute.cs (Attribute.Resolve): Catch the
17304         NullReferenceException and report error #182 since the Mono
17305         runtime no more has the bug and having this exception raised means
17306         we tried to select a constructor which takes an object and is
17307         passed a null.
17308
17309 2002-09-05  Ravi Pratap  <ravi@ximian.com>
17310
17311         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
17312         message (1502, 1503) when we can't locate a method after overload
17313         resolution. This is much more informative and closes the bug
17314         Miguel reported.
17315
17316         * interface.cs (PopulateMethod): Return if there are no argument
17317         types. Fixes a NullReferenceException bug.
17318
17319         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
17320         expressions too. Previously we were checking only in one place for
17321         positional arguments leaving out named arguments.
17322
17323         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
17324         type to the enum type is not allowed. Remove code corresponding to
17325         that.
17326
17327         (ConvertNumericExplicit): Allow explicit conversions from
17328         the underlying type to enum type. This precisely follows the spec
17329         and closes a bug filed by Gonzalo.
17330
17331 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17332
17333         * compiler.csproj:
17334         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
17335
17336 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
17337
17338         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
17339         it was important that we stored the right value after the
17340         reduction in `converted'.
17341
17342 2002-09-04  Martin Baulig  <martin@gnome.org>
17343
17344         * location.cs (Location.SymbolDocument): Use full pathnames for the
17345         source files.
17346
17347 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
17348
17349         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
17350         of the expression resolve mechanism, because that will catch the
17351         SimpleName error failures.
17352
17353         (Conditional): If we can not resolve the
17354         expression, return, do not crash.
17355
17356 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17357
17358         * cs-tokenizer.cs:
17359         (location): display token name instead of its number.
17360
17361 2002-08-28  Martin Baulig  <martin@gnome.org>
17362
17363         * expression.cs (Binary.ResolveOperator): Don't silently return
17364         but return an error if an operator cannot be applied between two
17365         enum types.
17366
17367 2002-08-28  Martin Baulig  <martin@gnome.org>
17368
17369         * class.cs (Constructor.Define): Set the permission attributes
17370         correctly instead of making all constructors public.
17371
17372 2002-08-28  Martin Baulig  <martin@gnome.org>
17373
17374         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
17375         for private members before reporting a CS0103; if we find anything,
17376         it's a CS0122.
17377
17378 2002-08-28  Martin Baulig  <martin@gnome.org>
17379
17380         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
17381         to check whether `closure_start_type == closure_invocation_type',
17382         we also need to check whether `m.DeclaringType == closure_invocation_type'
17383         before bypassing the permission checks.  We might be accessing
17384         protected/private members from the base class.
17385         (TypeManager.RealMemberLookup): Only set private_ok if private
17386         members were requested via BindingFlags.NonPublic.
17387
17388         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
17389
17390         * expression.cs (MemberAccess.ResolveMemberAccess): Set
17391         MethodGroupExpr.IsExplicitImpl if appropriate.
17392         (Invocation.DoResolve): Don't report the CS0120 for explicit
17393         interface implementations.
17394
17395 2002-08-27  Martin Baulig  <martin@gnome.org>
17396
17397         * expression.cs (Invocation.DoResolve): If this is a static
17398         method and we don't have an InstanceExpression, we must report
17399         a CS0120.
17400
17401 2002-08-25  Martin Baulig  <martin@gnome.org>
17402
17403         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
17404         `==' between a valuetype and an object.
17405
17406 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
17407
17408         * ecore.cs (TypeExpr): Provide a ToString method.
17409
17410 2002-08-24  Martin Baulig  <martin@gnome.org>
17411
17412         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
17413         now called proggie.dbg and it's a binary file.
17414
17415 2002-08-23  Martin Baulig  <martin@gnome.org>
17416
17417         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
17418
17419 2002-08-23  Martin Baulig  <martin@gnome.org>
17420
17421         * struct.cs (MyStructInfo.ctor): Make this work with empty
17422         structs; it's not allowed to use foreach() on null.
17423
17424 2002-08-23  Martin Baulig  <martin@gnome.org>
17425
17426         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
17427         writer the full pathname of the generated assembly.
17428
17429 2002-08-23  Martin Baulig  <martin@gnome.org>
17430
17431         * statements.cs (FlowBranching.UsageVector.MergeChildren):
17432         A `finally' block never returns or breaks; improved handling of
17433         unreachable code.
17434
17435 2002-08-23  Martin Baulig  <martin@gnome.org>
17436
17437         * statement.cs (Throw.Resolve): Allow `throw null'.
17438
17439 2002-08-23  Martin Baulig  <martin@gnome.org>
17440
17441         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
17442         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
17443         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
17444         MemberLookup would return a wrong event if this is an explicit
17445         interface implementation and the class has an event with the same
17446         name.
17447
17448 2002-08-23  Martin Baulig  <martin@gnome.org>
17449
17450         * statement.cs (Block.AddChildVariableNames): New public method.
17451         (Block.AddChildVariableName): Likewise.
17452         (Block.IsVariableNameUsedInChildBlock): Likewise.
17453         (Block.AddVariable): Check whether a variable name has already
17454         been used in a child block.
17455
17456         * cs-parser.jay (declare_local_variables): Mark all variable names
17457         from the current block as being used in a child block in the
17458         implicit block.
17459
17460 2002-08-23  Martin Baulig  <martin@gnome.org>
17461
17462         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
17463         find the symbol writer.
17464
17465         * driver.cs: csc also allows the arguments to /define being
17466         separated by commas, not only by semicolons.
17467
17468 2002-08-23  Martin Baulig  <martin@gnome.org>
17469
17470         * interface.cs (Interface.GetMembers): Added static check for events.
17471
17472 2002-08-15  Martin Baulig  <martin@gnome.org>
17473
17474         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
17475         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
17476
17477         * ecore.cs (Expression.MemberLookup): Added documentation and explained
17478         why the MethodData.EmitDestructor() change was necessary.
17479
17480 2002-08-20  Martin Baulig  <martin@gnome.org>
17481
17482         * class.cs (TypeContainer.FindMembers): Added static check for events.
17483
17484         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
17485
17486         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
17487         use Type.GetEvents(), not Type.FindMembers().
17488
17489 2002-08-20  Martin Baulig  <martin@gnome.org>
17490
17491         * decl.cs (MemberCache): Added a special method cache which will
17492         be used for method-only searched.  This ensures that a method
17493         search will return a MethodInfo with the correct ReflectedType for
17494         inherited methods.      
17495
17496 2002-08-20  Martin Baulig  <martin@gnome.org>
17497
17498         * decl.cs (DeclSpace.FindMembers): Made this public.
17499
17500 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17501
17502         * delegate.cs: fixed build on windows.
17503         [FIXME:  Filed as bug #29150: MCS must report these errors.]
17504
17505 2002-08-19  Ravi Pratap  <ravi@ximian.com>
17506
17507         * ecore.cs (StandardConversionExists): Return a false
17508         if we are trying to convert the void type to anything else
17509         since that is not allowed.
17510
17511         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
17512         we flag error 70 in the event an event is trying to be accessed
17513         directly from outside the declaring type.
17514
17515 2002-08-20  Martin Baulig  <martin@gnome.org>
17516
17517         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
17518         MemberCache from typemanager.cs to decl.cs.
17519
17520 2002-08-19  Martin Baulig  <martin@gnome.org>
17521
17522         * class.cs (TypeContainer): Implement IMemberContainer.
17523         (TypeContainer.DefineMembers): Create the MemberCache.
17524         (TypeContainer.FindMembers): Do better BindingFlags checking; only
17525         return public members if BindingFlags.Public was given, check
17526         whether members are static.
17527
17528 2002-08-16  Martin Baulig  <martin@gnome.org>
17529
17530         * decl.cs (DeclSpace.Define): Splitted this in Define and
17531         DefineMembers.  DefineMembers is called first and initializes the
17532         MemberCache.
17533
17534         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
17535         DefineMembers() on all our DeclSpaces.
17536
17537         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
17538         but call DefineMembers() on all nested interfaces.  We call their
17539         Define() in our new Define() function.
17540
17541         * interface.cs (Interface): Implement IMemberContainer.
17542         (Interface.Define): Moved all code except the attribute stuf to
17543         DefineMembers().
17544         (Interface.DefineMembers): Initialize the member cache.
17545
17546         * typemanager.cs (IMemberFinder): Removed this interface, we don't
17547         need this anymore since we can use MemberCache.FindMembers directly.
17548
17549 2002-08-19  Martin Baulig  <martin@gnome.org>
17550
17551         * typemanager.cs (MemberCache): When creating the cache for an
17552         interface type, add all inherited members.
17553         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
17554         to `out bool used_cache' and documented it.
17555         (TypeManager.MemberLookup): If we already used the cache in the first
17556         iteration, we don't need to do the interfaces check.
17557
17558 2002-08-19  Martin Baulig  <martin@gnome.org>
17559
17560         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
17561         here from IMemberFinder and don't implement this interface anymore.
17562         (DeclSpace.MemberCache): Moved here from IMemberFinder.
17563
17564         * typemanager.cs (IMemberFinder): This interface is now only used by
17565         classes which actually support the member cache.
17566         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
17567         since we only put DeclSpaces into this Hashtable.
17568         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
17569         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
17570
17571 2002-08-16  Martin Baulig  <martin@gnome.org>
17572
17573         * typemanager.cs (ICachingMemberFinder): Removed.
17574         (IMemberFinder.MemberCache): New property.
17575         (TypeManager.FindMembers): Merged this with RealFindMembers().
17576         This function will never be called from TypeManager.MemberLookup()
17577         so we can't use the cache here, just the IMemberFinder.
17578         (TypeManager.MemberLookup_FindMembers): Check whether the
17579         IMemberFinder has a MemberCache and call the cache's FindMembers
17580         function.
17581         (MemberCache): Rewrote larger parts of this yet another time and
17582         cleaned it up a bit.
17583
17584 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
17585
17586         * driver.cs (LoadArgs): Support quoting.
17587
17588         (Usage): Show the CSC-like command line arguments.
17589
17590         Improved a few error messages.
17591
17592 2002-08-15  Martin Baulig  <martin@gnome.org>
17593
17594         * typemanager.cs (IMemberContainer.Type): New property.
17595         (IMemberContainer.IsInterface): New property.
17596
17597         The following changes are conditional to BROKEN_RUNTIME, which is
17598         defined at the top of the file.
17599
17600         * typemanager.cs (MemberCache.MemberCache): Don't add the base
17601         class'es members, but add all members from TypeHandle.ObjectType
17602         if we're an interface.
17603         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
17604         is the current type.
17605         (MemberCache.CacheEntry.Container): Removed this field.
17606         (TypeHandle.GetMembers): Include inherited members.
17607
17608 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17609
17610         * typemanager.cs: fixed compilation and added a comment on a field that
17611         is never used.
17612
17613 2002-08-15  Martin Baulig  <martin@gnome.org>
17614
17615         * class.cs (ConstructorInitializer.Resolve): In the
17616         Expression.MemberLookup call, use the queried_type as
17617         invocation_type.
17618
17619         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
17620         declared' attribute, it's always true.
17621         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
17622         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
17623         temporary wrapper for FindMembers which tells MemberLookup whether
17624         members from the base classes are included in the return value.
17625         This will go away soon.
17626         (TypeManager.MemberLookup): Use this temporary hack here; once the
17627         new MemberCache is completed, we don't need to do the DeclaredOnly
17628         looping here anymore since the MemberCache will take care of this.
17629         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
17630         (MemberCache): When creating the MemberCache for a class, get
17631         members from the current class and all its base classes.
17632         (MemberCache.CacheEntry.Container): New field.  This is a
17633         temporary hack until the Mono runtime is fixed to distinguish
17634         between ReflectedType and DeclaringType.  It allows us to use MCS
17635         with both the MS runtime and the unfixed Mono runtime without
17636         problems and without accecting performance.
17637         (MemberCache.SearchMembers): The DeclaredOnly looping from
17638         TypeManager.MemberLookup is now done here.      
17639
17640 2002-08-14  Martin Baulig  <martin@gnome.org>
17641
17642         * statement.cs (MyStructInfo.MyStructInfo): Don't call
17643         Type.GetFields on dynamic types but get the fields from the
17644         corresponding TypeContainer.
17645         (MyStructInfo.GetStructInfo): Added check for enum types.
17646
17647         * typemanager.cs (MemberList.IsSynchronized): Implemented.
17648         (MemberList.SyncRoot): Implemented.
17649         (TypeManager.FilterWithClosure): No need to check permissions if
17650         closure_start_type == closure_invocation_type, don't crash if
17651         closure_invocation_type is null.
17652
17653 2002-08-13  Martin Baulig  <martin@gnome.org>
17654
17655         Rewrote TypeContainer.FindMembers to use a member cache.  This
17656         gives us a speed increase of about 35% for the self-hosting MCS
17657         build and of about 15-20% for the class libs (both on GNU/Linux).
17658
17659         * report.cs (Timer): New class to get enhanced profiling.  This
17660         whole class is "TIMER" conditional since it remarkably slows down
17661         compilation speed.
17662
17663         * class.cs (MemberList): New class.  This is an IList wrapper
17664         which we're now using instead of passing MemberInfo[]'s around to
17665         avoid copying this array unnecessarily.
17666         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
17667         (ICachingMemberFinder, IMemberContainer): New interface.
17668         (TypeManager.FilterWithClosure): If `criteria' is null, the name
17669         has already been checked, otherwise use it for the name comparision.
17670         (TypeManager.FindMembers): Renamed to RealMemberFinder and
17671         provided wrapper which tries to use ICachingMemberFinder.FindMembers
17672         if possible.  Returns a MemberList, not a MemberInfo [].
17673         (TypeHandle): New class, implements IMemberContainer.  We create
17674         one instance of this class per type, it contains a MemberCache
17675         which is used to do the member lookups.
17676         (MemberCache): New class.  Each instance of this class contains
17677         all members of a type and a name-based hash table.
17678         (MemberCache.FindMembers): This is our new member lookup
17679         function.  First, it looks up all members of the requested name in
17680         the hash table.  Then, it walks this list and sorts out all
17681         applicable members and returns them.
17682
17683 2002-08-13  Martin Baulig  <martin@gnome.org>
17684
17685         In addition to a nice code cleanup, this gives us a performance
17686         increase of about 1.4% on GNU/Linux - not much, but it's already
17687         half a second for the self-hosting MCS compilation.
17688
17689         * typemanager.cs (IMemberFinder): New interface.  It is used by
17690         TypeManager.FindMembers to call FindMembers on a TypeContainer,
17691         Enum, Delegate or Interface.
17692         (TypeManager.finder_to_member_finder): New PtrHashtable.
17693         (TypeManager.finder_to_container): Removed.
17694         (TypeManager.finder_to_delegate): Removed.
17695         (TypeManager.finder_to_interface): Removed.
17696         (TypeManager.finder_to_enum): Removed.
17697
17698         * interface.cs (Interface): Implement IMemberFinder.
17699
17700         * delegate.cs (Delegate): Implement IMemberFinder.
17701
17702         * enum.cs (Enum): Implement IMemberFinder.
17703
17704         * class.cs (TypeContainer): Implement IMemberFinder.
17705
17706 2002-08-12  Martin Baulig  <martin@gnome.org>
17707
17708         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
17709
17710 2002-08-12  Martin Baulig  <martin@gnome.org>
17711
17712         * ecore.cs (ITypeExpression): New interface for expressions which
17713         resolve to a type.
17714         (TypeExpression): Renamed to TypeLookupExpression.
17715         (Expression.DoResolve): If we're doing a types-only lookup, the
17716         expression must implement the ITypeExpression interface and we
17717         call DoResolveType() on it.
17718         (SimpleName): Implement the new ITypeExpression interface.
17719         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
17720         hack, the situation that we're only looking up types can't happen
17721         anymore when this method is called.  Moved the type lookup code to
17722         DoResolveType() and call it.
17723         (SimpleName.DoResolveType): This ITypeExpression interface method
17724         is now doing the types-only lookup.
17725         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
17726         (ResolveFlags): Added MaskExprClass.
17727
17728         * expression.cs (MemberAccess): Implement the ITypeExpression
17729         interface.
17730         (MemberAccess.DoResolve): Added support for a types-only lookup
17731         when we're called via ITypeExpression.DoResolveType().
17732         (ComposedCast): Implement the ITypeExpression interface.
17733
17734         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
17735         Expression.Resolve() with ResolveFlags.Type instead.
17736
17737 2002-08-12  Martin Baulig  <martin@gnome.org>
17738
17739         * interface.cs (Interface.Define): Apply attributes.
17740
17741         * attribute.cs (Attribute.ApplyAttributes): Added support for
17742         interface attributes.
17743
17744 2002-08-11  Martin Baulig  <martin@gnome.org>
17745
17746         * statement.cs (Block.Emit): Only check the "this" variable if we
17747         do not always throw an exception.
17748
17749         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
17750         whether the property has a set accessor.
17751
17752 2002-08-11  Martin Baulig  <martin@gnome.org>
17753
17754         Added control flow analysis support for structs.
17755
17756         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
17757         with control flow analysis turned off.
17758         (IVariable): New interface.
17759         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
17760         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
17761         (FieldExpr.DoResolve): Resolve the instance expression with flow
17762         analysis turned off and do the definite assignment check after the
17763         resolving when we know what the expression will resolve to.
17764
17765         * expression.cs (LocalVariableReference, ParameterReference):
17766         Implement the new IVariable interface, only call the flow analysis
17767         code if ec.DoFlowAnalysis is true.
17768         (This): Added constructor which takes a Block argument.  Implement
17769         the new IVariable interface.
17770         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
17771         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
17772         This does the definite assignment checks for struct members.
17773
17774         * class.cs (Constructor.Emit): If this is a non-static `struct'
17775         constructor which doesn't have any initializer, call
17776         Block.AddThisVariable() to tell the flow analysis code that all
17777         struct elements must be initialized before control returns from
17778         the constructor.
17779
17780         * statement.cs (MyStructInfo): New public class.
17781         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
17782         argument to this indexer.  If non-zero, check an individual struct
17783         member, not the whole struct.
17784         (FlowBranching.CheckOutParameters): Check struct members.
17785         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
17786         overloaded versions of these methods which take an additional
17787         `int field_idx' argument to check struct members.
17788         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
17789         overloaded versions of these methods which take an additional
17790         `string field_name' argument to check struct member.s
17791         (VariableInfo): Implement the IVariable interface.
17792         (VariableInfo.StructInfo): New public property.  Returns the
17793         MyStructInfo instance of the variable if it's a struct or null.
17794         (Block.AddThisVariable): New public method.  This is called from
17795         Constructor.Emit() for non-static `struct' constructor which do
17796         not have any initializer.  It creates a special variable for the
17797         "this" instance variable which will be checked by the flow
17798         analysis code to ensure that all of the struct's fields are
17799         initialized before control returns from the constructor.
17800         (UsageVector): Added support for struct members.  If a
17801         variable/parameter is a struct with N members, we reserve a slot
17802         in the usage vector for each member.  A struct is considered fully
17803         initialized if either the struct itself (slot 0) or all its
17804         members are initialized.
17805
17806 2002-08-08  Martin Baulig  <martin@gnome.org>
17807
17808         * driver.cs (Driver.MainDriver): Only report an error CS5001
17809         if there were no compilation errors.
17810
17811         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
17812         `UnsafeContext' property to determine whether the parent is in
17813         unsafe context rather than checking the parent's ModFlags:
17814         classes nested in an unsafe class are unsafe as well.
17815
17816 2002-08-08  Martin Baulig  <martin@gnome.org>
17817
17818         * statement.cs (UsageVector.MergeChildren): Distinguish between
17819         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
17820         we return.  Added test17() and test18() to test-154.cs.
17821
17822 2002-08-08  Martin Baulig  <martin@gnome.org>
17823
17824         * typemanager.cs (TypeManager.FilterWithClosure): If we have
17825         Family access, make sure the invoking type isn't a subclass of the
17826         queried type (that'd be a CS1540).
17827
17828         * ecore.cs (Expression.MemberLookup): Added overloaded version of
17829         this method which takes an additional `Type invocation_type'.
17830
17831         * expression.cs (BaseAccess.DoResolve): Use the base type as
17832         invocation and query type.
17833         (MemberAccess.DoResolve): If the lookup failed and we're about to
17834         report a CS0122, try a lookup with the ec.ContainerType - if this
17835         succeeds, we must report a CS1540.
17836
17837 2002-08-08  Martin Baulig  <martin@gnome.org>
17838
17839         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
17840         (MethodGroupExpr): Implement the IMemberExpr interface.
17841
17842         * expression (MemberAccess.ResolveMemberAccess): No need to have
17843         any special code for MethodGroupExprs anymore, they're now
17844         IMemberExprs.   
17845
17846 2002-08-08  Martin Baulig  <martin@gnome.org>
17847
17848         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
17849         Family, FamANDAssem and FamORAssem permissions.
17850         (TypeManager.IsSubclassOrNestedChildOf): New public method.
17851
17852 2002-08-08  Martin Baulig  <martin@gnome.org>
17853
17854         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
17855         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
17856         or loop block.
17857
17858 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
17859
17860         * driver.cs: implemented /resource option to embed managed resources.
17861
17862 2002-08-07  Martin Baulig  <martin@gnome.org>
17863
17864         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
17865         (FieldBase.HasFieldInitializer): New public property.
17866         (FieldBase.GetInitializerExpression): New public method.  Resolves and
17867         returns the field initializer and makes sure it is only resolved once.
17868         (TypeContainer.EmitFieldInitializers): Call
17869         FieldBase.GetInitializerExpression to get the initializer, this ensures
17870         that it isn't resolved multiple times.
17871
17872         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
17873         the resolving process (SimpleName/MemberLookup) that we're currently
17874         emitting a field initializer (which must not access any instance members,
17875         this is an error CS0236).
17876
17877         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
17878         argument, if the `IsFieldInitializer' flag is set, we must report and
17879         error CS0236 and not an error CS0120.   
17880
17881 2002-08-07  Martin Baulig  <martin@gnome.org>
17882
17883         * ecore.cs (IMemberExpr): New public interface.
17884         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
17885         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
17886         if the expression is an IMemberExpr.
17887
17888         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
17889         to be null, implicitly default to `this' if we're non-static in
17890         this case.  Simplified the code a lot by using the new IMemberExpr
17891         interface.  Also fixed bug #28176 here.
17892
17893 2002-08-06  Martin Baulig  <martin@gnome.org>
17894
17895         * cs-parser.jay (SimpleLookup): Removed.  We need to create
17896         ParameterReferences during semantic analysis so that we can do a
17897         type-only search when resolving Cast, TypeOf and SizeOf.
17898         (block): Pass the `current_local_parameters' to the Block's
17899         constructor.
17900
17901         * class.cs (ConstructorInitializer): Added `Parameters parameters'
17902         argument to the constructor.
17903         (ConstructorInitializer.Resolve): Create a temporary implicit
17904         block with the parameters.
17905
17906         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
17907         references here if we aren't doing a type-only search.
17908
17909         * statement.cs (Block): Added constructor which takes a
17910         `Parameters parameters' argument.
17911         (Block.Parameters): New public property.
17912
17913         * support.cs (InternalParameters.Parameters): Renamed `parameters'
17914         to `Parameters' and made it public readonly.
17915
17916 2002-08-06  Martin Baulig  <martin@gnome.org>
17917
17918         * ecore.cs (Expression.Warning): Made this public as well.
17919
17920         * report.cs (Report.Debug): Print the contents of collections.
17921
17922 2002-08-06  Martin Baulig  <martin@gnome.org>
17923
17924         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
17925         used to tell Resolve() which kinds of expressions it may return.
17926         (Expression.Resolve): Added overloaded version of this method which
17927         takes a `ResolveFlags flags' argument.  This can be used to tell
17928         Resolve() which kinds of expressions it may return.  Reports a
17929         CS0118 on error.
17930         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
17931         ResolveFlags.SimpleName.
17932         (Expression.Error118): Added overloaded version of this method which
17933         takes a `ResolveFlags flags' argument.  It uses the flags to determine
17934         which kinds of expressions are allowed.
17935
17936         * expression.cs (Argument.ResolveMethodGroup): New public method.
17937         Resolves an argument, but allows a MethodGroup to be returned.
17938         This is used when invoking a delegate.
17939
17940         * TODO: Updated a bit.
17941
17942 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17943
17944         Fixed compilation with csc.
17945
17946         * ecore.cs: Expression.Error made public. Is this correct? Should
17947         Warning be made public too?
17948
17949         * expression.cs: use ea.Location instead of ea.loc.
17950         [FIXME:  Filed as bug #28607: MCS must report these errors.]
17951
17952 2002-08-06  Martin Baulig  <martin@gnome.org>
17953
17954         * ecore.cs (Expression.loc): Moved the location here instead of
17955         duplicating it in all derived classes.
17956         (Expression.Location): New public property.
17957         (Expression.Error, Expression.Warning): Made them non-static and
17958         removed the location argument.
17959         (Expression.Warning): Added overloaded version which takes an
17960         `int level' argument.
17961         (Expression.Error118): Make this non-static and removed the
17962         expression and location arguments.
17963         (TypeExpr): Added location argument to the constructor.
17964
17965         * expression.cs (StaticCallExpr): Added location argument to
17966         the constructor.
17967         (Indirection, PointerArithmetic): Likewise.
17968         (CheckedExpr, UnCheckedExpr): Likewise.
17969         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
17970         (StringPtr): Likewise.
17971
17972
17973 2002-08-05  Martin Baulig  <martin@gnome.org>
17974
17975         * expression.cs (BaseAccess.DoResolve): Actually report errors.
17976
17977         * assign.cs (Assign.DoResolve): Check whether the source
17978         expression is a value or variable.
17979
17980         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
17981         while resolving the corresponding blocks.
17982
17983         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
17984         an error, don't silently return null.
17985
17986         * statement.cs (Block.AddVariable): Do the error reporting here
17987         and distinguish between CS0128 and CS0136.
17988         (Block.DoResolve): Report all unused labels (warning CS0164).
17989         (LabeledStatement): Pass the location to the constructor.
17990         (LabeledStatement.HasBeenReferenced): New property.
17991         (LabeledStatement.Resolve): Set it to true here.
17992
17993         * statement.cs (Return.Emit): Return success even after reporting
17994         a type mismatch error (CS0126 or CS0127), this is what csc does and
17995         it avoids confusing the users with any consecutive errors.
17996
17997 2002-08-05  Martin Baulig  <martin@gnome.org>
17998
17999         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18000
18001         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18002
18003         * expression.cs (MemberAccess.DoResolve): Silently return if an
18004         error has already been reported.
18005
18006         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18007         error has already been reported.
18008
18009 2002-08-05  Martin Baulig  <martin@gnome.org>
18010
18011         * statement.cs (UsageVector): Only initialize the `parameters'
18012         vector if we actually have any "out" parameters.
18013
18014 2002-08-05  Martin Baulig  <martin@gnome.org>
18015
18016         * expression.cs (Binary.ResolveOperator): When combining delegates,
18017         they must have the same type.
18018
18019 2002-08-05  Martin Baulig  <martin@gnome.org>
18020
18021         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18022         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18023         work with the ms runtime and we also don't need it: if we're a
18024         PropertyBuilder and not in the `indexer_arguments' hash, then we
18025         are a property and not an indexer.
18026
18027         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18028         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18029         since the latter one doesn't work with the ms runtime.
18030
18031 2002-08-03  Martin Baulig  <martin@gnome.org>
18032
18033         Fixed bugs #27998 and #22735.
18034
18035         * class.cs (Method.IsOperator): New public field.
18036         (Method.CheckBase): Report CS0111 if there's already a method
18037         with the same parameters in the current class.  Report CS0508 when
18038         attempting to change the return type of an inherited method.
18039         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18040         and it's not marked abstract or extern.
18041         (PropertyBase): New abstract base class for Property and Indexer.
18042         (PropertyBase.CheckBase): Moved here from Property and made it work
18043         for indexers.
18044         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18045         the same so we can reuse it there.
18046         (Property, Indexer): Derive from PropertyBase.
18047         (MethodSignature.inheritable_property_signature_filter): New delegate
18048         to find properties and indexers.
18049
18050         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18051         argument and improved error reporting.
18052
18053         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18054         EmptyReadOnlyParameters and made it a property.
18055
18056         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18057         version of this method which takes a `PropertyInfo indexer'.
18058         (TypeManager.RegisterIndexer): New method.
18059
18060         * class.cs: Added myself as author of this file :-)
18061
18062 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18063
18064         * class.cs: fixed compilation on windoze.
18065
18066 2002-08-03  Martin Baulig  <martin@gnome.org>
18067
18068         * interface.cs (Interface.GetInterfaceBases): Check whether all
18069         base interfaces are at least as accessible than the current one.
18070
18071         * class.cs (TypeContainer.GetClassBases): Check whether base types
18072         are at least as accessible than the current type.
18073         (TypeContainer.AsAccessible): Implemented and made non-static.
18074         (MemberBase.CheckParameters): Report errors if the accessibility
18075         checks fail.
18076
18077         * delegate.cs (Delegate.Delegate): The default visibility is
18078         internal for top-level types and private for nested types.
18079         (Delegate.Define): Report errors if the accessibility checks fail.
18080
18081         * enum.cs (Enum.Enum): The default visibility is internal for
18082         top-level types and private for nested types.
18083         (Enum.DefineType): Compute the correct visibility.
18084
18085         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18086         function which takes a `bool is_toplevel' instead of a TypeContainer.
18087
18088         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18089         builtin type.
18090
18091 2002-08-02  Martin Baulig  <martin@gnome.org>
18092
18093         * expression.cs (LocalVariableReferenc): Added constructor which
18094         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18095         (LocalVariableReference.IsReadOnly): New property.
18096         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18097         variable is readonly, use our own readonly flag to do this; you can
18098         use the new constructor to get a writable reference to a read-only
18099         variable.
18100
18101         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18102         reference to the local variable.
18103
18104 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18105
18106         * rootcontext.cs (ResolveCore): Also include System.Exception
18107
18108         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18109         we reach an EmptyStatement.
18110
18111         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18112         is also fine.
18113
18114         * expression.cs (Binary.ResolveOperator): Check error result in
18115         two places.
18116
18117         use brtrue/brfalse directly and avoid compares to null.
18118
18119 2002-08-02  Martin Baulig  <martin@gnome.org>
18120
18121         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18122         Fixes bug #28407, added test-155.cs.
18123
18124 2002-08-01  Martin Baulig  <martin@gnome.org>
18125
18126         * class.cs (Event.EmitDefaultMethod): Make this work with static
18127         events.  Fixes #28311, added verify-3.cs.
18128
18129 2002-08-01  Martin Baulig  <martin@gnome.org>
18130
18131         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18132         `is_disposable' fields.
18133         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18134         `hm.is_disposable' if we're using the collection pattern.
18135         (Foreach.EmitCollectionForeach): Use the correct type for the
18136         enumerator's local variable, only emit the try/finally block if
18137         necessary (fixes #27713).
18138
18139 2002-08-01  Martin Baulig  <martin@gnome.org>
18140
18141         * ecore.cs (Expression.report118): Renamed to Error118 and made
18142         it public static.
18143
18144         * statement.cs (Throw.Resolve): Check whether the expression is of
18145         the correct type (CS0118) and whether the type derives from
18146         System.Exception (CS0155).
18147         (Catch.Resolve): New method.  Do the type lookup here and check
18148         whether it derives from System.Exception (CS0155).
18149         (Catch.CatchType, Catch.IsGeneral): New public properties.
18150
18151         * typemanager.cs (TypeManager.exception_type): Added.
18152
18153 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18154
18155         * driver.cs: Updated About function.
18156
18157 2002-07-31  Martin Baulig  <martin@gnome.org>
18158
18159         Implemented Control Flow Analysis.
18160
18161         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18162         (EmitContext.CurrentBranching): Added.
18163         (EmitContext.StartFlowBranching): Added.
18164         (EmitContext.EndFlowBranching): Added.
18165         (EmitContext.KillFlowBranching): Added.
18166         (EmitContext.IsVariableAssigned): Added.
18167         (EmitContext.SetVariableAssigned): Added.
18168         (EmitContext.IsParameterAssigned): Added.
18169         (EmitContext.SetParameterAssigned): Added.
18170         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18171         Added control flow analysis stuff here.
18172
18173         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18174         resolve the expression as lvalue.
18175         (LocalVariableReference.DoResolve): Check whether the variable has
18176         already been assigned.
18177         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18178         the parameter as assigned here.
18179         (ParameterReference.DoResolve): Check whether the parameter has already
18180         been assigned.
18181         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18182         expression as lvalue.
18183
18184         * statement.cs (FlowBranching): New class for the flow analysis code.
18185         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18186         (LabeledStatement.IsDefined): New public property.
18187         (LabeledStatement.AddUsageVector): New public method to tell flow
18188         analyis that the label may be reached via a forward jump.
18189         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18190         flow analysis.
18191         (VariableInfo.Number): New public field.  This is used by flow analysis
18192         to number all locals of a block.
18193         (Block.CountVariables): New public property.  This is the number of
18194         local variables in this block (including the locals from all parent
18195         blocks).
18196         (Block.EmitMeta): Number all the variables.
18197
18198         * statement.cs: Added flow analysis support to all classes.
18199
18200 2002-07-31  Martin Baulig  <martin@gnome.org>
18201
18202         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18203         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18204         then use this argument.
18205
18206         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18207
18208         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18209         use this to specify /define options.
18210
18211 2002-07-29  Martin Baulig  <martin@gnome.org>
18212
18213         * statement.cs (Fixed): Moved all code that does variable lookups
18214         and resolvings from Emit to Resolve.
18215
18216         * statement.cs (For): Moved all code that does variable lookups
18217         and resolvings from Emit to Resolve.
18218
18219         * statement.cs (Using): Moved all code that does variable lookups
18220         and resolvings from Emit to Resolve.
18221
18222 2002-07-29  Martin Baulig  <martin@gnome.org>
18223
18224         * attribute.cs (Attribute.Resolve): Explicitly catch a
18225         System.NullReferenceException when creating the
18226         CustromAttributeBuilder and report a different warning message.
18227
18228 2002-07-29  Martin Baulig  <martin@gnome.org>
18229
18230         * support.cs (ParameterData.ParameterName): Added method to
18231         get the name of a parameter.
18232
18233         * typemanager.cs (TypeManager.IsValueType): New public method.
18234
18235 2002-07-29  Martin Baulig  <martin@gnome.org>
18236
18237         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18238         is a flag which specifies that it's either ref or out.
18239         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18240         the out parameter to `out Parameter.Modifier mod', also set the
18241         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18242
18243         * support.cs (InternalParameters.ParameterModifier): Distinguish
18244         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18245         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18246
18247         * expression.cs (Argument.GetParameterModifier): Distinguish
18248         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18249         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18250
18251 2002-07-29  Martin Baulig  <martin@gnome.org>
18252
18253         * expression.cs (ParameterReference.ParameterReference): Added
18254         `Location loc' argument to the constructor.
18255
18256         * cs-parser.jay: Pass location to ParameterReference.
18257
18258 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18259
18260         * statement.cs (Try): Initialize the location.
18261
18262         * cs-parser.jay: pass location to Try.
18263
18264         * expression.cs (Unary.Reduce): Change the prototype to return
18265         whether a constant fold could be performed or not.  The result is
18266         returned in an out parameters.  In the case of Indirection and
18267         AddressOf, we want to perform the full tests.
18268
18269 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18270
18271         * statement.cs (Statement.Emit): Flag dead code.
18272
18273 2002-07-27  Andrew Birkett  <andy@nobugs.org>
18274
18275         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
18276
18277 2002-07-27  Martin Baulig  <martin@gnome.org>
18278
18279         * class.cs (MethodData.Define): Put back call to
18280         TypeManager.AddMethod(), accidentally commented this out.
18281
18282         * report.cs (Debug): New public method to print debugging information,
18283         this is `[Conditional ("DEBUG")]'.
18284
18285 2002-07-26  Martin Baulig  <martin@gnome.org>
18286
18287         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
18288         (switch_statement): Push the current_block to the switch_stack and
18289         pop it again when we're done with the switch.
18290         (switch_section): The new block is a child of the current_block.
18291         Fixes bug #24007, added test-152.cs.
18292
18293 2002-07-27  Martin Baulig  <martin@gnome.org>
18294
18295         * expression.cs (Invocation.EmitArguments): When calling a varargs
18296         function with only its fixed arguments, we need to pass an empty
18297         array.
18298
18299 2002-07-27  Martin Baulig  <martin@gnome.org>
18300
18301         Mono 0.13 has been released.
18302
18303 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
18304
18305         * driver.cs: Rename --resource to --linkres, because that is what
18306         we do currently, we dont support --resource yet.
18307
18308         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
18309
18310 2002-07-25  Martin Baulig  <martin@gnome.org>
18311
18312         * class.cs (MethodData): New public class.  This is a `method builder'
18313         class for a method or one accessor of a Property/Indexer/Event.
18314         (MethodData.GetMethodFlags): Moved here from MemberBase.
18315         (MethodData.ApplyAttributes): Likewise.
18316         (MethodData.ApplyObsoleteAttribute): Likewise.
18317         (MethodData.ApplyConditionalAttribute): Likewise.
18318         (MethodData.ApplyDllImportAttribute): Likewise.
18319         (MethodData.CheckAbstractAndExternal): Likewise.
18320         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
18321         (MethodData.Emit): Formerly known as Method.Emit().
18322         (MemberBase): Moved everything which was specific to a single
18323         accessor/method to MethodData.
18324         (Method): Create a new MethodData and call Define() and Emit() on it.
18325         (Property, Indexer, Event): Create a new MethodData objects for each
18326         accessor and call Define() and Emit() on them.
18327
18328 2002-07-25  Martin Baulig  <martin@gnome.org>
18329
18330         Made MethodCore derive from MemberBase to reuse the code from there.
18331         MemberBase now also checks for attributes.
18332
18333         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
18334         (MemberBase.GetMethodFlags): Moved here from class Method and marked
18335         as virtual.
18336         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
18337         `CallingConventions cc' and `Attributes opt_attrs' arguments.
18338         (MemberBase.ApplyAttributes): New virtual method; applies the
18339         attributes to a method or accessor.
18340         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
18341         (MemberBase.ApplyConditionalAttribute): Likewise.
18342         (MemberBase.ApplyDllImportAttribute): Likewise.
18343         (MemberBase.CheckAbstractAndExternal): Likewise.
18344         (MethodCore.ParameterTypes): This is now a property instead of a
18345         method, it's initialized from DoDefineParameters().
18346         (MethodCore.ParameterInfo): Removed the set accessor.
18347         (MethodCore.DoDefineParameters): New protected virtual method to
18348         initialize ParameterTypes and ParameterInfo.
18349         (Method.GetReturnType): We can now simply return the MemberType.
18350         (Method.GetMethodFlags): Override the MemberBase version and add
18351         the conditional flags.
18352         (Method.CheckBase): Moved some code from Define() here, call
18353         DoDefineParameters() here.
18354         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
18355         here to avoid some larger code duplication.
18356         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
18357         ensure that abstract and external accessors don't declare a body.
18358
18359         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
18360         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
18361         lookup in the attribute's parent classes, so we need to abort as soon
18362         as we found the first match.
18363         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
18364         the attribute has no arguments.
18365
18366         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
18367         of a Method.
18368
18369 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18370
18371         * cs-parser.jay: reverted previous patch.
18372
18373 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18374
18375         * cs-parser.jay: fixed bug #22119.
18376
18377 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18378
18379         * attribute.cs: fixed compilation. The error was:
18380         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
18381         be assigned to before control leaves the current method."
18382         [FIXME:  Filed as bug #28186: MCS must report this error.]
18383
18384 2002-07-25  Martin Baulig  <martin@gnome.org>
18385
18386         * attribute.cs (Attribute.Conditional_GetConditionName): New static
18387         method to pull the condition name ouf of a Conditional attribute.
18388         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
18389         the obsolete message and error flag out of an Obsolete attribute.
18390
18391         * class.cs (Method.GetMethodFlags): New public method to get the
18392         TypeManager.MethodFlags for this method.
18393         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
18394         private methods.
18395         (Method.Define): Get and apply the Obsolete and Conditional attributes;
18396         if we're overriding a virtual function, set the new private variable
18397         `parent_method'; call the new TypeManager.AddMethod().
18398
18399         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
18400         the MethodBuilder and the Method in a PtrHashtable.
18401         (TypeManager.builder_to_method): Added for this purpose.
18402         (TypeManager.MethodFlags): Added IsObsoleteError.
18403         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
18404         Obsolete and Conditional arguments in MethodBuilders.  If we discover
18405         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
18406         the message from the attribute.
18407
18408 2002-07-24  Martin Baulig  <martin@gnome.org>
18409
18410         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
18411         preprocessor directives, ensure that the argument to #define/#undef is
18412         exactly one identifier and that it's actually an identifier.
18413
18414         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
18415         did not work ....
18416
18417 2002-07-24  Martin Baulig  <martin@gnome.org>
18418
18419         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
18420         initialize it to TypeManager.object_type in the constructor.
18421         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
18422         of the `hm.get_current' method if we're using the collection pattern.
18423         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
18424         for the explicit conversion to make it work when we're using the collection
18425         pattern and the `Current' property has a different return type than `object'.
18426         Fixes #27713.
18427
18428 2002-07-24  Martin Baulig  <martin@gnome.org>
18429
18430         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
18431         does not match, but don't report any errors.  This method is called in
18432         order for all methods in a MethodGroupExpr until a matching method is
18433         found, so we don't want to bail out if the first method doesn't match.
18434         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
18435         matches, report the 123.  Fixes #28070.
18436
18437 2002-07-24  Martin Baulig  <martin@gnome.org>
18438
18439         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
18440         TypeManager.TypeToCoreType() to the top of the method so the
18441         following equality checks will work.  Fixes #28107.
18442
18443 2002-07-24  Martin Baulig  <martin@gnome.org>
18444
18445         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
18446         operand is of type uint, and the other operand is of type sbyte,
18447         short or int, the operands are converted to type long." -
18448         Actually do what this comment already told us.  Fixes bug #28106,
18449         added test-150.cs.
18450
18451 2002-07-24  Martin Baulig  <martin@gnome.org>
18452
18453         * class.cs (MethodBase): New abstract class.  This is now a base
18454         class for Property, Indexer and Event to avoid some code duplication
18455         in their Define() and DefineMethods() methods.
18456         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
18457         generic methods for Define() and DefineMethods().
18458         (FieldBase): Derive from MemberBase, not MemberCore.
18459         (Property): Derive from MemberBase, not MemberCore.
18460         (Property.DefineMethod): Moved all the code from this method to the
18461         new MethodBase.DefineAccessor(), just call it with appropriate
18462         argumetnts.
18463         (Property.Define): Call the new Property.DoDefine(), this does some
18464         sanity checks and we don't need to duplicate the code everywhere.
18465         (Event): Derive from MemberBase, not MemberCore.
18466         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
18467         accessors, this will also make them work with interface events.
18468         (Indexer): Derive from MemberBase, not MemberCore.
18469         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
18470         (Indexer.Define): Use the new MethodBase functions.
18471
18472         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
18473         argument to the constructor.
18474         (Interface.FindMembers): Added support for interface events.
18475         (Interface.PopluateEvent): Implemented.
18476
18477         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
18478
18479 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
18480
18481         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
18482         but this is required to check for a method name being the same as
18483         the containing class.  
18484
18485         Handle this now.
18486
18487 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18488
18489         * interface.cs: initialize variable.
18490
18491 2002-07-23  Martin Baulig  <martin@gnome.org>
18492
18493         Implemented the IndexerName attribute in interfaces.
18494
18495         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
18496         name if this is an explicit interface implementation.
18497         (Indexer.InterfaceIndexerName): New public variable.  If we're
18498         implementing an interface indexer, this is the IndexerName in that
18499         interface.  Otherwise, it's the IndexerName.
18500         (Indexer.DefineMethod): If we're implementing interface indexer,
18501         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
18502         and Pending.ImplementIndexer methods.
18503         (Indexer.Define): Also define the PropertyBuilder if we're
18504         implementing an interface indexer and this is neither an explicit
18505         interface implementation nor do the IndexerName match the one in
18506         the interface.
18507
18508         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
18509         If a method is defined here, then we always need to create a proxy
18510         for it.  This is used when implementing interface indexers.
18511         (Pending.IsInterfaceIndexer): New public method.
18512         (Pending.ImplementIndexer): New public method.
18513         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
18514         This is used when implementing interface indexers to define a proxy
18515         if necessary.
18516         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
18517         define a proxy if necessary.
18518
18519         * interface.cs (Interface.IndexerName): New public variable.
18520         (Interface.PopulateIndexer): Set the IndexerName.
18521         (Interface.DefineIndexers): New private method.  Populate all the
18522         indexers and make sure their IndexerNames match.
18523
18524         * typemanager.cs (IndexerPropertyName): Added support for interface
18525         indexers.
18526
18527 2002-07-22  Martin Baulig  <martin@gnome.org>
18528
18529         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
18530         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
18531         ret if HasReturnLabel.
18532         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
18533         variables.
18534
18535         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
18536         and set the ec.LoopBeginTryCatchLevel.
18537         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
18538         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
18539         the current ec.TryCatchLevel, the branch goes out of an exception
18540         block.  In this case, we need to use Leave and not Br.
18541
18542 2002-07-22  Martin Baulig  <martin@gnome.org>
18543
18544         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
18545         block unless the block does not always return or it is contained in
18546         another try { ... } catch { ... } block.  Fixes bug #26506.
18547         Added verify-1.cs to the test suite.
18548
18549 2002-07-22  Martin Baulig  <martin@gnome.org>
18550
18551         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
18552         then we do not always return.  Fixes bug #24985.
18553
18554 2002-07-22  Martin Baulig  <martin@gnome.org>
18555
18556         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
18557         lookup on a per-class level; ie. walk up the class hierarchy until we
18558         found at least one applicable method, then choose the best among them.
18559         Fixes bug #24463 and test-29.cs.
18560
18561 2002-07-22  Martin Baulig  <martin@gnome.org>
18562
18563         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
18564         return types of the methods.  The return type is not part of the
18565         signature and we must not check it to make the `new' modifier work.
18566         Fixes bug #27999, also added test-147.cs.
18567         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
18568
18569         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
18570         on the method's return type.
18571
18572 2002-07-21  Martin Baulig  <martin@gnome.org>
18573
18574         * assign.cs: Make this work if the rightmost source is a constant and
18575         we need to do an implicit type conversion.  Also adding a few more tests
18576         to test-38.cs which should have caught this.
18577
18578         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
18579         target in the makefile for this.  The makefile.gnu is primarily intended
18580         for end-users who don't want to debug the compiler.
18581
18582 2002-07-21  Martin Baulig  <martin@gnome.org>
18583
18584         * assign.cs: Improved the Assign class so it can now handle embedded
18585         assignments (X = Y = Z = something).  As a side-effect this'll now also
18586         consume less local variables.  test-38.cs now passes with MCS, added
18587         a few new test cases to that test.
18588
18589 2002-07-20  Martin Baulig  <martin@gnome.org>
18590
18591         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
18592         instructions.  Fixes bug #27977, also added test-146.cs.
18593
18594 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18595
18596         * cs-tokenizer.cs: fixed getHex ().
18597
18598 2002-07-19  Martin Baulig  <martin@gnome.org>
18599
18600         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
18601         not Type.GetType() to lookup the array type.  This is needed when
18602         we're constructing an array of a user-defined type.
18603         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
18604         single-dimensional arrays, but also for single-dimensial arrays of
18605         type decimal.
18606
18607 2002-07-19  Martin Baulig  <martin@gnome.org>
18608
18609         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
18610         this function is called, it's not allowed to share LocalBuilders
18611         among ILGenerators.
18612
18613 2002-07-19  Martin Baulig  <martin@gnome.org>
18614
18615         * expression.cs (Argument.Resolve): Report an error 118 when trying
18616         to pass a type as argument.
18617
18618 2002-07-18  Martin Baulig  <martin@gnome.org>
18619
18620         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
18621         Conv_R_Un for the signed `long' type.
18622
18623 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
18624
18625         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
18626         `expr' for the temporary result, as that will fail if we do
18627         multiple resolves on the same expression.
18628
18629 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
18630
18631         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
18632         ec.TypeContainer for looking up aliases. 
18633
18634         * class.cs (TypeContainer): Remove LookupAlias from here.
18635
18636         * decl.cs (DeclSpace); Move here.
18637
18638 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
18639
18640         * class.cs (FindMembers): Only call filter if the constructor
18641         bulider is not null.
18642
18643         Also handle delegates in `NestedTypes' now.  Now we will perform
18644         type lookups using the standard resolution process.  This also
18645         fixes a bug.
18646
18647         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
18648         This uses Expressions (the limited kind that can be parsed by the
18649         tree) instead of strings.
18650
18651         * expression.cs (ComposedCast.ToString): Implement, used to flag
18652         errors since now we have to render expressions.
18653
18654         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
18655         FormArrayType. 
18656
18657         * ecore.cs (SimpleName.ToString): ditto.
18658
18659         * cs-parser.jay: Instead of using strings to assemble types, use
18660         Expressions to assemble the type (using SimpleName, ComposedCast,
18661         MemberAccess).  This should fix the type lookups in declarations,
18662         because we were using a different code path for this.
18663
18664         * statement.cs (Block.Resolve): Continue processing statements
18665         even when there is an error.
18666
18667 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
18668
18669         * class.cs (Event.Define): Also remove the `remove' method from
18670         the list of pending items.
18671
18672         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
18673         generate more compact code. 
18674
18675 2002-07-17  Martin Baulig  <martin@gnome.org>
18676
18677         * const.cs (Const.LookupConstantValue): Add support for constant
18678         `unchecked' and `checked' expressions.
18679         Also adding test case test-140.cs for this.
18680
18681 2002-07-17  Martin Baulig  <martin@gnome.org>
18682
18683         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
18684         check whether mi.ReturnType implements the IEnumerator interface; the
18685         `==' and the IsAssignableFrom() will fail in this situation.
18686
18687 2002-07-16  Ravi Pratap  <ravi@ximian.com>
18688
18689         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
18690         here too.
18691
18692 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18693
18694         * expression.cs: fixed bug #27811.
18695
18696 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
18697
18698         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
18699         Molaro: when we are a ref, the value already contains a pointer
18700         value, do not take the address of it.
18701
18702 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
18703         * removed mb-parser.jay and mb-tokenizer.cs
18704
18705 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
18706
18707         * expression.cs: check against the building corlib void type.
18708
18709 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
18710
18711         * ecore.cs: fix for valuetype static readonly fields: when 
18712         initializing them, we need their address, not the address of a copy.
18713
18714 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
18715
18716         * typemanager.cs: register also enum_type in corlib.
18717
18718 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
18719
18720         * class.cs: allow calling this (but not base) initializers in structs.
18721
18722 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
18723
18724         * ecore.cs: make sure we compare against the building base types
18725         in GetTypeSize ().
18726
18727 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
18728
18729         * typemanager.cs: fix TypeToCoreType() to handle void and object
18730         (corlib gets no more typerefs after this change).
18731
18732 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
18733
18734         * expression.cs (ArrayCreation.EmitArrayArguments): use
18735         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
18736
18737         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
18738         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
18739         array indexes, the runtime actually forbids them.
18740
18741         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
18742         for array arguments here.
18743
18744         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
18745         instead of the default for ValueTypes.
18746
18747         (New.DoEmit): Use IsValueType instead of
18748         IsSubclassOf (value_type)
18749         (New.DoResolve): ditto.
18750         (Invocation.EmitCall): ditto.
18751
18752         * assign.cs (Assign): ditto.
18753
18754         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
18755         Statements *are* currently doing part of their resolution during
18756         Emit.  
18757
18758         Expressions do always resolve during resolve, but statements are
18759         only required to propagate resolution to their children.
18760
18761 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
18762
18763         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
18764
18765         (LoadAssembly): Do not add the dll if it is already specified
18766
18767         (MainDriver): Add the System directory to the link path at the end,
18768         after all the other -L arguments. 
18769
18770         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
18771         wrong opcode for loading bytes and bools (ldelem.i1 instead of
18772         ldelem.u1) and using the opposite for sbytes.
18773
18774         This fixes Digger, and we can finally run it.
18775
18776         * driver.cs (UnixParseOption): Move the option parsing here.  
18777         (CSCParseOption): Implement CSC-like parsing of options.
18778
18779         We now support both modes of operation, the old Unix way, and the
18780         new CSC-like way.  This should help those who wanted to make cross
18781         platform makefiles.
18782
18783         The only thing broken is that /r:, /reference: and /lib: are not
18784         implemented, because I want to make those have the same semantics
18785         as the CSC compiler has, and kill once and for all the confussion
18786         around this.   Will be doing this tomorrow.
18787
18788         * statement.cs (Unsafe.Resolve): The state is checked during
18789         resolve, not emit, so we have to set the flags for IsUnsfe here.
18790
18791 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
18792
18793         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
18794         not catch the Error_ObjectRefRequired in SimpleName (as it is
18795         possible to have a class/instance variable name that later gets
18796         deambiguated), we have to check this here.      
18797
18798 2002-07-10  Ravi Pratap  <ravi@ximian.com>
18799
18800         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
18801         make static and put into Expression.
18802
18803         (Event.Define): Register the private field of the event with the 
18804         TypeManager so that GetFieldFromEvent can get at it.
18805
18806         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
18807         keep track of the private field associated with an event which
18808         has no accessors.
18809
18810         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
18811         private field.
18812
18813         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
18814
18815 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
18816
18817         * expression.cs (Binary.EmitBranchable): this routine emits the
18818         Binary expression in a branchable context.  This basically means:
18819         we need to branch somewhere, not just get the value on the stack.
18820
18821         This works together with Statement.EmitBoolExpression.
18822
18823         * statement.cs (Statement.EmitBoolExpression): Use
18824         EmitBranchable. 
18825
18826 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
18827
18828         * statement.cs (For): Reduce the number of jumps in loops.
18829
18830         (For): Implement loop inversion for the For statement.
18831
18832         (Break): We can be breaking out of a Try/Catch controlled section
18833         (foreach might have an implicit try/catch clause), so we need to
18834         use Leave instead of Br.
18835
18836         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
18837         now).  If the instace expression supports IMemoryLocation, we use
18838         the AddressOf method from the IMemoryLocation to extract the
18839         address instead of emitting the instance.
18840
18841         This showed up with `This', as we were emitting the instance
18842         always (Emit) instead of the Address of This.  Particularly
18843         interesting when This is a value type, as we dont want the Emit
18844         effect (which was to load the object).
18845
18846 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
18847
18848         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
18849
18850         * statement.cs (Checked): Set the CheckedState during the resolve
18851         process too, as the ConvCast operations track the checked state on
18852         the resolve process, and not emit.
18853
18854         * cs-parser.jay (namespace_member_declaration): Flag that we have
18855         found a declaration when we do.  This is used to flag error 1529
18856
18857         * driver.cs: Report ok when we display the help only.
18858
18859 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
18860
18861         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
18862
18863 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
18864
18865         * cs-tokenizer.cs (define): We also have to track locally the
18866         defines.  AllDefines is just used for the Conditional Attribute,
18867         but we also need the local defines for the current source code. 
18868
18869 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
18870
18871         * statement.cs (While, For, Do): These loops can exit through a
18872         Break statement, use this information to tell whether the
18873         statement is the last piece of code.
18874
18875         (Break): Flag that we break.
18876
18877         * codegen.cs (EmitContexts): New `Breaks' state variable.
18878
18879 2002-07-03  Martin Baulig  <martin@gnome.org>
18880
18881         * class.cs (TypeContainer.MethodModifiersValid): Allow override
18882         modifiers in method declarations in structs.  Otherwise, you won't
18883         be able to override things like Object.Equals().
18884
18885 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
18886
18887         * class.cs (Method, Property, Indexer): Do not allow the public
18888         modifier to be used in explicit interface implementations.
18889
18890         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
18891         override modifiers in method declarations in structs
18892
18893 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
18894
18895         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
18896         integer or real overflow, report an error
18897
18898 2002-07-02  Martin Baulig  <martin@gnome.org>
18899
18900         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
18901         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
18902         to tell the runtime about our newly created System.Object and
18903         System.ValueType types.
18904
18905 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
18906
18907         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
18908         struct instead of Ldarg/Starg.
18909
18910 2002-07-02  Martin Baulig  <martin@gnome.org>
18911
18912         * expression.cs (Indirection.Indirection): Call
18913         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
18914
18915 2002-07-02  Martin Baulig  <martin@gnome.org>
18916
18917         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
18918         ValueType, call TypeManager.TypeToCoreType() on it.
18919         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
18920         the OpCodes.Newarr argument.
18921
18922 2002-07-02  Martin Baulig  <martin@gnome.org>
18923
18924         * expression.cs (Invocation.EmitCall): When compiling corlib,
18925         replace all calls to the system's System.Array type to calls to
18926         the newly created one.
18927
18928         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
18929         System.Array methods.
18930         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
18931         from the system's System.Array type which must be replaced.
18932
18933 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
18934
18935         * typemanager.cs: load unverifiable_code_ctor so we can build
18936         corlib using the correct type. Avoid using GetTypeCode() with
18937         TypeBuilders.
18938         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
18939         TypeManager.object_type to allow building corlib.
18940
18941 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
18942
18943         * ecore.cs: handle System.Enum separately in LoadFromPtr().
18944
18945 2002-07-01  Martin Baulig  <martin@gnome.org>
18946
18947         * class.cs: Make the last change actually work, we need to check
18948         whether `ifaces != null' to avoid a crash.
18949
18950 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
18951
18952         * class.cs: when we build structs without fields that implement
18953         interfaces, we need to add the interfaces separately, since there is
18954         no API to both set the size and add the interfaces at type creation
18955         time.
18956
18957 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
18958
18959         * expression.cs: the dimension arguments to the array constructors
18960         need to be converted if they are a long.
18961
18962 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
18963
18964         * class.cs: don't emit ldarg.0 if there is no parent constructor
18965         (fixes showstopper for corlib).
18966
18967 2002-06-29  Martin Baulig  <martin@gnome.org>
18968
18969         MCS now compiles corlib on GNU/Linux :-)
18970
18971         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
18972         ie. check for MethodImplOptions.InternalCall.
18973
18974         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
18975         and TypeManager.attribute_type are null, so we must explicitly check
18976         whether parent is not null to find out whether it's an attribute type.
18977         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
18978         and SetBuilder, not only if the property is neither abstract nor external.
18979         This is necessary to set the MethodImplOptions on the accessor methods.
18980         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
18981         SetBuilder, see Property.Emit().
18982
18983         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
18984         populate "System.Object", "System.ValueType" and "System.Attribute" since
18985         they've already been populated from BootCorlib_PopulateCoreTypes().
18986
18987 2002-06-29  Martin Baulig  <martin@gnome.org>
18988
18989         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
18990         is the NullLiteral, we also need to make sure that target_type is not
18991         an enum type.   
18992
18993 2002-06-29  Martin Baulig  <martin@gnome.org>
18994
18995         * rootcontext.cs (RootContext.ResolveCore): We must initialize
18996         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
18997         before calling BootstrapCorlib_ResolveDelegate ().
18998
18999 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19000
19001         * statement.cs: fixed build-breaker. All tests passed ok.
19002
19003 2002-06-27  Martin Baulig  <martin@gnome.org>
19004
19005         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19006         for System.Decimal when compiling corlib.
19007
19008 2002-06-27  Martin Baulig  <martin@gnome.org>
19009
19010         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19011         switch blocks which contain nothing but a default clause.
19012
19013 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19014
19015        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19016
19017 2002-06-27  Martin Baulig  <martin@gnome.org>
19018
19019         * ecore.cs (PropertyExpr.PropertyExpr): Call
19020         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19021
19022         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19023         is already a TypeBuilder.
19024
19025 2002-06-27  Martin Baulig  <martin@gnome.org>
19026
19027         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19028         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19029         the "from an array-type to System.Array" case.  This makes it work
19030         when compiling corlib.
19031
19032 2002-06-27  Martin Baulig  <martin@gnome.org>
19033
19034         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19035         non-static PropertyExpr, set its InstanceExpression.  This makes
19036         the `ICollection.Count' property work in System/Array.cs.
19037
19038 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19039
19040         * driver.cs: Made error handling more consistent.  Errors now
19041         tracked by Report class, so many methods which used to return int
19042         now return void.  Main() now prints success/failure and 
19043         errors/warnings message.
19044
19045         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19046         the magic number return values (123 and 124).  Now, if the
19047         expected error occurs, the compiler exits with success (exit value
19048         0).  If the compilation completes without seeing that particular
19049         error, the compiler exits with failure (exit value 1).  The
19050         makefile in mcs/errors has been changed to handle the new behaviour.
19051
19052         * report.cs: Made 'expected error' number a property and renamed
19053         it from 'Probe' to 'ExpectedError'.
19054
19055         * genericparser.cs: Removed error handling support, since it is
19056         now all done by Report class.
19057
19058         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19059         class, so parse() no longer returns an int.
19060
19061         * namespace.cs: Use Report.Error instead of GenericParser.error
19062
19063 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19064
19065         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19066         TypeContainer.AddOperator): At the front of the list put the
19067         explicit implementations, so they get resolved/defined first. 
19068
19069 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19070
19071         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19072         interface type is implemented by this TypeContainer.  Used during
19073         explicit interface implementation.
19074
19075         (Property.Define, Indexer.Define, Method.Define): Validate that
19076         the given interface in the explicit implementation is one of the
19077         base classes for the containing type.
19078
19079         Also if we are explicitly implementing an interface, but there is
19080         no match in the pending implementation table, report an error.
19081
19082         (Property.Define): Only define the property if we are
19083         not explicitly implementing a property from an interface.  Use the
19084         correct name also for those properties (the same CSC uses,
19085         although that is really not needed).
19086
19087         (Property.Emit): Do not emit attributes for explicitly implemented
19088         properties, as there is no TypeBuilder.
19089
19090         (Indexer.Emit): ditto.
19091
19092         Hiding then means that we do not really *implement* a pending
19093         implementation, which makes code fail.
19094
19095 2002-06-22  Martin Baulig  <martin@gnome.org>
19096
19097         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19098         the return value of Object.GetType().  [FIXME: we need to do this whenever
19099         we get a type back from the reflection library].
19100
19101 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19102
19103         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19104
19105 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19106
19107         * attribute.cs: Return null if we can not look up the type.
19108
19109         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19110         the interface types found.
19111
19112         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19113         interface types found.
19114
19115         * typemanager.cs (GetInterfaces): Make this routine returns alll
19116         the interfaces and work around the lame differences between
19117         System.Type and System.Reflection.Emit.TypeBuilder in the results
19118         result for GetInterfaces.
19119
19120         (ExpandInterfaces): Given an array of interface types, expand and
19121         eliminate repeated ocurrences of an interface.  This expands in
19122         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19123         be IA, IB, IC.
19124
19125 2002-06-21  Martin Baulig  <martin@gnome.org>
19126
19127         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19128         on System.Enum.
19129
19130 2002-06-21  Martin Baulig  <martin@gnome.org>
19131
19132         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19133         and called with one of the core types, return the corresponding typebuilder for
19134         that type.
19135
19136         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19137         element type.
19138
19139 2002-06-21  Martin Baulig  <martin@gnome.org>
19140
19141         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19142         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19143         (Expression.ConvertReferenceExplicit): Likewise.
19144
19145         * expression.cs (ElementAccess.DoResolve): Likewise.
19146         (ElementAccess.DoResolveLValue): Likewise.
19147
19148 2002-06-10  Martin Baulig  <martin@gnome.org>
19149
19150         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19151         add the "value" parameter to the parameter list.
19152
19153         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19154         to our caller.
19155
19156 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19157
19158         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19159         the argument to an int, uint, long or ulong, per the spec.  Also
19160         catch negative constants in array creation.
19161
19162 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19163
19164         * class.cs: do not allow the same interface to appear twice in
19165         the definition list.
19166
19167 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19168
19169         * ecore.cs: don't use ldlen with System.Array.
19170
19171 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19172
19173         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19174
19175 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19176
19177         * modifiers.cs: produce correct field attributes for protected
19178         internal. Easy fix so miguel can work on ther harder stuff:-)
19179
19180 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19181
19182         * pending.cs: New file.  Move the code from class.cs here.
19183         Support clearning the pending flag for all methods (when not doing
19184         explicit interface implementation).
19185
19186 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19187
19188         * rootcontext.cs: added a couple more types needed to bootstrap.
19189
19190 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19191
19192         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19193         constructor in the type, instead of any constructor in the type
19194         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19195         a bug in the Mono runtime when applying the params attribute). 
19196
19197 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19198         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19199
19200 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19201
19202         * expression.cs (Unary.ResolveOperator): Use TypeManager
19203         to resolve the type.
19204
19205 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19206
19207         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19208         attached.
19209
19210         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19211         with each member too.
19212
19213         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19214         field builders too - this takes care of the enum member case.
19215
19216 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19217
19218         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19219         address-of operator on both value types and pointers.
19220
19221 2002-06-10  Martin Baulig  <martin@gnome.org>
19222
19223         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19224         PropertyBuilder to the `property_builders' list.
19225
19226         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19227         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19228         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19229         find any indexers which are inherited from an interface.
19230
19231 2002-06-09  Martin Baulig  <martin@gnome.org>
19232
19233         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19234         the same type as the constant if necessary.  There's also a test-130.cs
19235         for this.
19236
19237         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19238
19239         * typemanager.cs (TypeManager.ChangeType): Previously known as
19240         Enum.ChangeEnumType().
19241
19242 2002-06-09  Martin Baulig  <martin@gnome.org>
19243
19244         * expression.cs (Cast.TryReduce): Added support for consts.
19245
19246 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19247
19248         * class.cs (Accessor): Hold attributes information so we can pass
19249         it along.
19250
19251         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19252         Modify to pass in attributes attached to the methods.
19253
19254         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19255
19256         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19257         to handle the Accessor kind :-)
19258
19259         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19260
19261 2002-06-08  Martin Baulig  <martin@gnome.org>
19262
19263         * expression.cs (Unary.TryReduceNegative): Added support for
19264         ULongConstants.
19265
19266 2002-06-08  Martin Baulig  <martin@gnome.org>
19267
19268         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19269         name can't be found in the `defined_names' - the caller will do a
19270         MemberLookup in this case and thus find methods in System.Enum
19271         such as Enum.IsDefined().
19272
19273 2002-06-08  Martin Baulig  <martin@gnome.org>
19274
19275         * enum.cs (Enum.ChangeEnumType): This is a custom version of
19276         Convert.ChangeType() which works with TypeBuilder created types.
19277         (Enum.LookupEnumValue, Enum.Define): Use it here.
19278
19279         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
19280         `TypeBuilder.BaseType != null' check.
19281         (TypeContainer.FindMembers): Only lookup parent members if we
19282         actually have a parent.
19283         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
19284         (ConstructorInitializer.Resolve): Likewise.
19285
19286         * interface.cs (Interface.FindMembers): Added
19287         `TypeBuilder.BaseType != null' check.
19288
19289         * rootcontext.cs (RootContext.ResolveCore): Added
19290         "System.Runtime.CompilerServices.IndexerNameAttribute" to
19291         classes_second_stage.
19292
19293         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
19294         debug_type and trace_type when compiling with --nostdlib.       
19295
19296 2002-06-07  Martin Baulig  <martin@gnome.org>
19297
19298         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
19299         (AddField): Set it to true when adding a non-static field.
19300         (DefineType): Use `have_nonstatic_fields' to find out whether we
19301         have non-static fields, not `Fields != null'.
19302
19303 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
19304
19305         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
19306         dereferencing a null on the static-field code path)
19307
19308 2002-05-30  Martin Baulig  <martin@gnome.org>
19309
19310         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
19311         to take command line arguments.  Use reflection to call the new
19312         custom `Initialize' function on the symbol writer and pass it the
19313         command line arguments.
19314
19315         * driver.cs (--debug-args): New command line argument to pass command
19316         line arguments to the symbol writer.
19317
19318 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
19319
19320         * assign.cs (DoResolve): Forgot to do the implicit conversion to
19321         the target type for indexers and properties.  Thanks to Joe for
19322         catching this.
19323
19324 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
19325
19326         * typemanager.cs (MethodFlags): returns the method flags
19327         (Obsolete/ShouldIgnore) that control warning emission and whether
19328         the invocation should be made, or ignored. 
19329
19330         * expression.cs (Invocation.Emit): Remove previous hack, we should
19331         not do this on matching a base type, we should do this based on an attribute
19332
19333         Only emit calls to System.Diagnostics.Debug and
19334         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
19335         on the command line.
19336
19337         * rootcontext.cs: Global settings for tracing and debugging.
19338
19339         * cs-tokenizer.cs (define): New utility function to track
19340         defines.   Set the global settings for TRACE and DEBUG if found.
19341
19342 2002-05-25  Ravi Pratap  <ravi@ximian.com>
19343
19344         * interface.cs (Populate*): Pass in the TypeContainer as well as
19345         the DeclSpace as parameters so that we can create EmitContexts and
19346         then use that to apply attributes etc.
19347
19348         (PopulateMethod, PopulateEvent, PopulateProperty)
19349         (PopulateIndexer): Apply attributes everywhere.
19350
19351         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
19352         etc.
19353
19354         (ApplyAttributes): Update accordingly.
19355
19356         We now apply interface attributes for all members too.
19357
19358 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
19359
19360         * class.cs (Indexer.Define); Correctly check if we are explicit
19361         implementation (instead of checking the Name for a ".", we
19362         directly look up if the InterfaceType was specified).
19363
19364         Delay the creation of the PropertyBuilder.
19365
19366         Only create the PropertyBuilder if we are not an explicit
19367         interface implementation.   This means that explicit interface
19368         implementation members do not participate in regular function
19369         lookups, and hence fixes another major ambiguity problem in
19370         overload resolution (that was the visible effect).
19371
19372         (DefineMethod): Return whether we are doing an interface
19373         implementation. 
19374
19375         * typemanager.cs: Temporary hack until we get attributes in
19376         interfaces (Ravi is working on that) and we get IndexerName
19377         support in interfaces.
19378
19379         * interface.cs: Register the indexers as properties.
19380
19381         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
19382         warning, I have verified that this is a bug in the .NET runtime
19383         (JavaScript suffers of the same problem).
19384
19385         * typemanager.cs (MemberLookup): When looking up members for
19386         interfaces, the parent of an interface is the implicit
19387         System.Object (so we succeed in searches of Object methods in an
19388         interface method invocation.  Example:  IEnumerable x;  x.ToString
19389         ()) 
19390
19391 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
19392
19393         * class.cs (Event): Events should also register if they do
19394         implement the methods that an interface requires.
19395
19396         * typemanager.cs (MemberLookup); use the new GetInterfaces
19397         method. 
19398
19399         (GetInterfaces): The code used to lookup interfaces for a type is
19400         used in more than one place, factor it here. 
19401
19402         * driver.cs: Track the errors at the bottom of the file, we kept
19403         on going.
19404
19405         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
19406         instance if the method we are calling is static!
19407
19408 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
19409
19410         * attribute.cs (ApplyAttributes): Make this function filter out
19411         the IndexerName attribute (as that attribute in reality is never
19412         applied) and return the string constant for the IndexerName
19413         attribute. 
19414
19415         * class.cs (TypeContainer.Emit): Validate that all the indexers
19416         have the same IndexerName attribute, and if so, set the
19417         DefaultName attribute on the class. 
19418
19419         * typemanager.cs: The return value might contain other stuff (not
19420         only methods).  For instance, consider a method with an "Item"
19421         property and an Item method.
19422
19423         * class.cs: If there is a problem with the parameter types,
19424         return. 
19425
19426 2002-05-24  Ravi Pratap  <ravi@ximian.com>
19427
19428         * ecore.cs (ImplicitConversionExists): Wrapper function which also
19429         looks at user defined conversion after making a call to 
19430         StandardConversionExists - we need this for overload resolution.
19431
19432         * expression.cs : Update accordingly the various method calls.
19433
19434         This fixes 2 bugs filed against implicit user defined conversions 
19435
19436 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
19437
19438         * statement.cs: Track the result of the assignment.
19439
19440 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
19441
19442         * expression.cs (MemberAccess): Improved error reporting for
19443         inaccessible members.
19444
19445 2002-05-22  Martin Baulig  <martin@gnome.org>
19446
19447         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
19448         itself with debugging support.
19449
19450 2002-05-22  Martin Baulig  <martin@gnome.org>
19451
19452         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
19453         Removed, this isn't needed anymore.
19454
19455 2002-05-20  Martin Baulig  <martin@gnome.org>
19456
19457         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
19458         be underlying type for an enum.
19459
19460 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
19461
19462         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
19463         that splits out the loading of just the core types.
19464
19465         * rootcontext.cs (ResolveCore): Split the struct resolution in
19466         two, so we can load the enumeration underlying types before any
19467         enums are used.
19468
19469         * expression.cs (Is): Bandaid until we fix properly Switch (see
19470         bug #24985 for details).
19471
19472         * typemanager.cs (ImplementsInterface): The hashtable will contain
19473         a null if there are no interfaces implemented.
19474
19475 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
19476
19477         * cs-parser.jay (indexer_declarator): It is fine to have array
19478         parameters
19479
19480 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19481
19482         * typemanager.cs: (RegisterBuilder): New function used to register
19483         TypeBuilders that implement interfaces.  Since
19484         TypeBuilder.GetInterfaces (as usual) does not work with lame
19485         Reflection.Emit. 
19486         (AddUserType): register interfaces.
19487
19488         (ImplementsInterface): Use the builder_to_ifaces hash if we are
19489         dealing with TypeBuilder.  Also, arrays are showing up as
19490         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
19491         methods can not be invoked on them!
19492
19493         * ecore.cs (ExplicitReferenceConversionExists): Made public.
19494         (ImplicitReferenceConversionExists): Split out from
19495         StandardConversionExists. 
19496
19497         * expression.cs (As): We were only implementing one of the three
19498         cases for the as operator.  We now implement them all.
19499         (Is): Implement the various other cases for Is as well.
19500
19501         * typemanager.cs (CACHE): New define used to control if we want or
19502         not the FindMembers cache.  Seems to have a negative impact on
19503         performance currently
19504
19505         (MemberLookup): Nested types have full acess to
19506         enclosing type members
19507
19508         Remove code that coped with instance/static returns for events, we
19509         now catch this in RealFindMembers.
19510
19511         (RealFindMembers): only perform static lookup if the instance
19512         lookup did not return a type or an event.  
19513
19514 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19515
19516         * assign.cs (CompoundAssign): We pass more semantic information
19517         now to Compound Assignments than we did before: now we have all
19518         the information at hand, and now we resolve the target *before* we
19519         do the expression expansion, which allows the "CacheValue" method
19520         to have the effect we intended (before, a [x] += 1 would generate
19521         two differen ArrayAccess expressions from the ElementAccess,
19522         during the resolution process).
19523
19524         (CompoundAssign.DoResolve): Resolve target and original_source here.
19525
19526 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
19527
19528         * expression.cs (ArrayAccess): dropped debugging information. 
19529
19530         * typemanager.cs: Small bug fix: I was always returning i_members,
19531         instead of one of i_members or s_members (depending on which had
19532         the content).
19533
19534         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
19535         method is invoked before any code generation takes place, and it
19536         is a mechanism to inform that the expression will be invoked more
19537         than once, and that the method should use temporary values to
19538         avoid having side effects
19539
19540         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
19541
19542         * ecore.cs (Expression.CacheTemporaries): Provide empty default
19543         implementation.
19544
19545         * expression.cs (Indirection, ArrayAccess): Add support for
19546         CacheTemporaries in these two bad boys. 
19547
19548         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
19549         ldobj or ldind_ref.  
19550         (StoreFromPtr): Handle stobj as well.
19551
19552         * expression.cs (UnaryMutator): Share more code.
19553
19554         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
19555         down: I was not tracking the Filter function as well, which
19556         was affecting the results of the cache.
19557
19558 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
19559
19560         * attribute.cs: Remove the hack to handle the CharSet property on
19561         StructLayouts. 
19562
19563 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
19564
19565         * attribute.cs (DoResolve): More uglyness, we now only try to
19566         resolve the attribute partially, to extract the CharSet
19567         information (only if we are a StructLayout attribute).  Otherwise 
19568
19569         (GetExtraTypeInfo): Add some code to conditionally kill in the
19570         future this.   I am more and more convinced that the .NET
19571         framework has special code to handle the attribute setting on
19572         certain elements.
19573
19574         * expression.cs (IsParamsMethodApplicable): Revert my previous
19575         foreach change here, it was wrong.
19576
19577 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
19578
19579         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
19580         (pp_expr): do not abort on unknown input, just return.
19581         (eval): abort if there are pending chars.
19582
19583         * attribute.cs (Attribute.Resolve): Positional parameters are
19584         optional.  Deal with that case.
19585
19586         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
19587         the Ansi/Unicode/Auto information for the type.
19588
19589         (TypeContainer.DefineType): instantiate the EmitContext here, as
19590         we will be using it during the type definition (to resolve
19591         attributes) and during the emit phase.
19592
19593         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
19594         to pull type information out of the attributes
19595
19596         (Attribute.Resolve): track the constructor builder, and allow for
19597         multiple invocations (structs and classes will use this).
19598
19599         * ecore.cs (MemberLookupFinal): new version with all the
19600         parameters customizable.
19601
19602         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
19603         constructors.  Return if the result value is null (as the error
19604         would have been flagged already by MemberLookupFinal)
19605
19606         Do not allow instances of abstract classes or interfaces to be
19607         created.
19608
19609         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
19610         We have to compare the assembly property here when dealing with
19611         FamANDAssem and Assembly access modifiers, because we might be
19612         creating an assembly from *modules* (that means that we are not
19613         getting TypeBuilders for types defined in other modules that are
19614         part of this assembly).
19615
19616         (Method.Emit): If the method is marked abstract and has a body,
19617         emit an error. 
19618
19619         (TypeContainer.DefineMembers): If both the defined member and the
19620         parent name match are methods, then do not emit any warnings: let
19621         the Method.Define routine take care of flagging warnings.  But if
19622         there is a mismatch (method overrides something else, or method is
19623         overriwritten by something, then emit warning).
19624
19625         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
19626         set to null, this means `do not check for the return type on the
19627         signature'. 
19628
19629         (Method.Define): set the return type for the method signature to
19630         null, so that we get methods with the same name and parameters and
19631         different return types.  This is used to flag warning 114 (you are
19632         hiding a method, and you probably want to use the new/override
19633         keywords instead).
19634
19635         * typemanager.cs (MemberLookup): Implemented proper access
19636         control, closing a long standing set of bug reports.  The problem
19637         was that the Framework only has two bits: Public and NonPublic,
19638         and NonPublic includes private and protected methods, but we need
19639         to enforce the FamANDAssem, FamOrAssem and Family. 
19640
19641 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
19642
19643         * statement.cs (GotoCase): Return true: Ammounts to giving up
19644         knowledge on whether we return or not, and letting the other case
19645         be responsible for it.
19646
19647 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
19648
19649         * driver.cs: Do not load directories for each file processed, only
19650         do it if there is a pattern.
19651
19652         * ecore.cs: Report readonly assigns here as well, as we might have
19653         been resolved only by MemberAccess.
19654
19655         (SimpleName.SimpleNameResolve): Also be useful for LValue
19656         resolution.   We need this to propagate assign to local readonly variables
19657
19658         * typemanager.cs: Use a ptrhashtable for the criteria, because we
19659         do not want to reuse potential criteria memory.
19660
19661         * class.cs (MyEventBuilder): Set reflected_type;
19662
19663         * ecore.cs (Constantify): Added support for constifying bools.
19664
19665         (RootContext.LookupType): Added a cache for values looked up in
19666         the declaration space.
19667
19668         * typemanager.cs (FindMembers): Now is a front-end to
19669         RealFindMembers, and provides a two-level hashtable-based cache to
19670         the request.  
19671
19672         15% performance improvement: from 22.5 to 19.2 seconds.
19673
19674         * expression.cs (IsParamsMethodApplicable): use foreach.
19675         (Invocation.DoResolve): ditto.
19676         (New.DoResolve): ditto.
19677         (ArrayCreation.DoResolve): ditto.
19678
19679         * ecore.cs (FindMostEncompassingType): use foreach.
19680
19681         * delegate.cs (NewDelegate.DoResolve): Use foreach
19682
19683         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
19684         (RemoveMethods): use foreach.
19685
19686         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
19687         nested foreach statements instead of for, and also break out of
19688         the inner loop once a match is found.
19689
19690         (Invocation.OverloadResolve): Use foreach, simplify the code. 
19691
19692 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
19693
19694         * cfold.cs (BinaryFold): During an enumeration evaluation context,
19695         we actually unwrap the expression to allow for extra information
19696         to be extracted. 
19697
19698         * expression.cs: Use Shr_Un on unsigned operations. 
19699
19700 2002-05-08  Ravi Pratap  <ravi@ximian.com>
19701
19702         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
19703         applicable operators was not being considered correctly. This closes
19704         the bug Miguel reported.
19705
19706 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
19707
19708         * attribute.cs: check that the type derives from System.Attribute
19709         and report the correct error in that case (moved the duplicate code to
19710         its own method, too).
19711
19712 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
19713
19714         * attribute.cs: lookup attribute type name as the spec says: first the
19715         bare attribute name and then name + "Attribute" (nant compiles with
19716         mcs after this fix).
19717
19718 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
19719
19720         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
19721         Because of the way we parse things, we should try to see if a
19722         UIntConstant can fit in an integer.
19723
19724 2002-05-07  Ravi Pratap  <ravi@ximian.com>
19725
19726         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
19727         when we are in an explicit context.
19728
19729         (ConvertReferenceExplicit): When converting from Iface type S to Class
19730         T make sure the rules are implemented as an OR.
19731
19732         * parameter.cs (ParameterType): Make it a property for now although the
19733         purpose really isn't anything immediate.
19734
19735         * expression.cs (Is*Applicable): Do better checking on the parameter type
19736         of a ref/out parameter. The ones from the system assemblies are already 
19737         marked with the correct type so we don't need to do any correction.
19738
19739         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
19740         the object type is standard too so include that.
19741
19742 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
19743
19744         * ecore.cs (StandardConversionExists): Augment with missing code:
19745         deal with IntConstant, LongConstants and Enumerations.
19746
19747         * assign.cs: Report the error, instead of failing silently
19748
19749         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
19750         typecontainer that they are declared, because the
19751         typecontainer/namespace will have the list of using clauses that
19752         need to be applied.
19753
19754         Assembly Attributes were escaping the normal registration
19755         mechanism. 
19756
19757         (EmitCode): Apply attributes within an EmitContext that represents
19758         the container they were declared on.
19759
19760         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
19761
19762 2002-05-06  Ravi Pratap  <ravi@ximian.com>
19763
19764         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
19765         Revamp completely - make much cleaner as we now operate only
19766         on a set of Types.
19767
19768         (FindMostSpecificSource, FindMostSpecificTarget): New methods
19769         to implement the logic detailed in the spec more correctly.
19770
19771         (UserDefinedConversion): Update accordingly.
19772
19773 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
19774
19775         * statement.cs: Return flow analysis information up.
19776
19777         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
19778         and the default.
19779
19780         (token): Do not consume an extra character before calling
19781         decimal_digits.
19782
19783 2002-05-06  Piers Haken <piersh@friskit.com>
19784
19785         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
19786
19787 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
19788
19789         * class.cs (Constructor.Emit): Set the IsStatic flag in the
19790         EmitContext during the instance constructor initializer
19791         resolution, to stop access to instance variables.
19792
19793         This is mandated by the spec, last paragraph of the `constructor
19794         initializers' section. 
19795
19796 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
19797
19798         * cs-parser.jay, class.cs (Accessor): new class used to represent
19799         an accessor (get or set).  In the past we used `null' to represent
19800         a missing accessor.  But this is ambiguous because there was no
19801         way to tell in abstract indexers/properties if one of them was
19802         specified.
19803
19804         Now there is a way of addressing that.
19805
19806         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
19807         instead of FindMembers.
19808
19809         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
19810         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
19811
19812         * attribute.cs: Treat indexers and properties as the same in terms
19813         of applying attributes
19814
19815         * ecore.cs (FindMostEncompassedType): Use statically initialized
19816         EmptyExpressions()s like we do elsewhere to avoid creating useless
19817         objects (and we take this out of the tight loop).
19818
19819         (GetConversionOperators): Move the code to extract the actual
19820         operators to a separate routine to clean things up.
19821
19822 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
19823
19824         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
19825         events are always registered FieldBuilders.
19826
19827         * class.cs (FieldBase): New class shared by Fields 
19828
19829         * delegate.cs: If we are a toplevel delegate, use our full name.
19830         If we are a nested delegate, then only use our tail name.
19831
19832 2002-05-02  Ravi Pratap  <ravi@ximian.com>
19833
19834         * expression.cs (IsApplicable): Ensure that we add the "&" to
19835         ref/out types before comparing it with the type of the argument.
19836
19837         (IsParamsMethodApplicable): Ditto.
19838
19839         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
19840         silly me ;-)
19841
19842         * delegate.cs : Handle the case when we have more than one applicable
19843         method. Flag an error only when we finish checking all.
19844
19845 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
19846
19847         * expression.cs: Add support for boolean static initializers.
19848
19849 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
19850
19851         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
19852
19853         * parameter.cs (ComputeParameterTypes,
19854         ComputeAndDefineParameterTypes): Better error handling: now we
19855         clear the `types' cache if we fail during any of the type lookups.
19856         We also return the status code correctly to our caller
19857
19858         * delegate.cs: If we fail to define a delegate, abort the extra
19859         steps. 
19860
19861         * expression.cs (Binary.ResolveOperator): for
19862         operator==(object,object) and operator !=(object, object) we also
19863         have to verify that there is an implicit conversion from one to
19864         the other.
19865
19866         (ArrayAccess.DoResolve): Array Access can operate on
19867         non-variables. 
19868
19869 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
19870
19871         * assign.cs (CompoundAssign): A new class used as a "flag" that
19872         the assignment actually is happening as part of a compound
19873         assignment operator.
19874
19875         During compound assignment, a few new rules exist to enable things
19876         like:
19877
19878         byte b |= 1 + 2
19879
19880         From the spec:
19881
19882         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
19883         to the type of x) if y is implicitly convertible to the type of x,
19884         and the operator is a builtin operator and the return type of the
19885         operator is explicitly convertible to the type of x. 
19886
19887         * rootcontext.cs: Reset warning level to 2.  4 catches various
19888         "interesting" features in mcs, we must clean this up at some
19889         point, but currently am trying to kill other bugs ;-)
19890
19891         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
19892         in container classes as well.  
19893
19894         * expression.cs (Binary.ResolveOperator): Handle string case
19895         before anything else (as operator overloading does emit an error
19896         before doing anything else).
19897
19898         This code could go away when we move to a table driven model, but
19899         i could not come up with a good plan last night.
19900
19901 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
19902
19903         * typemanager.cs (CSharpName): reimplementation using regex.
19904         * class.cs: added null check for fields in Emit
19905         * rootcontext.cs: set warninglevel to 4
19906
19907 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
19908
19909         * typemanager.cs (CSharpName): reimplemented with Lupus
19910         suggestion.
19911
19912 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
19913
19914         * statement.cs (If): correclty implement Resolve, because we were
19915         not catching sem errors in there.  The same process is needed
19916         everywhere else. 
19917         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
19918
19919
19920         (Statement.Warning_DeadCodeFound): Factorize code.
19921         (While): Report dead code here too.
19922
19923         (Statement): Added Resolve virtual method to allow
19924         for resolution split from the emit code.
19925
19926 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
19927
19928         * statement.cs (EmitBoolExpression): No longer try to resolve the
19929         expression here.    
19930         (MakeBoolean): New utility function that resolve, implicitly
19931         converts to boolean and tags the expression. 
19932
19933
19934         (If, Do): Implement dead code elimination.
19935         (While): Implement loop inversion
19936
19937         (Do, While, For, If): Resolve the expression prior to calling our
19938         code generation.
19939
19940 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
19941
19942         * class.cs:
19943           - added method Report28 (warning: program has more than one entry point)
19944           - added method IsEntryPoint, implements paragraph 10.1 of the spec
19945           - modified method Method.Define, the part at the end of the method
19946
19947         * rootcontext.cs: added static public Location EntryPointLocation;
19948           
19949         * ../errors/cs0028.cs : Add test case for the above warning.              
19950
19951         * typemanager.cs:
19952           - modified method CSharpName to allow arrays of primitive type to
19953             be printed nicely (e.g. instead of System.Int32[][] it now prints
19954             int[][])
19955           - added method CSharpSignature: returns the signature of a method
19956             in string format to be used in reporting errors, warnings, etc.
19957
19958         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
19959         with String.Empty.
19960
19961 2002-04-26  Ravi Pratap  <ravi@ximian.com>
19962
19963         * delegate.cs (Define): Fix extremely silly bug where I was
19964         setting the type of the 'object' parameter of the BeginInvoke
19965         method to System.IAsyncResult instead of System.Object ;-)
19966
19967 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
19968
19969         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
19970         here. 
19971
19972         (Constructor.Emit): return if we fail to initialize the
19973         constructor.  Another door closed!  
19974
19975         * expression.cs (New.DoResolve): Improve error message (from -6 to
19976         1501).  Use DeclaredOnly lookup to find the exact constructor.
19977
19978         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
19979         loop.  This is useful.
19980
19981         * cs-parser.jay: Adjust the default parameters so that destructors
19982         have the proper signature.
19983
19984 2002-04-26  Martin Baulig  <martin@gnome.org>
19985
19986         * driver.cs (LoadAssembly): If `assembly' contains any characters
19987         which are only valid in path names and not in assembly names
19988         (currently slash, backslash and point), use Assembly.LoadFrom ()
19989         instead of Assembly.Load () on the `assembly' (before iteration
19990         over the link_paths).
19991
19992 2002-04-26  Martin Baulig  <martin@gnome.org>
19993
19994         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
19995
19996 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
19997
19998         * class.cs (Property): use the new typemanager.MemberLookup
19999
20000         (TypeContainer.MemberLookup): Implement using the
20001         TypeManager.MemberLookup now. 
20002
20003         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20004         and return MemberInfos, so that these can be used without an
20005         EmitContext (what we had before).
20006
20007 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20008
20009         * expression.cs: Fix the case where the argument to params if the
20010         type of the params.  I omitted handling this before.   Fixed
20011
20012 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20013
20014         * driver.cs: Call BootCorlib_PopulateCoreType
20015
20016         * class.cs (Property.CheckBase): Check for properties only, not
20017         for all members. 
20018
20019         * interface.cs: Temporary hack: try/catch around the
20020         CustomAttributeBuilder, because I am getting an exception that I
20021         do not understand.
20022
20023         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20024         types whose definitions are required to be there (attributes are
20025         defined before standard types).
20026
20027         Compute definitions as we boot the various types, as they are used
20028         immediately (value_type class will need object_type, but if we do
20029         not initialize object_type, we will pass a null, which will let
20030         the runtime pick the System.Object from the existing corlib, which
20031         is not what we want).
20032
20033 2002-04-22  Patrik Torstensson <totte@labs2.com>
20034
20035         * cs-tokenizer.cs: fixed a number of trim() issues.
20036
20037 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20038
20039         * expression.cs (Argument.Type): Ensure that we return the correct
20040         type when we have out or ref parameters [in which case we 
20041         append a "&"].
20042
20043 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20044
20045         * class.cs (Property, Indexer): Allow extern modifier in there. 
20046
20047         * typemanager.cs (InitBaseTypes): Initializes object_type and
20048         value_type, since those will be used early on during the bootstrap
20049         process to compile corlib.
20050
20051         (InitCoreTypes): Move code from here to InitBaseTypes.
20052
20053 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20054
20055         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20056         single-dimension arrays as using the ldlen opcode.  
20057
20058         Daniel Lewis discovered this optimization.  
20059
20060         * typemanager.cs: Add signature for System.Array::get_Length
20061
20062 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20063
20064         * statement.cs: report the error when the foreach does not apply to an
20065         array nor a collection.
20066
20067 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20068
20069         * expression.cs: Add implicit conversions to the operator ~.
20070
20071         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20072
20073         * typemanager.cs: Locate the decimal constructor.
20074
20075 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20076
20077         * attribute.cs: use the new property of TypeOf.
20078         * expression.cs: added 'get' property around typearg.
20079
20080         These changes fix a build breaker reported by NickD. Is this the
20081         correct way to fix?  If not, please, revert my changes and make it
20082         work :-).
20083
20084 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20085
20086         * attribute.cs: Add support for typeof in attribute invocations.
20087         I am not sure that this is right though.
20088
20089 2002-04-14  Duncan Mak  <duncan@ximian.com>
20090
20091         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20092         Binary.Operator.Division case.
20093
20094 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20095
20096         * class.cs (DefineType): Ensure that we do a proper check on
20097         attribute types and also register it with the TypeManager.
20098
20099         (TypeContainer.Targets): The default for attribute types is
20100         AttributeTargets.All.
20101
20102         * attribute.cs (ApplyAttributes): Registering the attribute type
20103         is done elsewhere, not when we discover we have a Usage attribute.
20104
20105 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20106
20107         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20108         and get rid of is_delegate parameter.
20109
20110         * everywhere : update.
20111
20112 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20113
20114         * cs-parser.jay (compilation_unit): Revamp completely to use
20115         some new ideas that I got from Rhys' grammar to solve the problems
20116         with assembly level attributes.
20117
20118         (outer_declaration): New grammar production.
20119
20120         (attribute_sections): Add.
20121
20122         (opt_attributes): Base on attribute_sections
20123
20124         (namespace_declaration): Allow opt_attributes to tackle the case
20125         when we have assembly level attributes - we are clever in this
20126         regard now ;-)
20127
20128         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20129         attributes in the non-global context.
20130
20131         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20132         instead of SetGlobalAttributes.
20133
20134         * class.cs, rootcontext.cs : Ensure we define and generate 
20135         attribute types before anything else.
20136
20137         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20138         and flag the new error -20 for the case when the attribute type
20139         does not have valid targets specified. csc does not catch this.
20140
20141         * ../errors/errors.txt : update for error # -20
20142
20143 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20144
20145         * support.cs (InternalParameters.ParameterModifier): Do some null
20146         checking and return sane values.
20147
20148         * class.cs (Method.Define): If we are a PInvoke method, ensure
20149         that we are static and extern. Report error # 601
20150
20151         * ../errors/cs0601.cs : Add test case for the above error.
20152
20153 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20154
20155         * rootcontext.cs (attribute_types): We need to keep type of
20156         all attribute types separately and emit code for them first.
20157
20158         (RegisterAttribute) : Implement.
20159
20160         * class.cs (DefineType): Check if the current Type is a custom
20161         attribute type and register it accordingly.
20162
20163         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20164         adding the first attribute twice and rename to
20165
20166         (SetGlobalAttributes): this.
20167
20168         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20169         lookups.
20170
20171         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20172         if we are processing global arguments. Hmm, I am unsure of this.
20173
20174 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20175
20176         * expression.cs: added static array of strings to avoid calling
20177         Enum.ToString () for Operator in Binary. Significant recover of
20178         performance.
20179
20180 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20181
20182         * class.cs (FindMembers): Allow the Builders of the various
20183         members to be null.  If they are skip them.  This only happens
20184         during the PInvoke declaration.
20185
20186 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20187
20188         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20189         failure, so we do not keep going afterwards.
20190
20191         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20192         wanted to pass `false' as the `is_delegate' argument.  If this is
20193         the case, why not use delegate_type == null to mean `is_delegate =
20194         false' and anything else as is_delegate = true.
20195
20196 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20197
20198         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20199         code for the section, not the beginning of the tests.
20200
20201 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20202
20203         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20204
20205         * expression.cs (Binary): same.  Warn about errors where we have
20206         Enum/Enum in operator + as well.
20207
20208 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20209
20210         * statement.cs:
20211                 - added support for switch(bool)
20212                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20213                 - add TableSwitchEmit() to handle table-based switch statements
20214
20215 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20216
20217         * expression.cs (Invocation.OverloadResolve): Factor out code which
20218         does parameter compatibility checking with arguments so that we can 
20219         re-use the code even from Delegate.VerifyApplicability
20220
20221         (VerifyArgumentsCompat): Move above code here.
20222
20223         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20224         and instead make a call to the above method.
20225
20226 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20227
20228         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20229         We use it to keep track of classes which are attribute types.
20230
20231 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20232
20233         * delegate.cs (Delegate.Define): Correctly define the types in the
20234         presence of fixed and array parameters.
20235
20236         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20237         doing FindMembers.
20238
20239         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20240         include NonPublic after the first iteration.
20241
20242         * class.cs (Indexer.CheckBase): Only check if both parents are
20243         non-null. 
20244
20245         * cs-parser.jay (accessor_body): If empty, set to null.
20246
20247         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20248         same code path here to resolve constants names that we did have in
20249         MemberAccess.DoResolve.  There is too much code duplicated here.
20250
20251 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20252
20253         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20254
20255         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20256         to MakeUnionSet.
20257
20258         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20259         tokens, numbers and strings.
20260
20261         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20262         parenthesis.
20263
20264         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20265         asyncronous parameters and the regular parameters.  
20266
20267         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20268         specify the target directory.
20269
20270         * expression.cs: (This.DoResolve): Simplify
20271         (As.Emit): Optimize, do not generate IsInst if the expression is
20272         always of the given type.
20273
20274         (Is.DoResolve): Bug fix, we were reporting both always/never for
20275         the is expression.
20276
20277         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
20278         creating too many unnecessary arrays.
20279
20280 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
20281
20282         * class.cs (EmitFieldInitializer): Use Assign expression to assign
20283         fields instead of rolling our own initializer.   Takes care of all
20284         implicit conversions, and drops unnecessary static checks/argument.
20285
20286 2002-03-31  Dick Porter  <dick@ximian.com>
20287
20288         * driver.cs: use the GetDirectories() return values properly, and
20289         use "/" as path separator.
20290
20291 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
20292
20293         * expression.cs (Unary): Optimize - - expr into expr.
20294         (Binary): Optimize a + (-b) into a -b.
20295
20296         * codegen.cs (CodeGen): Made all methods static.
20297
20298 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
20299
20300         * rootcontext.cs: 
20301
20302         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
20303         TypeBuilder property.
20304
20305         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
20306         instead. 
20307
20308         * tree.cs: Removed the various RecordXXXX, and replaced with a
20309         single RecordDecl.  Removed all the accessor methods, and just
20310         left a single access point Type 
20311
20312         * enum.cs: Rename DefineEnum to DefineType.
20313
20314         * decl.cs: New abstract method `DefineType' used to unify the
20315         Defines for Enumerations, Interfaces, TypeContainers and
20316         Delegates.
20317
20318         (FindType): Moved LookupInterfaceOrClass here.  Moved the
20319         LookupBaseClasses method that used to live in class.cs and
20320         interface.cs here, and renamed to FindType.
20321
20322         * delegate.cs: Implement DefineType.  Take advantage of the
20323         refactored pattern for locating the parent builder without taking
20324         the parent_builder argument (which we know does not work if we are
20325         nested, and triggering a toplevel definition).
20326
20327 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20328
20329         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
20330         accessibility of a member has changed during override and report
20331         an error if so.
20332
20333         * class.cs (Method.Define, Property.Define): Only complain on
20334         overrides if the method is private, any other accessibility is
20335         fine (and since we just checked the permission is the same, we are
20336         good to go).
20337
20338         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
20339         and elif are processed always.  The other pre-processing
20340         directives are only processed if we are "taking" the path
20341
20342 2002-03-29  Martin Baulig  <martin@gnome.org>
20343
20344         * class.cs (Method.Emit): Only emit symbolic debugging info if the
20345         current location is not Null.
20346
20347         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
20348         a separate method so we can profile it.
20349
20350         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
20351         `span.Seconds' are just seconds, but no minutes or hours.
20352         (MainDriver): Profile the CodeGen.SaveSymbols calls.
20353
20354 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20355
20356         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
20357         Remove the gratuitous set of Final:
20358
20359                                 // If an interface implementation, then we can set Final.
20360                                 if (((flags & MethodAttributes.Abstract) == 0) &&
20361                                     implementing.DeclaringType.IsInterface)
20362                                         flags |= MethodAttributes.Final;
20363
20364         I do not know what I was smoking when I used that.
20365
20366
20367         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
20368         step into fixing the name resolution issues for delegates and
20369         unifying the toplevel name resolution.
20370
20371 2002-03-28  Martin Baulig  <martin@gnome.org>
20372
20373         * class.cs (Method.Emit): If we have a symbol writer, call its
20374         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
20375         tell it about the current method.
20376
20377         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
20378         writer that we're going to emit the first byte of IL code for a new
20379         statement (a new source line).
20380         (EmitContext.EmitTopBlock): If we have a symbol writer, call
20381         EmitContext.Mark() before emitting any code.
20382
20383         * location.cs (SymbolDocument): Return null when we're Null.
20384
20385         * statement.cs (Statement): Moved the `Location loc' variable here.
20386         (Statement.EmitBoolExpression): If we have a symbol writer, call
20387         ec.Mark() before emitting any code to tell it that we're at the
20388         beginning of a new statement.
20389         (StatementExpression): Added `Location' argument to the constructor.
20390         (Block): Added public readonly variable `StartLocation' and public
20391         variable `EndLocation'.  The latter is to be set using SetEndLocation().
20392         (Block): Added constructor which takes a start and end location.
20393         (Block.SetEndLocation): New method. This sets the end location.
20394         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
20395         local variables we create.
20396         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
20397         each statement and do also mark the begin and end of the block.
20398
20399         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
20400         tell it the current lexer.Location, use Location.Null for the end of the
20401         block.
20402         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
20403         current block, set its end location using SetEndLocation().
20404         (statement_expression): StatementExpression constructor now takes the
20405         lexer.Location as additional argument.
20406         (for_statement, declare_local_variables): Likewise.
20407         (declare_local_variables): When creating a new implicit block, use the
20408         new Block constructor and pass it the lexer.Location.
20409
20410 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20411
20412         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
20413         members also on the parent interfaces recursively.
20414
20415 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
20416
20417         * report.cs: Use new formats, since Gonzalo finished the missing
20418         bits. 
20419
20420         * expression.cs (Binary.ResolveOperator): added missing operator|
20421         operator& and operator^ for bool/bool.
20422
20423         * cs-parser.jay: CheckDef now takes a Location argument that is
20424         used to report errors more precisly (instead of reporting the end
20425         of a definition, we try to track something which is a lot closer
20426         to the source of the problem).
20427
20428         * cs-tokenizer.cs: Track global token use, so we can properly flag
20429         the use of #define/#undef after the first token has been seen.
20430
20431         Also, rename the reportXXXX to Error_DescriptiveName
20432
20433         * decl.cs (DeclSpace.IsTopLevel): Move property here from
20434         TypeContainer, so that Enum and Interface can use this too.
20435
20436         * class.cs (TypeContainer.LookupInterfaceOrClass,
20437         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
20438         `builder' argument.  Typically this was used to pass the parent
20439         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
20440         the definition).  
20441
20442         The problem is that a nested class could trigger the definition of
20443         a toplevel class, and the builder would be obviously wrong in that
20444         case. 
20445
20446         So we drop this argument, and we compute dynamically the
20447         TypeBuilder/ModuleBuilder (the correct information was available
20448         to us anyways from DeclSpace.Parent)
20449
20450         * interface.cs (Interface.DefineInterface): Drop builder
20451         parameter cleanup like class.cs
20452
20453         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
20454         like class.cs
20455
20456         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
20457         values. 
20458
20459         (Try.Emit): Propagate the returns value from the statement.
20460
20461         (Return.Emit): Even if we are leavning 
20462
20463         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
20464
20465         * modifiers.cs: Fix the computation of MethodAttributes flags.
20466
20467 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
20468
20469         * driver.cs: allow compilation of files that start with '/'.
20470         Add a default case when checking the argument of --target.
20471
20472 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
20473
20474         * interface.cs: Implement the same search algorithm for types in
20475         the interface code.
20476
20477         * delegate.cs: Do not allow multiple definition.
20478
20479         * Recovered ChangeLog that got accidentally amputated
20480
20481         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
20482
20483         * rootcontext.cs: Load manually enum to allow core classes to
20484         contain enumerations.
20485
20486         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
20487         Update to new static methods in TypeManager.
20488
20489         * typemanager.cs (GetMethod, GetConstructor): Use our
20490         implementation of FindMembers to find the members, since during
20491         corlib compilation, the types are TypeBuilders and GetMethod and
20492         GetConstructor do not work.
20493
20494         Make all methods in TypeManager static.
20495
20496         (InitCodeHelpers): Split the functionality from
20497         the InitCodeTypes function.
20498
20499         * driver.cs: Call InitCodeHelpers after we have populated the
20500         types. 
20501
20502         * cs-parser.jay (delegate_declaration): we did not used to compute
20503         the delegate name correctly for void delegates.
20504
20505 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
20506
20507         * rootcontext.cs (RootContext): Init the interface_resolve_order
20508         and type_container_resolve_order always.
20509
20510         (ResolveCore, BootstrapCorlib_ResolveClass,
20511         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
20512         compiler when compiling with --nostdlib
20513
20514         * class.cs (TypeContainer.DefineType): Check that our parent is
20515         not null.  This test is most important when we are bootstraping
20516         the core types.
20517
20518         * codegen.cs: Split out the symbol writing code.
20519
20520 2002-03-25  Martin Baulig  <martin@gnome.org>
20521
20522         * driver.cs (-g): Made -g an alias for --debug.
20523
20524 2002-03-24  Martin Baulig  <martin@gnome.org>
20525
20526         * codegen.cs (SymbolWriter): New public variable. Returns the
20527         current symbol writer.
20528         (CodeGen): Added `bool want_debugging_support' argument to the
20529          constructor. If true, tell the ModuleBuild that we want debugging
20530         support and ask it for the ISymbolWriter.
20531         (Save): If we have a symbol writer, call it's Close() method after
20532         saving the assembly.
20533
20534         * driver.c (--debug): New command line argument to create a
20535         debugger information file.
20536
20537         * location.cs (SymbolDocument): New public property. Returns an
20538         ISymbolDocumentWriter object for the current source file or null
20539         if we don't have a symbol writer.
20540
20541 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
20542
20543         * driver.cs (LoadAssembly): Correctly return when all the paths
20544         have been tried and not before.
20545
20546         * statement.cs (Switch.Emit): return the actual coverage for this
20547         statement (returns/not-returns)
20548
20549         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
20550         switch of the statement if we are the last switch section.  That
20551         kills two problems: try/catch problems (we used to emit an empty
20552         nop at the end) and switch statements where all branches would
20553         return. 
20554
20555 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
20556
20557         * driver.cs: Add default assemblies (the equivalent to the
20558         Microsoft CSC.RSP file)
20559
20560         * cs-tokenizer.cs: When updating `cols and setting it to zero,
20561         also update tokens_seen and set it to false.
20562
20563         * driver.cs: Implement --recurse for Mike.
20564
20565         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
20566         correctly splitting out the paths.
20567
20568 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
20569
20570         * interface.cs (Interface.PopulateProperty): Instead of using
20571         `parent' as the declaration space for the set parameters, use
20572         `this' 
20573
20574         * support.cs (InternalParameters): InternalParameters constructor
20575         takes a DeclSpace instead of a TypeContainer.
20576
20577         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
20578         types are being initialized, load the address of it before calling
20579         the function.  
20580
20581         (New): Provide a mechanism to disable the generation of local
20582         value type temporaries when the caller will be providing us with
20583         an address to store it.
20584
20585         (ArrayCreation.EmitDynamicInitializers): Use it.
20586
20587 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
20588
20589         * expression.cs (Invocation.EmitArguments): Only probe for array
20590         property if there is more than one argument.  Sorry about that.
20591
20592         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
20593         empty param arrays.
20594
20595         * class.cs (Method.LabelParameters): Fix incorrect code path that
20596         prevented the `ParamArrayAttribute' from being applied to the
20597         params attribute.
20598
20599 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
20600
20601         * support.cs (ReflectionParameters): Correctly compute whether the
20602         last argument is a params array.  Fixes the problem with
20603         string.Split ('a')
20604
20605         * typemanager.cs: Make the assemblies array always be non-null
20606         (empty, but non-null)
20607
20608         * tree.cs (RecordDecl): New function that abstracts the recording
20609         of names.  This reports error 101, and provides a pointer to the
20610         previous declaration.  Fixes a crash in the compiler.
20611
20612         * cs-parser.jay (constructor_declaration): Update to new grammar,
20613         and provide a constructor_body that can be empty.
20614
20615 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
20616
20617         * driver.cs: Add support for --resources.
20618
20619         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
20620         Make all types for the various array helper methods be integer.
20621
20622         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
20623         CheckState to ConvCast.
20624
20625         (ConvCast): Now it takes a `checked' state argument, to avoid
20626         depending on the emit context for the conversion, and just using
20627         the resolve time setting.
20628
20629         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
20630         instead of Invocation.EmitArguments.  We do not emit the original
20631         arguments, instead we emit those which have been converted to
20632         unsigned int expressions.
20633
20634         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
20635
20636         * codegen.cs: ditto.
20637
20638         * expression.cs (LocalVariableReference): Drop the use of the
20639         Store function that depended on the variable index.
20640
20641         * statement.cs (VariableInfo): Drop the `Idx' property from this
20642         class, as this is not taking into account the indexes for
20643         temporaries tat we generate during the execution, getting the
20644         indexes wrong.
20645
20646         * class.cs: First emit class initializers, then call the parent
20647         constructor. 
20648
20649         * expression.cs (Binary): Fix opcode emision.
20650         (UnaryMutator.EmitCode): Support checked code generation
20651
20652         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
20653         matches for events for both the Static and Instance scans,
20654         pointing to the same element.   Fix that.
20655
20656 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
20657
20658         * rootcontext.cs (ResolveTree): Always set the
20659         interface_resolve_order, because nested interfaces will be calling
20660         into us.
20661
20662         * class.cs (GetInterfaceOrClass): Track the same resolution
20663         process used by TypeManager.LookupType.  This fixes the nested
20664         type lookups in class declarations (separate path from
20665         LookupType). 
20666
20667         (TypeContainer.DefineType): Also define nested interfaces.
20668         (TypeContainer.RegisterOrder): New public function used to
20669         register the order in which child interfaces need to be closed.
20670
20671         Nested interfaces need to be closed after their parents have been
20672         created. 
20673
20674         * interface.cs (InterfaceAttr): Put all the logic for computing
20675         the interface attribute here. 
20676
20677         (DefineInterface): Register our interface order with the
20678         RootContext or with the TypeContainer depending on the case.
20679
20680 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
20681
20682         * cs-parser.jay: rework foreach statement to work with the new
20683         changes to the policy on SimpleNames.
20684
20685         * report.cs: support Stacktrace on warnings as well.
20686
20687         * makefile: drop --unsafe and /unsafe from the compile.
20688
20689 2002-03-13  Ravi Pratap  <ravi@ximian.com>
20690
20691         * ecore.cs (StandardConversionExists): Modify to take an Expression
20692         as the first parameter. Ensure we do null -> reference type conversion
20693         checking.
20694
20695         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
20696         temporary Expression objects.
20697
20698 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
20699
20700         * interface.cs: workaround bug in method overloading resolution
20701         (there is already a bugzilla bug for it).
20702
20703 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
20704
20705         We could also solve this problem by having a separate path for
20706         performing type lookups, instead of DoResolve, we could have a
20707         ResolveType entry point, and only participating pieces of the
20708         production (simplename, deref, array) would implement this. 
20709
20710         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
20711         signal SimpleName to only resolve type names and not attempt to
20712         resolve anything else.
20713
20714         * expression.cs (Cast): Set the flag.
20715
20716         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
20717
20718         * class.cs: Only report 108 if there is no `new' modifier.
20719
20720         * cs-parser.jay: rework foreach statement to work with the new
20721         changes to the policy on SimpleNames.
20722         
20723         * report.cs: support Stacktrace on warnings as well.
20724
20725         * makefile: drop --unsafe and /unsafe from the compile.
20726
20727 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
20728
20729         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
20730         lookups here, instead of doing that at parse time.  This means
20731         that our grammar will not introduce `LocalVariableReferences' as
20732         expressions at this point.  That solves the problem of code like
20733         this:
20734
20735         class X {
20736            static void Main ()
20737            { int X = 1;
20738             { X x = null }}}
20739
20740         This is only half the fix.  The full fix requires parameters to
20741         also be handled in this way.
20742
20743         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
20744         makes the use more obvious of the DeclSpace.  The
20745         ec.TypeContainer.TypeBuilder is now only used to pull the
20746         TypeBuilder for it.
20747
20748         My theory is that I can get rid of the TypeBuilder completely from
20749         the EmitContext, and have typecasts where it is used (from
20750         DeclSpace to where it matters).  
20751
20752         The only pending problem is that the code that implements Aliases
20753         is on TypeContainer, and probably should go in DeclSpace.
20754
20755         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
20756         lookups here, instead of doing that at parse time.  This means
20757         that our grammar will not introduce `LocalVariableReferences' as
20758         expressions at this point.  That solves the problem of code like
20759         this:
20760
20761         class X {
20762            static void Main ()
20763            { int X = 1;
20764             { X x = null }}}
20765
20766         This is only half the fix.  The full fix requires parameters to
20767         also be handled in this way.
20768
20769         * class.cs (Property.DefineMethod): When implementing an interface
20770         method, set newslot, when implementing an abstract method, do not
20771         set the flag (before we tried never setting it, or always setting
20772         it, which is the difference).
20773         (Indexer.DefineMethod): same.
20774         (Method.DefineMethod): same.
20775
20776         * ecore.cs: Only set the status used flag if we get back a Field.
20777
20778         * attribute.cs: Temporary hack, so Paolo can keep working.
20779
20780 2002-03-08  Ravi Pratap  <ravi@ximian.com>
20781
20782         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
20783         the unmanaged type in the case we have a MarshalAs attribute.
20784
20785         (Resolve): Handle the case when we are parsing the special MarshalAs
20786         attribute [we need to store the unmanaged type to use later]
20787
20788         * typemanager.cs (marshal_as_attr_type): Built in type for the 
20789         MarshalAs Attribute.
20790
20791         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
20792         on parameters and accordingly set the marshalling info.
20793
20794 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
20795
20796         * class.cs: Optimizing slightly by removing redundant code after
20797         we switched to the `NoTypes' return value.
20798         (Property.DefineMethod): use NoTypes here too.
20799
20800         This fixes the bug I introduced in my last batch of changes.
20801
20802 2002-03-05  Ravi Pratap  <ravi@ximian.com>
20803
20804         * tree.cs (RecordEnum): Add. We now keep track of enums too.
20805
20806         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
20807         Enums since those are types too. 
20808
20809         * cs-parser.jay (enum_declaration): Record enums as we parse them.
20810
20811         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
20812         thanks to a call during the lookup process.
20813
20814 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
20815
20816         * statement.cs (Foreach): Lots of work to accomodate a particular
20817         kind of foreach statement that I had not kept in mind.  It is
20818         possible to have foreachs on classes that provide a GetEnumerator
20819         method that return objects that implement the "pattern" for using
20820         a foreach, there is no need to support GetEnumerator
20821         specifically. 
20822
20823         This is needed to compile nant.
20824
20825         * decl.cs: Only report 114 if the member is not `Finalize' and if
20826         the warning level is at least 2.
20827
20828         * class.cs: Moved the compare function from Method to
20829         MethodSignature. 
20830
20831         (MethodSignature.InheritableMemberSignatureCompare): Add new
20832         filter function that is used to extract inheritable methods from a
20833         class. 
20834
20835         (Method.Define): Use the new `inheritable_method_signature_filter'
20836         delegate
20837
20838         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
20839         command. 
20840
20841 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
20842
20843         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
20844
20845         * cs-parser.jay: Add opt_semicolon to the interface declaration.
20846
20847         * expression.cs: Pass location information to
20848         ConvertImplicitStandard. 
20849
20850         * class.cs: Added debugging code to track return values from
20851         interfaces. 
20852
20853 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
20854
20855         * expression.cs (Is.DoResolve): If either side of the `is' is an
20856         interface, do not flag the warning.
20857
20858         * ecore.cs (ImplicitReferenceConversion): We need a separate test
20859         for interfaces
20860
20861         * report.cs: Allow for --fatal to be used with --probe.
20862
20863         * typemanager.cs (NoTypes): Move the definition for the empty Type
20864         array here. 
20865
20866         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
20867         properties. 
20868         (TypeContainer.DefineProxy): New function used to proxy to parent
20869         implementations when implementing interfaces.
20870         (TypeContainer.ParentImplements): used to lookup if our parent
20871         implements a public function that is required by an interface.
20872         (TypeContainer.VerifyPendingMethods): Hook this up.
20873
20874         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
20875         `modules' and `assemblies' arraylists into arrays.  We only grow
20876         these are the very early start up of the program, so this improves
20877         the speedof LookupType (nicely measured).
20878
20879         * expression.cs (MakeByteBlob): Replaced unsafe code with
20880         BitConverter, as suggested by Paolo.
20881
20882         * cfold.cs (ConstantFold.Binary): Special case: perform constant
20883         folding of string concatenation, but if either side is a string,
20884         and the other is not, then return null, and let the runtime use
20885         the concatenation on the string plus the object (using
20886         `Object.ToString'). 
20887
20888 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
20889
20890         Constant Folding has been implemented now.
20891
20892         * expression.cs (Unary.Reduce): Do not throw an exception, catch
20893         the error instead on types that are not supported in one's
20894         complement. 
20895
20896         * constant.cs (Constant and all children): New set of functions to
20897         perform implict and explicit conversions.
20898
20899         * ecore.cs (EnumConstant): Implement the new functions to perform
20900         conversion by proxying to the child expression.
20901
20902         * codegen.cs: (ConstantCheckState): Constant evaluation has its
20903         own separate setting that can not be turned off from the command
20904         line using --unchecked or --checked and is only controlled using
20905         the checked/unchecked statements and expressions.  This setting is
20906         used by the constant folder to flag errors.
20907
20908         * expression.cs (CheckedExpr, UncheckedExpr): Set the
20909         ConstantCheckState as well.   
20910
20911         During Resolve, they also have to flag the state, because the
20912         constant folder runs completely in the Resolve phase.
20913
20914         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
20915         well.
20916
20917 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
20918
20919         * cfold.cs: New file, this file contains the constant folder.
20920
20921         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
20922         argument to track whether we are using the resulting address to
20923         load or store a value and provide better error messages. 
20924
20925         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
20926         new AddressOf arguments.
20927
20928         * statement.cs (Foreach.EmitCollectionForeach): Update
20929
20930         * expression.cs (Argument.Emit): Call AddressOf with proper
20931         arguments to track usage.
20932
20933         (New.DoEmit): Call AddressOf with new arguments.
20934
20935         (Unary.Emit): Adjust AddressOf call.
20936
20937 2002-03-01  Ravi Pratap  <ravi@ximian.com>
20938
20939         * cs-parser.jay (member_access): Change the case for pre-defined types
20940         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
20941         this suggestion.
20942
20943         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
20944         a method body.
20945
20946         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
20947         essentially like methods and apply attributes like MethodImplOptions to them too.
20948
20949         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
20950         not being null.
20951
20952         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
20953         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
20954         is the DeclSpace.
20955
20956         * Update code everywhere accordingly.
20957
20958         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
20959
20960         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
20961
20962 2002-02-28  Ravi Pratap  <ravi@ximian.com>
20963
20964         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
20965         try performing lookups against those instead of jumping straight into using
20966         the 'using' clauses.
20967
20968         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
20969
20970         (LookupType): Perform lookups in implicit parents too.
20971
20972         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
20973         sequence as RootContext.LookupType. 
20974
20975         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
20976         the various cases of namespace lookups into this method.
20977
20978 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
20979
20980         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
20981         in positional arguments)
20982
20983         * class.cs (Operator): Update the AllowedModifiers to contain
20984         extern. 
20985
20986         * cs-parser.jay: Update operator declaration to allow for the
20987         operator body to be empty.
20988
20989         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
20990         values. 
20991
20992 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
20993
20994         * class.cs (Method.Emit): Label parameters.
20995
20996         * driver.cs: Return 1 or 0 as the program exit code.
20997
20998 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
20999
21000         * expression.cs: Special case the `null' object when trying to
21001         auto-compute the type, as anything can be explicitly converted to
21002         that. 
21003
21004         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21005         spotting this Paolo.
21006
21007         (Expression.ImplicitNumericConversion): Perform comparissions of
21008         the type using the underlying type in the case of an enumeration
21009         rather than using the enumeration type for the compare.
21010
21011         Cope with the underlying == type case, which is not possible to
21012         catch before. 
21013
21014         (Expression.ConvertNumericExplicit): Perform comparissions of
21015         the type using the underlying type in the case of an enumeration
21016         rather than using the enumeration type for the compare.
21017
21018         * driver.cs: If the user does not supply an extension, assume .exe
21019
21020         * cs-parser.jay (if_statement): Rewrote so that we can track the
21021         location for the if statement.
21022
21023         * expression.cs (Binary.ConstantFold): Only concat strings when
21024         the operation is "+", not everything ;-)
21025
21026         * statement.cs (Statement.EmitBoolExpression): Take a location
21027         argument. 
21028         (If, While, Do): Track location.
21029
21030         * expression.cs (Binary.ResolveOperator): In the object + string
21031         case, I was missing a call to ConvertImplicit
21032
21033 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21034
21035         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21036         Location arguments. Ensure we use RootContext.LookupType to do our work
21037         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21038
21039         * interface.cs (PopulateMethod): Handle the type of the parameter being
21040         null gracefully.
21041
21042         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21043         have a params method with no fixed arguments and a call is made with no
21044         arguments.
21045
21046 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21047
21048         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21049         the verbatim-string-literal
21050
21051         * support.cs (InternalParameters.ParameterModifier): handle null
21052         fixed parameters.
21053         (InternalParameters.ParameterType): ditto.
21054
21055         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21056         duplicating the name of the variable parameter.
21057         (GetParameterByName): Fix bug where we were not looking up array
21058         paramters if they were the only present (thanks Paolo!).
21059         (GetParameterInfo): We only have an empty set of types if both
21060         fixed and array are set to null.
21061         (GetParameterInfo-idx): Handle FixedParameter == null
21062
21063         * cs-parser.jay: Handle the case where there is no catch
21064         statements (missing null test).
21065
21066 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21067
21068         * driver.cs (MainDriver): Be conservative on our command line
21069         handling.
21070
21071         Catch DirectoryNotFoundException when calling GetFiles.
21072
21073         (SplitPathAndPattern): Used to split the input specification into
21074         a path and a pattern that we can feed to Directory.GetFiles.
21075
21076 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21077
21078         * statement.cs (Fixed): Implement the last case of the Fixed
21079         statement (string handling).
21080
21081         * expression.cs (StringPtr): New class used to return a char * to
21082         a string;  Used by the Fixed statement.
21083
21084         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21085
21086         * expression.cs (Binary.ResolveOperator): Remove redundant
21087         MemberLookup pn parent type.
21088         Optimize union call, we do not need a union if the types are the same.
21089         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21090         type.
21091
21092         Specialize the use of MemberLookup everywhere, instead of using
21093         the default settings. 
21094
21095         (StackAlloc): Implement stackalloc keyword.
21096
21097         * cs-parser.jay: Add rule to parse stackalloc.
21098
21099         * driver.cs: Handle /h, /help, /?
21100
21101         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21102         before we supported unsafe code.
21103
21104         * makefile: add --unsafe to the self compilation of mcs.
21105
21106 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21107
21108         * expression.cs (PointerArithmetic): New class that is used to
21109         perform pointer arithmetic.
21110         (Binary.Resolve): Handle pointer arithmetic
21111         Handle pointer comparission.
21112         (ArrayPtr): Utility expression class that is used to take the
21113         address of an array.
21114
21115         (ElementAccess): Implement array access for pointers
21116
21117         * statement.cs (Fixed): Implement fixed statement for arrays, we
21118         are missing one more case before we are done.
21119
21120         * expression.cs (Indirection): Implement EmitAssign and set the
21121         ExprClass to Variable.  This allows pointer dereferences to be
21122         treated as variables, and to have values assigned to them.
21123
21124         * ecore.cs (Expression.StoreFromPtr): New utility function to
21125         store values dereferencing.
21126
21127 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21128
21129         * expression.cs (Binary.ResolveOperator): Ensure that we are
21130         not trying to operate on a void type - this fixes the reported
21131         bug.
21132
21133         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21134         the parent implementation is sealed.
21135
21136         * ../errors/cs0239.cs : Add.
21137
21138         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21139
21140         * typemanager.cs (unverifiable_code_type): Corresponds to 
21141         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21142         which have unsafe code in them.
21143
21144         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21145         unsafe context.
21146
21147 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21148
21149         * cs-tokenizer.cs: Add support for @"litreal strings"
21150
21151         Make tokenizer accept pre-processor directives
21152         on any column (remove the old C-like limitation). 
21153
21154         * rootcontext.cs (EmitCode): Emit any global attributes.
21155         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21156
21157         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21158
21159         * cs-parser.jay: Add support for global attributes.  
21160
21161 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21162
21163         * expression.cs (Indirection): New helper class.  Unary will
21164         create Indirection classes to be able to implement the
21165         IMemoryLocation interface on it.
21166
21167 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21168
21169         * cs-parser.jay (fixed_statement): reference the right statement.
21170
21171         * statement.cs (Fixed.Emit): Finish implementing the fixed
21172         statement for the &x case.
21173
21174 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21175
21176         * class.cs (Property.Define, Method.Define): Remove newslot when
21177         `implementing'.  
21178
21179         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21180         wrong.  NewSlot should only be used if the `new' keyword is present.
21181
21182         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21183         locating our system dir.  Sorry about this.
21184
21185 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21186
21187         * driver.cs (GetSystemDir): Compute correctly the location of our
21188         system assemblies.  I was using the compiler directory instead of
21189         the library directory.
21190
21191 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21192
21193         * expression.cs (BetterFunction): Put back in what Miguel commented out
21194         since it is the correct fix. The problem is elsewhere ;-)
21195
21196         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21197         parameters of the parms method are themselves compatible or not !
21198
21199         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21200         to check that a class implements an interface before saying that an implicit
21201         conversion was allowed. Use ImplementsInterface to do the checking.
21202
21203 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21204
21205         * class.cs (Method.Define): Track whether we are an explicit
21206         implementation or not.  And only call DefineMethodOverride if we
21207         are an explicit implementation.
21208
21209         (Property.DefineMethod): Ditto.
21210
21211 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21212
21213         * expression.cs (BetterFunction): Catch hideous bug which was
21214          preventing us from detecting ambiguous calls due to implicit casts i.e
21215         cs0121.
21216
21217 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21218
21219         * support.cs (Pair): Remove un-needed method.  I figured why I was
21220         getting the error in cs-parser.jay, the variable in a foreach loop
21221         is readonly, and the compiler does not really treat this as a variable.
21222
21223         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21224         instead of EQUALS in grammar.  
21225
21226         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21227
21228         * expression.cs (Unary.DoResolve): Check whether the argument is
21229         managed or not.
21230
21231 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21232
21233         * support.cs: Api for Pair to set a value.  Despite the fact that
21234         the variables are public the MS C# compiler refuses to compile
21235         code that accesses the field if the variable is part of a foreach
21236         statement. 
21237
21238         * statement.cs (Fixed): Begin implementation of the fixed
21239         statement.
21240
21241         (Block.AddVariable): Return the VariableInfo on success and null
21242         on failure instead of true/false. 
21243
21244         * cs-parser.jay (foreach): Catch errors on variables already
21245         defined (we were ignoring this value before) and properly unwind
21246         the block hierarchy
21247
21248         (fixed_statement): grammar for the fixed statement.
21249
21250 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21251
21252         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21253         pointer types to be incretemented.
21254
21255         (SizeOf): Implement.
21256
21257         * cs-parser.jay (pointer_member_access): Implement
21258         expr->IDENTIFIER production.
21259
21260         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21261         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21262         on safe contexts.
21263
21264         (Unary): Implement indirection.
21265
21266         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21267         use in non-unsafe context).
21268
21269         (SimpleName.DoResolve): Check for pointers in field access on safe
21270         contexts. 
21271
21272         (Expression.LoadFromPtr): Factor the load-indirect code in this
21273         function.  This was duplicated in UnboxCast and ParameterReference
21274
21275 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
21276
21277         * expression.cs (ComposedCast): report an error if a pointer cast
21278         is used in a safe region.
21279
21280         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
21281         pointer type casts in unsafe context.
21282
21283         * codegen.cs (EmitContext): Set up IsUnsafe.
21284
21285         * cs-parser.jay (non_expression_type): Add productions for pointer
21286         casts. 
21287
21288         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
21289         code.  We should not use force into static mode if the method is
21290         not virtual.  Fixes bug in MIS
21291
21292         * statement.cs (Do.Emit, While.Emit, For.Emit,
21293         Statement.EmitBoolExpression): Add support to Do and While to
21294         propagate infinite loop as `I do return' semantics.
21295
21296         Improve the For case to also test for boolean constants.
21297
21298         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
21299         to the list of attributes we can add.
21300
21301         Remove `EmitContext' argument.
21302
21303         * class.cs (Method.Define): Apply parameter attributes.
21304         (Constructor.Define): Apply parameter attributes.
21305         (MethodCore.LabelParameters): Move here the core of labeling
21306         parameters. 
21307
21308         * support.cs (ReflectionParameters.ParameterModifier,
21309         InternalParameters.ParameterModifier): Use IsByRef on the type and
21310         only return the OUT bit for these parameters instead of in/out/ref
21311         flags.
21312
21313         This is because I miss-understood things.  The ParameterInfo.IsIn
21314         and IsOut represent whether the parameter has the [In] and [Out]
21315         attributes set.  
21316
21317 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
21318
21319         * ecore.cs (FieldExpr.Emit): Release temporaries.
21320
21321         * assign.cs (LocalTemporary.Release): new function.
21322
21323         * codegen.cs (EmitContext.GetTemporaryStorage,
21324         EmitContext.FreeTemporaryStorage): Rework the way we deal with
21325         temporary storage.  Now we can "put back" localbuilders when we
21326         are done with them
21327
21328 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
21329
21330         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
21331         need to make a copy of the variable to generate verifiable code.
21332
21333 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
21334
21335         * driver.cs: Compute dynamically the system directory.
21336
21337         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
21338         Slower, but more generally useful.  Used by the abstract
21339         registering implementation. 
21340
21341         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
21342         the rules for the special rule on Type/instances.  First check if
21343         we have the same name, and if so, try that special static path
21344         rather than the instance path.
21345
21346 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
21347
21348         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
21349         for, while and if.
21350
21351         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
21352         Enum, ValueType, Delegate or Array for non-corlib compiles.
21353
21354         * cs-tokenizer.cs: Catch long identifiers (645)
21355
21356         * typemanager.cs (IndexerPropetyName): Ravi never tested this
21357         piece of code.
21358
21359         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
21360         fix, we were returning too early, so we were not registering
21361         pending methods from abstract classes.
21362
21363         Do not register pending methods if the class is abstract.
21364
21365         * expression.cs (Conditional.DoResolve): Report circular implicit
21366         conversions when we neecd to compute it for conditional
21367         expressions. 
21368
21369         (Is.DoResolve): If the expression is always of the provided type,
21370         flag warning 183.  If the expression can not ever be of the
21371         provided type flag warning 184.
21372
21373         * class.cs: Catch 169 as well.
21374
21375         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
21376         read. 
21377
21378 2002-01-18  Nick Drochak  <ndrochak@gol.com>
21379
21380         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
21381
21382 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
21383
21384         * interface.cs: (PopulateMethod): Check for pointers being defined
21385         only if the unsafe context is active.
21386         (PopulateProperty): ditto.
21387         (PopulateIndexer): ditto.
21388
21389         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
21390         specified.  If pointers are present, make sure that they are
21391         present in an unsafe context.
21392         (Constructor, Constructor.Define): ditto.
21393         (Field, Field.Define): ditto.
21394         (Property, Property.Define): ditto.
21395         (Event, Event.Define): ditto.
21396
21397         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
21398         hashtable if there are classes or structs defined.
21399
21400         * expression.cs (LocalVariableReference.DoResolve): Simplify this
21401         code, as the constant resolution moved.
21402
21403         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
21404         the metadata, so we can flag error 133. 
21405
21406         * decl.cs (MemberCore.UnsafeOK): New function to test that a
21407         pointer is being declared in an unsafe context.
21408
21409 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
21410
21411         * modifiers.cs (Modifiers.Check): Require a Location argument.
21412         Report error 227 for Unsafe use.
21413
21414         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
21415
21416         * statement.cs (For.Emit): If the test is null, then report that
21417         we do `return', as we wont reach anything afterwards.
21418
21419         (Switch.SwitchGoverningType): Track the expression that matched
21420         the conversion.
21421
21422         * driver.cs: Allow negative numbers as an error code to flag.
21423
21424         * cs-parser.jay: Handle 1551.
21425
21426         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
21427
21428 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21429
21430         * cs-parser.jay: Report 1518 (type declaration can only contain
21431         class, struct, interface, enum or delegate)
21432
21433         (switch_label): Report 1523 (keywords `case' or `default' must
21434         preced code)
21435
21436         (opt_switch_sections): Report 1522 (empty switch)
21437
21438         * driver.cs: Report 1515 (response file specified multiple times)
21439         Report 1516 (Source file specified multiple times).
21440
21441         * expression.cs (Argument.Resolve): Signal 1510
21442
21443         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
21444         access not allowed in static code)
21445
21446 2002-01-11  Ravi Pratap  <ravi@ximian.com>
21447
21448         * typemanager.cs (IsPointerType): Utility method which we are going
21449         to need a lot.
21450
21451         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
21452         the object type, so we take care of that.
21453
21454         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
21455
21456         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
21457         added to non-params parameters :-)
21458
21459         * typemanager.cs (CSharpName): Include 'void' type too. 
21460
21461         (void_ptr_type): Include in the set of core types.
21462
21463         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
21464         duplicating code.
21465
21466         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
21467         an unsafe context.
21468
21469         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
21470         completely forgotten about it.
21471
21472 2002-01-10  Ravi Pratap  <ravi@ximian.com>
21473
21474         * cs-parser.jay (pointer_type): Add. This begins our implementation
21475         of parsing rules for unsafe code.
21476
21477         (unsafe_statement): Implement.
21478
21479         (embedded_statement): Modify to include the above.
21480
21481         * statement.cs (Unsafe): Implement new class for unsafe blocks.
21482
21483         * codegen.cs (EmitContext.InUnsafe): Add. This determines
21484         if the current context is an unsafe one.
21485
21486         * cs-parser.jay (local_variable_pointer_type): Since local variable types
21487         are handled differently, we need separate rules for them.
21488
21489         (local_variable_declaration): Update to use local_variable_pointer_type
21490         to allow variable declarations of unmanaged pointer types.
21491
21492         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
21493         in unsafe contexts.
21494
21495         * ../errors/cs0214.cs : Add.
21496
21497 2002-01-16  Nick Drochak  <ndrochak@gol.com>
21498
21499         * makefile: remove 'response' file when cleaning.
21500
21501 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21502
21503         * cs-parser.jay: Report 1524.
21504
21505 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
21506
21507         * typemanager.cs (RegisterMethod): drop checking if we have
21508         registered this from here
21509
21510 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
21511
21512         * class.cs (Method.EmitDestructor): Implement calling our base
21513         destructor. 
21514
21515         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
21516         value of InFinally.
21517
21518         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
21519         this routine and will wrap the call in a try/catch block.  Deal
21520         with the case.
21521
21522 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
21523
21524         * ecore.cs (Expression.MemberLookup): instead of taking a
21525         parameter `same_type' that was used to tell whether we could
21526         access private members we compute our containing type from the
21527         EmitContext.
21528
21529         (FieldExpr): Added partial support for volatile fields.  This does
21530         not work for volatile fields exposed from assemblies, as I can not
21531         figure out how to extract the modreq from it.
21532
21533         Updated all the source files to use this.
21534
21535         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
21536         because it is referenced by MemberLookup very often. 
21537
21538 2002-01-09  Ravi Pratap  <ravi@ximian.com>
21539
21540         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
21541         TypeBuilder.GetCustomAttributes to retrieve what we need.
21542
21543         Get rid of redundant default_member_attr_type as this is the same as
21544         default_member_type which already exists.
21545
21546         * interface.cs, attribute.cs : Update accordingly.
21547
21548 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
21549
21550         * typemanager.cs: Enable IndexerPropertyName again.  It does not
21551         work for TYpeBuilders though.  Ravi, can you please fix this?
21552
21553         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
21554
21555         * expression.cs (Argument.Emit): Handle the case of ref objects
21556         being passed to ref functions;  
21557
21558         (ParameterReference.EmitLoad): Loads the content of the pointer
21559         without dereferencing.
21560
21561 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
21562
21563         * cs-tokenizer.cs: Implemented the pre-processing expressions.
21564
21565 2002-01-08  Ravi Pratap  <ravi@ximian.com>
21566
21567         * class.cs (Indexer.DefineMethod): Incorporate the interface
21568         type in the name of the method if we are doing explicit interface
21569         implementation.
21570
21571         * expression.cs (ConversionExists): Remove as it is completely obsolete.
21572
21573         (BetterConversion): Fix extremely trivial bug where we were referring to
21574         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
21575         again !
21576
21577         * ../errors/bug16.cs : Add although we have fixed it.
21578
21579 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
21580
21581         * expression.cs (BaseIndexer): Begin implementation.
21582
21583         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
21584
21585         * cs-parser.jay (indexer_declarator): Use qualified_identifier
21586         production directly to remove a shift/reduce, and implement
21587         explicit interface implementation.
21588
21589         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
21590         after a floating point suffix.
21591
21592         * expression.cs (DoNumericPromotions): Improved the conversion for
21593         uint/uint.  If we have a constant, we avoid doing a typecast to a
21594         larger type.
21595
21596         * class.cs (Indexer): Implement explicit interface implementation
21597         for indexers.
21598
21599 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
21600
21601         * class.cs: make the default instance constructor public and hidebysig.
21602
21603 2001-01-03  Ravi Pratap  <ravi@ximian.com>
21604
21605         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
21606         so we can call it from elsewhere.
21607
21608         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
21609         we emit it internally if the class has a defined indexer; otherwise the user
21610         emits it by decorating the class definition with the DefaultMemberAttribute.
21611
21612         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
21613         attribute is not used on a type which defines an indexer.
21614
21615         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
21616         character when we skip whitespace.
21617
21618         * ../errors/cs0646.cs : Add.
21619
21620 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
21621
21622         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
21623         again. 
21624
21625         * makefile: Add practical target `mcs3.exe' which builds the third
21626         generation compiler. 
21627
21628         * expression.cs (New): Fix structures constructor calling.
21629
21630         * class.cs (Property, Method, Indexer): Emit Final flag on the
21631         method if we are an interface implementation and we are not
21632         abstract. 
21633
21634         * ecore.cs (PropertyExpr): New public field `IsBase', tells
21635         whether this property is referencing a `base' method.
21636
21637         * expression.cs (Invocation.EmitCall): take an extra argument:
21638         is_base, this is used to determine whether the `call' or
21639         `callvirt' opcode should be used.
21640
21641
21642         * delegate.cs: update EmitCall.
21643
21644         * class.cs (Method.Define): Set NewSlot for the cases where we are
21645         not implementing an interface method.
21646
21647         (Property.Define): ditto.
21648
21649 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
21650
21651         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
21652         'r'.  Allows mcs to parse itself fully.
21653
21654 2002-01-02  Ravi Pratap  <ravi@ximian.com>
21655
21656         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
21657         of the number of initializers that require the InitializeArray method.
21658
21659         (CheckIndices): Store the Expression in all cases - not the plain value. Also
21660         update the above field where necessary.
21661
21662         (MakeByteBlob): Update accordingly.
21663
21664         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
21665         greater than 2.
21666
21667         (EmitDynamicInitializers): Update in accordance with the new optimization.
21668
21669         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
21670         same OpCode applies.
21671
21672         * cs-parser.jay : Fix some glaring errors I introduced.
21673
21674 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
21675
21676         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
21677         so that we can check for name clashes there too.
21678
21679         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
21680         for interface indexers.
21681
21682         * interfaces.cs (Define): Emit the default member attribute.
21683
21684         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
21685         variable was being referred to while setting the value ;-)
21686
21687 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
21688
21689         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
21690         byte-by-byte information when we know the data is zero.
21691
21692         Make the block always a multiple of 4, because
21693         DefineInitializedData has a bug.
21694
21695         * assign.cs: Fix, we should assign from the temporary, not from
21696         the source. 
21697
21698         * expression.cs (MakeByteBlob): Fix my incorrect code.
21699
21700 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
21701
21702         * typemanager.cs (EnumToUnderlying): This function is used to get
21703         the underlying type from an enumeration, because it does not
21704         always work. 
21705
21706         * constant.cs: Use the I4_S form for values between -128 and 127.
21707
21708         * statement.cs (Block.LookupLabel): Looks up a label.
21709         (Block): Drop support for labeled blocks.
21710
21711         (LabeledStatement): New kind of statement that represents a label
21712         only.
21713
21714         (Goto): Finally implement this bad boy.
21715
21716         * cs-parser.jay: Update to reflect new mechanism to implement
21717         labels.
21718
21719 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
21720
21721         * codegen.cs (EmitContext.This): a codegen property that keeps the
21722         a single instance of this instead of creating many different this
21723         instances. 
21724
21725         * delegate.cs (Delegate.DoResolve): Update to use the property;
21726
21727         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
21728
21729         * expression.cs (BaseAccess.DoResolve): Ditto.
21730
21731 2001-12-29  Ravi Pratap  <ravi@ximian.com>
21732
21733         * typemanager.cs (methodimpl_attr_type): Add to hold the type
21734         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
21735
21736         (InitCoreTypes): Update accordingly.
21737
21738         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
21739         so we can quickly store the state.
21740
21741         (ApplyAttributes): Set the correct implementation flags
21742         for InternalCall methods.
21743
21744 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
21745
21746         * expression.cs (EmitCall): if a method is not virtual, then do
21747         not use callvirt on it.
21748
21749         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
21750         user defined stuff) requires the use of stobj, which takes an
21751         address on the stack instead of an array and an index.  So emit
21752         the Ldelema operation for it.
21753
21754         (EmitStoreOpcode): Use stobj for valuetypes.
21755
21756         (UnaryMutator.EmitCode): Use the right 1 value depending on
21757         whether we are dealing with int64/uint64, float or doubles.
21758
21759         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
21760         constructors that I implemented last night.
21761
21762         (Constructor.IsDefault): Fix to work properly for static
21763         constructors.
21764
21765         * cs-parser.jay (CheckDef): report method signature errors.
21766         Update error number 103 to be 132.
21767
21768         * decl.cs: New AdditionResult enumeration value: MethodExists.
21769         Although we do this check for methods later on in the semantic
21770         analysis, catching repeated default constructors is so easy that
21771         we catch these here. 
21772
21773         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
21774         promotions code.
21775
21776         (ParameterReference.EmitAssign, Emit): handle
21777         bools as bytes.
21778
21779         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
21780         (ArrayAccess.EmitStoreOpcode): ditto.
21781
21782         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
21783
21784         * expression.cs (MakeByteBlob): Complete all the missing types
21785         (uint, short, ushort, byte, sbyte)
21786
21787         * class.cs: Only init instance field initializers on instance
21788         constructors. 
21789
21790         Rename `constructors' to instance_constructors. 
21791
21792         (TypeContainer.AddConstructor): Only add constructors to the list
21793         if it is not static.
21794
21795         Make sure that we handle default_static_constructor independently
21796         everywhere where we handle instance_constructors
21797
21798 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
21799
21800         * class.cs: Do not lookup or create a base initializer for a
21801         static constructor.
21802
21803         (ConstructorInitializer.Resolve): use the proper type to lookup
21804         for constructors.
21805
21806         * cs-parser.jay: Report error 1585 (modifiers between type and name).
21807
21808         * enum.cs, interface.cs: Remove CloseType, this is taken care by
21809         in DeclSpace. 
21810
21811         * decl.cs: CloseType is now an virtual method, the default
21812         implementation just closes this type.
21813
21814 2001-12-28  Ravi Pratap  <ravi@ximian.com>
21815
21816         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
21817         to PreserveSig by default. Also emit HideBySig on such methods.
21818
21819         Basically, set the defaults to standard values.
21820
21821         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
21822         argument, if candidate is better, it can't be worse than the best !
21823
21824         (Invocation): Re-write bits to differentiate between methods being
21825         applicable in their expanded form and their normal form - for params
21826         methods of course.
21827
21828         Get rid of use_standard everywhere as only standard conversions are allowed
21829         in overload resolution. 
21830
21831         More spec conformance.
21832
21833 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
21834
21835         * driver.cs: Add --timestamp, to see where the compiler spends
21836         most of its time.
21837
21838         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
21839         `this' in static code.
21840
21841         (SimpleName.DoResolve): Implement in terms of a helper function
21842         that allows static-references to be passed upstream to
21843         MemberAccess.
21844
21845         (Expression.ResolveWithSimpleName): Resolve specially simple
21846         names when called by MemberAccess to implement the special
21847         semantics. 
21848
21849         (Expression.ImplicitReferenceConversion): Handle conversions from
21850         Null to reference types before others, as Null's type is
21851         System.Object. 
21852
21853         * expression.cs (Invocation.EmitCall): Handle the special case of
21854         calling methods declared on a reference type from a ValueType
21855         (Base classes System.Object and System.Enum)
21856
21857         (MemberAccess.Resolve): Only perform lookups on Enumerations if
21858         the left hand side is a TypeExpr, not on every enumeration. 
21859
21860         (Binary.Resolve): If types are reference types, then do a cast to
21861         object on operators != and == of both arguments.
21862
21863         * typemanager.cs (FindMembers): Extract instance and static
21864         members if requested.
21865
21866         * interface.cs (PopulateProperty): Use void_type instead of null
21867         as the return type for the setter method.
21868
21869         (PopulateIndexer): ditto.
21870
21871 2001-12-27  Ravi Pratap  <ravi@ximian.com>
21872
21873         * support.cs (ReflectionParameters): Fix minor bug where we
21874         were examining the wrong parameter for the ParamArray attribute.
21875
21876         Cope with requests for the type of the parameter at position
21877         greater than the params parameter's. We now return the element
21878         type of the params array as that makes more sense.
21879
21880         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
21881         accordingly as we no longer have to extract the element type
21882         ourselves.
21883
21884         (Invocation.OverloadResolve): Update.
21885
21886 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
21887
21888         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
21889         against IEnumerator, test whether the return value is a descendant
21890         of the IEnumerator interface.
21891
21892         * class.cs (Indexer.Define): Use an auxiliary method to implement
21893         the other bits of the method definition.  Begin support for
21894         explicit interface implementation.
21895
21896         (Property.DefineMethod): Use TypeManager.void_type instead of null
21897         for an empty return value.
21898
21899 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
21900
21901         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
21902         dealing with a FieldExpr which is composed of a FieldBuilder, in
21903         the code path we did extract the constant, but we should have
21904         obtained the underlying value to be able to cast it (otherwise we
21905         end up in an infinite loop, this is what Ravi was running into).
21906
21907         (ArrayCreation.UpdateIndices): Arrays might be empty.
21908
21909         (MemberAccess.ResolveMemberAccess): Add support for section
21910         14.5.4.1 that deals with the special case of E.I when E is a type
21911         and something else, that I can be a reference to a static member.
21912
21913         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
21914         handle a particular array type to create byte blobs, it is just
21915         something we dont generate byteblobs for.
21916
21917         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
21918         arguments. 
21919
21920         * location.cs (Push): remove the key from the hashtable that we
21921         are about to add.   This happens for empty files.
21922
21923         * driver.cs: Dispose files after we have parsed them.
21924
21925         (tokenize): new function that only runs the tokenizer on its
21926         input, for speed testing.
21927
21928 2001-12-26  Ravi Pratap  <ravi@ximian.com>
21929
21930         * class.cs (Event.Define): Define the private field only if there
21931         are no accessors defined.
21932
21933         * expression.cs (ResolveMemberAccess): If there is no associated
21934         field with the event, that means we have an event defined with its
21935         own accessors and we should flag error cs0070 since transforming
21936         ourselves into a field is not valid in that case.
21937
21938         * ecore.cs (SimpleName.DoResolve): Same as above.
21939
21940         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
21941         and charset to sane values.
21942
21943 2001-12-25  Ravi Pratap  <ravi@ximian.com>
21944
21945         * assign.cs (DoResolve): Perform check on events only if they 
21946         are being accessed outside the declaring type.
21947
21948         * cs-parser.jay (event_declarations): Update rules to correctly
21949         set the type of the implicit parameter etc.
21950
21951         (add_accessor, remove_accessor): Set current local parameters.
21952
21953         * expression.cs (Binary): For delegate addition and subtraction,
21954         cast the return value from the method into the appropriate delegate
21955         type.
21956
21957 2001-12-24  Ravi Pratap  <ravi@ximian.com>
21958
21959         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
21960         of these as the workaround is unnecessary.
21961
21962         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
21963         delegate data - none of that is needed at all.
21964
21965         Re-write bits to extract the instance expression and the delegate method
21966         correctly.
21967
21968         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
21969         on delegates too.
21970
21971         * attribute.cs (ApplyAttributes): New method to take care of common tasks
21972         of attaching attributes instead of duplicating code everywhere.
21973
21974         * everywhere : Update code to do attribute emission using the above method.
21975
21976 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
21977
21978         * expression.cs (IsParamsMethodApplicable): if there are not
21979         parameters, return immediately.
21980
21981         * ecore.cs: The 0 literal can be implicity converted to an enum
21982         type. 
21983
21984         (SimpleName.DoResolve): First lookup the type, then lookup the
21985         members. 
21986
21987         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
21988         want to get its address.  If the InstanceExpression is not
21989         addressable, store the result in a temporary variable, then get
21990         the address of it.
21991
21992         * codegen.cs: Only display 219 errors on warning level or above. 
21993
21994         * expression.cs (ArrayAccess): Make it implement the
21995         IMemoryLocation interface.
21996
21997         (Binary.DoResolve): handle the operator == (object a, object b)
21998         and operator != (object a, object b) without incurring into a
21999         BoxedCast (because 5 != o should never be performed).
22000
22001         Handle binary enumerator operators.
22002
22003         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22004         value type, otherwise use Ldelem_ref.
22005
22006         Use precomputed names;
22007
22008         (AddressOf): Implement address of
22009
22010         * cs-parser.jay (labeled_statement): Fix recursive block
22011         addition by reworking the production.
22012
22013         * expression.cs (New.DoEmit): New has a special case:
22014                 
22015                  If we are dealing with a ValueType, we have a few
22016                  situations to deal with:
22017                 
22018                     * The target of New is a ValueType variable, that is
22019                       easy, we just pass this as the variable reference
22020                 
22021                     * The target of New is being passed as an argument,
22022                       to a boxing operation or a function that takes a
22023                       ValueType.
22024                 
22025                       In this case, we need to create a temporary variable
22026                       that is the argument of New.
22027
22028
22029 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22030
22031         * rootcontext.cs (LookupType): Check that current_type is not null before
22032         going about looking at nested types.
22033
22034         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22035         not implement the IAssignMethod interface any more.
22036
22037         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22038         where we tranform them into FieldExprs if they are being resolved from within
22039         the declaring type.
22040
22041         * ecore.cs (SimpleName.DoResolve): Do the same here.
22042
22043         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22044
22045         * ../errors/bug10.cs : Add.
22046
22047         * ../errors/cs0070.cs : Add.
22048
22049         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22050
22051         * assign.cs : Get rid of EventIsLocal everywhere.
22052
22053 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22054
22055         * ecore.cs (ConvertIntLiteral): finished the implementation.
22056
22057         * statement.cs (SwitchLabel): Convert the value we are using as a
22058         key before looking up the table.
22059
22060 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22061
22062         * codegen.cs (EmitTopBlock): Require a Location argument now.
22063
22064         * cs-parser.jay (constructor_declarator): We need to setup
22065         current_local_parameters before we parse the
22066         opt_constructor_initializer, to allow the variables to be bound
22067         to the constructor arguments.
22068
22069         * rootcontext.cs (LookupType): First lookup nested classes in our
22070         class and our parents before we go looking outside our class.
22071
22072         * expression.cs (ConstantFold): Extract/debox the values at the
22073         beginnning. 
22074
22075         * rootcontext.cs (EmitCode): Resolve the constants first before we
22076         resolve the types.  This is not really needed, but it helps debugging.
22077
22078         * statement.cs: report location.
22079
22080         * cs-parser.jay: pass location to throw statement.
22081
22082         * driver.cs: Small bug fix.
22083
22084         * report.cs: Updated format to be 4-zero filled digits.
22085
22086 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22087
22088         * expression.cs (CheckIndices): Fix minor bug where the wrong
22089         variable was being referred to ;-)
22090
22091         (DoEmit): Do not call EmitStaticInitializers when the 
22092         underlying type is System.Object.
22093
22094 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22095
22096         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22097         and do the usual workaround for SRE.
22098
22099         * class.cs (MyEventBuilder.EventType): New member to get at the type
22100         of the event, quickly.
22101
22102         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22103
22104         * assign.cs (Assign.DoResolve): Handle the case when the target
22105         is an EventExpr and perform the necessary checks.
22106
22107         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22108         interface.
22109
22110         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22111
22112         (EventExpr): Set the type in the constructor itself since we 
22113         are meant to be born fully resolved.
22114
22115         (EventExpr.Define): Revert code I wrote earlier.
22116                 
22117         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22118         instance expression is null. The instance expression is a This in that case
22119         or a null, depending on whether it is a static method or not.
22120
22121         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22122         refers to more than one method.
22123
22124         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22125         and accordingly flag errors.
22126
22127 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22128
22129         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22130
22131 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22132
22133         * location.cs (ToString): Provide useful rutine.
22134
22135 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22136
22137         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22138         objects, return the actual integral boxed.
22139
22140         * statement.cs (SwitchLabel): define an ILLabel for each
22141         SwitchLabel. 
22142
22143         (Switch.CheckSwitch): If the value is a Literal, extract
22144         the underlying literal.
22145
22146         Also in the unused hashtable we had, add the SwitchLabel so we can
22147         quickly look this value up.
22148
22149         * constant.cs: Implement a bunch of new constants.  Rewrite
22150         Literal based on this.  Made changes everywhere to adapt to this.
22151
22152         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22153         dereferencing array only once, and also copes with enumrations.
22154
22155         bytes are two bytes wide, not one.
22156
22157         (Cast): Perform constant conversions.
22158
22159         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22160         wrappers to the literals here.
22161
22162         * expression.cs (DoNumericPromotions): long literals can converted
22163         to ulong implicity (this is taken care of elsewhere, but I was
22164         missing this spot).
22165
22166         * ecore.cs (Expression.Literalize): Make the return type Literal,
22167         to improve type checking.
22168
22169         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22170
22171 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22172
22173         * literal.cs: Revert code from ravi that checked the bounds.  The
22174         bounds are sane by the definition of the type itself. 
22175
22176         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22177         need to actually look up in our parent hierarchy for interfaces
22178         implemented. 
22179
22180         * const.cs: Use the underlying type for enumerations
22181
22182         * delegate.cs: Compute the basename for the delegate creation,
22183         that should fix the delegate test case, and restore the correct
22184         Type Lookup semantics in rootcontext
22185
22186         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22187         referencing a nested type with the Reflection API is using the "+"
22188         sign. 
22189
22190         * cs-parser.jay: Do not require EOF token at the end.
22191
22192 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22193
22194         * rootcontext.cs (LookupType): Concatenate type names with
22195         a '.' instead of a '+' The test suite passes again.
22196
22197         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22198         field of the enumeration.
22199
22200         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22201         the case when the member is an EventExpr.
22202
22203         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22204         static has an associated instance expression.
22205
22206         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22207
22208         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22209
22210         * class.cs (Event.Define): Register event and perform appropriate checks
22211         for error #111.
22212
22213         We define the Add and Remove methods even if the use provides none because
22214         in that case, we provide default implementations ourselves.
22215
22216         Define a private field of the type of the event. This is done by the CSC compiler
22217         and we should be doing it too ;-)
22218
22219         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22220         More methods we use in code we generate.
22221
22222         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22223         is important.
22224
22225         (InitCoreTypes): Update accordingly for the above.
22226
22227         * class.cs (Event.Emit): Generate code for default accessors that we provide
22228
22229         (EmitDefaultMethod): Do the job in the above.
22230
22231         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22232         appropriate place.
22233
22234 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22235
22236         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22237         builders even if we were missing one.
22238
22239         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22240         pass the Basename as our class name instead of the Name.  The
22241         basename will be correctly composed for us.
22242
22243         * parameter.cs (Paramters): Now takes a Location argument.
22244
22245         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22246         make all the code call directly LookupType in RootContext and take
22247         this chance to pass the Location information everywhere.
22248
22249         * Everywhere: pass Location information.
22250
22251 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22252
22253         * class.cs (Constructor.Define): Updated way of detecting the
22254         length of the parameters.
22255
22256         (TypeContainer.DefineType): Use basename as the type name for
22257         nested types.
22258
22259         (TypeContainer.Define): Do not recursively define types here, as
22260         definition is taken care in order by the RootContext.
22261
22262         * tree.cs: Keep track of namespaces in a per-file basis.
22263
22264         * parameter.cs (Parameter.ComputeSignature): Update to use
22265         DeclSpace. 
22266
22267         (Parameters.GetSignature): ditto.
22268
22269         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22270         instead of a TypeContainer.
22271
22272         (Interface.SemanticAnalysis): Use `this' instead of our parent to
22273         resolve names.  Because we need to be resolve in our context, not
22274         our parents.
22275
22276         * driver.cs: Implement response files.
22277
22278         * class.cs (TypeContainer.DefineType): If we are defined, do not
22279         redefine ourselves.
22280
22281         (Event.Emit): Emit the code for add/remove handlers.
22282         (Event.Define): Save the MethodBuilders for add/remove.
22283
22284         * typemanager.cs: Use pair here too.
22285
22286         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
22287         DictionaryEntry requires the first argument to be non-null.  
22288
22289         (enum_declaration): Compute full name for registering the
22290         enumeration.
22291
22292         (delegate_declaration): Instead of using
22293         formal_parameter_list, use opt_formal_parameter_list as the list
22294         can be empty.
22295
22296         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
22297         (EventParsing): New property that controls whether `add' and
22298         `remove' are returned as tokens or identifiers (for events);
22299
22300 2001-12-19  Ravi Pratap  <ravi@ximian.com>
22301
22302         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
22303         use MyEventBuilder only and let it wrap the real builder for us.
22304
22305         (MyEventBuilder): Revamp constructor etc.
22306
22307         Implement all operations that we perform on EventBuilder in precisely the same
22308         way here too.
22309
22310         (FindMembers): Update to use the EventBuilder member.
22311
22312         (Event.Emit): Update accordingly.
22313
22314 2001-12-18  Ravi Pratap  <ravi@ximian.com>
22315
22316         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
22317         by calling the appropriate methods.
22318
22319         (GetCustomAttributes): Make stubs as they cannot possibly do anything
22320         useful.
22321
22322         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
22323
22324 2001-12-17  Ravi Pratap  <ravi@ximian.com>
22325
22326         * delegate.cs (Delegate.Populate): Check that the return type
22327         and various parameters types are indeed accessible.
22328
22329         * class.cs (Constructor.Define): Same here.
22330
22331         (Field.Define): Ditto.
22332
22333         (Event.Define): Ditto.
22334
22335         (Operator.Define): Check that the underlying Method defined itself
22336         correctly - so it's MethodBuilder should not be null.
22337
22338         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
22339         expression happens to be null.
22340
22341         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
22342         members but as of now we don't seem to be able to do anything really useful with it.
22343
22344         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
22345         not the EventBuilder.
22346
22347 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
22348
22349         * cs-tokenizer.cs: Add support for defines.
22350         Add support for #if, #elif, #else, #endif
22351
22352         (eval_var): evaluates a variable.
22353         (eval): stubbed for evaluating functions.
22354
22355         * cs-parser.jay: Pass the defines information
22356
22357         * driver.cs: Add --define command line option.
22358
22359         * decl.cs: Move MemberCore here.
22360
22361         Make it the base class for DeclSpace.  This allows us to catch and
22362         report 108 and 109 for everything now.
22363
22364         * class.cs (TypeContainer.Define): Extract all the members
22365         before populating and emit the warning 108 (new keyword required
22366         to override) instead of having each member implement this.
22367
22368         (MemberCore.Define): New abstract method, we will be using this in
22369         the warning reporting engine in Populate.
22370
22371         (Operator.Define): Adjust to new MemberCore protocol. 
22372
22373         * const.cs (Const): This does not derive from Expression, it is a
22374         temporary object we use to create fields, it is a MemberCore. 
22375
22376         * class.cs (Method.Define): Allow the entry point to be in a
22377         specific class.
22378
22379         * driver.cs: Rewrite the argument handler to clean it up a bit.
22380
22381         * rootcontext.cs: Made it just an auxiliary namespace feature by
22382         making everything static.
22383
22384         * driver.cs: Adapt code to use RootContext type name instead of
22385         instance variable.
22386
22387         * delegate.cs: Remove RootContext argument.
22388
22389         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
22390         argument. 
22391
22392         * class.cs (Event.Define): The lookup can fail.
22393
22394         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
22395
22396         * expression.cs: Resolve the this instance before invoking the code.
22397
22398 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
22399
22400         * cs-parser.jay: Add a production in element_access that allows
22401         the thing to become a "type" reference.  This way we can parse
22402         things like "(string [])" as a type.
22403
22404         Note that this still does not handle the more complex rules of
22405         casts. 
22406
22407
22408         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
22409
22410         * ecore.cs: (CopyNewMethods): new utility function used to
22411         assemble the list of methods from running FindMembers.
22412
22413         (MemberLookup): Rework FindMembers so that 
22414
22415 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
22416
22417         * class.cs (TypeContainer): Remove Delegates who fail to be
22418         defined.
22419
22420         * delegate.cs (Populate): Verify that we dont get null return
22421         values.   TODO: Check for AsAccessible.
22422
22423         * cs-parser.jay: Use basename to emit error 574 (destructor should
22424         have the same name as container class), not the full name.
22425
22426         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
22427         possible representation.  
22428
22429         Also implements integer type suffixes U and L.
22430
22431 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
22432
22433         * expression.cs (ArrayCreation.DoResolve): We need to do the
22434         argument resolution *always*.
22435
22436         * decl.cs: Make this hold the namespace.  Hold the root context as
22437         well.
22438         (LookupType): Move here.
22439
22440         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
22441
22442         * location.cs (Row, Name): Fixed the code, it was always returning
22443         references to the first file.
22444
22445         * interface.cs: Register properties defined through interfaces.
22446
22447         * driver.cs: Add support for globbing on the command line
22448
22449         * class.cs (Field): Make it derive from MemberCore as well.
22450         (Event): ditto.
22451
22452 2001-12-15  Ravi Pratap  <ravi@ximian.com>
22453
22454         * class.cs (Event::Define): Check that the type of the event is a delegate
22455         type else flag error #66.
22456
22457         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
22458         same.
22459
22460         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
22461         values of EntryPoint, CharSet etc etc.
22462
22463         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
22464
22465         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
22466         be null and we should ignore this. I am not sure if this is really clean. Apparently,
22467         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
22468         which needs this to do its work.
22469
22470         * ../errors/cs0066.cs : Add.
22471
22472 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
22473
22474         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
22475         helper functions.
22476
22477         * class.cs: (MethodSignature.MethodSignature): Removed hack that
22478         clears out the parameters field.
22479         (MemberSignatureCompare): Cleanup
22480
22481         (MemberCore): New base class used to share code between MethodCore
22482         and Property.
22483
22484         (RegisterRequiredImplementations) BindingFlags.Public requires
22485         either BindingFlags.Instace or Static.  Use instance here.
22486
22487         (Property): Refactored code to cope better with the full spec.
22488
22489         * parameter.cs (GetParameterInfo): Return an empty array instead
22490         of null on error.
22491
22492         * class.cs (Property): Abstract or extern properties have no bodies.
22493
22494         * parameter.cs (GetParameterInfo): return a zero-sized array.
22495
22496         * class.cs (TypeContainer.MethodModifiersValid): Move all the
22497         method modifier validation to the typecontainer so we can reuse
22498         this on properties.
22499
22500         (MethodCore.ParameterTypes): return an empty sized array of types.
22501
22502         (Property.Define): Test property modifier validity.
22503
22504         Add tests for sealed/override too.
22505
22506         (Method.Emit): abstract or extern methods have no bodies.
22507
22508 2001-12-14  Ravi Pratap  <ravi@ximian.com>
22509
22510         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
22511         thing.
22512
22513         (Method::Define, ::Emit): Modify accordingly.
22514
22515         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
22516
22517         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
22518
22519         * makefile: Pass in /unsafe.
22520
22521 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
22522
22523         * class.cs (MakeKey): Kill routine.
22524
22525         * class.cs (TypeContainer.Define): Correctly define explicit
22526         method implementations (they require the full interface name plus
22527         the method name).
22528
22529         * typemanager.cs: Deply the PtrHashtable here and stop using the
22530         lame keys.  Things work so much better.
22531
22532         This of course broke everyone who depended on `RegisterMethod' to
22533         do the `test for existance' test.  This has to be done elsewhere.
22534
22535         * support.cs (PtrHashtable): A hashtable that avoid comparing with
22536         the object stupid Equals method (because, that like fails all over
22537         the place).  We still do not use it.
22538
22539         * class.cs (TypeContainer.SetRequiredInterface,
22540         TypeContainer.RequireMethods): Killed these two routines and moved
22541         all the functionality to RegisterRequiredImplementations.
22542
22543         (TypeContainer.RegisterRequiredImplementations): This routine now
22544         registers all the implementations required in an array for the
22545         interfaces and abstract methods.  We use an array of structures
22546         which can be computed ahead of time to reduce memory usage and we
22547         also assume that lookups are cheap as most classes will not
22548         implement too many interfaces.
22549
22550         We also avoid creating too many MethodSignatures.
22551
22552         (TypeContainer.IsInterfaceMethod): Update and optionally does not
22553         clear the "pending" bit if we find that there are problems with
22554         the declaration.
22555
22556         (TypeContainer.VerifyPendingMethods): Update to report errors of
22557         methods that look like implementations but are not.
22558
22559         (TypeContainer.Define): Add support for explicit interface method
22560         implementation. 
22561
22562 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
22563
22564         * typemanager.cs: Keep track of the parameters here instead of
22565         being a feature of the TypeContainer.
22566
22567         * class.cs: Drop the registration of parameters here, as
22568         InterfaceMethods are also interface declarations.
22569
22570         * delegate.cs: Register methods with the TypeManager not only with
22571         the TypeContainer.  This code was buggy.
22572
22573         * interface.cs: Full registation here.
22574
22575 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
22576
22577         * expression.cs: Remove reducer for binary expressions, it can not
22578         be done this way.
22579
22580         * const.cs: Put here the code that used to go into constant.cs
22581
22582         * constant.cs: Put here the code for constants, this is a new base
22583         class for Literals.
22584
22585         * literal.cs: Make Literal derive from Constant.
22586
22587 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
22588
22589         * statement.cs (Return.Emit): Report error 157 if the user
22590         attempts to return from a finally block.
22591
22592         (Return.Emit): Instead of emitting a return, jump to the end of
22593         the function.
22594
22595         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
22596         LocalBuilder to store the result of the function.  ReturnLabel is
22597         the target where we jump.
22598
22599
22600 2001-12-09  Radek Doulik  <rodo@ximian.com>
22601
22602         * cs-parser.jay: remember alias in current namespace
22603
22604         * ecore.cs (SimpleName::DoResolve): use aliases for types or
22605         namespaces
22606
22607         * class.cs (LookupAlias): lookup alias in my_namespace
22608
22609         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
22610         aliases hashtable
22611         (LookupAlias): lookup alias in this and if needed in parent
22612         namespaces
22613
22614 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
22615
22616         * support.cs: 
22617
22618         * rootcontext.cs: (ModuleBuilder) Made static, first step into
22619         making things static.  I need this to avoid passing the
22620         TypeContainer when calling ParameterType.
22621
22622         * support.cs (InternalParameters.ParameterType): Remove ugly hack
22623         that did string manipulation to compute the type and then call
22624         GetType.  Use Parameter.ParameterType instead.
22625
22626         * cs-tokenizer.cs: Consume the suffix for floating values.
22627
22628         * expression.cs (ParameterReference): figure out whether this is a
22629         reference parameter or not.  Kill an extra variable by computing
22630         the arg_idx during emission.
22631
22632         * parameter.cs (Parameters.GetParameterInfo): New overloaded
22633         function that returns whether a parameter is an out/ref value or not.
22634
22635         (Parameter.ParameterType): The type of the parameter (base,
22636         without ref/out applied).
22637
22638         (Parameter.Resolve): Perform resolution here.
22639         (Parameter.ExternalType): The full type (with ref/out applied).
22640
22641         * statement.cs (Using.Emit, Using.EmitExpression): Implement
22642         support for expressions on the using statement.
22643
22644 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
22645
22646         * statement.cs (Using.EmitLocalVariableDecls): Split the
22647         localvariable handling of the using statement.
22648
22649         (Block.EmitMeta): Keep track of variable count across blocks.  We
22650         were reusing slots on separate branches of blocks.
22651
22652         (Try.Emit): Emit the general code block, we were not emitting it. 
22653
22654         Check the type of the declaration to be an IDisposable or
22655         something that can be implicity converted to it. 
22656
22657         Emit conversions if required.
22658
22659         * ecore.cs (EmptyExpression): New utility class.
22660         (Expression.ImplicitConversionExists): New utility function.
22661
22662 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
22663
22664         * statement.cs (Using): Implement.
22665
22666         * expression.cs (LocalVariableReference): Support read only variables.
22667
22668         * statement.cs: Remove the explicit emit for the Leave opcode.
22669         (VariableInfo): Add a readonly field.
22670
22671 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
22672
22673         * ecore.cs (ConvCast): new class used to encapsulate the various
22674         explicit integer conversions that works in both checked and
22675         unchecked contexts.
22676
22677         (Expression.ConvertNumericExplicit): Use new ConvCast class to
22678         properly generate the overflow opcodes.
22679
22680 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
22681
22682         * statement.cs: The correct type for the EmptyExpression is the
22683         element_type, not the variable type.  Ravi pointed this out.
22684
22685 2001-12-04  Ravi Pratap  <ravi@ximian.com>
22686
22687         * class.cs (Method::Define): Handle PInvoke methods specially
22688         by using DefinePInvokeMethod instead of the usual one.
22689
22690         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
22691         above to do the task of extracting information and defining the method.
22692
22693 2001-12-04  Ravi Pratap  <ravi@ximian.com>
22694
22695         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
22696         of the condition for string type.
22697
22698         (Emit): Move that here. 
22699
22700         (ArrayCreation::CheckIndices): Keep string literals in their expression
22701         form.
22702
22703         (EmitDynamicInitializers): Handle strings appropriately.
22704
22705 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
22706
22707         * codegen.cs (EmitContext): Replace multiple variables with a
22708         single pointer to the current Switch statement.
22709
22710         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
22711         EmitContext.
22712
22713 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
22714
22715         * statement.cs 
22716
22717         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
22718         default'.
22719
22720         (Foreach.Emit): Foreach on arrays was not setting
22721         up the loop variables (for break/continue).
22722
22723         (GotoCase): Semi-implented.
22724
22725 2001-12-03  Ravi Pratap  <ravi@ximian.com>
22726
22727         * attribute.cs (CheckAttribute): Handle system attributes by using
22728         Attribute.GetAttributes to examine information we need.
22729
22730         (GetValidPlaces): Same here.
22731
22732         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
22733
22734         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
22735
22736         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
22737
22738         (Method::Define): Set appropriate flags if we have a DllImport attribute.
22739
22740         (Method::Emit): Handle the case when we are a PInvoke method.
22741
22742 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
22743
22744         * expression.cs: Use ResolveWithSimpleName on compound names.
22745
22746 2001-12-02  Ravi Pratap  <ravi@ximian.com>
22747
22748         * constant.cs (EmitConstant): Make sure we resolve the associated expression
22749         before trying to reduce it.
22750
22751         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
22752
22753         * constant.cs (LookupConstantValue): Implement.
22754
22755         (EmitConstant): Use the above in emitting the constant.
22756
22757         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
22758         that are user-defined by doing a LookupConstantValue on them.
22759
22760         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
22761         too, like above.
22762
22763 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
22764
22765         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
22766
22767         (BaseAccess.DoResolve): Implement.
22768
22769         (MemberAccess.DoResolve): Split this routine into a
22770         ResolveMemberAccess routine that can be used independently
22771
22772 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
22773
22774         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
22775         As that share bits of the implementation.  Is returns a boolean,
22776         while As returns the Type that is being probed.
22777
22778 2001-12-01  Ravi Pratap  <ravi@ximian.com>
22779
22780         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
22781         instead of a Literal - much easier.
22782
22783         (EnumInTransit): Remove - utterly useless :-)
22784
22785         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
22786
22787         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
22788
22789         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
22790         chain when we have no associated expression.
22791
22792 2001-11-30  Ravi Pratap  <ravi@ximian.com>
22793
22794         * constant.cs (Define): Use Location while reporting the errror.
22795
22796         Also emit a warning when 'new' is used and there is no inherited
22797         member to hide.
22798
22799         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
22800         populated.
22801
22802         (LookupEnumValue): Implement to lookup an enum member's value and define it
22803         if necessary.
22804
22805         (Populate): Re-write accordingly to use the above routine.
22806
22807 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
22808
22809         * expression.cs (This): Fix prototype for DoResolveLValue to
22810         override the base class DoResolveLValue.
22811
22812         * cs-parser.cs: Report errors cs574 and cs575 (destructor
22813         declarations) 
22814
22815         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
22816         (we need to load the address of the field here).  This fixes
22817         test-22. 
22818
22819         (FieldExpr.DoResolveLValue): Call the DoResolve
22820         function to initialize the Instance expression.
22821
22822         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
22823         correctly the GetEnumerator operation on a value type.
22824
22825         * cs-parser.jay: Add more simple parsing error catches.
22826
22827         * statement.cs (Switch): Add support for string switches.
22828         Handle null specially.
22829
22830         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
22831
22832 2001-11-28  Ravi Pratap  <ravi@ximian.com>
22833
22834         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
22835
22836         (declare_local_constant): New helper function.
22837
22838         * statement.cs (AddConstant): Keep a separate record of constants
22839
22840         (IsConstant): Implement to determine if a variable is a constant.
22841
22842         (GetConstantExpression): Implement.
22843
22844         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
22845
22846         * statement.cs (IsVariableDefined): Re-write.
22847
22848 2001-11-27  Ravi Pratap  <ravi@ximian.com>
22849
22850         * class.cs (TypeContainer::FindMembers): Look for constants
22851         in the case when we are looking for MemberTypes.Field
22852
22853         * expression.cs (MemberAccess::DoResolve): Check that in the
22854         case we are a FieldExpr and a Literal, we are not being accessed
22855         by an instance reference.
22856
22857         * cs-parser.jay (local_constant_declaration): Implement.
22858
22859         (declaration_statement): Implement for constant declarations.
22860
22861 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
22862
22863         * statement.cs (Switch): Catch double defaults.
22864
22865         (Switch): More work on the switch() statement
22866         implementation.  It works for integral values now, need to finish
22867         string support.
22868
22869
22870 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
22871
22872         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
22873         integer literals into other integer literals.  To be used by
22874         switch. 
22875
22876 2001-11-24  Ravi Pratap  <ravi@ximian.com>
22877
22878         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
22879         some memory.
22880
22881         (EmitDynamicInitializers): Cope with the above since we extract data
22882         directly from ArrayData now.
22883
22884         (ExpectInitializers): Keep track of whether initializers are mandatory
22885         or not.
22886
22887         (Bounds): Make it a hashtable to prevent the same dimension being 
22888         recorded for every element in that dimension.
22889
22890         (EmitDynamicInitializers): Fix bug which prevented the Set array method
22891         from being found.
22892
22893         Also fix bug which was causing the indices to be emitted in the reverse
22894         order.
22895
22896 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
22897
22898         * expression.cs (ArrayCreation): Implement the bits that Ravi left
22899         unfinished.  They do not work, because the underlying code is
22900         sloppy.
22901
22902 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
22903
22904         * cs-parser.jay: Remove bogus fixme.
22905
22906         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
22907         on Switch statement.
22908
22909 2001-11-23  Ravi Pratap  <ravi@ximian.com>
22910
22911         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
22912         the same. 
22913
22914         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
22915         parameter. Apparently, any expression is allowed. 
22916
22917         (ValidateInitializers): Update accordingly.
22918
22919         (CheckIndices): Fix some tricky bugs thanks to recursion.
22920
22921         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
22922         I was being completely brain-dead.
22923
22924         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
22925         and re-write acordingly.
22926
22927         (DelegateInvocation): Re-write accordingly.
22928
22929         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
22930
22931         (MakeByteBlob): Handle types more correctly.
22932
22933         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
22934         initialization from expressions but it is incomplete because I am a complete
22935         Dodo :-|
22936
22937 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
22938
22939         * statement.cs (If.Emit): Fix a bug that generated incorrect code
22940         on If.  Basically, we have to return `true' (ie, we do return to
22941         our caller) only if both branches of the if return.
22942
22943         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
22944         short-circuit operators, handle them as short circuit operators. 
22945
22946         (Cast.DoResolve): Resolve type.
22947         (Cast.Cast): Take an expression as the target type.
22948
22949         * cs-parser.jay (cast_expression): Remove old hack that only
22950         allowed a limited set of types to be handled.  Now we take a
22951         unary_expression and we resolve to a type during semantic
22952         analysis.
22953
22954         Use the grammar productions from Rhys to handle casts (this is
22955         not complete like Rhys syntax yet, we fail to handle that corner
22956         case that C# has regarding (-x), but we will get there.
22957
22958 2001-11-22  Ravi Pratap  <ravi@ximian.com>
22959
22960         * class.cs (EmitFieldInitializer): Take care of the case when we have a
22961         field which is an array type.
22962
22963         * cs-parser.jay (declare_local_variables): Support array initialization too.
22964
22965         * typemanager.cs (MakeKey): Implement.
22966
22967         (everywhere): Use the above appropriately.
22968
22969         * cs-parser.jay (for_statement): Update for array initialization while
22970         declaring variables.
22971
22972         * ecore.cs : The error message was correct, it's the variable's names that
22973         were misleading ;-) Make the code more readable.
22974
22975         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
22976         the correct type etc.
22977
22978         (ConvertExplicit): Handle Enum types by examining the underlying type.
22979
22980 2001-11-21  Ravi Pratap  <ravi@ximian.com>
22981
22982         * parameter.cs (GetCallingConvention): Always return
22983         CallingConventions.Standard for now.
22984
22985 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
22986
22987         * expression.cs (Binary.ResolveOperator): Update the values of `l'
22988         and `r' after calling DoNumericPromotions.
22989
22990         * ecore.cs: Fix error message (the types were in the wrong order).
22991
22992         * statement.cs (Foreach.ProbeCollectionType): Need to pass
22993         BindingFlags.Instance as well 
22994
22995         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
22996         implicit int literal conversion in an empty cast so that we
22997         propagate the right type upstream.
22998
22999         (UnboxCast): new class used to unbox value types.
23000         (Expression.ConvertExplicit): Add explicit type conversions done
23001         by unboxing.
23002
23003         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23004         the target type before applying the implicit LongLiterals to ULong
23005         literal cast.
23006
23007 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23008
23009         * cs-parser.jay (for_statement): Reworked the way For works: now
23010         we declare manually any variables that are introduced in
23011         for_initializer to solve the problem of having out-of-band code
23012         emition (that is what got for broken).
23013
23014         (declaration_statement): Perform the actual variable declaration
23015         that used to be done in local_variable_declaration here.
23016
23017         (local_variable_declaration): Do not declare anything, just pass
23018         the information on a DictionaryEntry
23019
23020 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23021
23022         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23023         re-write of the logic to now make it recursive.
23024
23025         (UpdateIndices): Re-write accordingly.
23026
23027         Store element data in a separate ArrayData list in the above methods.
23028
23029         (MakeByteBlob): Implement to dump the array data into a byte array.
23030
23031 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23032
23033         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23034         into CheckIndices.
23035
23036         * constant.cs (Define): Implement.
23037
23038         (EmitConstant): Re-write fully.
23039
23040         Pass in location info.
23041
23042         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23043         respectively.
23044
23045         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23046         DictionaryEntry since we need location info too.
23047
23048         (constant_declaration): Update accordingly.
23049
23050         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23051         code into another method : UpdateIndices.
23052
23053 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23054
23055         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23056         some type checking etc.
23057
23058 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23059
23060         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23061         bits to provide dimension info if the user skips doing that.
23062
23063         Update second constructor to store the rank correctly.
23064
23065 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23066
23067         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23068         and try to implement.
23069
23070         * ../errors/cs0150.cs : Add.
23071
23072         * ../errors/cs0178.cs : Add.
23073
23074 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23075
23076         * statement.cs: Implement foreach on multi-dimensional arrays. 
23077
23078         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23079         name of the params argument.
23080
23081         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23082         initializing the array.
23083
23084         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23085         we can use this elsewhere.
23086
23087         * statement.cs: Finish implementation of foreach for single
23088         dimension arrays.
23089
23090         * cs-parser.jay: Use an out-of-band stack to pass information
23091         around, I wonder why I need this.
23092
23093         foreach_block: Make the new foreach_block the current_block.
23094
23095         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23096         function used to return a static Parameters structure.  Used for
23097         empty parameters, as those are created very frequently.
23098
23099         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23100
23101 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23102
23103         * interface.cs : Default modifier is private, not public. The
23104         make verify test passes again.
23105
23106 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23107
23108         * support.cs (ReflectionParameters): Fix logic to determine
23109         whether the last parameter is a params one. Test 9 passes again.
23110
23111         * delegate.cs (Populate): Register the builders we define with
23112         RegisterParameterForBuilder. Test 19 passes again.
23113
23114         * cs-parser.jay (property_declaration): Reference $6 instead
23115         of $$ to get at the location.
23116
23117         (indexer_declaration): Similar stuff.
23118
23119         (attribute): Ditto.
23120
23121         * class.cs (Property): Register parameters for the Get and Set methods
23122         if they exist. Test 23 passes again.
23123
23124         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23125         call to EmitArguments as we are sure there aren't any params arguments. 
23126         Test 32 passes again.
23127
23128         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23129         IndexOutOfRangeException. 
23130
23131         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23132         Test 33 now passes again.
23133
23134 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23135
23136         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23137         broke a bunch of things.  Will have to come up with a better way
23138         of tracking locations.
23139
23140         * statement.cs: Implemented foreach for single dimension arrays.
23141
23142 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23143
23144         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23145         an error.  This removes the lookup from the critical path.
23146
23147         * cs-parser.jay: Removed use of temporary_loc, which is completely
23148         broken. 
23149
23150 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23151
23152         * support.cs (ReflectionParameters.ParameterModifier): Report
23153         whether the argument is a PARAMS argument or not.
23154
23155         * class.cs: Set the attribute `ParamArrayAttribute' on the
23156         parameter argument.
23157
23158         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23159         and cons_param_array_attribute (ConstructorInfo for
23160         ParamArrayAttribute)., 
23161
23162         * codegen.cs: Emit the return using the `Return' statement, that
23163         way we can report the error correctly for missing return values. 
23164
23165         * class.cs (Method.Emit): Clean up.
23166
23167         * expression.cs (Argument.Resolve): Take another argument: the
23168         location where this argument is used.  Notice that this is not
23169         part of the "Argument" class as to reduce the size of the
23170         structure (we know the approximate location anyways).
23171
23172         Test if the argument is a variable-reference, if not, then
23173         complain with a 206.
23174
23175         (Argument.Emit): Emit addresses of variables.
23176
23177         (Argument.FullDesc): Simplify.
23178
23179         (Invocation.DoResolve): Update for Argument.Resolve.
23180
23181         (ElementAccess.DoResolve): ditto.
23182
23183         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23184         method should be virtual, as this method is always virtual.
23185
23186         (NewDelegate.DoResolve): Update for Argument.Resolve.
23187
23188         * class.cs (ConstructorInitializer.DoResolve): ditto.
23189
23190         * attribute.cs (Attribute.Resolve): ditto.
23191
23192 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23193
23194         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23195
23196         * expression.cs (ParameterReference): Drop IStackStorage and implement
23197         IAssignMethod instead. 
23198
23199         (LocalVariableReference): ditto.
23200
23201         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23202         IAssignMethod instead. 
23203
23204 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23205
23206         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23207         enumerations that are used in heavily used structures derive from
23208         byte in a laughable and pathetic attempt to reduce memory usage.
23209         This is the kind of pre-optimzations that you should not do at
23210         home without adult supervision.
23211
23212         * expression.cs (UnaryMutator): New class, used to handle ++ and
23213         -- separatedly from the other unary operators.  Cleans up the
23214         code, and kills the ExpressionStatement dependency in Unary.
23215
23216         (Unary): Removed `method' and `Arguments' from this class, making
23217         it smaller, and moving it all to SimpleCall, so I can reuse this
23218         code in other locations and avoid creating a lot of transient data
23219         strucutres when not required.
23220
23221         * cs-parser.jay: Adjust for new changes.
23222
23223 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23224
23225         * enum.cs (Enum.Populate): If there is a failure during
23226         definition, return
23227
23228         * cs-parser.jay (opt_enum_base): we used to catch type errors
23229         here, but this is really incorrect.  The type error should be
23230         catched during semantic analysis.
23231
23232 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23233
23234         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23235         current_local_parameters as expected since I, in my stupidity, had forgotten
23236         to do this :-)
23237
23238         * attribute.cs (GetValidPlaces): Fix stupid bug.
23239
23240         * class.cs (Method::Emit): Perform check on applicability of attributes.
23241
23242         (Constructor::Emit): Ditto.
23243
23244         (Field::Emit): Ditto.
23245
23246         (Field.Location): Store location information.
23247
23248         (Property, Event, Indexer, Operator): Ditto.
23249
23250         * cs-parser.jay (field_declaration): Pass in location for each field.
23251
23252         * ../errors/cs0592.cs : Add.
23253
23254 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23255
23256         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23257
23258         (InitCoreTypes): Update accordingly.
23259
23260         (RegisterAttrType, LookupAttr): Implement.
23261
23262         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23263         info about the same.
23264
23265         (Resolve): Update to populate the above as necessary.
23266
23267         (Error592): Helper.
23268
23269         (GetValidPlaces): Helper to the above.
23270
23271         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
23272
23273         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
23274
23275 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23276
23277         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
23278
23279         * ../errors/cs0617.cs : Add.
23280
23281 2001-11-11  Ravi Pratap  <ravi@ximian.com>
23282
23283         * enum.cs (Emit): Rename to Populate to be more consistent with what
23284         we expect it to do and when exactly it is called.
23285
23286         * class.cs, rootcontext.cs : Update accordingly.
23287
23288         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
23289         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
23290
23291         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
23292
23293         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
23294         of a fieldinfo using the above, when dealing with a FieldBuilder.
23295
23296 2001-11-10  Ravi Pratap  <ravi@ximian.com>
23297
23298         * ../errors/cs0031.cs : Add.
23299
23300         * ../errors/cs1008.cs : Add.
23301
23302         * ../errrors/cs0543.cs : Add.
23303
23304         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
23305         enum type.
23306
23307         (FindMembers): Implement.
23308
23309         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
23310         enums and delegates too.
23311
23312         (enum_types): Rename to builder_to_enum.
23313
23314         (delegate_types): Rename to builder_to_delegate.
23315
23316         * delegate.cs (FindMembers): Implement.
23317
23318 2001-11-09  Ravi Pratap  <ravi@ximian.com>
23319
23320         * typemanager.cs (IsEnumType): Implement.
23321
23322         * enum.cs (Emit): Re-write parts to account for the underlying type
23323         better and perform checking etc.
23324
23325         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
23326         of the underlying type.
23327
23328         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
23329         value
23330
23331         * enum.cs (error31): Helper to report error #31.
23332
23333         * cs-parser.jay (enum_declaration): Store location of each member too.
23334
23335         * enum.cs (member_to_location): New hashtable. 
23336
23337         (AddEnumMember): Update location hashtable.
23338
23339         (Emit): Use the location of each member while reporting errors.
23340
23341 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23342
23343         * cs-parser.jay: A for_initializer if is a
23344         local_variable_declaration really ammount to have an implicit
23345         block with the variable declaration and no initializer for for.
23346
23347         * statement.cs (For.Emit): Cope with null initializers.
23348
23349         This fixes the infinite loop on for initializers.
23350
23351 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
23352
23353         * enum.cs: More cleanup.
23354
23355         * ecore.cs: Remove dead code.
23356
23357         * class.cs (Property.Emit): More simplification.
23358         (Event.Emit): ditto.
23359
23360         Reworked to have less levels of indentation.
23361
23362 2001-11-08  Ravi Pratap  <ravi@ximian.com>
23363
23364         * class.cs (Property): Emit attributes.
23365
23366         (Field): Ditto.
23367
23368         (Event): Ditto.
23369
23370         (Indexer): Ditto.
23371
23372         (Operator): Ditto.
23373
23374         * enum.cs (Emit): Ditto.
23375
23376         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
23377         Enums too.
23378
23379         * class.cs (Field, Event, etc.): Move attribute generation into the
23380         Emit method everywhere.
23381
23382         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
23383         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
23384         as we had no way of defining nested enums !
23385
23386         * rootcontext.cs : Adjust code accordingly.
23387
23388         * typemanager.cs (AddEnumType): To keep track of enum types separately.
23389
23390 2001-11-07  Ravi Pratap  <ravi@ximian.com>
23391
23392         * expression.cs (EvalConstantExpression): Move into ecore.cs
23393
23394         * enum.cs (Enum): Rename some members and make them public and readonly
23395         according to our convention.
23396
23397         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
23398         nothing else.
23399
23400         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
23401
23402         (Enum::Emit): Write a simple version for now which doesn't try to compute
23403         expressions. I shall modify this to be more robust in just a while.
23404
23405         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
23406
23407         (TypeContainer::CloseType): Create the Enum types too.
23408
23409         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
23410
23411         * expression.cs (EvalConstantExpression): Get rid of completely.
23412
23413         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
23414         user-defined values and other cases.
23415
23416         (IsValidEnumLiteral): Helper function.
23417
23418         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
23419         out there in the case we had a literal FieldExpr.
23420
23421         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
23422
23423         (Literalize): Revamp a bit to take two arguments.
23424
23425         (EnumLiteral): New class which derives from Literal to wrap enum literals.
23426
23427 2001-11-06  Ravi Pratap  <ravi@ximian.com>
23428
23429         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
23430
23431         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
23432
23433         (Resolve): Use the above to ensure we have proper initializers.
23434
23435 2001-11-05  Ravi Pratap  <ravi@ximian.com>
23436
23437         * expression.cs (Expression::EvalConstantExpression): New method to 
23438         evaluate constant expressions.
23439
23440         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
23441
23442 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
23443
23444         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
23445         in an array.
23446
23447         (Binary.ResolveOperator): Handle operator != (object a, object b)
23448         and operator == (object a, object b);
23449
23450         (Binary.DoNumericPromotions): Indicate whether the numeric
23451         promotion was possible.
23452
23453         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
23454         Implement.  
23455
23456         Made the ArrayAccess implement interface IAssignMethod instead of
23457         IStackStore as the order in which arguments are passed reflects
23458         this.
23459
23460         * assign.cs: Instead of using expr.ExprClass to select the way of
23461         assinging, probe for the IStackStore/IAssignMethod interfaces.
23462
23463         * typemanager.cs: Load InitializeArray definition.
23464
23465         * rootcontext.cs (RootContext.MakeStaticData): Used to define
23466         static data that can be used to initialize arrays. 
23467
23468 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
23469
23470         * expression.cs: Handle operator== and operator!= for booleans.
23471
23472         (Conditioal.Reduce): Implement reducer for the ?: operator.
23473
23474         (Conditional.Resolve): Implement dead code elimination.
23475
23476         (Binary.Resolve): Catch string literals and return a new
23477         concatenated string.
23478
23479         (Unary.Reduce): Implement reduction of unary expressions.
23480
23481         * ecore.cs: Split out the expression core handling here.
23482
23483         (Expression.Reduce): New method used to perform constant folding
23484         and CSE.  This is needed to support constant-expressions. 
23485
23486         * statement.cs (Statement.EmitBoolExpression): Pass true and false
23487         targets, and optimize for !x.
23488
23489 2001-11-04  Ravi Pratap  <ravi@ximian.com>
23490
23491         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
23492         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
23493         set custom atttributes.
23494
23495         * literal.cs (Literal::GetValue): New abstract method to return the actual
23496         value of the literal, cast as an object.
23497
23498         (*Literal): Implement GetValue method.
23499
23500         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
23501         expressions to the arraylist but objects of type Argument.
23502
23503         * class.cs (TypeContainer::Emit): Emit our attributes too.
23504
23505         (Method::Emit, Constructor::Emit): Ditto.
23506
23507         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
23508         to be ignoring earlier.
23509
23510 2001-11-03  Ravi Pratap  <ravi@ximian.com>
23511
23512         * attribute.cs (AttributeSection::Define): Implement to do the business
23513         of constructing a CustomAttributeBuilder.
23514
23515         (Attribute): New trivial class. Increases readability of code.  
23516
23517         * cs-parser.jay : Update accordingly.
23518
23519         (positional_argument_list, named_argument_list, named_argument): New rules
23520
23521         (attribute_arguments): Use the above so that we are more correct.
23522
23523 2001-11-02  Ravi Pratap  <ravi@ximian.com>
23524
23525         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
23526         to perform all checks for a method with a params parameter.
23527
23528         (Invocation::OverloadResolve): Update to use the above method and therefore
23529         cope correctly with params method invocations.
23530
23531         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
23532         params too.
23533
23534         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
23535         constructors in our parent too because we can't afford to miss out on 
23536         protected ones ;-)
23537
23538         * attribute.cs (AttributeSection): New name for the class Attribute
23539
23540         Other trivial changes to improve readability.
23541
23542         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
23543         use the new class names.
23544
23545 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23546
23547         * class.cs (Method::Define): Complete definition for params types too
23548
23549         (Indexer::Define): Ditto.
23550
23551         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
23552         Cope everywhere with a request for info about the array parameter.
23553
23554 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23555
23556         * tree.cs (RecordNamespace): Fix up to check for the correct key.
23557
23558         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
23559         local_variable_type to extract the string corresponding to the type.
23560
23561         (local_variable_type): Fixup the action to use the new helper method.
23562
23563         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
23564         go.
23565
23566         * expression.cs : Clean out code which uses the above.
23567
23568 2001-10-31  Ravi Pratap  <ravi@ximian.com>
23569
23570         * typemanager.cs (RegisterMethod): Check if we already have an existing key
23571         and bale out if necessary by returning a false.
23572
23573         (RegisterProperty): Ditto.
23574
23575         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
23576         and print out appropriate error messages.
23577
23578         * interface.cs (everywhere): Ditto.
23579
23580         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
23581         location to constructor.
23582
23583         * class.cs (Property, Event, Indexer): Update accordingly.
23584
23585         * ../errors/cs111.cs : Added.
23586
23587         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
23588         of a method, as laid down by the spec.
23589
23590         (Invocation::OverloadResolve): Use the above method.
23591
23592 2001-10-31  Ravi Pratap  <ravi@ximian.com>
23593
23594         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
23595         now take a TypeContainer and a Parameters object.
23596
23597         (ParameterData): Modify return type of ParameterModifier method to be 
23598         Parameter.Modifier and not a string.
23599
23600         (ReflectionParameters, InternalParameters): Update accordingly.
23601
23602         * expression.cs (Argument::GetParameterModifier): Same here.
23603
23604         * support.cs (InternalParameters::ParameterType): Find a better way of determining
23605         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
23606         symbol in it at all so maybe this is only for now.
23607
23608 2001-10-30  Ravi Pratap  <ravi@ximian.com>
23609
23610         * support.cs (InternalParameters): Constructor now takes an extra argument 
23611         which is the actual Parameters class.
23612
23613         (ParameterDesc): Update to provide info on ref/out modifiers.
23614
23615         * class.cs (everywhere): Update call to InternalParameters to pass in
23616         the second argument too.
23617
23618         * support.cs (ParameterData): Add ParameterModifier, which is a method 
23619         to return the modifier info [ref/out etc]
23620
23621         (InternalParameters, ReflectionParameters): Implement the above.
23622
23623         * expression.cs (Argument::ParameterModifier): Similar function to return
23624         info about the argument's modifiers.
23625
23626         (Invocation::OverloadResolve): Update to take into account matching modifiers 
23627         too.
23628
23629         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
23630         a new SetFormalParameters object which we pass to InternalParameters.
23631
23632 2001-10-30  Ravi Pratap  <ravi@ximian.com>
23633
23634         * expression.cs (NewArray): Merge into the ArrayCreation class.
23635
23636 2001-10-29  Ravi Pratap  <ravi@ximian.com>
23637
23638         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
23639         NewUserdefinedArray into one as there wasn't much of a use in having
23640         two separate ones.
23641
23642         * expression.cs (Argument): Change field's name to ArgType from Type.
23643
23644         (Type): New readonly property which returns the proper type, taking into 
23645         account ref/out modifiers.
23646
23647         (everywhere): Adjust code accordingly for the above.
23648
23649         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
23650         whether we are emitting for a ref or out parameter.
23651
23652         * expression.cs (Argument::Emit): Use the above field to set the state.
23653
23654         (LocalVariableReference::Emit): Update to honour the flag and emit the
23655         right stuff.
23656
23657         * parameter.cs (Attributes): Set the correct flags for ref parameters.
23658
23659         * expression.cs (Argument::FullDesc): New function to provide a full desc.
23660
23661         * support.cs (ParameterData): Add method ParameterDesc to the interface.
23662
23663         (ReflectionParameters, InternalParameters): Implement the above method.
23664
23665         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
23666         reporting errors.
23667
23668         (Invocation::FullMethodDesc): Ditto. 
23669
23670 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
23671
23672         * cs-parser.jay: Add extra production for the second form of array
23673         creation. 
23674
23675         * expression.cs (ArrayCreation): Update to reflect the above
23676         change. 
23677
23678         * Small changes to prepare for Array initialization.
23679
23680 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
23681
23682         * typemanager.cs (ImplementsInterface): interface might be null;
23683         Deal with this problem;
23684
23685         Also, we do store negative hits on the cache (null values), so use
23686         this instead of calling t.GetInterfaces on the type everytime.
23687
23688 2001-10-28  Ravi Pratap  <ravi@ximian.com>
23689
23690         * typemanager.cs (IsBuiltinType): New method to help determine the same.
23691
23692         * expression.cs (New::DoResolve): Get rid of array creation code and instead
23693         split functionality out into different classes.
23694
23695         (New::FormArrayType): Move into NewBuiltinArray.
23696
23697         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
23698         quite useless.
23699
23700         (NewBuiltinArray): New class to handle creation of built-in arrays.
23701
23702         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
23703         account creation of one-dimensional arrays.
23704
23705         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
23706
23707         (NewUserdefinedArray::DoResolve): Implement.
23708
23709         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
23710
23711         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
23712         we maintain inside the TypeManager. This is necessary to perform lookups on the
23713         module builder.
23714
23715         (LookupType): Update to perform GetType on the module builders too.     
23716
23717         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
23718
23719         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
23720
23721 2001-10-23  Ravi Pratap  <ravi@ximian.com>
23722
23723         * expression.cs (New::DoResolve): Implement guts of array creation.
23724
23725         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
23726
23727 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
23728
23729         * expression.cs: Fix bug I introduced lsat night that broke
23730         Delegates. 
23731
23732         (Expression.Resolve): Report a 246 error (can not resolve name)
23733         if we find a SimpleName in the stream.
23734
23735         (Expression.ResolveLValue): Ditto.
23736
23737         (Expression.ResolveWithSimpleName): This function is a variant of
23738         ResolveName, this one allows SimpleNames to be returned without a
23739         warning.  The only consumer of SimpleNames is MemberAccess
23740
23741 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
23742
23743         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
23744         might arrive here.  I have my doubts that this is correct.
23745
23746         * statement.cs (Lock): Implement lock statement.
23747
23748         * cs-parser.jay: Small fixes to support `lock' and `using'
23749
23750         * cs-tokenizer.cs: Remove extra space
23751
23752         * driver.cs: New flag --checked, allows to turn on integer math
23753         checking. 
23754
23755         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
23756         Threading.Monitor.Exit 
23757
23758 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
23759
23760         * expression.cs (IndexerAccess::DoResolveLValue): Set the
23761         Expression Class to be IndexerAccess.
23762
23763         Notice that Indexer::DoResolve sets the eclass to Value.
23764
23765 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
23766
23767         * class.cs (TypeContainer::Emit): Emit code for indexers.
23768
23769         * assign.cs (IAssignMethod): New interface implemented by Indexers
23770         and Properties for handling assignment.
23771
23772         (Assign::Emit): Simplify and reuse code. 
23773
23774         * expression.cs (IndexerAccess, PropertyExpr): Implement
23775         IAssignMethod, clean up old code. 
23776
23777 2001-10-22  Ravi Pratap  <ravi@ximian.com>
23778
23779         * typemanager.cs (ImplementsInterface): New method to determine if a type
23780         implements a given interface. Provides a nice cache too.
23781
23782         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
23783         method.
23784
23785         (ConvertReferenceExplicit): Ditto.
23786
23787         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
23788         various methods, with correct names etc.
23789
23790         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
23791         Operator.UnaryNegation.
23792
23793         * cs-parser.jay (operator_declarator): Be a little clever in the case where
23794         we have a unary plus or minus operator.
23795
23796         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
23797         UnaryMinus.
23798
23799         * everywhere : update accordingly.
23800
23801         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
23802         respectively.
23803
23804         * class.cs (Method::Define): For the case where we are implementing a method
23805         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
23806         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
23807
23808 2001-10-21  Ravi Pratap  <ravi@ximian.com>
23809
23810         * interface.cs (FindMembers): Implement to work around S.R.E
23811         lameness.
23812
23813         * typemanager.cs (IsInterfaceType): Implement.
23814
23815         (FindMembers): Update to handle interface types too.
23816
23817         * expression.cs (ImplicitReferenceConversion): Re-write bits which
23818         use IsAssignableFrom as that is not correct - it doesn't work.
23819
23820         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
23821         and accordingly override EmitStatement.
23822
23823         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
23824         using the correct logic :-)
23825
23826 2001-10-19  Ravi Pratap  <ravi@ximian.com>
23827
23828         * ../errors/cs-11.cs : Add to demonstrate error -11 
23829
23830 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
23831
23832         * assign.cs (Assign::Resolve): Resolve right hand side first, and
23833         then pass this as a hint to ResolveLValue.
23834
23835         * expression.cs (FieldExpr): Add Location information
23836
23837         (FieldExpr::LValueResolve): Report assignment to readonly
23838         variable. 
23839
23840         (Expression::ExprClassFromMemberInfo): Pass location information.
23841
23842         (Expression::ResolveLValue): Add new method that resolves an
23843         LValue. 
23844
23845         (Expression::DoResolveLValue): Default invocation calls
23846         DoResolve. 
23847
23848         (Indexers): New class used to keep track of indexers in a given
23849         Type. 
23850
23851         (IStackStore): Renamed from LValue, as it did not really describe
23852         what this did.  Also ResolveLValue is gone from this interface and
23853         now is part of Expression.
23854
23855         (ElementAccess): Depending on the element access type
23856
23857         * typemanager.cs: Add `indexer_name_type' as a Core type
23858         (System.Runtime.CompilerServices.IndexerNameAttribute)
23859
23860         * statement.cs (Goto): Take a location.
23861
23862 2001-10-18  Ravi Pratap  <ravi@ximian.com>
23863
23864         * delegate.cs (Delegate::VerifyDelegate): New method to verify
23865         if two delegates are compatible.
23866
23867         (NewDelegate::DoResolve): Update to take care of the case when
23868         we instantiate a delegate from another delegate.
23869
23870         * typemanager.cs (FindMembers): Don't even try to look up members
23871         of Delegate types for now.
23872
23873 2001-10-18  Ravi Pratap  <ravi@ximian.com>
23874
23875         * delegate.cs (NewDelegate): New class to take care of delegate
23876         instantiation.
23877
23878         * expression.cs (New): Split the delegate related code out into 
23879         the NewDelegate class.
23880
23881         * delegate.cs (DelegateInvocation): New class to handle delegate 
23882         invocation.
23883
23884         * expression.cs (Invocation): Split out delegate related code into
23885         the DelegateInvocation class.
23886
23887 2001-10-17  Ravi Pratap  <ravi@ximian.com>
23888
23889         * expression.cs (New::DoResolve): Implement delegate creation fully
23890         and according to the spec.
23891
23892         (New::DoEmit): Update to handle delegates differently.
23893
23894         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
23895         because of which we were printing out arguments in reverse order !
23896
23897         * delegate.cs (VerifyMethod): Implement to check if the given method
23898         matches the delegate.
23899
23900         (FullDelegateDesc): Implement.
23901
23902         (VerifyApplicability): Implement.
23903
23904         * expression.cs (Invocation::DoResolve): Update to accordingly handle
23905         delegate invocations too.
23906
23907         (Invocation::Emit): Ditto.
23908
23909         * ../errors/cs1593.cs : Added.
23910
23911         * ../errors/cs1594.cs : Added.
23912
23913         * delegate.cs (InstanceExpression, TargetMethod): New properties.
23914
23915 2001-10-16  Ravi Pratap  <ravi@ximian.com>
23916
23917         * typemanager.cs (intptr_type): Core type for System.IntPtr
23918
23919         (InitCoreTypes): Update for the same.
23920
23921         (iasyncresult_type, asynccallback_type): Ditto.
23922
23923         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
23924         correct.
23925
23926         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
23927         too.
23928
23929         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
23930         the builders for the 4 members of a delegate type :-)
23931
23932         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
23933         type.
23934
23935         * expression.cs (New::DoResolve): Implement guts for delegate creation.
23936
23937         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
23938
23939 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
23940
23941         * statement.cs (Break::Emit): Implement.   
23942         (Continue::Emit): Implement.
23943
23944         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
23945         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
23946         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
23947         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
23948         end loop
23949
23950         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
23951         properties that track the label for the current loop (begin of the
23952         loop and end of the loop).
23953
23954 2001-10-15  Ravi Pratap  <ravi@ximian.com>
23955
23956         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
23957         use of emitting anything at all.
23958
23959         * class.cs, rootcontext.cs : Get rid of calls to the same.
23960
23961         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
23962
23963         (Populate): Define the constructor correctly and set the implementation
23964         attributes.
23965
23966         * typemanager.cs (delegate_types): New hashtable to hold delegates that
23967         have been defined.
23968
23969         (AddDelegateType): Implement.
23970
23971         (IsDelegateType): Implement helper method.
23972
23973         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
23974
23975         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
23976         and accordingly handle it.
23977
23978         * delegate.cs (Populate): Take TypeContainer argument.
23979         Implement bits to define the Invoke method. However, I still haven't figured out
23980         how to take care of the native int bit :-(
23981
23982         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
23983         Qualify the name of the delegate, not its return type !
23984
23985         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
23986         conversion.
23987
23988         (StandardConversionExists): Checking for array types turns out to be recursive.
23989
23990         (ConvertReferenceExplicit): Implement array conversion.
23991
23992         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
23993
23994 2001-10-12  Ravi Pratap  <ravi@ximian.com>
23995
23996         * cs-parser.jay (delegate_declaration): Store the fully qualified
23997         name as it is a type declaration.
23998
23999         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24000         readonly.
24001
24002         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24003         as TypeContainer::DefineType.
24004
24005         (Populate): Method in which all the definition of the various methods (Invoke)
24006         etc is done.
24007
24008         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24009         see.
24010
24011         (CloseDelegate): Finally creates the delegate.
24012
24013         * class.cs (TypeContainer::DefineType): Update to define delegates.
24014         (Populate, Emit and CloseType): Do the same thing here too.
24015
24016         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24017         delegates in all these operations.
24018
24019 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24020
24021         * expression.cs: LocalTemporary: a new expression used to
24022         reference a temporary that has been created.
24023
24024         * assign.cs: Handle PropertyAccess back here, so that we can
24025         provide the proper semantic access to properties.
24026
24027         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24028         a few more explicit conversions. 
24029
24030         * modifiers.cs: `NEW' modifier maps to HideBySig.
24031
24032         * expression.cs (PropertyExpr): Make this into an
24033         ExpressionStatement, and support the EmitStatement code path. 
24034
24035         Perform get/set error checking, clean up the interface.
24036
24037         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24038         them into toplevel access objects.
24039
24040 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24041
24042         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24043         SRE.
24044
24045         * typemanager.cs: Keep track here of our PropertyBuilders again to
24046         work around lameness in SRE.
24047
24048 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24049
24050         * expression.cs (LValue::LValueResolve): New method in the
24051         interface, used to perform a second resolution pass for LValues. 
24052
24053         (This::DoResolve): Catch the use of this in static methods.
24054
24055         (This::LValueResolve): Implement.
24056
24057         (This::Store): Remove warning, assigning to `this' in structures
24058         is 
24059
24060         (Invocation::Emit): Deal with invocation of
24061         methods on value types.  We need to pass the address to structure
24062         methods rather than the object itself.  (The equivalent code to
24063         emit "this" for structures leaves the entire structure on the
24064         stack instead of a pointer to it). 
24065
24066         (ParameterReference::DoResolve): Compute the real index for the
24067         argument based on whether the method takes or not a `this' pointer
24068         (ie, the method is static).
24069
24070         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24071         value types returned from functions when we need to invoke a
24072         method on the sturcture.
24073
24074
24075 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24076
24077         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24078         defining the type in the Modulebuilder or Typebuilder. This is to take
24079         care of nested types which need to be defined on the TypeBuilder using
24080         DefineNestedMethod.
24081
24082         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24083         methods in RootContext, only ported to be part of TypeContainer.
24084
24085         (TypeContainer::GetInterfaceOrClass): Ditto.
24086
24087         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24088
24089         * interface.cs (Interface::DefineInterface): New method. Does exactly
24090         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24091         too.
24092
24093         (Interface::GetInterfaces): Move from RootContext here and port.
24094
24095         (Interface::GetInterfaceByName): Same here.
24096
24097         * rootcontext.cs (ResolveTree): Re-write.
24098
24099         (PopulateTypes): Re-write.
24100
24101         * class.cs (TypeContainer::Populate): Populate nested types too.
24102         (TypeContainer::Emit): Emit nested members too.
24103
24104         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24105         instead just use the name argument passed in as it is already fully
24106         qualified.
24107
24108         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24109         to TypeContainer mapping to see if a type is user-defined.
24110
24111         * class.cs (TypeContainer::CloseType): Implement. 
24112
24113         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24114         the default constructor.
24115
24116         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24117         twice.
24118
24119         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24120
24121         * interface.cs (CloseType): Create the type here.
24122
24123         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24124         the hierarchy.
24125
24126         Remove all the methods which are now in TypeContainer.
24127
24128 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24129
24130         * delegate.cs (Define): Re-write bits to define the delegate
24131         correctly.
24132
24133 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24134
24135         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24136
24137         * expression.cs (ImplicitReferenceConversion): handle null as well
24138         as a source to convert to any reference type.
24139
24140         * statement.cs (Return): Perform any implicit conversions to
24141         expected return type.  
24142
24143         Validate use of return statement.  
24144
24145         * codegen.cs (EmitContext): Pass the expected return type here.
24146
24147         * class.cs (Method, Constructor, Property): Pass expected return
24148         type to EmitContext.
24149
24150 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24151
24152         * expression.cs: Make DoResolve take an EmitContext instead of a
24153         TypeContainer.
24154
24155         Replaced `l' and `location' for `loc', for consistency.
24156
24157         (Error, Warning): Remove unneeded Tc argument.
24158
24159         * assign.cs, literal.cs, constant.cs: Update to new calling
24160         convention. 
24161
24162         * codegen.cs: EmitContext now contains a flag indicating whether
24163         code is being generated in a static method or not.
24164
24165         * cs-parser.jay: DecomposeQI, new function that replaces the old
24166         QualifiedIdentifier.  Now we always decompose the assembled
24167         strings from qualified_identifier productions into a group of
24168         memberaccesses.
24169
24170 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24171
24172         * rootcontext.cs: Deal with field-less struct types correctly now
24173         by passing the size option to Define Type.
24174
24175         * class.cs: Removed hack that created one static field. 
24176
24177 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24178
24179         * statement.cs: Moved most of the code generation here. 
24180
24181 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24182
24183         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24184         seem very right.
24185
24186         (ElementAccess): Remove useless bits for now - keep checks as the spec
24187         says.
24188
24189 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24190
24191         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24192         and start performing checks according to the spec.
24193
24194 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24195
24196         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24197         rank_specifiers instead.
24198
24199         (rank_specifiers): Change the order in which the rank specifiers are stored
24200
24201         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24202
24203         * expression.cs (ElementAccess): Implement the LValue interface too.
24204
24205 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24206
24207         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24208         except that user defined conversions are not included.
24209
24210         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24211         perform the conversion of the return type, if necessary.
24212
24213         (New::DoResolve): Check whether we are creating an array or an object
24214         and accordingly do the needful.
24215
24216         (New::Emit): Same here.
24217
24218         (New::DoResolve): Implement guts of array creation.
24219
24220         (New::FormLookupType): Helper function.
24221
24222 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24223
24224         * codegen.cs: Removed most of the code generation here, and move the
24225         corresponding code generation bits to the statement classes. 
24226
24227         Added support for try/catch/finalize and throw.
24228
24229         * cs-parser.jay: Added support for try/catch/finalize.
24230
24231         * class.cs: Catch static methods having the flags override,
24232         virtual or abstract.
24233
24234         * expression.cs (UserCast): This user cast was not really doing
24235         what it was supposed to do.  Which is to be born in fully resolved
24236         state.  Parts of the resolution were being performed at Emit time! 
24237
24238         Fixed this code.
24239
24240 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24241
24242         * expression.cs: Implicity convert the result from UserCast.
24243
24244 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24245
24246         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24247         prevented it from working correctly. 
24248
24249         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24250         merely ConvertImplicit.
24251
24252 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24253
24254         * typemanager.cs: Make the LookupTypeContainer function static,
24255         and not per-instance.  
24256
24257         * class.cs: Make static FindMembers (the one that takes a Type
24258         argument). 
24259
24260         * codegen.cs: Add EmitForeach here.
24261
24262         * cs-parser.jay: Make foreach a toplevel object instead of the
24263         inline expansion, as we need to perform semantic analysis on it. 
24264
24265 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24266
24267         * expression.cs (Expression::ImplicitUserConversion): Rename to
24268         UserDefinedConversion.
24269
24270         (Expression::UserDefinedConversion): Take an extra argument specifying 
24271         whether we look for explicit user conversions too.
24272
24273         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
24274
24275         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
24276
24277         (ExplicitUserConversion): Make it a call to UserDefinedConversion
24278         with the appropriate arguments.
24279
24280         * cs-parser.jay (cast_expression): Record location too.
24281
24282         * expression.cs (Cast): Record location info.
24283
24284         (Expression::ConvertExplicit): Take location argument.
24285
24286         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
24287         to determine if we are doing explicit conversions.
24288
24289         (UserCast::Emit): Update accordingly.
24290
24291         (Expression::ConvertExplicit): Report an error if everything fails.
24292
24293         * ../errors/cs0030.cs : Add.
24294
24295 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
24296
24297         * modifiers.cs: If the ABSTRACT keyword is present, also set the
24298         virtual and newslot bits. 
24299
24300         * class.cs (TypeContainer::RegisterRequiredImplementations):
24301         Record methods we need.
24302
24303         (TypeContainer::MakeKey): Helper function to make keys for
24304         MethodBases, since the Methodbase key is useless.
24305
24306         (TypeContainer::Populate): Call RegisterRequiredImplementations
24307         before defining the methods.   
24308
24309         Create a mapping for method_builders_to_methods ahead of time
24310         instead of inside a tight loop.
24311
24312         (::RequireMethods):  Accept an object as the data to set into the
24313         hashtable so we can report interface vs abstract method mismatch.
24314
24315 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24316
24317         * report.cs: Make all of it static.
24318
24319         * rootcontext.cs: Drop object_type and value_type computations, as
24320         we have those in the TypeManager anyways.
24321
24322         Drop report instance variable too, now it is a global.
24323
24324         * driver.cs: Use try/catch on command line handling.
24325
24326         Add --probe option to debug the error reporting system with a test
24327         suite. 
24328
24329         * report.cs: Add support for exiting program when a probe
24330         condition is reached.
24331
24332 2001-10-03  Ravi Pratap  <ravi@ximian.com>
24333
24334         * expression.cs (Binary::DoNumericPromotions): Fix the case when
24335         we do a forcible conversion regardless of type, to check if 
24336         ForceConversion returns a null.
24337
24338         (Binary::error19): Use location to report error.
24339
24340         (Unary::error23): Use location here too.
24341
24342         * ../errors/cs0019.cs : Check in.
24343
24344         * ../errors/cs0023.cs : Check in.
24345
24346         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
24347         case of a non-null MethodInfo object with a length of 0 !
24348
24349         (Binary::ResolveOperator): Flag error if overload resolution fails to find
24350         an applicable member - according to the spec :-)
24351         Also fix logic to find members in base types.
24352
24353         (Unary::ResolveOperator): Same here.
24354
24355         (Unary::report23): Change name to error23 and make first argument a TypeContainer
24356         as I was getting thoroughly confused between this and error19 :-)
24357
24358         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
24359         (::FindMostEncompassedType): Implement.
24360         (::FindMostEncompassingType): Implement.
24361         (::StandardConversionExists): Implement.
24362
24363         (UserImplicitCast): Re-vamp. We now need info about most specific
24364         source and target types so that we can do the necessary conversions.
24365
24366         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
24367         mathematical union with no duplicates.
24368
24369 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24370
24371         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
24372         in order from base classes to child classes, so that we can in
24373         child classes look up in our parent for method names and
24374         attributes (required for handling abstract, virtual, new, override
24375         constructs: we need to instrospect our base class, and if we dont
24376         populate the classes in order, the introspection might be
24377         incorrect.  For example, a method could query its parent before
24378         the parent has any methods and would determine that the parent has
24379         no abstract methods (while it could have had them)).
24380
24381         (RootContext::CreateType): Record the order in which we define the
24382         classes.
24383
24384 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
24385
24386         * class.cs (TypeContainer::Populate): Also method definitions can
24387         fail now, keep track of this.
24388
24389         (TypeContainer::FindMembers): Implement support for
24390         DeclaredOnly/noDeclaredOnly flag.
24391
24392         (Constructor::Emit) Return the ConstructorBuilder.
24393
24394         (Method::Emit) Return the MethodBuilder. 
24395         Check for abstract or virtual methods to be public.
24396
24397         * rootcontext.cs (RootContext::CreateType): Register all the
24398         abstract methods required for the class to be complete and the
24399         interface methods that must be implemented. 
24400
24401         * cs-parser.jay: Report error 501 (method requires body if it is
24402         not marked abstract or extern).
24403
24404         * expression.cs (TypeOf::Emit): Implement.
24405
24406         * typemanager.cs: runtime_handle_type, new global type.
24407
24408         * class.cs (Property::Emit): Generate code for properties.
24409
24410 2001-10-02  Ravi Pratap  <ravi@ximian.com>
24411
24412         * expression.cs (Unary::ResolveOperator): Find operators on base type
24413         too - we now conform exactly to the spec.
24414
24415         (Binary::ResolveOperator): Same here.
24416
24417         * class.cs (Operator::Define): Fix minor quirk in the tests.
24418
24419         * ../errors/cs0215.cs : Added.
24420
24421         * ../errors/cs0556.cs : Added.
24422
24423         * ../errors/cs0555.cs : Added.
24424
24425 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24426
24427         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
24428         single integer which is really efficient
24429
24430 2001-10-01  Ravi Pratap  <ravi@ximian.com>
24431
24432         *  expression.cs (Expression::ImplicitUserConversion): Use location
24433         even in the case when we are examining True operators.
24434  
24435         * class.cs (Operator::Define): Perform extensive checks to conform
24436         with the rules for operator overloading in the spec.
24437
24438         * expression.cs (Expression::ImplicitReferenceConversion): Implement
24439         some of the other conversions mentioned in the spec.
24440
24441         * typemanager.cs (array_type): New static member for the System.Array built-in
24442         type.
24443
24444         (cloneable_interface): For System.ICloneable interface.
24445
24446         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
24447         we start resolving the tree and populating types.
24448
24449         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
24450  
24451 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24452
24453         * expression.cs (Expression::ExprClassFromMemberInfo,
24454         Expression::Literalize): Create literal expressions from
24455         FieldInfos which are literals.
24456
24457         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
24458         type casts, because they were wrong.  The test suite in tests
24459         caught these ones.
24460
24461         (ImplicitNumericConversion): ushort to ulong requires a widening
24462         cast. 
24463
24464         Int32 constant to long requires widening cast as well.
24465
24466         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
24467         for integers because the type on the stack is not i4.
24468
24469 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
24470
24471         * expression.cs (report118): require location argument. 
24472
24473         * parameter.cs: Do not dereference potential null value.
24474
24475         * class.cs: Catch methods that lack the `new' keyword when
24476         overriding a name.  Report warnings when `new' is used without
24477         anything being there to override.
24478
24479         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
24480
24481         * class.cs: Only add constructor to hashtable if it is non-null
24482         (as now constructors can fail on define).
24483
24484         (TypeManager, Class, Struct): Take location arguments.
24485
24486         Catch field instance initialization in structs as errors.
24487
24488         accepting_filter: a new filter for FindMembers that is static so
24489         that we dont create an instance per invocation.
24490
24491         (Constructor::Define): Catch errors where a struct constructor is
24492         parameterless 
24493
24494         * cs-parser.jay: Pass location information for various new
24495         constructs. 
24496
24497         * delegate.cs (Delegate): take a location argument.
24498
24499         * driver.cs: Do not call EmitCode if there were problesm in the
24500         Definition of the types, as many Builders wont be there. 
24501
24502         * decl.cs (Decl::Decl): Require a location argument.
24503
24504         * cs-tokenizer.cs: Handle properly hex constants that can not fit
24505         into integers, and find the most appropiate integer for it.
24506
24507         * literal.cs: Implement ULongLiteral.
24508
24509         * rootcontext.cs: Provide better information about the location of
24510         failure when CreateType fails.
24511
24512 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
24513
24514         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
24515         as well.
24516
24517         * expression.cs (Binary::CheckShiftArguments): Add missing type
24518         computation.
24519         (Binary::ResolveOperator): Add type to the logical and and logical
24520         or, Bitwise And/Or and Exclusive Or code paths, it was missing
24521         before.
24522
24523         (Binary::DoNumericPromotions): In the case where either argument
24524         is ulong (and most signed types combined with ulong cause an
24525         error) perform implicit integer constant conversions as well.
24526
24527 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
24528
24529         * expression.cs (UserImplicitCast): Method should always be
24530         non-null. 
24531         (Invocation::BetterConversion): Simplified test for IntLiteral.
24532
24533         (Expression::ImplicitNumericConversion): Split this routine out.
24534         Put the code that performs implicit constant integer conversions
24535         here. 
24536
24537         (Expression::Resolve): Become a wrapper around DoResolve so we can
24538         check eclass and type being set after resolve.
24539
24540         (Invocation::Badness): Remove this dead function
24541
24542         (Binary::ResolveOperator): Do not compute the expensive argumnets
24543         unless we have a union for it.
24544
24545         (Probe::Emit): Is needs to do an isinst and then
24546         compare against null.
24547
24548         (::CanConvert): Added Location argument.  If the Location argument
24549         is null (Location.Null), then we do not report errors.  This is
24550         used by the `probe' mechanism of the Explicit conversion.  We do
24551         not want to generate an error for something that the user
24552         explicitly requested to be casted.  But the pipeline for an
24553         explicit cast first tests for potential implicit casts.
24554
24555         So for now, if the Location is null, it means `Probe only' to
24556         avoid adding another argument.   Might have to revise this
24557         strategy later.
24558
24559         (ClassCast): New class used to type cast objects into arbitrary
24560         classes (used in Explicit Reference Conversions).
24561
24562         Implement `as' as well.
24563
24564         Reverted all the patches from Ravi below: they were broken:
24565
24566                 * The use of `level' as a mechanism to stop recursive
24567                   invocations is wrong.  That was there just to catch the
24568                   bug with a strack trace but not as a way of addressing
24569                   the problem.
24570
24571                   To fix the problem we have to *understand* what is going
24572                   on and the interactions and come up with a plan, not
24573                   just get things going.
24574
24575                 * The use of the type conversion cache that I proposed
24576                   last night had an open topic: How does this work across
24577                   protection domains.  A user defined conversion might not
24578                   be public in the location where we are applying the
24579                   conversion, a different conversion might be selected
24580                   (ie, private A->B (better) but public B->A (worse),
24581                   inside A, A->B applies, but outside it, B->A will
24582                   apply).
24583
24584                 * On top of that (ie, even if the above is solved),
24585                   conversions in a cache need to be abstract.  Ie, `To
24586                   convert from an Int to a Short use an OpcodeCast', not
24587                   `To convert from an Int to a Short use the OpcodeCast on
24588                   the variable 5' (which is what this patch was doing).
24589
24590 2001-09-28  Ravi Pratap  <ravi@ximian.com>
24591
24592         * expression.cs (Invocation::ConversionExists): Re-write to use
24593         the conversion cache
24594
24595         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
24596         cache all conversions done, not just user-defined ones.
24597
24598         (Invocation::BetterConversion): The real culprit. Use ConversionExists
24599         to determine if a conversion exists instead of acutually trying to 
24600         perform the conversion. It's faster too.
24601
24602         (Expression::ConvertExplicit): Modify to use ConversionExists to check
24603         and only then attempt the implicit conversion.
24604
24605 2001-09-28  Ravi Pratap  <ravi@ximian.com>
24606
24607         * expression.cs (ConvertImplicit): Use a cache for conversions
24608         already found. Check level of recursion and bail out if necessary.
24609
24610 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
24611
24612         * typemanager.cs (string_concat_string_string, string_concat_object_object):
24613         Export standard methods that we expect for string operations.
24614
24615         * statement.cs (Block::UsageWarning): Track usage of variables and
24616         report the errors for not used variables.
24617
24618         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
24619         operator. 
24620
24621 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
24622
24623         * codegen.cs: remove unnneded code 
24624
24625         * expression.cs: Removed BuiltinTypeAccess class
24626
24627         Fix the order in which implicit conversions are
24628         done.  
24629
24630         The previous fixed dropped support for boxed conversions (adding a
24631         test to the test suite now)
24632
24633         (UserImplicitCast::CanConvert): Remove test for source being null,
24634         that code is broken.  We should not feed a null to begin with, if
24635         we do, then we should track the bug where the problem originates
24636         and not try to cover it up here.
24637
24638         Return a resolved expression of type UserImplicitCast on success
24639         rather than true/false.  Ravi: this is what I was talking about,
24640         the pattern is to use a static method as a "constructor" for
24641         objects. 
24642
24643         Also, do not create arguments until the very last minute,
24644         otherwise we always create the arguments even for lookups that
24645         will never be performed. 
24646
24647         (UserImplicitCast::Resolve): Eliminate, objects of type
24648         UserImplicitCast are born in a fully resolved state. 
24649
24650         * typemanager.cs (InitCoreTypes): Init also value_type
24651         (System.ValueType). 
24652
24653         * expression.cs (Cast::Resolve): First resolve the child expression.
24654
24655         (LValue): Add new method AddressOf to be used by
24656         the `&' operator.  
24657
24658         Change the argument of Store to take an EmitContext instead of an
24659         ILGenerator, because things like FieldExpr need to be able to call
24660         their children expression to generate the instance code. 
24661
24662         (Expression::Error, Expression::Warning): Sugar functions for
24663         reporting errors.
24664
24665         (Expression::MemberLookup): Accept a TypeContainer instead of a
24666         Report as the first argument.
24667
24668         (Expression::ResolvePrimary): Killed.  I still want to improve
24669         this as currently the code is just not right.
24670
24671         (Expression::ResolveMemberAccess): Simplify, but it is still
24672         wrong. 
24673
24674         (Unary::Resolve): Catch errors in AddressOf operators.
24675
24676         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
24677         index to a byte for the short-version, or the compiler will choose
24678         the wrong Emit call, which generates the wrong data.
24679
24680         (ParameterReference::Emit, ::Store): same.
24681
24682         (FieldExpr::AddressOf): Implement.
24683
24684         * typemanager.cs: TypeManager: made public variable instead of
24685         property.
24686
24687         * driver.cs: document --fatal.
24688
24689         * report.cs (ErrorMessage, WarningMessage): new names for the old
24690         Error and Warning classes.
24691
24692         * cs-parser.jay (member_access): Turn built-in access to types
24693         into a normal simplename
24694
24695 2001-09-27  Ravi Pratap  <ravi@ximian.com>
24696
24697         * expression.cs (Invocation::BetterConversion): Fix to cope
24698         with q being null, since this was introducing a bug.
24699
24700         * expression.cs (ConvertImplicit): Do built-in conversions first.
24701
24702 2001-09-27  Ravi Pratap  <ravi@ximian.com>
24703
24704         * expression.cs (UserImplicitCast::Resolve): Fix bug.
24705
24706 2001-09-27  Ravi Pratap  <ravi@ximian.com>
24707
24708         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
24709         I had introduced long ago (what's new ?).
24710
24711         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
24712         the work of all the checking. 
24713         (ConvertImplicit): Call CanConvert and only then create object if necessary.
24714         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
24715
24716         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
24717         that is the right way. 
24718
24719         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
24720         overloading resolution. Use everywhere instead of cutting and pasting code.
24721
24722         (Binary::ResolveOperator): Use MakeUnionSet.
24723
24724         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
24725         we have to convert to bool types. Not complete yet.
24726
24727 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
24728
24729         * typemanager.cs (TypeManager::CSharpName): support ushort.
24730
24731         * expression.cs (Expression::TryImplicitIntConversion): Attempts
24732         to provide an expression that performsn an implicit constant int
24733         conversion (section 6.1.6).
24734         (Expression::ConvertImplicitRequired): Reworked to include
24735         implicit constant expression conversions.
24736
24737         (Expression::ConvertNumericExplicit): Finished.
24738
24739         (Invocation::Emit): If InstanceExpression is null, then it means
24740         that we perform a call on this.
24741
24742 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
24743
24744         * expression.cs (Unary::Emit): Remove some dead code.
24745         (Probe): Implement Resolve and Emit for `is'.
24746         (Expression::ConvertImplicitRequired): Attempt to do constant
24747         expression conversions here.  Maybe should be moved to
24748         ConvertImplicit, but I am not sure.
24749         (Expression::ImplicitLongConstantConversionPossible,
24750         Expression::ImplicitIntConstantConversionPossible): New functions
24751         that tell whether is it possible to apply an implicit constant
24752         expression conversion.
24753
24754         (ConvertNumericExplicit): Started work on explicit numeric
24755         conversions.
24756
24757         * cs-parser.jay: Update operator constants.
24758
24759         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
24760         (Parameters::GetSignature): Hook up VerifyArgs here.
24761         (Parameters::VerifyArgs): Verifies that no two arguments have the
24762         same name. 
24763
24764         * class.cs (Operator): Update the operator names to reflect the
24765         ones that the spec expects (as we are just stringizing the
24766         operator names).
24767
24768         * expression.cs (Unary::ResolveOperator): Fix bug: Use
24769         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
24770         previous usage did only work for our methods.
24771         (Expression::ConvertImplicit): Handle decimal implicit numeric
24772         conversions as well.
24773         (Expression::InternalTypeConstructor): Used to invoke constructors
24774         on internal types for default promotions.
24775
24776         (Unary::Emit): Implement special handling for the pre/post
24777         increment/decrement for overloaded operators, as they need to have
24778         the same semantics as the other operators.
24779
24780         (Binary::ResolveOperator): ditto.
24781         (Invocation::ConversionExists): ditto.
24782         (UserImplicitCast::Resolve): ditto.
24783
24784 2001-09-26  Ravi Pratap  <ravi@ximian.com>
24785
24786         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
24787         operator, return after emitting body. Regression tests pass again !
24788
24789         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
24790         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
24791         (Invocation::OverloadResolve): Ditto.
24792         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
24793
24794         * everywhere : update calls to the above methods accordingly.
24795
24796 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
24797
24798         * assign.cs (Assign): Make it inherit from ExpressionStatement.
24799
24800         * expression.cs (ExpressionStatement): New base class used for
24801         expressions that can appear in statements, so that we can provide
24802         an alternate path to generate expression that do not leave a value
24803         on the stack.
24804
24805         (Expression::Emit, and all the derivatives): We no longer return
24806         whether a value is left on the stack or not.  Every expression
24807         after being emitted leaves a single value on the stack.
24808
24809         * codegen.cs (EmitContext::EmitStatementExpression): Use the
24810         facilties of ExpressionStatement if possible.
24811
24812         * cs-parser.jay: Update statement_expression.
24813
24814 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
24815
24816         * driver.cs: Change the wording of message
24817
24818 2001-09-25  Ravi Pratap  <ravi@ximian.com>
24819
24820         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
24821         the type of the expression to the return type of the method if
24822         we have an overloaded operator match ! The regression tests pass again !
24823         (Unary::ResolveOperator): Ditto.
24824
24825         * expression.cs (Invocation::ConversionExists): Correct the member lookup
24826         to find "op_Implicit", not "implicit" ;-)
24827         (UserImplicitCast): New class to take care of user-defined implicit conversions.
24828         (ConvertImplicit, ForceConversion): Take TypeContainer argument
24829
24830         * everywhere : Correct calls to the above accordingly.
24831
24832         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
24833         (ConvertImplicit): Do user-defined conversion if it exists.
24834
24835 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
24836
24837         * assign.cs: track location.
24838         (Resolve): Use implicit conversions on assignment.
24839
24840         * literal.cs: Oops.  Not good, Emit of short access values should
24841         pass (Bytes) or the wrong argument will be selected.
24842
24843         * expression.cs (Unary::Emit): Emit code for -expr.
24844
24845         (Unary::ResolveOperator): Handle `Substract' for non-constants
24846         (substract from zero from the non-constants).
24847         Deal with Doubles as well. 
24848
24849         (Expression::ConvertImplicitRequired): New routine that reports an
24850         error if no implicit conversion exists. 
24851
24852         (Invocation::OverloadResolve): Store the converted implicit
24853         expressions if we make them
24854
24855 2001-09-24  Ravi Pratap  <ravi@ximian.com>
24856
24857         * class.cs (ConstructorInitializer): Take a Location argument.
24858         (ConstructorBaseInitializer): Same here.
24859         (ConstructorThisInitializer): Same here.
24860
24861         * cs-parser.jay : Update all calls accordingly.
24862
24863         * expression.cs (Unary, Binary, New): Take location argument.
24864         Update accordingly everywhere.
24865
24866         * cs-parser.jay : Update all calls to the above to take a location
24867         argument.
24868
24869         * class.cs : Ditto.
24870
24871 2001-09-24  Ravi Pratap  <ravi@ximian.com>
24872
24873         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
24874         (Invocation::BetterConversion): Same here
24875         (Invocation::ConversionExists): Ditto.
24876
24877         (Invocation::ConversionExists): Implement.
24878
24879 2001-09-22  Ravi Pratap  <ravi@ximian.com>
24880
24881         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
24882         Also take an additional TypeContainer argument.
24883
24884         * All over : Pass in TypeContainer as argument to OverloadResolve.
24885
24886         * typemanager.cs (CSharpName): Update to check for the string type and return
24887         that too.
24888
24889         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
24890         a given method.
24891
24892 2001-09-21  Ravi Pratap  <ravi@ximian.com>
24893
24894         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
24895         (Invocation::BetterFunction): Implement.
24896         (Invocation::BetterConversion): Implement.
24897         (Invocation::ConversionExists): Skeleton, no implementation yet.
24898
24899         Okay, things work fine !
24900
24901 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
24902
24903         * typemanager.cs: declare and load enum_type, delegate_type and
24904         void_type. 
24905
24906         * expression.cs (Expression::Emit): Now emit returns a value that
24907         tells whether a value is left on the stack or not.  This strategy
24908         might be reveted tomorrow with a mechanism that would address
24909         multiple assignments.
24910         (Expression::report118): Utility routine to report mismatches on
24911         the ExprClass.
24912
24913         (Unary::Report23): Report impossible type/operator combination
24914         utility function.
24915
24916         (Unary::IsIncrementableNumber): Whether the type can be
24917         incremented or decremented with add.
24918         (Unary::ResolveOperator): Also allow enumerations to be bitwise
24919         complemented. 
24920         (Unary::ResolveOperator): Implement ++, !, ~,
24921
24922         (Invocation::Emit): Deal with new Emit convetion.
24923
24924         * All Expression derivatives: Updated their Emit method to return
24925         whether they leave values on the stack or not.
24926
24927         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
24928         stack for expressions that are statements. 
24929
24930 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
24931
24932         * expression.cs (LValue): New interface.  Must be implemented by
24933         LValue objects.
24934         (LocalVariableReference, ParameterReference, FieldExpr): Implement
24935         LValue interface.
24936
24937         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
24938         interface for generating code, simplifies the code.
24939
24940 2001-09-20  Ravi Pratap  <ravi@ximian.com>
24941
24942         * expression.cs (everywhere): Comment out return statements in ::Resolve
24943         methods to avoid the warnings.
24944
24945 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
24946
24947         * driver.cs (parse): Report error 2001 if we can not open the
24948         source file.
24949
24950         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
24951         not resolve it.
24952
24953         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
24954         object. 
24955
24956         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
24957         otherwise nested blocks end up with the same index.
24958
24959         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
24960
24961         * expression.cs:  Instead of having FIXMEs in the Resolve
24962         functions, throw exceptions so it is obvious that we are facing a
24963         bug. 
24964
24965         * cs-parser.jay (invocation_expression): Pass Location information.
24966
24967         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
24968         Use a basename for those routines because .NET does not like paths
24969         on them. 
24970
24971         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
24972         already defined.
24973
24974 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
24975
24976         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
24977         are loading the correct data types (throws an exception if not).
24978         (TypeManager::InitCoreTypes): Use CoreLookupType
24979
24980         * expression.cs (Unary::ResolveOperator): return the child
24981         expression for expressions which are just +expr.
24982         (Unary::ResolveOperator): Return negative literals for -LITERAL
24983         expressions (otherwise they are Unary {Literal}).
24984         (Invocation::Badness): Take into account `Implicit constant
24985         expression conversions'.
24986
24987         * literal.cs (LongLiteral): Implement long literal class.
24988         (IntLiteral): export the `Value' of the intliteral. 
24989
24990 2001-09-19  Ravi Pratap  <ravi@ximian.com>
24991
24992         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
24993
24994         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
24995         instead of 'Operator'
24996
24997         * expression.cs (Binary::ResolveOperator): Update accordingly.
24998         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
24999         and 'Minus'
25000
25001         * cs-parser.jay (unary_expression): Update to use the new names.
25002
25003         * gen-treedump.cs (GetUnary): Same here.
25004
25005         * expression.cs (Unary::Resolve): Implement.
25006         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25007         operators are found instead of making noise ;-)
25008         (Unary::ResolveOperator): New method to do precisely the same thing which
25009         Binary::ResolveOperator does for Binary expressions.
25010         (Unary.method, .Arguments): Add.
25011         (Unary::OperName): Implement.   
25012         (Unary::ForceConversion): Copy and Paste !
25013
25014         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25015         a unary operator.
25016
25017         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25018         for the inbuilt operators. Only overloading works for now ;-)
25019
25020 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25021
25022         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25023         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25024
25025         * expression.cs (This::Emit): Implement. 
25026         (This::Resolve): Implement.
25027         (TypeOf:Resolve): Implement.
25028         (Expression::ResolveSimpleName): Add an implicit this to instance
25029         field references. 
25030         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25031         Bind instance variable to Field expressions.
25032         (FieldExpr::Instance): New field used to track the expression that
25033         represents the object instance.
25034         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25035         binding 
25036         (FieldExpr::Emit): Implement.
25037
25038         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25039         the last instruction contains a return opcode to avoid generating
25040         the last `ret' instruction (this generates correct code, and it is
25041         nice to pass the peverify output).
25042
25043         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25044         initializer for static and instance variables.
25045         (Constructor::Emit): Allow initializer to be null in the case of
25046         static constructors.  Only emit initializer for instance
25047         constructors. 
25048
25049         (TypeContainer::FindMembers): Return a null array if there are no
25050         matches.
25051
25052         Also fix the code for the MemberTypes.Method branch, as it was not
25053         scanning that for operators (or tried to access null variables before).
25054
25055         * assign.cs (Assign::Emit): Handle instance and static fields. 
25056
25057         * TODO: Updated.
25058
25059         * driver.cs: Stop compilation if there are parse errors.
25060
25061         * cs-parser.jay (constructor_declaration): Provide default base
25062         initializer for non-static constructors.
25063         (constructor_declarator): Do not provide a default base
25064         initializers if none was specified.
25065         Catch the fact that constructors should not have parameters.
25066
25067         * class.cs: Do not emit parent class initializers for static
25068         constructors, that should be flagged as an error.
25069
25070 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25071
25072         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25073         Move back code into TypeContainer::Populate.
25074
25075 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25076
25077         * class.cs (TypeContainer::AddConstructor): Fix the check to
25078         compare against Name, not Basename. 
25079         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25080
25081         * cs-parser.jay : Update accordingly.
25082
25083         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25084         for methods, don't forget to look into the operators too.
25085         (RegisterMethodBuilder): Helper method to take care of this for
25086         methods, constructors and operators.
25087         (Operator::Define): Completely revamp.
25088         (Operator.OperatorMethod, MethodName): New fields.
25089         (TypeContainer::Populate): Move the registering of builders into
25090         RegisterMethodBuilder.
25091         (Operator::Emit): Re-write.
25092
25093         * expression.cs (Binary::Emit): Comment out code path to emit method
25094         invocation stuff for the case when we have a user defined operator. I am
25095         just not able to get it right !
25096
25097 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25098
25099         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25100         argument. 
25101
25102         (Expression::MemberLookup): Provide a version that allows to
25103         specify the MemberTypes and BindingFlags. 
25104
25105         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25106         so it was not fetching variable information from outer blocks.
25107
25108         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25109         Beforefieldinit as it was buggy.
25110
25111         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25112         that Ravi put here.  
25113
25114         * class.cs (Constructor::Emit): Only emit if block is not null.
25115         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25116         deal with this by semantically definining it as if the user had
25117         done it.
25118
25119         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25120         constructors as we now "emit" them at a higher level.
25121
25122         (TypeContainer::DefineDefaultConstructor): Used to define the
25123         default constructors if none was provided.
25124
25125         (ConstructorInitializer): Add methods Resolve and Emit. 
25126
25127         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25128
25129 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25130
25131         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25132         the default constructor builder with our hashtable for methodbuilders
25133         to methodcores.
25134
25135         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25136         and argument_count is 0 in which case we have a match.
25137         (Binary::ResolveOperator): More null checking and miscellaneous coding
25138         style cleanup.
25139
25140 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25141
25142         * rootcontext.cs (IsNameSpace): Compare against null.
25143
25144         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25145
25146         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25147         and Unary::Operator.
25148
25149         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25150         accordingly.
25151
25152         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25153         we have overloaded operators.
25154         (Binary::ResolveOperator): Implement the part which does the operator overload
25155         resolution.
25156
25157         * class.cs (Operator::Emit): Implement.
25158         (TypeContainer::Emit): Emit the operators we have too.
25159
25160         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25161         the case when we have a user-defined operator.
25162
25163 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25164
25165         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25166
25167 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25168
25169         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25170         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25171         (Constructor::Emit): Implement.
25172         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25173         if we have no work to do. 
25174         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25175         Emit method.
25176
25177         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25178         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25179
25180         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25181         of parent.parent.
25182
25183 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25184
25185         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25186         in the source.
25187         (Tree::RecordNamespace): Method to do what the name says ;-)
25188         (Tree::Namespaces): Property to get at the namespaces hashtable.
25189
25190         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25191         keep track.
25192
25193         * rootcontext.cs (IsNamespace): Fixed it :-)
25194
25195 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25196
25197         * class.cs (TypeContainer::FindMembers): Add support for
25198         constructors. 
25199         (MethodCore): New class that encapsulates both the shared aspects
25200         of a Constructor and a Method.  
25201         (Method, Constructor): Factored pieces into MethodCore.
25202
25203         * driver.cs: Added --fatal which makes errors throw exceptions.
25204         Load System assembly as well as part of the standard library.
25205
25206         * report.cs: Allow throwing exceptions on errors for debugging.
25207
25208         * modifiers.cs: Do not use `parent', instead use the real type
25209         container to evaluate permission settings.
25210
25211         * class.cs: Put Ravi's patch back in.  He is right, and we will
25212         have to cope with the
25213
25214 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25215
25216         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25217         FamORAssem, not FamANDAssem.
25218
25219 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25220
25221         * driver.cs: Added --parse option that only parses its input files
25222         and terminates.
25223
25224         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25225         incorrect.  IsTopLevel is not used to tell whether an object is
25226         root_types or not (that can be achieved by testing this ==
25227         root_types).  But to see if this is a top-level *class* (not
25228         necessarly our "toplevel" container). 
25229
25230 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25231
25232         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25233         parent instead of a direct call to GetType.
25234
25235 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25236
25237         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25238         Modifiers.TypeAttr. This should just be a call to that method.
25239
25240         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25241         object so that we can determine if we are top-level or not.
25242
25243         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25244         TypeContainer too.
25245
25246         * enum.cs (Enum::Define): Ditto.
25247
25248         * modifiers.cs (FieldAttr): Re-write.
25249
25250         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25251         (TypeContainer::HaveStaticConstructor): New property to provide access
25252         to precisely that info.
25253
25254         * modifiers.cs (MethodAttr): Re-write.
25255         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25256
25257         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25258         of top-level types as claimed.
25259
25260 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25261
25262         * expression.cs (MemberLookup): Fruitless attempt to lookup
25263         constructors.  Maybe I need to emit default constructors?  That
25264         might be it (currently .NET emits this for me automatically).
25265         (Invocation::OverloadResolve): Cope with Arguments == null.
25266         (Invocation::EmitArguments): new function, shared by the new
25267         constructor and us.
25268         (Invocation::Emit): Handle static and instance methods.  Emit
25269         proper call instruction for virtual or non-virtual invocations.
25270         (New::Emit): Implement.
25271         (New::Resolve): Implement.
25272         (MemberAccess:Resolve): Implement.
25273         (MethodGroupExpr::InstanceExpression): used conforming to the spec
25274         to track instances.
25275         (FieldExpr::Resolve): Set type.
25276
25277         * support.cs: Handle empty arguments.
25278                 
25279         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
25280         SimpleLookup): Auxiliary routines to help parse a qualifier
25281         identifier.  
25282
25283         Update qualifier_identifier rule.
25284
25285         * codegen.cs: Removed debugging messages.
25286
25287         * class.cs: Make this a global thing, this acts just as a "key" to
25288         objects that we might have around.
25289
25290         (Populate): Only initialize method_builders_to_methods once.
25291
25292         * expression.cs (PropertyExpr): Initialize type from the
25293         PropertyType. 
25294
25295         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
25296         Resolve pattern.  Attempt to implicitly convert value to boolean.
25297         Emit code.
25298
25299         * expression.cs: Set the type for the int32/int32 argument case.
25300         (Binary::ResolveOperator): Set the return type to boolean for
25301         comparission operators
25302
25303         * typemanager.cs: Remove debugging print code.
25304
25305         (Invocation::Resolve): resolve type.
25306
25307         * class.cs: Allocate a MemberInfo of the correct size, as the code
25308         elsewhere depends on the test to reflect the correct contents.
25309
25310         (Method::) Keep track of parameters, due to System.Reflection holes
25311
25312         (TypeContainer::Populate): Keep track of MethodBuilders to Method
25313         mapping here.
25314
25315         (TypeContainer::FindMembers): Use ArrayList and then copy an array
25316         of the exact size and return that.
25317
25318         (Class::LookupMethodByBuilder): New function that maps
25319         MethodBuilders to its methods.  Required to locate the information
25320         on methods because System.Reflection bit us again.
25321
25322         * support.cs: New file, contains an interface ParameterData and
25323         two implementations: ReflectionParameters and InternalParameters
25324         used to access Parameter information.  We will need to grow this
25325         as required.
25326
25327         * expression.cs (Invocation::GetParameterData): implement a cache
25328         and a wrapper around the ParameterData creation for methods. 
25329         (Invocation::OverloadResolve): Use new code.
25330
25331 2001-09-13  Ravi Pratap  <ravi@ximian.com>
25332
25333         * class.cs (TypeContainer::EmitField): Remove and move into 
25334         (Field::Define): here and modify accordingly.
25335         (Field.FieldBuilder): New member.
25336         (TypeContainer::Populate): Update accordingly.
25337         (TypeContainer::FindMembers): Implement.
25338
25339 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25340
25341         * statement.cs: (VariableInfo::VariableType): New field to be
25342         initialized with the full type once it is resolved. 
25343
25344 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
25345
25346         * parameter.cs (GetParameterInfo): Use a type cache to compute
25347         things only once, and to reuse this information
25348
25349         * expression.cs (LocalVariableReference::Emit): Implement.
25350         (OpcodeCast::Emit): fix.
25351
25352         (ParameterReference::Resolve): Implement.
25353         (ParameterReference::Emit): Implement.
25354
25355         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
25356         that are expressions need to stay as Expressions.
25357
25358         * typemanager.cs (CSharpName): Returns the C# name of a type if
25359         possible. 
25360
25361         * expression.cs (Expression::ConvertImplicit): New function that
25362         implements implicit type conversions.
25363
25364         (Expression::ImplicitReferenceConversion): Implements implicit
25365         reference conversions.
25366
25367         (EmptyCast): New type for transparent casts.
25368
25369         (OpcodeCast): New type for casts of types that are performed with
25370         a sequence of bytecodes.
25371
25372         (BoxedCast): New type used for casting value types into reference
25373         types.  Emits a box opcode.
25374
25375         (Binary::DoNumericPromotions): Implements numeric promotions of
25376         and computation of the Binary::Type.
25377
25378         (Binary::EmitBranchable): Optimization.
25379
25380         (Binary::Emit): Implement code emission for expressions.
25381
25382         * typemanager.cs (TypeManager): Added two new core types: sbyte
25383         and byte.
25384
25385 2001-09-12  Ravi Pratap  <ravi@ximian.com>
25386
25387         * class.cs (TypeContainer::FindMembers): Method which does exactly
25388         what Type.FindMembers does, only we don't have to use reflection. No
25389         implementation yet.
25390
25391         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
25392         typecontainer objects as we need to get at them.
25393         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
25394
25395         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
25396         typecontainer object.
25397
25398         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
25399         of just a Report object.
25400
25401 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25402
25403         * class.cs (Event::Define): Go back to using the prefixes "add_" and
25404         "remove_"
25405         (TypeContainer::Populate): Now define the delegates of the type too.
25406         (TypeContainer.Delegates): Property to access the list of delegates defined
25407         in the type.
25408
25409         * delegates.cs (Delegate::Define): Implement partially.
25410
25411         * modifiers.cs (TypeAttr): Handle more flags.
25412
25413 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25414
25415         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
25416         and not <=
25417         (Operator::Define): Re-write logic to get types by using the LookupType method
25418         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
25419         (Indexer::Define): Ditto.
25420         (Event::Define): Ditto.
25421         (Property::Define): Ditto.
25422
25423 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25424
25425         * class.cs (TypeContainer::Populate): Now define operators too. 
25426         (TypeContainer.Operators): New property to access the list of operators
25427         in a type.
25428         (Operator.OperatorMethodBuilder): New member to hold the method builder
25429         for the operator we are defining.
25430         (Operator::Define): Implement.
25431
25432 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25433
25434         * class.cs (Event::Define): Make the prefixes of the accessor methods
25435         addOn_ and removeOn_ 
25436
25437         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
25438         of the location being passed in too. Ideally, this should go later since all
25439         error reporting should be done through the Report object.
25440
25441         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
25442         (Populate): Iterate thru the indexers we have and define them too.
25443         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
25444         for the get and set accessors.
25445         (Indexer::Define): Implement.
25446
25447 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
25448
25449         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
25450         my previous implementation, did not work.
25451
25452         * typemanager.cs: Add a couple of missing types (the longs).
25453
25454         * literal.cs: Use TypeManager.bool_type instead of getting it.
25455
25456         * expression.cs (EventExpr): New kind of expressions.
25457         (Expressio::ExprClassFromMemberInfo): finish
25458
25459 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
25460
25461         * assign.cs: Emit stores to static fields differently.
25462
25463 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25464
25465         * Merge in changes and adjust code to tackle conflicts. Backed out my
25466         code in Assign::Resolve ;-) 
25467
25468 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25469
25470         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
25471         instead Report.Error and also pass in the location.
25472         (CSharpParser::Lexer): New readonly property to return the reference
25473         to the Tokenizer object.
25474         (declare_local_variables): Use Report.Error with location instead of plain 
25475         old error.
25476         (CheckDef): Ditto.
25477
25478         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
25479         (Operator.CheckBinaryOperator): Ditto.
25480
25481         * cs-parser.jay (operator_declarator): Update accordingly.
25482
25483         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
25484         (CheckBinaryOperator): Same here.
25485
25486         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
25487         on the name without any prefixes of namespace names etc. This is because we
25488         already might have something already fully qualified like 
25489         'System.Console.WriteLine'
25490
25491         * assign.cs (Resolve): Begin implementation. Stuck ;-)
25492
25493 2001-09-07  Ravi Pratap  <ravi@ximian.com>
25494
25495         * cs-tokenizer.cs (location): Return a string which also contains
25496         the file name.
25497
25498         * expression.cs (ElementAccess): New class for expressions of the
25499         type 'element access.'
25500         (BaseAccess): New class for expressions of the type 'base access.'
25501         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
25502         respectively.
25503
25504         * cs-parser.jay (element_access): Implement action.
25505         (base_access): Implement actions.
25506         (checked_expression, unchecked_expression): Implement.
25507
25508         * cs-parser.jay (local_variable_type): Correct and implement.
25509         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
25510
25511         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
25512
25513         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
25514         name and the specifiers.
25515
25516         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
25517
25518         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
25519         making them all public ;-)
25520
25521         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
25522         class anyways.
25523
25524 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
25525
25526         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
25527         PropertyExprs.
25528         (FieldExpr, PropertyExprs): New resolved expressions.
25529         (SimpleName::MemberStaticCheck): Perform static checks for access
25530         to non-static fields on static methods. Maybe this should be
25531         generalized for MemberAccesses. 
25532         (SimpleName::ResolveSimpleName): More work on simple name
25533         resolution. 
25534
25535         * cs-parser.jay (primary_expression/qualified_identifier): track
25536         the parameter index.
25537
25538         * codegen.cs (CodeGen::Save): Catch save exception, report error.
25539         (EmitContext::EmitBoolExpression): Chain to expression generation
25540         instead of temporary hack.
25541         (::EmitStatementExpression): Put generic expression code generation.
25542
25543         * assign.cs (Assign::Emit): Implement variable assignments to
25544         local variables, parameters and fields.
25545
25546 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
25547
25548         * statement.cs (Block::GetVariableInfo): New method, returns the
25549         VariableInfo for a variable name in a block.
25550         (Block::GetVariableType): Implement in terms of GetVariableInfo
25551
25552         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
25553         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
25554
25555 2001-09-06  Ravi Pratap  <ravi@ximian.com>
25556
25557         * cs-parser.jay (operator_declaration): Continue on my quest : update
25558         to take attributes argument.
25559         (event_declaration): Ditto.
25560         (enum_declaration): Ditto.
25561         (indexer_declaration): Ditto.
25562
25563         * class.cs (Operator::Operator): Update constructor accordingly.
25564         (Event::Event): Ditto.
25565
25566         * delegate.cs (Delegate::Delegate): Same here.
25567
25568         * enum.cs (Enum::Enum): Same here.
25569
25570 2001-09-05  Ravi Pratap  <ravi@ximian.com>
25571
25572         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
25573
25574         * ../tests/cs0658.cs : New file to demonstrate error 0658.
25575
25576         * attribute.cs (Attributes): New class to encapsulate all attributes which were
25577         being passed around as an arraylist.
25578         (Attributes::AddAttribute): Method to add attribute sections.
25579
25580         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
25581         (struct_declaration): Update accordingly.
25582         (constant_declaration): Update.
25583         (field_declaration): Update.
25584         (method_header): Update.
25585         (fixed_parameter): Update.
25586         (parameter_array): Ditto.
25587         (property_declaration): Ditto.
25588         (destructor_declaration): Ditto.
25589
25590         * class.cs (Struct::Struct): Update constructors accordingly.
25591         (Class::Class): Ditto.
25592         (Field::Field): Ditto.
25593         (Method::Method): Ditto.
25594         (Property::Property): Ditto.
25595         (TypeContainer::OptAttribute): update property's return type.
25596
25597         * interface.cs (Interface.opt_attributes): New member.
25598         (Interface::Interface): Update to take the extra Attributes argument.
25599
25600         * parameter.cs (Parameter::Parameter): Ditto.
25601
25602         * constant.cs (Constant::Constant): Ditto.
25603
25604         * interface.cs (InterfaceMemberBase): New OptAttributes field.
25605         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
25606         the attributes as a parameter.
25607         (InterfaceProperty): Update constructor call.
25608         (InterfaceEvent): Ditto.
25609         (InterfaceMethod): Ditto.
25610         (InterfaceIndexer): Ditto.
25611
25612         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
25613         pass the attributes too.
25614         (interface_event_declaration): Ditto.
25615         (interface_property_declaration): Ditto.
25616         (interface_method_declaration): Ditto.
25617         (interface_declaration): Ditto.
25618
25619 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
25620
25621         * class.cs (Method::Define): Track the "static Main" definition to
25622         create an entry point. 
25623
25624         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
25625         EntryPoint if we find it. 
25626
25627         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
25628         (EmitContext::ig): Make this variable public.
25629
25630         * driver.cs: Make the default output file be the first file name
25631         with the .exe extension.  
25632
25633         Detect empty compilations
25634
25635         Handle various kinds of output targets.  Handle --target and
25636         rename -t to --dumper.
25637
25638         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
25639         methods inherited from Expression return now an Expression.  This
25640         will is used during the tree rewriting as we resolve them during
25641         semantic analysis.
25642
25643         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
25644         the spec.  Missing entirely is the information about
25645         accessability of elements of it.
25646
25647         (Expression::ExprClassFromMemberInfo): New constructor for
25648         Expressions that creates a fully initialized Expression based on
25649         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
25650         a Type.
25651
25652         (Invocation::Resolve): Begin implementing resolution of invocations.
25653
25654         * literal.cs (StringLiteral):  Implement Emit.
25655
25656 2001-09-05  Ravi Pratap  <ravi@ximian.com>
25657
25658         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
25659         member.
25660
25661 2001-09-04  Ravi Pratap  <ravi@ximian.com>
25662
25663         * cs-parser.jay (attribute_arguments): Implement actions.
25664         (attribute): Fix bug in production. Implement action.
25665         (attribute_list): Implement.
25666         (attribute_target): Implement.
25667         (attribute_target_specifier, opt_target_specifier): Implement
25668         (CheckAttributeTarget): New method to check if the attribute target
25669         is valid.
25670         (attribute_section): Implement.
25671         (opt_attributes): Implement.
25672
25673         * attribute.cs : New file to handle attributes.
25674         (Attribute): Class to hold attribute info.
25675
25676         * cs-parser.jay (opt_attribute_target_specifier): Remove production
25677         (attribute_section): Modify production to use 2 different rules to 
25678         achieve the same thing. 1 s/r conflict down !
25679         Clean out commented, useless, non-reducing dimension_separator rules.
25680
25681         * class.cs (TypeContainer.attributes): New member to hold list
25682         of attributes for a type.
25683         (Struct::Struct): Modify to take one more argument, the attribute list.
25684         (Class::Class): Ditto.
25685         (Field::Field): Ditto.
25686         (Method::Method): Ditto.
25687         (Property::Property): Ditto.
25688
25689         * cs-parser.jay (struct_declaration): Update constructor call to
25690         pass in the attributes too.
25691         (class_declaration): Ditto.
25692         (constant_declaration): Ditto.
25693         (field_declaration): Ditto.
25694         (method_header): Ditto.
25695         (fixed_parameter): Ditto.
25696         (parameter_array): Ditto.
25697         (property_declaration): Ditto.
25698
25699         * constant.cs (Constant::Constant): Update constructor similarly.
25700         Use System.Collections.
25701
25702         * parameter.cs (Parameter::Parameter): Update as above.
25703
25704 2001-09-02  Ravi Pratap  <ravi@ximian.com>
25705
25706         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
25707         (TypeContainer.delegates): New member to hold list of delegates.
25708
25709         * cs-parser.jay (delegate_declaration): Implement the action correctly 
25710         this time as I seem to be on crack ;-)
25711
25712 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
25713
25714         * rootcontext.cs (RootContext::IsNamespace): new function, used to
25715         tell whether an identifier represents a namespace.
25716
25717         * expression.cs (NamespaceExpr): A namespace expression, used only
25718         temporarly during expression resolution.
25719         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
25720         utility functions to resolve names on expressions.
25721
25722 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
25723
25724         * codegen.cs: Add hook for StatementExpressions. 
25725
25726         * class.cs: Fix inverted test for static flag in methods.
25727
25728 2001-09-02  Ravi Pratap  <ravi@ximian.com>
25729
25730         * class.cs (Operator::CheckUnaryOperator): Correct error number used
25731         to make it coincide with MS' number.
25732         (Operator::CheckBinaryOperator): Ditto.
25733
25734         * ../errors/errors.txt : Remove error numbers added earlier.
25735
25736         * ../errors/cs1019.cs : Test case for error # 1019
25737
25738         * ../errros/cs1020.cs : Test case for error # 1020
25739
25740         * cs-parser.jay : Clean out commented cruft.
25741         (dimension_separators, dimension_separator): Comment out. Ostensibly not
25742         used anywhere - non-reducing rule.
25743         (namespace_declarations): Non-reducing rule - comment out.
25744
25745         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
25746         with TypeContainer::AddEnum.
25747
25748         * delegate.cs : New file for delegate handling classes.
25749         (Delegate): Class for declaring delegates.
25750
25751         * makefile : Update.
25752
25753         * cs-parser.jay (delegate_declaration): Implement.
25754
25755 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
25756
25757         * class.cs (Event::Define): Implement.
25758         (Event.EventBuilder): New member.
25759
25760         * class.cs (TypeContainer::Populate): Update to define all enums and events
25761         we have.
25762         (Events): New property for the events arraylist we hold. Shouldn't we move to using
25763         readonly fields for all these cases ?
25764
25765 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
25766
25767         * class.cs (Property): Revamp to use the convention of making fields readonly.
25768         Accordingly modify code elsewhere.
25769
25770         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
25771         the Define method of the Property class.
25772
25773         * class.cs : Clean up applied patch and update references to variables etc. Fix 
25774         trivial bug.
25775         (TypeContainer::Populate): Update to define all the properties we have. Also
25776         define all enumerations.
25777
25778         * enum.cs (Define): Implement.
25779
25780 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
25781
25782         * cs-parser.jay (overloadable_operator): The semantic value is an
25783         enum of the Operator class.
25784         (operator_declarator): Implement actions.
25785         (operator_declaration): Implement.
25786
25787         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
25788         validity of definitions.
25789         (Operator::CheckBinaryOperator): Static method to check for binary operators
25790         (TypeContainer::AddOperator): New method to add an operator to a type.
25791
25792         * cs-parser.jay (indexer_declaration): Added line to actually call the
25793         AddIndexer method so it gets added ;-)
25794
25795         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
25796         already taken care of by the MS compiler ?  
25797
25798 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
25799
25800         * class.cs (Operator): New class for operator declarations.
25801         (Operator::OpType): Enum for the various operators.
25802
25803 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
25804
25805         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
25806         ostensibly handle this in semantic analysis.
25807
25808         * cs-parser.jay (general_catch_clause): Comment out
25809         (specific_catch_clauses, specific_catch_clause): Ditto.
25810         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
25811         (catch_args, opt_catch_args): New productions.
25812         (catch_clause): Rewrite to use the new productions above
25813         (catch_clauses): Modify accordingly.
25814         (opt_catch_clauses): New production to use in try_statement
25815         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
25816         and re-write the code in the actions to extract the specific and
25817         general catch clauses by being a little smart ;-)
25818
25819         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
25820         Hooray, try and catch statements parse fine !
25821
25822 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
25823
25824         * statement.cs (Block::GetVariableType): Fix logic to extract the type
25825         string from the hashtable of variables.
25826
25827         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
25828         I end up making that mistake ;-)
25829         (catch_clauses): Fixed gross error which made Key and Value of the 
25830         DictionaryEntry the same : $1 !!
25831
25832 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
25833
25834         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
25835
25836         * cs-parser.jay (event_declaration): Correct to remove the semicolon
25837         when the add and remove accessors are specified. 
25838
25839 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
25840
25841         * cs-parser.jay (IndexerDeclaration): New helper class to hold
25842         information about indexer_declarator.
25843         (indexer_declarator): Implement actions.
25844         (parsing_indexer): New local boolean used to keep track of whether
25845         we are parsing indexers or properties. This is necessary because 
25846         implicit_parameters come into picture even for the get accessor in the 
25847         case of an indexer.
25848         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
25849
25850         * class.cs (Indexer): New class for indexer declarations.
25851         (TypeContainer::AddIndexer): New method to add an indexer to a type.
25852         (TypeContainer::indexers): New member to hold list of indexers for the
25853         type.
25854
25855 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
25856
25857         * cs-parser.jay (add_accessor_declaration): Implement action.
25858         (remove_accessor_declaration): Implement action.
25859         (event_accessors_declaration): Implement
25860         (variable_declarators): swap statements for first rule - trivial.
25861
25862         * class.cs (Event): New class to hold information about event
25863         declarations.
25864         (TypeContainer::AddEvent): New method to add an event to a type
25865         (TypeContainer::events): New member to hold list of events.
25866
25867         * cs-parser.jay (event_declaration): Implement actions.
25868
25869 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
25870
25871         * cs-parser.jay (dim_separators): Implement. Make it a string
25872         concatenating all the commas together, just as they appear.
25873         (opt_dim_separators): Modify accordingly
25874         (rank_specifiers): Update accordingly. Basically do the same
25875         thing - instead, collect the brackets here.
25876         (opt_rank_sepcifiers): Modify accordingly.
25877         (array_type): Modify to actually return the complete type string
25878         instead of ignoring the rank_specifiers.
25879         (expression_list): Implement to collect the expressions
25880         (variable_initializer): Implement. We make it a list of expressions
25881         essentially so that we can handle the array_initializer case neatly too.
25882         (variable_initializer_list): Implement.
25883         (array_initializer): Make it a list of variable_initializers
25884         (opt_array_initializer): Modify accordingly.
25885
25886         * expression.cs (New::NType): Add enumeration to help us
25887         keep track of whether we have an object/delegate creation
25888         or an array creation.
25889         (New:NewType, New::Rank, New::Indices, New::Initializers): New
25890         members to hold data about array creation.
25891         (New:New): Modify to update NewType
25892         (New:New): New Overloaded contructor for the array creation
25893         case.
25894
25895         * cs-parser.jay (array_creation_expression): Implement to call
25896         the overloaded New constructor.
25897
25898 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
25899
25900         * class.cs (TypeContainer::Constructors): Return member
25901         constructors instead of returning null.
25902
25903 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
25904
25905         * typemanager.cs (InitCoreTypes): Initialize the various core
25906         types after we have populated the type manager with the user
25907         defined types (this distinction will be important later while
25908         compiling corlib.dll)
25909
25910         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
25911         on Expression Classification.  Now all expressions have a method
25912         `Resolve' and a method `Emit'.
25913
25914         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
25915         generation from working.     Also add some temporary debugging
25916         code. 
25917
25918 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
25919
25920         * codegen.cs: Lots of code generation pieces.  This is only the
25921         beginning, will continue tomorrow with more touches of polish.  We
25922         handle the fundamentals of if, while, do, for, return.  Others are
25923         trickier and I need to start working on invocations soon.
25924
25925         * gen-treedump.cs: Bug fix, use s.Increment here instead of
25926         s.InitStatement. 
25927
25928         * codegen.cs (EmitContext): New struct, used during code
25929         emission to keep a context.   Most of the code generation will be
25930         here. 
25931
25932         * cs-parser.jay: Add embedded blocks to the list of statements of
25933         this block.  So code generation proceeds in a top down fashion.
25934
25935 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
25936
25937         * statement.cs: Add support for multiple child blocks.
25938
25939 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
25940
25941         * codegen.cs (EmitCode): New function, will emit the code for a
25942         Block of code given a TypeContainer and its ILGenerator. 
25943
25944         * statement.cs (Block): Standard public readonly optimization.
25945         (Block::Block constructors): Link children. 
25946         (Block::Child): Child Linker.
25947         (Block::EmitVariables): Emits IL variable declarations.
25948
25949         * class.cs: Drop support for MethodGroups here, delay until
25950         Semantic Analysis.
25951         (Method::): Applied the same simplification that I did before, and
25952         move from Properties to public readonly fields.
25953         (Method::ParameterTypes): Returns the parameter types for the
25954         function, and implements a cache that will be useful later when I
25955         do error checking and the semantic analysis on the methods is
25956         performed.
25957         (Constructor::GetCallingConvention): Renamed from CallingConvetion
25958         and made a method, optional argument tells whether this is a class
25959         or a structure to apply the `has-this' bit.
25960         (Method::GetCallingConvention): Implement, returns the calling
25961         convention. 
25962         (Method::Define): Defines the type, a second pass is performed
25963         later to populate the methods.
25964
25965         (Constructor::ParameterTypes): implement a cache similar to the
25966         one on Method::ParameterTypes, useful later when we do semantic
25967         analysis. 
25968
25969         (TypeContainer::EmitMethod):  New method.  Emits methods.
25970
25971         * expression.cs: Removed MethodGroup class from here.
25972
25973         * parameter.cs (Parameters::GetCallingConvention): new method.
25974
25975 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
25976
25977         * class.cs (TypeContainer::Populate): Drop RootContext from the
25978         argument. 
25979
25980         (Constructor::CallingConvention): Returns the calling convention.
25981         (Constructor::ParameterTypes): Returns the constructor parameter
25982         types. 
25983
25984         (TypeContainer::AddConstructor): Keep track of default constructor
25985         and the default static constructor.
25986
25987         (Constructor::) Another class that starts using `public readonly'
25988         instead of properties. 
25989
25990         (Constructor::IsDefault): Whether this is a default constructor. 
25991
25992         (Field::) use readonly public fields instead of properties also.
25993
25994         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
25995         track of static constructors;  If none is used, turn on
25996         BeforeFieldInit in the TypeAttributes. 
25997
25998         * cs-parser.jay (opt_argument_list): now the return can be null
25999         for the cases where there are no arguments. 
26000
26001         (constructor_declarator): If there is no implicit `base' or
26002         `this', then invoke the default parent constructor. 
26003
26004         * modifiers.cs (MethodAttr): New static function maps a set of
26005         modifiers flags into a MethodAttributes enum
26006         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26007         MethodAttr, TypeAttr to represent the various mappings where the
26008         modifiers are used.
26009         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26010
26011 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26012
26013         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26014         method arguments.
26015
26016         * interface.cs (PopulateIndexer): Implemented the code generator
26017         for interface indexers.
26018
26019 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26020
26021         * interface.cs (InterfaceMemberBase): Now we track the new status
26022         here.  
26023
26024         (PopulateProperty): Implement property population.  Woohoo!  Got
26025         Methods and Properties going today. 
26026
26027         Removed all the properties for interfaces, and replaced them with
26028         `public readonly' fields. 
26029
26030 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26031
26032         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26033         initialize their hashtables/arraylists only when they are needed
26034         instead of doing this always.
26035
26036         * parameter.cs: Handle refs and out parameters.
26037
26038         * cs-parser.jay: Use an ArrayList to construct the arguments
26039         instead of the ParameterCollection, and then cast that to a
26040         Parameter[] array.
26041
26042         * parameter.cs: Drop the use of ParameterCollection and use
26043         instead arrays of Parameters.
26044
26045         (GetParameterInfo): Use the Type, not the Name when resolving
26046         types. 
26047
26048 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26049
26050         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26051         and instead use public readonly fields.
26052
26053         * class.cs: Put back walking code for type containers.
26054
26055 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26056
26057         * class.cs (MakeConstant): Code to define constants.
26058
26059         * rootcontext.cs (LookupType): New function.  Used to locate types 
26060
26061
26062 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26063
26064         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26065         this System.Reflection code is.  Kudos to Microsoft
26066
26067         * typemanager.cs: Implement a type cache and avoid loading all
26068         types at boot time.  Wrap in LookupType the internals.  This made
26069         the compiler so much faster.  Wow.  I rule!
26070
26071         * driver.cs: Make sure we always load mscorlib first (for
26072         debugging purposes, nothing really important).
26073
26074         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26075         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26076
26077         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26078         on namespaces that have been imported using the `using' keyword.
26079
26080         * class.cs (TypeContainer::TypeAttr): Virtualize.
26081         (Class::TypeAttr): Return attributes suitable for this bad boy.
26082         (Struct::TypeAttr): ditto.
26083         Handle nested classes.
26084         (TypeContainer::) Remove all the type visiting code, it is now
26085         replaced with the rootcontext.cs code
26086
26087         * rootcontext.cs (GetClassBases): Added support for structs. 
26088
26089 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26090
26091         * interface.cs, statement.cs, class.cs, parameter.cs,
26092         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26093         Drop use of TypeRefs, and use strings instead.
26094
26095 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26096
26097         * rootcontext.cs: 
26098
26099         * class.cs (Struct::Struct): set the SEALED flags after
26100         checking the modifiers.
26101         (TypeContainer::TypeAttr): new property, returns the
26102         TypeAttributes for a class.  
26103
26104         * cs-parser.jay (type_list): Oops, list production was creating a
26105         new list of base types.
26106
26107         * rootcontext.cs (StdLib): New property.
26108         (GetInterfaceTypeByName): returns an interface by type name, and
26109         encapsulates error handling here.
26110         (GetInterfaces): simplified.
26111         (ResolveTree): Encapsulated all the tree resolution here.
26112         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26113         types. 
26114
26115         * driver.cs: Add support for --nostdlib, to avoid loading the
26116         default assemblies.
26117         (Main): Do not put tree resolution here. 
26118
26119         * rootcontext.cs: Beginning of the class resolution.
26120
26121 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26122
26123         * rootcontext.cs: Provide better error reporting. 
26124
26125         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26126
26127         * rootcontext.cs (CreateInterface): Handle the case where there
26128         are no parent interfaces.
26129
26130         (CloseTypes): Routine to flush types at the end.
26131         (CreateInterface): Track types.
26132         (GetInterfaces): Returns an array of Types from the list of
26133         defined interfaces.
26134
26135         * typemanager.c (AddUserType): Mechanism to track user types (puts
26136         the type on the global type hash, and allows us to close it at the
26137         end). 
26138
26139 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26140
26141         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26142         RecordInterface instead.
26143
26144         * cs-parser.jay: Updated to reflect changes above.
26145
26146         * decl.cs (Definition): Keep track of the TypeBuilder type that
26147         represents this type here.  Not sure we will use it in the long
26148         run, but wont hurt for now.
26149
26150         * driver.cs: Smaller changes to accomodate the new code.
26151
26152         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26153         when done. 
26154
26155         * rootcontext.cs (CreateInterface):  New method, used to create
26156         the System.TypeBuilder type for interfaces.
26157         (ResolveInterfaces): new entry point to resolve the interface
26158         hierarchy. 
26159         (CodeGen): Property, used to keep track of the code generator.
26160
26161 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26162
26163         * cs-parser.jay: Add a second production for delegate_declaration
26164         with `VOID'.
26165
26166         (enum_body): Put an opt_comma here instead of putting it on
26167         enum_body or enum_member_declarations so we can handle trailing
26168         commas on enumeration members.  Gets rid of a shift/reduce.
26169
26170         (type_list): Need a COMMA in the middle.
26171
26172         (indexer_declaration): Tell tokenizer to recognize get/set
26173
26174         * Remove old targets.
26175
26176         * Re-add the parser target.
26177
26178 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26179
26180         * cs-parser.jay: Add precendence rules for a number of operators
26181         ot reduce the number of shift/reduce conflicts in the grammar.
26182
26183 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26184
26185         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26186         and put it here.
26187
26188         Get rid of old crufty code.
26189
26190         * rootcontext.cs: Use this to keep track of the parsed
26191         representation and the defined types available to the program. 
26192
26193         * gen-treedump.cs: adjust for new convention.
26194
26195         * type.cs: Split out the type manager, and the assembly builder
26196         from here. 
26197
26198         * typemanager.cs: the type manager will live here now.
26199
26200         * cil-codegen.cs: And the code generator here. 
26201
26202 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26203
26204         * makefile: Fixed up for easy making.
26205
26206 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26207
26208         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26209         the 
26210
26211         (unary_expression): Expand pre_increment_expression and
26212         post_decrement_expression to reduce a shift/reduce.
26213
26214 2001-07-11  Simon Cozens
26215
26216         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26217
26218         Improve allow_keyword_as_indent name.
26219
26220 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26221
26222         * Adjustments for Beta2. 
26223
26224 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26225
26226         * decl.cs: Added `Define' abstract method.
26227         (InTransit): new property, used to catch recursive definitions. 
26228
26229         * interface.cs: Implement `Define'. 
26230
26231         * modifiers.cs: Map Modifiers.constants to
26232         System.Reflection.TypeAttribute flags.
26233
26234         * class.cs: Keep track of types and user-defined types.
26235         (BuilderInit): New method for creating an assembly
26236         (ResolveType): New function to launch the resolution process, only
26237         used by interfaces for now.
26238
26239         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26240         that are inserted into the name space. 
26241
26242 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26243
26244         * ARGH.  I have screwed up my tree so many times due to the use of
26245         rsync rather than using CVS.  Going to fix this at once. 
26246
26247         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26248         load types.
26249
26250 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26251
26252         * Experiment successful: Use System.Type rather that our own
26253         version of Type.  
26254
26255 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26256
26257         * cs-parser.jay: Removed nsAliases from here.
26258
26259         Use new namespaces, handle `using XXX;' 
26260
26261         * namespace.cs: Reimplemented namespace handling, use a recursive
26262         definition of the class.  Now we can keep track of using clauses
26263         and catch invalid using clauses.
26264
26265 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26266
26267         * gen-treedump.cs: Adapted for all the renaming.
26268
26269         * expression.cs (Expression): this class now has a Type property
26270         which returns an expression Type.
26271
26272         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
26273         `Type', as this has a different meaning now in the base
26274
26275 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
26276
26277         * interface.cs, class.cs: Removed from all the sources the
26278         references to signature computation, as we can not do method
26279         signature computation during the parsing time, as we are not
26280         trying to solve at that point distinguishing:
26281
26282         class X {
26283                 void a (Blah x) {}
26284                 void a (NS.Blah x) {}
26285         }
26286
26287         Which depending on the context might be valid or not, as we do not
26288         know if Blah is the same thing as NS.Blah at that point.
26289
26290         * Redid everything so the code uses TypeRefs now instead of
26291         Types.  TypeRefs are just temporary type placeholders, that need
26292         to be resolved.  They initially have a pointer to a string and the
26293         current scope in which they are used.  This is used later by the
26294         compiler to resolve the reference to an actual Type. 
26295
26296         * DeclSpace is no longer a CIR.Type, and neither are
26297         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
26298         are all DeclSpaces, but no Types. 
26299
26300         * type.cs (TypeRefManager): This implements the TypeRef manager,
26301         which keeps track of all the types that need to be resolved after
26302         the parsing has finished. 
26303
26304 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
26305
26306         * ARGH.  We are going to have to store `foreach' as a class rather
26307         than resolving it, as we need to verify error 1579 after name
26308         resolution.   *OR* we could keep a flag that says `This request to
26309         IEnumerator comes from a foreach statement' which we can then use
26310         to generate the error.
26311
26312 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
26313
26314         * class.cs (TypeContainer.AddMethod): we now add methods to the
26315         MethodGroup instead of the method hashtable.  
26316
26317         * expression.cs: Add MethodGroup abstraction, which gets us one
26318         step closer to the specification in the way we handle method
26319         declarations.  
26320
26321         * cs-parser.jay (primary_expression): qualified_identifier now
26322         tried to match up an identifier to a local variable reference or
26323         to a parameter reference.
26324
26325         current_local_parameters is now a parser global variable that
26326         points to the current parameters for the block, used during name
26327         lookup.
26328
26329         (property_declaration): Now creates an implicit `value' argument to
26330         the set accessor.
26331
26332 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
26333
26334         * parameter.cs: Do not use `param' arguments as part of the
26335         signature, per the spec.
26336
26337 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
26338
26339         * decl.cs: Base class for classes, structs and interfaces.  This
26340         is the "Declaration Space" 
26341
26342         * cs-parser.jay: Use CheckDef for checking declaration errors
26343         instead of having one on each function.
26344
26345         * class.cs: Factor out some code for handling error handling in
26346         accordance to the "Declarations" section in the "Basic Concepts"
26347         chapter in the ECMA C# spec.
26348
26349         * interface.cs: Make all interface member classes derive from
26350         InterfaceMemberBase.
26351
26352 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
26353
26354         * Many things: all interfaces are parsed and generated in
26355         gen-treedump.  Support for member variables, constructors,
26356         destructors, properties, constants is there.
26357
26358         Beginning of the IL backend, but very little done, just there for
26359         testing purposes. 
26360
26361 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
26362
26363         * cs-parser.jay: Fix labeled statement.
26364
26365         * cs-tokenizer.cs (escape): Escape " and ' always.
26366         ref_line, ref_name: keep track of the line/filename as instructed
26367         by #line by the compiler.
26368         Parse #line.
26369
26370 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
26371
26372         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
26373         to match the values in System.CodeDOM.
26374
26375         Divid renamed to Divide.
26376
26377         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
26378         statements. 
26379         (Statements.set): remove.
26380
26381         * System.CodeDOM/CodeCatchClause.cs: always have a valid
26382         statements. 
26383
26384         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
26385         falseStatements always have valid values. 
26386
26387         * cs-parser.jay: Use System.CodeDOM now.
26388