2006-08-30 Lluis Sanchez Gual <lluis@novell.com>
[mono.git] / mcs / gmcs / ChangeLog
1 2006-08-29  Miguel de Icaza  <miguel@novell.com>
2
3         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4
5 2006-08-17  Miguel de Icaza  <miguel@novell.com>
6
7         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
8         #52019 and #79064, the use of the \uXXXX sequence in source code
9         to represent unicode characters.
10
11 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
12  
13         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
14         support.
15         * class.cs, ecore.cs, statement.cs: Merged to one error message.
16
17 2006-08-14  Raja R Harinath  <rharinath@novell.com>
18
19         Fix #79067
20         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
21         parameter too.  This only avoids a parse error -- the semantic
22         error is caught elsewhere.
23
24 2006-08-13  Miguel de Icaza  <miguel@novell.com>
25
26         * assign.cs: Catch attempts to assign to a method groups in += and
27         report as 1656
28
29 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
30
31         A fix for #79056
32         * cs-parser.jay: Don't destroy current array type by typeof of array's.
33
34 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
35
36         * cs-parser.jay: Check whether a constraint clause has already been
37         specified for type parameter.
38         * generic.cs (Constraints): Exposed location.
39
40 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
41
42         * class.cs (Method.Define): Issue a warning when generic method looks like
43         an entry point.
44         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
45         as well.
46         * report.cs: New warning number.
47
48 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
49  
50         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
51         looking for ctor.
52         * decl.cs (MemberCache.FindMembers): When container is interface we need to
53         search all base interfaces as a member can be ambiguous.
54         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
55         Constructor member type filter. 
56         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
57         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
58         reporting for returned memberinfos.
59         * report.cs: Updated.
60         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
61         version to work on all runtimes.
62         (TypeManager.RealMemberLookup): Removed members filtering.
63
64 2006-08-08  Raja R Harinath  <rharinath@novell.com>
65
66         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
67         (PropertyExpr.EmitAssign): Likewise.
68         * expression.cs (Indirection.EmitAssign): Likewise.
69         (LocalVariableReference.EmitAssign): Likewise.
70         (ParameterReference.EmitAssign): Likewise.
71         (Invocation.EmitArguments): Likewise.
72         (ArrayAccess.EmitAssign): Likewise.
73         (IndexerAccess.EmitAssign): Likewise.
74         (This.EmitAssign): Likewise.
75         (ConditionalLogicalOperator.Emit): Likewise.
76
77         Fix #79026
78         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
79         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
80         leave it in after returning it.
81         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
82
83 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
84
85         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
86         message.
87
88 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
89
90         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
91         with different type names.
92         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
93
94 2006-08-03  Raja R Harinath  <rharinath@novell.com>
95
96         Fix cs0146-3.cs and cs0146-4.cs.
97         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
98         enclosing types don't depend on the current type.
99
100 2006-08-02  Raja R Harinath  <rharinath@novell.com>
101
102         Fix #77963
103         * class.cs (TypeContainer.DoDefineMembers): Use
104         FindBaseMemberWithSameName on Parent, since we're interested in
105         whether we hide inherited members or not.
106         (FindBaseMemberWithSameName): Make slightly more robust.
107
108         Fix #77396
109         * codegen.cs (IResolveContext.GenericDeclContainer): New.
110         (EmitContext): Implement new interface requirement.
111         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
112         * decl.cs (MemberCore): Likewise.
113         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
114         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
115         ec.GenericDeclContainer to check for generic parameters.
116         (SimpleName.DoSimpleNameResolve): Likewise.
117         * generic.cs (TypeParameter.DeclContainer): Remove override.
118
119         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
120         declspaces for doppelgangers too.
121         (UsingEntry): Implement IResolveContext.
122         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
123         'this' as the resolve context.
124         (LocalAliasEntry): Likewise.
125
126         Implement parts of #77403
127         * roottypes.cs (RootDeclSpace): New.  Used to represent the
128         toplevel declaration space.  Each namespace declaration introduces
129         a "partial" root declaretion space.
130         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
131         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
132         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
133         from 'current_namespace.SlaveDeclSpace'.
134         (namespace_declaration): Likewise.
135         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
136         check.  It can't happen now.
137         * decl.cs (DeclSpace.LookupType): Likewise.
138         * driver.cs (MainDriver): Sanity check.
139
140 2006-08-01  Raja R Harinath  <rharinath@novell.com>
141
142         * decl.cs (DeclSpace.FindNestedType): Remove.
143         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
144         LookupTypeContainer to get the container of the nested type.
145         * class.cs (TypeContainer.FindNestedType): Make non-override.
146
147 2006-07-31  Raja R Harinath  <rharinath@novell.com>
148
149         * decl.cs (DeclSpace.PartialContainer): Move field from ...
150         * class.cs (TypeContainer.PartialContainer): ... here.
151         (TypeContainer.AddBasesForPart): New helper.
152         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
153         instead.
154         * cs-parser.jay (current_class): Convert to DeclSpace.
155         (struct_declaration, interface_declaration, class_declaration):
156         Use AddBasesForPart instead of .Bases directly.
157         * const.cs, iterators.cs: Update to changes.
158
159 2006-07-28  Raja R Harinath  <rharinath@novell.com>
160
161         * class.cs (TypeContainer.AddMemberType): Rename from
162         AddToTypeContainer.
163         (TypeContainer.AddMember): Rename from AddToMemberContainer.
164         (AddTypeContainer): New.  Combine AddClassOrStruct and
165         AddInterface.
166         (AddPartial): Update.  Add 'is_partial' argument.
167         * roottypes.cs: Update to changes.
168         * cs-parser.jay (push_current_class): New helper for handling
169         current_container and current_class.
170         (struct_declaration, interface_declaration, class_declaration):
171         Use it.
172
173 2006-07-26  Raja R Harinath  <rharinath@novell.com>
174
175         * roottypes.cs: Rename from tree.cs.
176
177         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
178         * tree.cs (Tree, ITreeDump): Remove types.
179         * rootcontext.cs (tree, Tree): Remove fields.
180         (root, ToplevelTypes): New.
181         * *.cs: Update to rename.
182
183         * tree.cs (Tree.RecordDecl): Remove.
184         (RootTypes.AddToTypeContainer): Record the toplevel type in its
185         namespace here.
186         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
187
188 2006-07-23  Raja R Harinath  <harinath@gmail.com>
189
190         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
191         DoFlowAnalysis and OmitStructFlowAnalysis here.
192         (ec.With): Rename from WithUnsafe and generalize.
193         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
194         (ec.WithFlowAnalyis): New.
195         * ecore.cs, expression.cs, statement.cs: Update.
196
197 2006-07-22  Raja R Harinath  <harinath@gmail.com>
198
199         * statement.cs (Block.ResolveMeta): Simplify slightly.
200
201         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
202         multiple boolean fields.  Convert InUnsafe, constant_check_state,
203         check_state to flags.
204         (CheckState, ConstantCheckState): Update.
205         (InUnsafe): New read-only property.
206         (FlagsHandle): Rename from CheckStateHandle and convert to handle
207         arbitrary flags.
208         (WithUnsafe): New helper similar to WithCheckState.
209         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
210         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
211
212 2006-07-21  Raja R Harinath  <rharinath@novell.com>
213
214         Make comparisons use the same IL irrespective of whether they're
215         in a 'checked' or 'unchecked' context: one of the issues in #78899
216         * codegen.cs (EmitContext.CheckState): Make read-only property.
217         (EmitContext.ConstantCheckState): Likewise.
218         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
219         helper that implement a save/restore stack for CheckState
220         values.  This is the only way to change check-state.
221         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
222         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
223         (CheckedExpr.EmitBranchable): New forwarding method.
224         (UnCheckedExpr): Likewise.
225         * statement.cs (Block.ResolveMeta): Use WithCheckState.
226         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
227         (Checked.Resolve, checked.DoEmit): Likewise.
228
229 2006-07-21  Martin Baulig  <martin@ximian.com>
230
231         * generic.cs (TypeManager.InferType): When inferring an array
232         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
233
234 2006-07-21  Martin Baulig  <martin@ximian.com>
235
236         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
237         and allow IList`1 and all its base interfaces.
238
239         * convert.cs (Convert.ImplicitReferenceConversion): Allow
240         converting from an array-type of T to IList<T>.
241
242 2006-07-21  Martin Baulig  <martin@ximian.com>
243
244         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
245
246 2006-07-20  Miguel de Icaza  <miguel@novell.com>
247
248         * anonymous.cs: Cache the resolved anonymous delegate, and return
249         this so that the ResolveTopBlock is only triggered once, not
250         twice.
251
252         Currently we trigger ResolvetopBlock twice due to a first pass of
253         argument check compatibility, and a second pass that does the
254         actual resolution.   
255
256 2006-07-16  Marek Safar  <marek.safar@seznam.cz>
257
258         A fix for #70506
259         * driver.cs (MainDriver): When a file extension is missing,
260         use a default one.
261
262 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
263
264         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
265         modifiers.
266         * rootcontext.cs (Reset): Add helper_classes.
267
268 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
269
270         A fix for #78860
271         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
272         correctly.
273
274 2006-07-13  Miguel de Icaza  <miguel@novell.com>
275
276         * statement.cs (Lock): Handle expressions of type
277         TypeManager.null_type specially.  Fixes #78770
278
279 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
280
281         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
282         to an event.
283
284 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
285
286         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
287         for accessors as well.
288         * ecore.cs (EventExpr): Add AccessorTable.
289
290 2006-07-03  Martin Baulig  <martin@ximian.com>
291
292         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
293         instances of value types.
294
295         * convert.cs (Convert.ExplicitConversion): Correctly handle
296         object->nullable conversions.   
297
298 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
299
300         A fix for #78738
301         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
302         for CS0122 where appropriate.
303         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
304         level attributes.
305         (Filter): Assembly can be null in the case of top level attributes.
306
307 2006-06-28  Raja R Harinath  <rharinath@novell.com>
308
309         Fix #78716
310         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
311         no arguments, return 'false': nothing can be inferred.
312
313 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
314
315         A fix for #78690
316
317         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
318         is done at global level.
319
320 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
321
322         A fix for #77002, Implemented TypeForwarder support.
323
324         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
325         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
326         attribute handling.
327         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
328         * typemanager.cs (): Add type_forwarder_attr_type.
329
330 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
331
332         * report.cs: Add CS0469 warning.
333
334 2006-06-22  Martin Baulig  <martin@ximian.com>
335
336         * class.cs
337         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
338         for interfaces; fixes #78686, which is a modification of #78380
339         with interfaces instead of classes.
340
341 2006-06-21  Martin Baulig  <martin@ximian.com>
342
343         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
344         the `try'-block, so we also report CS0016 etc. there.
345
346 2006-06-21  Martin Baulig  <martin@ximian.com>
347
348         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
349         handle SetAssigned() and SetMemberIsUsed() for generic types;
350         fixes #77545.
351
352 2006-06-21  Martin Baulig  <martin@ximian.com>
353
354         * delegate.cs
355         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
356
357 2006-06-21  Martin Baulig  <martin@ximian.com>
358
359         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
360         also report CS1686 for parameters.
361
362 2006-06-21  Martin Baulig  <martin@ximian.com>
363
364         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
365         instead of an error if the value is not implicitly convertible to
366         the switch types; fixes #77964.
367
368 2006-06-21  Raja R Harinath  <rharinath@novell.com>
369
370         Fix #78673
371         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
372         FieldBuilder is null.
373
374         Fix #78662
375         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
376         'left' and 'right' before error-checking.
377
378 2006-06-19  Martin Baulig  <martin@ximian.com>
379
380         * convert.cs
381         (Convert.ImplicitConversionStandard): Cleanup and correctly
382         implement nullable conversions.
383         (Convert.ImplicitStandardConversionExists): Likewise.
384         (Convert.ExplicitConversion): Likewise.
385
386 2006-06-19  Martin Baulig  <martin@ximian.com>
387
388         * generic.cs
389         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
390         methods; make the ctors protected.
391
392 2006-06-19  Martin Baulig  <martin@ximian.com>
393
394         Fixed #78380; added gtest-273.cs.
395
396         * ecore.cs
397         (Expression.ResolveAsBaseTerminal): Move the constraint checking
398         into ResolveAsTypeTerminal().
399
400         * generic.cs
401         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
402         TypeManager.FindMembers() to check for the default ctor.
403
404 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
405
406         * generic.cs: Fixed NullableInfo accessibility.
407
408 2006-06-16  Martin Baulig  <martin@ximian.com>
409
410         * generic.cs
411         (Constraints.InflatedConstraints.inflate): Correctly inflate
412         generic types; fixes #78400.
413
414 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
415
416         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
417         Fixed bug #78601.
418         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
419         (FieldExpr.DoResolve): likewise.
420         (PropertyExpr.InstanceResolve): likewise.
421         (EventExpr.InstanceResolve): likewise. 
422
423 2006-06-15  Martin Baulig  <martin@ximian.com>
424
425         * statement.cs
426         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
427         argument; always allow a `null' label if true.
428         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
429         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
430         we have a `null' label and mark the new `null_target' label;
431         default to the `default' label.
432         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
433
434 2006-06-15  Martin Baulig  <martin@ximian.com>
435
436         * class.cs (Operator.Define): Allow an implicit/explicit operator
437         to convert to/from a nullable value of the enclosing type.
438
439         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
440         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
441
442         * convert.cs
443         (Convert.ImplicitStandardConversionExists): Add support for lifted
444         implicit/explicit conversions.
445         (Convert.ImplicitConversionStandard): Likewise.
446
447 2006-06-13  Martin Baulig  <martin@ximian.com>
448
449         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
450         type arguments and create a ConstructedType if necessary.  Fixes #78400.
451
452 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
453
454         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
455         attribute applicable tests for attribute argument.
456
457 2006-06-02  Raja R Harinath  <rharinath@novell.com>
458
459         Fix #78079
460         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
461         (Binary.OverloadResolve_PredefinedIntegral): New.
462         (Binary.OverloadResolve_PredefinedFloating): New.
463         (Binary.OverloadResolve_PredefinedString): New.
464         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
465         Follow the standard more closely, and treat numeric promotions in
466         terms of overload resolution.
467         (Binary.CheckShiftArguments): Simplify.
468
469 2006-06-01  Raja R Harinath  <rharinath@novell.com>
470
471         * flowanalysis.cs (MyBitVector): Simplify representation.
472         (MyBitVector.Clone): Avoid allocating BitArray.
473         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
474         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
475         (*): Update.  Change all references to MyBitVector.And and
476         MyBitVector.Or to &= and |=.
477
478 2006-05-31  Raja R Harinath  <rharinath@novell.com>
479
480         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
481         Use bne.un instead of ceq+brfalse.
482
483         Fix cs0208-[23].cs
484         * typemanager.cs (IsUnmanagedType): Disallow generic types and
485         generic parameters.
486
487 2006-05-29  Raja R Harinath  <rharinath@novell.com>
488
489         Fix cs0231-[34].cs.
490         * cs-parser.jay (formal_parameter_list): Extend the pattern below
491         to param arguments too.
492
493 2006-05-26  Miguel de Icaza  <miguel@novell.com>
494
495         * cs-parser.jay: Catch another parsing form for arglist being
496         followed by other arguments.  Fixes #78313.
497
498 2006-05-25  Raja R Harinath  <rharinath@novell.com>
499
500         Fix #78324
501         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
502         also when one of the operands is a null literal.
503         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
504         to improve clarity, and generate slightly better code.
505
506 2006-05-24  Raja R Harinath  <rharinath@novell.com>
507
508         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
509         checking of out parameters to ...
510         (FlowBranchingToplevel.Merge): ... here.
511         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
512         set, propagate the origin upward, and only complain if there was
513         no other error.
514         (FlowBranchingException.AddContinueOrigin): Likewise.
515         (FlowBranchingException.AddReturnOrigin): Likewise.
516         (FlowBranchingException.AddGotoOrigin): Likewise.       
517
518 2006-05-23  Raja R Harinath  <rharinath@novell.com>
519
520         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
521         unreachable, skip it.
522         (FlowBranchingException.Merge): Always propagate jumps, even if
523         the finally block renders subsequent code unreachable.
524
525 2006-05-18  Raja R Harinath  <rharinath@novell.com>
526
527         Fix #77601
528         * statement.cs (Goto.Resolve): Move responsibility for resolving
529         'goto' to FlowBranching.AddGotoOrigin.
530         (Goto.SetResolvedTarget): New.  Callback to set the
531         LabeledStatement that's the target of the goto.
532         (Goto.DoEmit): Use Leave instead of Br when crossing an
533         unwind-protect boundary.
534         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
535         LookupLabel and adjust to new semantics.
536         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
537         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
538         Goto.SetResolvedTarget to update target.
539         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
540         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
541         AddBreakOrigin & co.  Delay propagation until ...
542         (FlowBranchingException.Merge): ... this.
543
544         * statement.cs (Block.Resolve): Always depend on flow-branching to
545         determine unreachability.  Kill workaround that originally emitted
546         only one statement after an "unreachable" label (see infloop in
547         test-515.cs).
548
549         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
550         This is still "wrong", but anything better would probably need a
551         multi-pass algorithm.
552         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
553         usage vector.  Force current usage vector to be reachable, to
554         optimistically signify backward jumps.
555         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
556         detected.
557         (FlowBranchingLabeled.Merge): New.  If no backward jump was
558         detected, return the original salted-away usage vector instead,
559         updated with appropriate changes.  Print unreachable warning if
560         necessary.
561         * statement.cs (Block.Resolve): Don't print unreachable warning on
562         a labeled statement.
563
564 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
565
566         * driver.cs: Pass filename without path to AssemblyBuilder's
567         AddResourceFile. Fixes bug #78407.
568
569 2006-05-17  Raja R Harinath  <rharinath@novell.com>
570
571         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
572         * flowanalysis.cs (FlowBranchingLabeled): ... here.
573         (FlowBranching.MergeChild): Overwrite
574         reachability information from Labeled branchings too.
575
576 2006-05-16  Raja R Harinath  <rharinath@novell.com>
577
578         * statement.cs (Goto.Resolve): Merge jump origins here ...
579         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
580
581         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
582         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
583         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
584         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
585         here, ...
586         * statement.cs (Goto.Resolve): ... not here.
587         (Goto.Emit): Remove CS1632 check.
588
589 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
590
591         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
592         error message.
593
594 2006-05-11  Raja R Harinath  <rharinath@novell.com>
595
596         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
597         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
598         (FlowBranchingException.Label): Likewise.
599
600         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
601         given value.
602         (MyBitVector.Or): Use it to avoid losing information (Count).
603         (FlowBranching.MergeOrigins): Likewise.
604
605         * flowanalysis.cs (UsageVector.IsDirty): Remove.
606         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
607         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
608         (UsageVector.ToString): Simplify.
609         (UsageVector.MergeSiblings): Move here from ...
610         (FlowBranching.Merge): ... here.
611         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
612         not a MyBitVector.
613
614 2006-05-10  Raja R Harinath  <rharinath@novell.com>
615
616         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
617         null bitvector is treated as all-true.
618
619         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
620         (MyBitVector): Rationalize invariants.  'vector != null' implies
621         that we have our own copy of the bitvector.  Otherwise,
622         'InheritsFrom == null' implies all inherited bits are true.
623
624 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
625
626         * statement.cs (LocalInfo): Add IsConstant.
627         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
628         local variable for constants.
629
630 2006-05-09  Raja R Harinath  <rharinath@novell.com>
631
632         * flowanalysis.cs (MyBitVector.Empty): New.
633         (MyBitVector): Don't allow InheritedFrom to be null.
634         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
635         (UsageVector, FlowBranching): Update to changes.
636
637         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
638         recursion.  The 'Parent == null' condition isn't sufficient for
639         anonymous methods.
640         (FlowBranching.AddBreakOrigin): Likewise.
641         (FlowBranching.AddContinueOrigin): Likewise.
642         (FlowBranching.AddReturnOrigin): Likewise.
643         (FlowBranching.StealFinallyClauses): Likewise.
644         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
645         (FlowBranching.CheckOutParameters): Likewise.
646         (FlowBranchingToplevel): Terminate all the above recursions here.
647         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
648         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
649
650         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
651         toplevel block.
652         (FlowBranchingToplevel): New.  Empty for now.
653         (FlowBranching.MergeTopBlock): Update.
654         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
655         branching for the anonymous delegate.
656         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
657
658         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
659         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
660         information at the start of the merge.  Reorganize.
661
662 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
663
664         * class.cs (MethodData.Define): Method cannot implement interface accessor.
665
666 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
667
668         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
669         to newly introduced ctor.
670
671         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
672         message to one place.
673         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
674         global namespace.
675
676 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
677
678         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
679
680         * ecore.cs (Expression.ResolveAsConstant): Updated.
681
682         * statement.cs (ResolveMeta): Updated.
683
684 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
685
686         * cs-parser.jay: __arglist cannot be used in initializer.
687
688 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
689
690         A fix for #77879
691         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
692         private types.
693
694 2006-05-05  Raja R Harinath  <rharinath@novell.com>
695
696         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
697         (LabeledStatement): Add 'name' parameter.
698         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
699         (Block.AddLabel): Update to changes.
700         * cs-parser.jay (labeled_statement): Likewise.
701
702         * flowanalysis.cs (BranchingType.Labeled): New.
703         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
704         (FlowBranchingLabeled): New.  Does nothing for now, but will
705         eventually handle 'goto' flows.
706         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
707         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
708         that's terminated ...
709         (Block.Resolve): ... here.
710
711         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
712         (UsageVector.MergeFinallyOrigins): Likewise.
713         (FlowBranching.InTryOrCatch): Likewise.
714         (FlowBranching.AddFinallyVector): Likewise.
715         (FlowBranchingException): Update to changes.
716
717         Fix #78290
718         * statement.cs (Return.Resolve): Move error checking to ...
719         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
720         (FlowBranchingException): Handle return origins like break and
721         continue origins.
722         (FlowBranching.UsageVector.CheckOutParameters): Remove.
723
724 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
725
726         A fix for #76122
727         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
728         filter.
729
730 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
731
732         A fix for #77543
733         * class.cs (MethodData.Define): Do public accessor check only when method
734         implements an interface.
735
736 2006-05-04  Raja R Harinath  <rharinath@novell.com>
737
738         Remove special handling of 'break'
739         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
740         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
741         (UsageVector.Break): Remove.
742         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
743         reachability.
744         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
745
746         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
747         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
748
749 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
750
751         A fix for #75726
752         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
753         be the interface member.
754
755 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
756
757         A fix for #60069
758         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
759         for emitting small (int) values.
760
761 2006-05-03  Raja R Harinath  <rharinath@novell.com>
762
763         Fix #59427
764         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
765         control-flow passes through the 'finally' after merging-in all the
766         control-flows from 'try' and the 'catch' clauses.
767
768         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
769         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
770         always true at the only non-recursive entry point.
771         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
772         FlowBranchingBreakable.
773         (FlowBranchingLoop): Remove.
774         * statement.cs (Return.DoResolve): Update to changes.
775
776         Fix #76471, #76665
777         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
778         (FlowBranching.CreateBranching): Handle it: create a
779         FlowBranchingContinuable.
780         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
781         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
782         except that it handles the 'continue' command.
783         (FlowBranching.UsageVector.MergeOrigins): Rename from
784         MergeBreakOrigins.
785         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
786         except that it overrides AddContinueOrigin.
787         (FlowBranchingException): Override AddContinueOrigin, similar to
788         AddBreakOrigin.
789         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
790         Create a new branching around the embedded statement.
791         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
792         control flow after the embedded statement.
793         (Continue.Resolve): Move all error checking to AddContinueOrigin.
794
795         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
796         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
797         FlowBranchingBreakable.
798         (FlowBranchingSwitch): Remove.
799
800         Fix test-503.cs
801         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
802         error reporting to ...
803         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
804         Rename from 'AddBreakVector'.  Add new location argument.  Return
805         a bool indicating whether the 'break' crosses an unwind-protect.
806         (FlowBranchingException.AddBreakOrigin): Add.
807         (FlowBranchingException.Merge): Propagate 'break's to surrounding
808         flowbranching after updating with the effects of the 'finally'
809         clause.
810         (FlowBranchingBreakable): New common base class for
811         FlowBranchingLoop and FlowBranchingSwitch.
812
813         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
814         embedded statement.
815         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
816
817 2006-05-02  Raja R Harinath  <rharinath@novell.com>
818
819         * statement.cs (Do.Resolve): If the loop is infinite, set the
820         barrier.
821         (While.Resolve, For.Resolve): Set a barrier after the embedded
822         statement.  There's no direct control flow that goes from the end
823         of the embedded statement to the end of the loop.
824         * flowanalysis.cs (FlowBranching.Infinite): Remove.
825         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
826         above ensure that the reachability is correctly computed.
827
828         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
829         (UsageVector.MergeBreakOrigins): If the current path is
830         unreachable, treat it as if all parameters/locals are initialized.
831         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
832         infinite loops before merging-in break origins.
833
834         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
835         (Reachability.Reachable): Split part into ...
836         (Reachability.Unreachable): ... this.  Simplify.
837         (Reachability.IsUnreachable): Use 'Unreachable' instead.
838
839         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
840         (Reachability.SetThrowsSometimes): Likewise.
841         (FlowBranchingBlock.MergeTopBlock): Don't compare against
842         TriState.Always, use corresponding property.
843         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
844         (Block.Resolve): Likewise.  Remove some redundant checks.
845
846 2006-05-02  Raja R Harinath  <harinath@gmail.com>
847
848         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
849         (Reachability.Meet): Don't bother checking AlwaysThrows --
850         barrier is always set.
851         (FlowBranchingBlock.Merge): Likewise.
852
853 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
854
855         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
856         defined, so it's references should also compile only for NET_2_0
857         (as occurs in mcs version)
858
859 2006-05-01  Raja R Harinath  <harinath@gmail.com>
860
861         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
862         checks for unreachable.
863
864 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
865
866         A fix for #77980
867         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
868
869         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
870         whether field is really assigned.
871
872 2006-04-30  Raja R Harinath  <harinath@gmail.com>
873
874         * flowanalysis.cs (Reachability): Make 4-argument constructor
875         private.
876         (Reachability.Meet): Rename from 'And'.  Remove static variant.
877         (Reachability.Always): Rename from the highly misleading
878         'Reachability.Never'.
879         (FlowBranching.Merge): Update to changes.  Mark an impossible
880         situation with a 'throw'.
881         (*): Update to changes.
882
883 2006-04-29  Raja R Harinath  <harinath@gmail.com>
884
885         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
886         Remove 'Undefined'.
887         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
888         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
889         (*): Update to changes.
890         * statement.cs: Update to changes.
891
892 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
893
894         A fix for #78049
895         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
896
897 2006-04-28  Raja R Harinath  <harinath@gmail.com>
898
899         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
900         dummy UsageVector.
901
902         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
903         argument to two arguments: an usage-vector and a bool.  Move call
904         to FlowBranching.Merge () ...
905         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
906
907         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
908         handling of loop and switch reachability to ...
909         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
910
911 2006-04-27  Raja R Harinath  <harinath@gmail.com>
912
913         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
914         handling to FlowBranchingLoop.InLoop.
915         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
916
917 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
918
919         A fix for #78115
920         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
921         anonymous method is allowed from AnonymousContainer here.
922
923         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
924
925 2006-04-24  Raja R Harinath  <rharinath@novell.com>
926
927         Fix #78156
928         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
929
930 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
931
932         A fix for #49011.
933         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
934         (DoubleConstant.Reduce): Ditto.
935
936 2006-04-23  Raja R Harinath  <rharinath@novell.com>
937
938         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
939         Remove 'lvalue_right_side' argument.  Move parts to ...
940         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
941         (LocalVariable.DoResolveLValue): ... these.
942
943 2006-04-21  Raja R Harinath  <rharinath@novell.com>
944
945         Fix cs1655.cs
946         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
947         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
948         (LocalVariableReference.DoResolveBase): Use it to implement new
949         CS1655 check.
950         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
951         (Argument.Resolve): Simplify.  Move CS1510 check ...
952         * ecore.cs (Expression.ResolveLValue): ... here.
953         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
954         (PropertyExpr.DoResolveLValue): Likewise.
955         (FieldExpr.Report_AssignToReadonly): Likewise.
956         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
957         LValueMemberAccess or LValueMemberOutAccess on instance depending
958         on it.
959         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
960         DoResolve as appropriate.
961
962 2006-04-20  Raja R Harinath  <rharinath@novell.com>
963
964         Fix #75800
965         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
966         implicit conversions on 'out' and 'ref' arguments.
967
968         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
969         improve clarity.  Remove dead code.
970
971         Fix #66031
972         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
973         (Catch.Resolve): Resolve VarBlock if it exists.
974
975 2006-04-19  Miguel de Icaza  <miguel@novell.com>
976
977         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
978         twice, this was some residual code, the enumerator was emitted
979         properly in the two branche of if later.
980
981         Fixes #78031
982         
983         Thanks to Martin for finding the source of the problem
984         
985 2006-04-19  Raja R Harinath  <rharinath@novell.com>
986
987         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
988         cast is never an lvalue.
989         (Cast.DoResolve, Cast.ResolveRest): Combine.
990         (Argument.Emit): Simplify slightly.  Move 'Expr is
991         IMemoryLocation' check ...
992         (Argument.Resolve): ... here.
993         (Argument.Error_LValueRequired): Remove.  Inline into only user.
994
995         Simplifications.  Fix cs0191-2.cs
996         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
997         CS1649 and CS1651 to ...
998         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
999         the actual selection of the error code and message to a lookup
1000         table.  Add a dummy return value to simplify callsites.
1001         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1002         readonly fields of other instances of the same type.  Move CS0197
1003         warning from ...
1004         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1005         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1006         resolution of an out or ref argument.  The code simplification
1007         above uses this invariant.
1008
1009 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1010
1011         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1012         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1013         CheckMarshallByRefAccess.  Drop parameter.
1014         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1015         warning.
1016         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1017         InstanceExpression.
1018         * report.cs (AllWarnings): Add CS1690.
1019         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1020         for ref access too.
1021         (LocalVariableReference.DoResolveBase): Update.
1022
1023 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1024
1025         * class.cs (MethodOrOperator): Moved common parts from method class.
1026         detect obsolete attributes.
1027         (Method.Define): Simplified as it reuses code from base.
1028         (Constructor.ValidAttributeTargets): Fixed issue found during
1029         refactoring.
1030         (Destructor.ValidAttributeTargets): Fixed issue found during
1031         refactoring.
1032         (Operator): Finished refactoring set off by #78020. Operator class is now
1033         ordinary method class.
1034
1035         * anonymous.cs: Updated.
1036
1037 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1038
1039         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1040
1041 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1042
1043         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1044         detect obsolete attributes.
1045         (Method.CreateEmitContext): Moved to MethodOrOperator.
1046
1047 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1048
1049         A fix for #78048.
1050         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1051         customized exception to make crash detection easier.
1052         (MethodOrOperator): Started to work on new base class for methods and
1053         operators.
1054         (Method): Derives from MethodOrOperator.
1055         (Constructor.Emit): Emits its own attributes.
1056         (AbstractPropertyEventMethod.Emit): Ditto.
1057         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1058         patch.
1059         (Operator.Emit): It's temporary more tricky than should be.
1060         
1061         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1062
1063         * report.cs (InternalErrorException): Add ctor with inner exception.
1064
1065 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1066
1067         A fix for #76744.
1068         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1069         only not visible.
1070
1071 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1072
1073         A fix for #77916.
1074         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1075         array.
1076
1077 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1078
1079         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1080         attribute is present and Guid not.
1081         (Interface.ApplyAttributeBuilder): Ditto.
1082
1083         * attribute.cs: Add error message.
1084
1085 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1086
1087         A fix for #78020.
1088
1089         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1090         sources (it's composite) so hold them in extra array as they are used in
1091         Emit phase only. It worked in the previous versions by mistake.
1092         (Attribute.Emit): Emit attribute for more owners when exist.
1093
1094         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1095         it has now different behaviour.
1096
1097 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1098
1099         * constant.cs (Constant.IsDefaultInitializer): New method.
1100
1101         * class.cs: Updated.
1102
1103         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1104         re-initialize default values. It saves KBs almost for every assembly.
1105         Thanks Zoltan for the idea.
1106         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1107         (ArrayCreation.DoResolve): Resolve only once.
1108         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1109         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1110
1111 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1112
1113         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1114         From #77961.
1115
1116 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1117
1118         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1119         in an embedded statement too.
1120
1121 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1122
1123         Fix #77929
1124         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1125         testing.
1126
1127         Fix #77958
1128         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1129
1130         Fix #77962
1131         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1132         arguments before checking whether a type is reflected or not.
1133
1134         Fix #77954
1135         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1136         definition doesn't take part in overload resolution.
1137         (Invocation.IsParamsMethodApplicable): Likewise.
1138         (Invocation.OverloadResolve): When replacing a reflected override
1139         method with its base definition, ensure that type arguments are
1140         applied.
1141
1142 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1143
1144         A fix for #77966.
1145
1146         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1147         was not specified.
1148
1149         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1150
1151 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1152
1153         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1154         phase.
1155
1156         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1157         LocalTemporary change.
1158
1159         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1160         TypeContainer.
1161         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1162         initializers optimization.
1163         (ClassOrStruct.TypeAttr): Moved from modifiers.
1164         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1165         (FieldBase.ResolveInitializer): Resolves initializer.
1166         (FieldBase.HasDefaultInitializer): New property.
1167
1168         * cs-parser.jay: Removed message.
1169
1170         * expression.cs (CompilerGeneratedThis): New specialization.
1171
1172         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1173
1174 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1175
1176         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1177
1178 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1179
1180         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1181         be now EnumConstants only.
1182
1183 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1184
1185         * attribute.cs, driver.cs: Reset more caches.
1186
1187 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1188
1189         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1190
1191 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1192
1193         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1194         for easier reuse. Updated all overrides.
1195         (IntegralConstant): New base class for all integral constants.
1196         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1197         of the constant range, report custom error.
1198         (UIntConstant.Reduce): Fixed uint conversion.
1199
1200         * ecore.cs, literal.cs: Reduce updates.
1201
1202 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1203
1204         A fix for #75813.
1205
1206         * class.cs (Constructor.Define): Removed extra if for default ctors.
1207         A patch from Atsushi Enomoto.
1208
1209 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1210
1211         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1212         GetAttributableValue.
1213
1214         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1215         when required.
1216
1217         * convert.cs (ImplicitConversionRequired): Error message moved to
1218         DoubleLiteral.
1219
1220         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1221         automatic implicit conversion of an output value.
1222         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1223
1224         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1225         conversion.
1226         (TypeOf.GetAttributableValue): Add extra handling for object type.
1227
1228         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1229         special error message.
1230
1231 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1232
1233         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1234         InternalCall.
1235         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1236         compatible with MS runtime.
1237
1238 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1239
1240         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1241         attribute arguments here.
1242
1243         * class.cs (Indexer.Define): The check was moved to attribute class.
1244
1245 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1246
1247         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1248
1249 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1250
1251         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1252
1253         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1254         the blocks too.
1255
1256 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1257
1258         * doc-bootstrap.cs : fix build.
1259
1260 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1261
1262         * expression.cs (StringConcat.Append): Issue a warning when empty string
1263         is going to append.
1264
1265 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1266
1267         * assign.cs (CompoundAssign.ResolveSource): Removed.
1268
1269         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1270         clean up.
1271
1272         * class.cs (TypeContainer.FindMethods): Removed.
1273         (TypeContainer.CheckMemberUsage): Made static.
1274
1275         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1276
1277         * constant.cs (CheckRange): Removed unused type argument.
1278         (CheckUnsigned): Removed unused type argument.
1279
1280         * cs-parser.jay: Updated after MemberAccess clean up.
1281         Uses Length for empty string test.
1282
1283         * cs-tokenizer.cs: Uses Length for empty string test.
1284         (IsCastToken): Made static.
1285         (is_hex): Made static.
1286         (real_type_suffix): Made static.
1287
1288         * decl.cs (SetupCache): Made static.
1289         (OnGenerateDocComment): Removed unused ds argument.
1290
1291         * delegate.cs (VerifyDelegate): Removed unused argument.
1292
1293         * doc.cs: Uses Length for empty string test.
1294
1295         * driver.cs: Uses Length for empty string test.
1296
1297         * enum.cs (IsValidEnumType): Made static
1298
1299         * expression.cs (EnumLiftUp): Removed unused argument.
1300         (ResolveMethodGroup): Ditto.
1301         (BetterConversion): Ditto.
1302         (GetVarargsTypes): Ditto.
1303         (UpdateIndices): Ditto.
1304         (ValidateInitializers): Ditto.
1305         (MemberAccess.ctor): Ditto.
1306         (GetIndexersForType): Ditto.
1307
1308         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1309
1310         * iterators.cs: Updated after MemberAccess clean up.
1311
1312         * location.cs: Uses Length for empty string test.
1313
1314         * namespace.cs: Uses Length for empty string test.
1315
1316          * report.cs (CheckWarningCode): Made static.
1317
1318         * statement.cs (LabeledStatement): Removed unused argument.
1319
1320         * typemanager.cs (FilterNone): Removed.
1321
1322 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1323
1324         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1325         obsolete.
1326
1327         * class.cs: Updated.
1328
1329 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1330
1331         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1332
1333 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1334
1335         A fix for #77816.
1336
1337         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1338         host container.
1339         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1340         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1341         Add more error reporting; Fixed issue with params.
1342
1343         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1344
1345         * cs-parser.jay: AnonymousMethod requires host container.
1346
1347         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1348
1349 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1350
1351         * class.cs: Change 'TypeContainer ds' constructor argument to
1352         'DeclSpace parent'.  Some classes were missed below due to
1353         different naming convention.
1354
1355         * class.cs (MemberCore.Parent): Delete.  This makes the
1356         ParentContainer changes below enforceable by the compiler.
1357
1358         Treat pointers to enclosing declaration space as 'DeclSpace', not
1359         'TypeContainer'.
1360         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1361         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1362
1363         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1364         of TypeContainer.
1365         (Block.AddThisVariable): Likewise.
1366         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1367         (AbstractPropertyEventMethod.Emit): Likewise.
1368         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1369         (GetMethod.Define, SetMethod.Define): Likewise.
1370         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1371         (DelegateMethod.EmitMethod): Likewise.
1372
1373         Fix regression test-partial-13.cs.
1374         Rationalize use of PartialContainer.  Ensure that the partial
1375         class semantics can be tied to type-correctness, i.e., any
1376         violation will cause a compile error.
1377         * class.cs, const.cs: Access all fields that belong to class
1378         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1379         Resolve()-like functions still use 'Parent'.
1380
1381         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1382         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1383         (PropertyMethod.CheckModifiers): Remove unused argument.
1384         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1385         DeclSpace.
1386
1387 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1388
1389         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1390
1391 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1392
1393         Make semantics of PartialContainer simpler.
1394         * decl.cs (DeclSpace.IsPartial): Remove.
1395         * class.cs (TypeContainer.IsPartial): Likewise.
1396         (TypeContainer..ctor): Set PartialContainer to point to self.
1397         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1398         (TypeContainer.FindNestedType): Likewise.
1399         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1400
1401 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1402
1403         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1404
1405 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1406
1407         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1408         classes.
1409
1410 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1411
1412         * class.cs (Operator.Define): An error for base conversion was not
1413         reported correctly.
1414
1415 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1416
1417         A fix for #77593, #77574.
1418
1419         * class.cs (MethodCore.CheckBase): Another if for operator.
1420
1421 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1422
1423         A fix for #77822.
1424
1425         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1426         reporting, it's more tricky than I thought.
1427
1428 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1429
1430         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1431         were not resolved
1432
1433         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1434         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1435         conversion test.
1436         
1437         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1438         not needed.
1439
1440 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1441
1442         A fix for #77353.
1443
1444         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1445         (Event.Define): ditto
1446         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1447
1448         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1449         Removed redundant code and set NewSlot for Invoke method too.
1450
1451         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1452         (Parameters.MergeGenerated): New method. Use this method when you merge
1453         compiler generated argument with user arguments.
1454
1455 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1456
1457         * attribute.cs (ResolveAsTypeTerminal): Removed.
1458
1459         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1460         specialization for predefined types; 30% speed up.
1461         Finally placed obsolete check to right place.
1462         (Expression.ResolveType): Removed.
1463
1464         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1465         Updated after ResolveType was removed.
1466
1467         * expression.cs (Cast.ctor): Check void cast.
1468         (Binary.ResolveAsTypeTerminal): Is never type.
1469         (Conditional.ResolveAsTypeTerminal): Is never type.
1470
1471         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
1472
1473 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1474
1475         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
1476
1477 2006-03-23  Martin Baulig  <martin@ximian.com>
1478
1479         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
1480         type check if either of the types is an open generic type.
1481
1482 2006-03-23  Martin Baulig  <martin@ximian.com>
1483
1484         * convert.cs
1485         (Convert.ExplicitTypeParameterConversion): New method; implement
1486         explicit type parameter conversions.
1487
1488 2006-03-23  Martin Baulig  <martin@ximian.com>
1489
1490         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
1491         blindly allow all conversions if we do not have any constraints.
1492
1493 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
1494
1495         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
1496         these two separated members to simplify the code.
1497         (Attribute.Resolve): Refactored to use new fields and methods.
1498         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
1499         implemented obsolete attribute checking.
1500         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
1501         implemented obsolete checking again. It look line never ending quest ;-)
1502         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
1503
1504         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
1505
1506         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
1507
1508         *class.cs (Property.Define): Add RegisterProperty call.
1509
1510         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
1511         argument groups (only 2).
1512
1513         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
1514         encoding expression to arguments.
1515         (Expression.ExprClassToResolveFlags): Just turned to property.
1516
1517         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
1518         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
1519         optimized as well as implemented support for zero-length attributes.
1520
1521         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
1522         Add caching of PropertyInfo's.
1523
1524 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1525
1526         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
1527         error multiple times.
1528
1529 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1530
1531         New partial class implementation.
1532         A fix for #77027, #77029, #77403
1533
1534         * attribute.cs (Attributable): Made attributes protected.
1535
1536         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
1537         the replacements of ClassPart and PartialContainer.
1538         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
1539         (TypeContainer.AddInterface): Ditto.
1540         (TypeContainer.AddPartial): The main method for partial classes. It checks
1541         for errors and merges ModFlags and attributes. At the end class is added to
1542         partial_parts list.
1543         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
1544         required here.
1545         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
1546         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
1547         from the rest of partial classes.
1548         (TypeContainer.GetClassBases): Simplified.
1549         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
1550         DefineType.
1551         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
1552         (TypeContainer.HasExplicitLayout): Uses Flags now.
1553         (PartialContainer): Removed.
1554         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
1555         (StaticClass): Was merged with Class.
1556         (Class.GetClassBases): class and static class bases are verified here.
1557         (Class.TypeAttr): Added static attributes when class is static.
1558         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
1559         (MemberBase): In some cases we need to call parent container for partial
1560         class. It should be eliminated but it's not easy now.
1561
1562         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
1563
1564         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
1565         partial classed to accumulate class comments.
1566         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
1567
1568         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
1569
1570         * driver.cs (MainDriver): Tree.GetDecl was removed.
1571
1572         * modifiers.cs (Modifiers): Add partial modifier.
1573
1574         * tree.cs (Tree.decl): Removed.
1575         (RootTypes): Started to use this class more often for root types
1576         specializations.
1577
1578 2006-03-23  Raja R Harinath  <rharinath@novell.com>
1579
1580         * generic.cs (TypeParameter.UpdateConstraints): Update
1581         'constraints' if null.
1582
1583 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1584
1585         A fix for #77615
1586
1587         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
1588         external interface does not have an attribute.
1589
1590 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1591
1592         Another prerequisites for new partial classs implementation.
1593         
1594         * attribute.cs (Attribute.Equal): Implemented.
1595         (Attribute.Emit): Changed as attributes can be applied more than twice.
1596         (Attributes.Emit): Check for duplicate attributes here.
1597
1598         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
1599         as a parameter, clean-up.
1600
1601 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1602
1603         A fix for #77485
1604
1605         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
1606         contains obsolete attribute check which can in some cases look for base
1607         type of current class which is not initialized yet.
1608         (TypeContainer.BaseType): Replacement of ptype.
1609
1610         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
1611
1612 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1613
1614         First of prerequisites for new partial classs implemention.
1615         
1616         * attribute.cs (Attributable): Extended by ResolveContext;
1617         Attributes finally have correct context for resolving in all cases.
1618         (AttachTo): Attribute owner is assigned here.
1619
1620         * codegen.cs (IResolveContext): Introduce new interface to hold
1621         all information needed in resolving phase.
1622         (EmitContext): Implements IResolveContext; more clean-up needed here.
1623         
1624         * decl.cs (MemberCore): Implemented IResolveContext.
1625
1626         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
1627         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
1628         parameter.cs, statement.cs, tree.cs, typemanager.cs:
1629         Refactored to use new IResolveContext instead of EmitContext; cleanup
1630
1631 2006-03-22  Raja R Harinath  <rharinath@novell.com>
1632
1633         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
1634         mcs to keep code differences small.
1635         * attribute.cs (Attribute.GetParameterDefaultValue): New.
1636         * typemanager.cs (parameter_default_value_attribute_type): New.
1637         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
1638         CS1908 check.
1639
1640 2006-03-22  Martin Baulig  <martin@ximian.com>
1641
1642         * generic.cs
1643         (Nullable.NullableLiteral): Derive from `NullLiteral'.
1644
1645         * convert.cs
1646         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
1647         instead of the normal `NullLiteral'.
1648
1649 2006-03-21  Martin Baulig  <martin@ximian.com>
1650
1651         Fix #77583.
1652         * generic.cs (TypeManager.InferType): If `pt' is a generic
1653         parameter, don't check whether `pt == at'.
1654
1655 2006-03-20  Raja R Harinath  <rharinath@novell.com>
1656
1657         Fix #77852
1658         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
1659         (TypeParameter.Resolve): Update to change.
1660         (ConstraintChecker.CheckConstraints): Resolve type-argument
1661         constraints before use.
1662
1663 2006-03-16  Martin Baulig  <martin@ximian.com>
1664
1665         * generic.cs
1666         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
1667         and don't have any instance constructors, also lookup in the base class.
1668         (TypeManager.IsNullableValueType): New public method.
1669
1670         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
1671         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
1672         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
1673
1674         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
1675         instead of just TypeManager.IsNullableType() to determine whether
1676         a lifted operator exists.
1677         (UnaryMutator.DoResolve): Likewise.
1678         (Conditional.DoResolve): Likewise.
1679         (Binary.DoResolve): A lifted operator only exists if both operands
1680         are valuetypes and at least one of them is a nullable type.
1681
1682 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
1683
1684         * iterator.cs : yield break is allowed in try statement which has
1685           catch clauses. Fixed bug #77767.
1686
1687 2006-03-12  Martin Baulig  <martin@ximian.com>
1688
1689         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
1690         private IsSignatureEqual() to compare types; see the comment in
1691         that method; fixes #77674.
1692
1693 2006-03-10  Raja R Harinath  <rharinath@novell.com>
1694
1695         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
1696         (Expression.ResolveAsTypeTerminal): Likewise.
1697         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
1698         * expression.cs, generic.cs, iterators.cs: Likewise.
1699         * parameter.cs, statement.cs, typemanager.cs: Likewise.
1700
1701 2006-03-09  Martin Baulig  <martin@ximian.com>
1702
1703         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
1704         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
1705
1706 2006-03-09  Martin Baulig  <martin@ximian.com>
1707
1708         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
1709         `prepared' flag is set.
1710
1711         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
1712         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
1713         issues; see gtest-254.cs.
1714
1715 2006-03-07  Martin Baulig  <martin@ximian.com>
1716
1717         * generic.cs (TypeManager.InferType): Allow infering
1718         `IEnumerable<T>' with an array of T; see gtest-251.cs.
1719
1720 2006-03-06  Martin Baulig  <martin@ximian.com>
1721
1722         * generic.cs
1723         (TypeManager.InferType): Fix gtest-250.cs.
1724
1725         * typemanager.cs
1726         (TypeManager.IsSubclassOf): Also check the base class.
1727
1728         * expression.cs
1729         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
1730         fixes gtest-249.cs.
1731
1732 2006-03-01  Raja R Harinath  <rharinath@novell.com>
1733
1734         Fix #77679.
1735         * expression.cs (ParameterReference.DoResolveBase): Change return
1736         type to bool.
1737         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
1738         Update.
1739
1740         Fix #77628.
1741         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
1742
1743         Fix #77642.
1744         * typemanager.cs (GetFullNameSignature): Don't nullref on
1745         protected accessors.
1746
1747 2006-02-16  Martin Baulig  <martin@ximian.com>
1748
1749         * generic.cs
1750         (TypeManager.GetGenericFieldDefinition): New public method; use it
1751         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
1752
1753 2006-02-14  Martin Baulig  <martin@ximian.com>
1754
1755         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
1756
1757 2006-02-14  Martin Baulig  <martin@ximian.com>
1758
1759         * generic.cs
1760         (TypeManager.DropGenericMethodArguments): New public method; don't
1761         use GetGenericMethodDefinition() on something which is not a
1762         generic method.
1763
1764 2006-02-14  Martin Baulig  <martin@ximian.com>
1765
1766         * generic.cs
1767         (ConstraintChecker.CheckConstraints): If a type parameter has the
1768         `struct' constraint, the type must be a non-nullable valuetype.
1769
1770 2006-02-10  Martin Baulig  <martin@ximian.com>
1771
1772         * typemanager.cs
1773         (TypeManager.IsOverride): Make this work for instantiated methods
1774         in a generic class; fixes #77509.
1775         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
1776         rather than calling it directly; fixes #77488.  
1777
1778 2006-02-08  Martin Baulig  <martin@ximian.com>
1779
1780         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
1781         reporting into CheckConstraint() so we can use the correctly
1782         instantiated type.
1783
1784 2006-02-08  Martin Baulig  <martin@ximian.com>
1785
1786         * expression.cs (BaseAccess): Add support for generic methods.
1787
1788         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
1789         the new MethodGroupExpr.
1790
1791 2006-02-07  Martin Baulig  <martin@ximian.com>
1792
1793         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
1794         also reference types; fixes #77483.
1795
1796 2006-02-07  Martin Baulig  <martin@ximian.com>
1797
1798         * generic.cs
1799         (TypeManager.IsGenericMethod): We now return whether something is
1800         an instantiated generic method (and not a generic method def).
1801         (TypeManager.IsGenericMethodDefinition): New public method.
1802
1803         * typemanager.cs
1804         (TypeManager.CSharpSignature): Only include type arguments for
1805         "real" generic methods, not for any instantiated method.
1806         (TypeManager.GetMethodName): Likewise, but also allow generic
1807         method definitions here.
1808
1809 2006-02-06  Miguel de Icaza  <miguel@novell.com>
1810
1811         * codegen.cs (EmitScopeInitFromBlock): check here the
1812         capture_context, there is no need to make two calls to the
1813         EmitContext. 
1814
1815         * anonymous.cs: Add some debugging messages that might help me
1816         track other instances of this problem in the future (the
1817         regression of test 467).
1818
1819         * cs-parser.jay: track the variable block, as we need to initalize
1820         any captured variables declared in this block for the "catch"
1821         portion of the "Try" statement.
1822
1823         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
1824         scope initialization for captured variables. 
1825
1826         Also, move the emit for the variables after the block location has
1827         been marked.
1828
1829 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
1830
1831        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
1832         
1833 2006-02-06  Martin Baulig  <martin@ximian.com>
1834
1835         * class.cs (TypeContainer.DefineType): If we're a struct, pass
1836         `TypeManager.value_type' as parent type to
1837         ModuleBuilder.DefineType().  Fixes #77358.      
1838
1839 2006-02-02  Miguel de Icaza  <miguel@novell.com>
1840
1841         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
1842         commit yesterday, the initialization for the roots is necessary.
1843         What is not necessary is the scope activation.
1844
1845 2006-02-02  Raja R Harinath  <rharinath@novell.com>
1846
1847         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
1848         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
1849         CS0206 checks.
1850         (Argument.Resolve): Remove CS0206 checks.
1851
1852 2006-02-01  Miguel de Icaza  <miguel@novell.com>
1853
1854         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
1855         scopes for all the roots, the scopes will now be emitted when the
1856         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
1857
1858         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
1859         code.  This reduces a lot of existing cruft.
1860         
1861         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
1862         that the ScopeInfo is generated as we enter the scope, not at the
1863         time of use, which is what we used to do before.
1864
1865         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
1866         every time a Block is about to be emitted if we have a
1867         CaptureContext. 
1868
1869 2006-02-01  Raja R Harinath  <rharinath@novell.com>
1870
1871         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
1872         attribute for mscorlib too.
1873
1874         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
1875         (Reset): Update.
1876         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
1877
1878         * typemanager.cs (cons_param_array_attribute): Make private.
1879         (Reset): Set it to null.
1880         (InitCoreHelpers): Don't initialize it.
1881         (ConsParamArrayAttribute): New.  Initialize it as needed.
1882         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
1883
1884 2006-01-31  Miguel de Icaza  <miguel@novell.com>
1885
1886         * expression.cs: There might be errors reported during the
1887         selection of applicable methods.  If there are errors, do not
1888         continue execution as it will lead the compiler to crash.
1889
1890 2006-01-30  Miguel de Icaza  <miguel@novell.com>
1891
1892         * expression.cs: Member access is not allowed on anonymous
1893         methods.  Fixes #77402.
1894
1895 2006-01-30  Raja R Harinath  <rharinath@novell.com>
1896
1897         Fix #77401
1898         * cs-parser.jay (VariableDeclaration): Don't set
1899         current_array_type to null.
1900         (field_declaration, event_declaration, declaration_statement):
1901         Set it to null here.
1902
1903 2006-01-29  Raja R Harinath  <harinath@gmail.com>
1904
1905         Fix part of #77397
1906         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
1907
1908 2006-01-28  Raja R Harinath  <harinath@gmail.com>
1909
1910         * typemanager.cs (GenericParameterPosition): New.
1911         * doc.cs: Use it.
1912
1913 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
1914
1915         * doc.cs : To process "include" elements, first we should create
1916           another list than XmlNodeList, because it could result in node
1917           removal, which could result in that the XmlNodeList gives up
1918           yielding next node.
1919
1920 2006-01-25  Miguel de Icaza  <miguel@novell.com>
1921
1922         * expression.cs: Introduce an error report that we were not
1923         catching before.   Gonzalo ran into it.
1924
1925 2006-01-23  Miguel de Icaza  <miguel@novell.com>
1926
1927         A fix for bug: #76957
1928         
1929         * iterators.cs (MoveNextMethod.CreateMethodHost): call
1930         ComputeMethodHost before creating the method, this is a new
1931         requirement. 
1932
1933         * anonymous.cs (AnonymousContainer): Now we track all the scopes
1934         that this method references (RegisterScope).  The actual scope
1935         where the method is hosted is computed with the ComputeMethodHost
1936         before we create the method.
1937
1938         Moved the Deepest routine here.
1939
1940         (AnonymousContainer.ComputeMethodHost): New routine used to
1941         compute the proper ScopeInfo that will host the anonymous method.
1942
1943         (ScopeInfo): Deal with multiple roots.  The problem was that we
1944         did not have a unique root where all ScopeInfos could be hanged
1945         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
1946         of roots.  
1947
1948         Remove AdjustMethodScope which is now computed at the end.  Remove
1949         LinkScope which did a partial link, instead link all ScopeInfos
1950         before code generation from the new "LinkScopes" routine. 
1951
1952         Simplify all the Add* routines as they no longer need to maintain
1953         the tree, they just need to record that they are using variables
1954         from a ScopeInfo.
1955
1956         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
1957         routines to produce the forest of ScopeInfo trees.
1958
1959         * class.cs (TypeContainer.AppendMethod): This is just like
1960         AddMethod, but ensures that an interface implementation method
1961         (IEnumerable.XXX) is not inserted at the beginning of the queue of
1962         methods, but at the end.
1963
1964         We use this functionality to ensure that the generated MoveNext
1965         method in the iterator class is resolved/emitted before the
1966         enumerator methods created.   
1967
1968         This is required because the MoveNext method computes the right
1969         ScopeInfo for the method.  And the other methods will eventually
1970         need to resolve and fetch information computed from the anonymous
1971         method. 
1972
1973         
1974 2006-01-23  Raja R Harinath  <rharinath@novell.com>
1975
1976         Improve implementation of section 14.4.2.2 (Better function member).
1977         * expression.cs (Invocation.MoreSpecific): Compare all type
1978         arguments before deciding if one type is more specific than
1979         another.  Handle array types too.  Return the more specific type.
1980         (Invocation.BetterFunction): Add more tie-breaking rules from
1981         section 14.4.2.2.  Perform "more specific" check after
1982         other tie-breaking rules.  Compare all parameter types before
1983         choosing the "more specific" method.
1984
1985 2006-01-21  Raja R Harinath  <harinath@gmail.com>
1986             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
1987
1988         Fix rest of #76995.
1989         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
1990         the 'aliases' hash.
1991         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
1992         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
1993
1994 2006-01-18  Martin Baulig  <martin@ximian.com>
1995
1996         * class.cs (TypeContainer.AddToMemberContainer): Use
1997         `symbol.MemberName.MethodName' instead of just `symbol.Name';
1998         fixes #77124.
1999
2000 2006-01-18  Martin Baulig  <martin@ximian.com>
2001
2002         Fix #76417: a generic class may now have methods which may unify
2003         for some type parameter substitutions.
2004
2005         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2006         for methods which may unify anymore.
2007
2008         * expression.cs (Invocation.MoreSpecific): New private static
2009         method; checks whether one method is more specific than another
2010         according to 14.4.2.2 of the spec.
2011         (Invocation.BetterFunction): Implement the tie-breaking rules from
2012         14.4.2.2 of the spec: if two methods unify for some type parameter
2013         substitution, we need to pick the more specific one.
2014
2015 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2016
2017         Fix #76656, cs0231-2.cs.
2018         * cs-parser.jay (formal_parameter_list): Make error case catch
2019         more issues.
2020         (parenthesized_expression_0): Add CS1026 check.
2021         (invocation_expression): Remove unused { $$ = lexer.Location }.
2022
2023 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2024
2025         Fix #76824.
2026         * cs-parser.jay (statement_expression): Don't list out the
2027         individual statement-expressions.  Convert syntax error into
2028         CS0201 check.
2029
2030 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2031
2032         Fix #76874.
2033         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2034         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2035         CheckIntermediateModification.
2036         (FieldExpr.DoResolve): Add new two-argument version that
2037         allows us to resolve the InstanceExpression as an lvalue.
2038         The one-argument variant is now just a wrapper.
2039         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2040         Resolve the lhs as an lvalue if the it has a value type.
2041         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2042         from Assign.DoResolve.
2043         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2044         resolved as an lvalue.
2045         (PropertyExpr.DoResolve): Update.
2046         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2047         has a value type.  Move CS1612 check here from
2048         CheckIntermediateModification.
2049         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2050         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2051         'right_side' of a ResolveLValue on an 'out' argument.
2052         (EmptyExpression.LValueMemberAccess): New.  Used as the
2053         'right_side' of a propagated ResolveLValue on a value type.
2054         (LocalVariableReference.DoResolveBase): Recognize
2055         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2056         Add CS1654 check.
2057         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2058         EmptyExpression.Null.
2059
2060 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2061
2062         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2063           Type.IsGenericParameter(). Fixed bug #77183.
2064         * doc.cs : it is now identical to doc.cs in mcs.
2065
2066 2006-01-16  Martin Baulig  <martin@ximian.com>
2067
2068         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2069
2070 2006-01-16  Martin Baulig  <martin@ximian.com>
2071
2072         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2073         ctors; fixes #77250.
2074
2075 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2076
2077         This fixes the problem where we used ldfld instead of ldflda to
2078         load the "THIS" pointer on captured parameters, when THIS is a
2079         value type.  See bug #77205.
2080         
2081         * iterators.cs (CapturedThisReference.Emit): Pass false to
2082         EmitThis (we do not need the address).
2083
2084         * codegen.cs (EmitThis): it needs to know whether we need the
2085         address of `this' or not.  This is used by value types.  
2086
2087         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2088         every other call passes false.
2089
2090 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2091
2092         Fix #77221.
2093         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2094         GetOverride.
2095         * expression.cs (Invocation.OverloadResolve): Update.
2096         (Invocation.DoResolve): Avoid double resolution of invocation.
2097
2098 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2099
2100         Fix #77180.
2101         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2102         unary negation of floating point types as 0-expr; negation cannot
2103         overflow in floating point types.
2104
2105         Fix #77204.
2106         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2107         on operands of 'void' type.
2108
2109         Fix #77200.
2110         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2111         and ExclusiveOr for boolean constants too.
2112
2113 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2114
2115         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2116
2117 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2118
2119         * cs-tokenizer.cs (Position): New class used to save and restore
2120         the position state in the tokenizer.  Before this patch the save
2121         and restore was not complete enough so the line and columns would
2122         start to drift and the debugger and stack traces will get the
2123         wrong data.
2124
2125 2006-01-10  Martin Baulig  <martin@ximian.com>
2126
2127         * generic.cs
2128         (TypeParameter.InflateConstraints): New public method.
2129
2130         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2131         constraints; fixes #77042.
2132
2133 2006-01-10  Martin Baulig  <martin@ximian.com>
2134
2135         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2136         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2137         #77061. 
2138
2139 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2140
2141         Fix #75636.
2142         * expression.cs (Invocation.OverloadResolve): Replace reflected
2143         override methods with their base virtual methods, rather than
2144         skipping over them.
2145         * typemanager.cs (TypeManager.GetOverride): New.
2146
2147 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2148
2149         * driver.cs: Report the case of no source files and no -out:
2150         argument provided.
2151
2152 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2153
2154         Fix #77035.
2155         * expression.cs (ComposedCast.GetSignatureForError): Define.
2156
2157 2006-01-05  Jb Evain  <jbevain@gmail.com>
2158
2159         * class.cs (Property.Define, Indexer.Define): do not tag the
2160         properties as SpecialName | RTSpecialName.
2161
2162 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2163
2164         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2165         doing a low-level comparission of parameter types.  It was lacking
2166         a check for __argslist. 
2167
2168 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2169
2170         * expression.cs (ParameterReference.DoResolveBase): Allow
2171         reference parameters if they are local to this block. 
2172
2173         This allows the ref and out parameters of a delegate to be used in
2174         an anonymous method, for example:
2175
2176         delegate void set (out int x);
2177
2178         set s = delegate (out int x){
2179                 x = 0;
2180         };
2181
2182         This is used by functionality introduced late in the C# language.
2183         
2184         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2185         method that take ref and out parameters. 
2186
2187         Fixes #77119 which was a late change in the spec.
2188
2189 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2190
2191         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2192         parent if its the same scope.  Fixes #77060.
2193
2194 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2195
2196         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2197
2198 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2199
2200         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2201         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2202         that doesn't contain the full public key. This is a update of the
2203         friend assemblies in .Net 2.0 release.
2204         
2205 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2206
2207         Fix #76995
2208
2209         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2210         ListDictionary, to contain the ExternAliasEntry entries (in
2211         addition to the NamespaceEntry.aliases hashtable). This field is
2212         shared between the original entry and its doppelganger (bodyless 
2213         copy of it).
2214         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2215         extern_aliases field.
2216         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2217         lookup in extern_aliases.
2218
2219 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2220
2221         Fix #77006.
2222         * class.cs (TypeContainer.Mark_HasEquals): New.
2223         (TypeContainer.Mark_HasGetHashCode): New.
2224         (ClassPart): Override them.
2225         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2226
2227         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2228         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2229         DeclSpace.
2230
2231         Fix #77008.
2232         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2233         'parent' argument to the base constructor.
2234
2235         Remove all mention of TypeContainer from decl.cs.
2236         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2237         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2238         (DeclSpace.DeclSpace): Likewise.
2239         (DeclSpace.DefineMembers): Remove unused argument.
2240         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2241         debugging check -- we don't care if the debug code throws an
2242         InvalidCastException instead of an InternalErrorException.
2243         * class.cs (TypeContainer.DefineMembers): Update to changes.
2244         (TypeContainer.DoDefineMembers): Likewise.
2245         (TypeContainer.GetMethods): Likewise.
2246         (PropertyMember.Define): Likewise.
2247         (MemberBase.Parent): New property that forwards to
2248         MemberCore.Parent, but ensures that we get a TypeContainer.
2249         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2250         (RootContext.PopulateTypes): Likewise.  Remove special case code
2251         for !RootContext.StdLib: DefineMembers is idempotent.
2252
2253 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2254
2255         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2256
2257 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2258
2259         * doc.cs : The search for referenced namespace was insufficient to
2260           get global one as it used to do. Fixed bug #76965.
2261
2262 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2263
2264         * doc.cs : check name in cref in the last phase that whether it is
2265           namespace or not.
2266
2267 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2268
2269         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2270           Mono.C5.
2271
2272 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2273
2274         * doc.cs : so it turned out that we cannot skip override check for 
2275           interface members. Fixed bug #76954.
2276
2277 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2278
2279         * cs-tokenizer.cs : fixed bug #75984:
2280           - #warning and #error should not be handled when the source line
2281             is disabled.
2282           - #line is not checked strictly when the source line is disabled.
2283           - #define and #undef is on the other hand checked strictly at any
2284             state.
2285
2286 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2287
2288         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2289           CS1027 report.
2290
2291 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2292
2293         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2294
2295         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2296         nested types.
2297
2298 2005-12-14  Martin Baulig  <martin@ximian.com>
2299
2300         * typemanager.cs (TypeManager.GetFullName): Make this public;
2301         `Type.Fullname' now never returns null.
2302
2303         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2304         explicit interface implementations; we're now using the same
2305         naming convention than csc does.
2306
2307 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2308
2309         * convert.cs (ExplicitConversionCore): Check the return value from
2310         ExplicitConversionCore which can return null on failure.  Fixes #76914
2311
2312 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2313
2314         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2315         instead of IsGenericInstance.
2316         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2317         code that's now covered by the more general test.
2318         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2319
2320         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2321         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2322         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2323         * generic.cs, report.cs, typemanager.cs: Likewise.
2324
2325 2005-12-08  Martin Baulig  <martin@ximian.com>
2326
2327         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2328
2329         * typemanager.cs (TypeManager.CSharpSignature): Include type
2330         arguments in the signature of a generic method.
2331
2332 2005-12-07  Martin Baulig  <martin@ximian.com>
2333
2334         Add support for custom attributes on type parameters.
2335
2336         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2337
2338         * generic.cs (TypeParameterName): New public class; we use this
2339         instead of a `string' to store the name of a type parameter, so we
2340         can also have `Attributes'.
2341         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2342         array instead of a `string[]' array.
2343         (TypeParameter.ctor): We now also take an `Attributes' argument.
2344         (TypeParameter.EmitAttributes): New public method; emit our
2345         `OptAttributes' here.
2346         (GenericMethod.EmitAttributes): New public method; emit the custom
2347         attributes on all our type parameters.
2348
2349         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2350         our type parameters.
2351         (MethodData.Define): If we're a generic method, call
2352         EmitAttributes() on it.
2353
2354 2005-12-07  Martin Baulig  <martin@ximian.com>
2355
2356         * generic.cs
2357         (ConstraintChecker): New public abstract class; move the
2358         constraint checking here from `ConstructedType' and also do
2359         constraint checking for generic methods here.
2360
2361         * expression.cs (Invocation.OverloadResolve): Use
2362         ConstraintChecker.CheckConstraints() if we resolved to a generic
2363         method.  Fix #76806.
2364
2365 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2366
2367         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2368
2369         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2370         event initializers.
2371         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2372         (FieldBase.Initializer): Initializer is now optional.
2373         (EventField.Define): Only event field can have initializer.
2374
2375         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2376
2377         * const.cs (Const): Reuse initializer.
2378
2379         * cs-parser.jay: Updated after FieldBase changes.
2380         Added current_array_type to simplify array initializers.
2381
2382         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2383
2384         * expression.cs, iterators.cs: Updated.
2385
2386         * namespace.cs (NamespaceEntry): Made UsingFound private.
2387
2388 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2389
2390         * parameterCollection.cs: Obsolete, removed.
2391         * parser.cs: Obsolete, removed.
2392
2393 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2394
2395         Fix #76849.
2396         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2397
2398         * enum.cs (Enum.Define): Set obsolete context here.
2399
2400 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2401
2402         * doc.cs :
2403           - FindDocumentedMember() now expects 1) paramList as null
2404             when "we don't have to check the number of parameters" and
2405             2) Type.EmptyTypes when "there is no arguments".
2406           - Introduced FoundMember struct to hold the exact type which was
2407             used to find the documented member (the above change broke
2408             test-xml-044; it might be better just to use DeclaringType than
2409             what MS does, like this change does, but it depends on usage.)
2410
2411 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2412
2413         * doc.cs : documented member might be from DeclaringType for nested
2414           types. Fixed bug #76782.
2415
2416 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2417
2418         * anonymous.cs: Have the param code handle leaving copies on the
2419         stack etc. Allows anonymous params to take part in the assignment
2420         code (++, +=, etc). Fixes bug #76550
2421
2422         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2423         it down to the anon code.
2424
2425         * iterators.cs: Use dummy var here
2426
2427         * codegen.cs: Handle new vars
2428
2429 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2430
2431         Fix #76849.
2432         * class.cs (MethodData.Define): Set proper Obsolete context.
2433
2434         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2435         obsolete context.
2436         (FieldExpr.DoResolve): Ditto.
2437
2438 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2439
2440         Fix #76849.
2441         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2442         parent is not obsolete.
2443
2444 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2445
2446         * doc.cs : (FindDocumentedMember) find parameterless members first
2447           and get CS0419 in the early stage. Fixed first case of bug #76727.
2448
2449 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2450
2451         Fix #76859.
2452         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2453         no error was reported.
2454
2455         *expression.cs (Binary.DoResolve): left can be null.
2456
2457 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2458
2459         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2460         abstract method and all overrides.
2461         * support.cs (ParameterData.GenericConstraints): Delete.
2462         (ReflectionParameters.type_params): Delete.
2463         (ReflectionParameters.ReflectionParameters): Make private.
2464         (ReflectionParameters.GetConstaints): New factory method.
2465         * generic.cs (TypeParameterDefineType): Use it.
2466         (TypeManager.GetTypeParameterConstraints): Likewise.
2467
2468 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
2469
2470         Fix #76783.
2471         * class.cs (MethodData.Emit): Parameters should be labeled first.
2472
2473 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
2474
2475         Fix #76761.
2476         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
2477
2478 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
2479
2480         * attribute.cs (AreParametersCompliant): Moved to Parameter.
2481
2482         * class.cs (MethodCore): Parameter clean up.
2483         (IMethodData): Added ParameterInfo.
2484         (MethodData): Parameter clean up.
2485         (Indexer.Define): Parameter clean up.
2486
2487         * anonymous.cs,
2488         * codegen.cs,
2489         * cs-parser.jay,
2490         * decl.cs,
2491         * doc.cs,
2492         * ecore.cs,
2493         * flowanalysis.cs,
2494         * iterators.cs,
2495         * pending.cs,
2496         * statement.cs,
2497         * typemanager.cs: Parameter clean up.
2498
2499         * delegate.cs (Define): Get rid of duplicated code.
2500
2501         * expression.cs (ParameterReference): Removed useless parameters
2502         and simplified.
2503         (Invocation): Ditto.
2504
2505         * parameter.cs (ParamsParameter): New class, params specialization.
2506         (ArglistParameter): Attemp to separate arglist.
2507         (Parameter): Refactored to be reusable and faster.
2508         (Parameter.Modifier): Made understandable.
2509         (Parameters): Changed to be used as a class for `this' assembly
2510         parameters. Refactored to use new specialized classes.
2511
2512         * support.cs (ParameterData): Added Types property.
2513         (InternalParameters): Deleted.
2514
2515 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2516
2517         * doc.cs : the previous patch does not actually fix the bug.
2518           PropertyInfo override check is now implemented and really fixed it.
2519         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
2520
2521 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2522
2523         * doc.cs : apply "override filter" also to properties.
2524           Fixed bug #76730.
2525
2526 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2527
2528         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
2529           no need to check overrides. For classes, omit those results from 
2530           interfaces since they must exist in the class. Fixed bug #76726.
2531
2532 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2533
2534         * typemanager.cs : (GetFullNameSignature) differentiate indexers
2535           with different parameters. Fixed the second problem in #76685.
2536
2537 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2538
2539         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
2540           get expected 'protected' access in CheckValidFamilyAccess()).
2541           Fixed bug #76692.
2542
2543 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2544
2545         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
2546           Fixed bug #76705.  CS1569 was incorrectly commented out.
2547
2548 2005-11-23  Martin Baulig  <martin@ximian.com>
2549
2550         * generic.cs (Constraints.Define): Removed.
2551         (TypeParameter.DefineConstraints): Removed.
2552         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
2553         on the GenericTypeParameterBuilder here.
2554
2555 2005-11-23  Martin Baulig  <martin@ximian.com>
2556
2557         * typemanager.cs (TypeManager.GetProperty): Make this public.
2558
2559         * generic.cs (Nullable.NullableInfo.ctor): Use
2560         TypeManager.GetProperty() rather than using reflection directly.
2561
2562 2005-11-17  Martin Baulig  <martin@ximian.com>
2563
2564         * expression.cs (Indexers.GetIndexersForType): Added support for
2565         generic parameters; fixes #76587.
2566
2567 2005-11-17  Martin Baulig  <martin@ximian.com>
2568
2569         * anonymous.cs
2570         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
2571         inherit the scope from our parent.  Fixes #76653.
2572
2573 2005-11-15  Martin Baulig  <martin@ximian.com>
2574
2575         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
2576         instead of `ScopeTypeBuilder' to refer to the "current" type.
2577         (AnonymousMethod.CreateScopeType): Correctly create the helper
2578         class if we're inside a generic type definition.
2579
2580 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2581
2582         * doc.cs : use Invocation.IsOverride() to do real override check.
2583         * expression.cs : made Invocation.IsOverride() internal.
2584
2585 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2586
2587         * doc.cs : use TypeManager.FindMembers() instead of (possible)
2588           TypeBuilder.FindMembers() and filter overriden base members out.
2589           Fixed bug #76990.
2590
2591 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2592
2593         * doc.cs : ref/out parameters are represented as '@' (instead of
2594           '&' in type FullName). Fixed bug #76630 (additionally crefs).
2595
2596 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2597
2598         * doc.cs : when there was no '.' in cref to methods in doc comment,
2599           then parameters were missing in the output. Fixed bug #76691.
2600
2601 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2602
2603         * driver.cs : don't output docs when there is an error.
2604           Fixed bug #76693.
2605
2606 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2607
2608         * doc.cs :
2609           Now it should detect indexers. Fixed primary concern in bug #76685.
2610           Fixed CS0419 message to not show the identical member signature in
2611           the message.
2612
2613 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2614
2615         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
2616           instead of Type.FindMembers() since it does not handle events.
2617           Fixed bug #71604.
2618
2619 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
2620
2621         * codegen.cs: Fixed typo (speficied -> specified).
2622
2623 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2624
2625         Fix #76369.
2626         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
2627
2628 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2629
2630         * attribute.cs: Changed error message.
2631
2632         * cs-tokenizer.cs: One more check.
2633
2634 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2635
2636         * statement.cs (Block.Resolve): Ignore empty statement.
2637
2638 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2639
2640         * report.cs: Made error/warning methods more strict to avoid
2641         their misuse.
2642
2643         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
2644         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
2645         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
2646         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
2647
2648 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2649
2650         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
2651         Use the more explicit AssemblyName.FullName instead of 
2652         AssemblyName.Name to report errors.
2653         
2654 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2655
2656         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
2657         with mcs.
2658
2659 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2660
2661         * class.cs,
2662         * convert.cs,
2663         * cs-parser.jay,
2664         * decl.cs,
2665         * enum.cs,
2666         * expression.cs,
2667         * generic.cs,
2668         * pending.cs,
2669         * report.cs: Fixed error reporting and typos.
2670
2671         * generic.cs (TypeParameter.GetSignatureForError): New method.
2672         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
2673
2674         * typemanager.cs (GetFullName): Refactored.
2675
2676 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
2677
2678         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
2679         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
2680
2681         * class.cs (TypeContainer.IsComImport): New property.
2682         (Constructor.Define): Create proper ctor for ComImport types.
2683
2684         * expression.cs (New.CheckComImport): Fixed.
2685
2686 2005-11-07  Miguel de Icaza  <miguel@novell.com>
2687
2688         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
2689         that a parameter has been captured does not mean that we do not
2690         have to do the rest of the processing.  This fixes the second part
2691         of #76592.  If there was another anonymous method capturing
2692         values in the past, the Scope would never be set for the second
2693         method that captured the same parameter.
2694
2695         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
2696         properly manipulate the stack.   Second part of fix for #76592.
2697
2698         * expression.cs (New): Add support for invoking "new" on
2699         interfaces that have been flagged with the ComImport attribute and
2700         the CoClass.  Fixes #76637 
2701
2702         * statement.cs (Try.DoEmit): When a variable is captured, do not
2703         try to emit the vi.LocalBuilder variable as it has been captured.
2704         Create a temporary variable and store the results on the
2705         FieldBuilder.  Fixes #76642
2706
2707 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2708
2709         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
2710
2711         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
2712
2713         * expression.cs (Binary.DoResolve): Added && optimalization.
2714     
2715         * typemanager.cs (AddUserType): Removed useless argument.
2716
2717 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
2718
2719         * statement.cs (Block.variables): Uses ListDictionary.
2720
2721 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2722
2723         Fix #75969.
2724         * class.cs (PartialContainer.EmitType): Customized to emit
2725         security attributes.
2726         (ClassPart.ApplyAttributeBuilder): Transform security attribute
2727         for partial classes.
2728
2729 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2730
2731         Fix #76599.
2732         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
2733         access has to be fixed.
2734         
2735         * typemanager.cs (IsUnmanagedType): Wrong common field type.
2736
2737 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
2738
2739         Fix #76590.
2740         * ecore.cs (NullCast.Reduce): Implemented.
2741
2742         * expression.cs (ArrayCreation.CheckIndices): Correcly check
2743         constant type.
2744         
2745         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
2746         properly.
2747         (Foreach.Resolve): Catch null properly.
2748
2749 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
2750  
2751         * cs-tokenizer.cs: Warning text fix.
2752
2753         * driver.cs: AllWarningNumbers exposed on public interface.
2754
2755         * report.cs (): Reviewed warning numbers.
2756         (IsValidWarning): Use binary search.
2757
2758 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
2759  
2760         * driver.cs: Implemeted resource visibility.
2761         (Resources): New class for code sharing between /res: and
2762         /linkres:
2763  
2764 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2765
2766         decl.cs (CurrentTypeParameters): Fixed to be public.
2767
2768 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2769
2770         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
2771
2772 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2773
2774         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
2775
2776 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
2777
2778         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
2779
2780 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2781
2782         Add friend assembly access support.
2783         * typemanager.cs: assembly_internals_vis_attrs
2784         cache for friend assembly access. 
2785         (TypeManager.IsFriendAssembly): New method for
2786         checking friend assembly access.
2787         (TypeManager.Error_FriendAccessNameNotMatching): New
2788         helper method.
2789         (TypeManager.CompareKeyTokens): Likewise.
2790         (TypeManager.Filter): Handle friend accessible
2791         members.
2792
2793         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
2794         friend accessible types.
2795
2796         * ecore.cs (Expression.IsAccessorAccessible): Handle
2797         friend accessible properties.
2798
2799         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
2800         accessible types.
2801         
2802 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
2803
2804         Fix #76568.
2805         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
2806         folding.
2807         
2808         * convert (Convert.ImplicitReferenceConversion): NullCast holds
2809         contants only.
2810         
2811         * ecore.cs (NullCast): Child is contant only.
2812         
2813         * literal.cs (NullLiteral.Reduce): null can be converted to any
2814         reference type.
2815
2816 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
2817
2818         * driver.cs: Use Encoding.Default as default code page instead
2819           of ISO-28591.
2820
2821 2005-10-27  Raja R Harinath  <rharinath@novell.com>
2822
2823         Fix #76085.
2824         * expression.cs (Invocation.Error_InvalidArguments): Handle
2825         __arglist parameters.
2826         (Invocation.VerifyArgumentsCompat): Likewise.
2827         * support.cs (ReflectionParameters.GetSignatureForError): Print
2828         __arglist parameters.
2829         (InternalParamters.GetSignatureForError): Likewise.
2830         * parameter.cs (Parameters.GetSignatureForError): Likewise.
2831
2832 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
2833
2834         * attribute.cs (GetPropertyValue): Made public.
2835
2836         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
2837         Resolve.
2838         Add new property WrapNonExceptionThrows to handle 2.0 assembly
2839         attribute.
2840         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
2841         is not defined.
2842         
2843         * driver.cs: Reflect method name change.
2844         
2845         * statement.cs (Try.Resolve): Warn when try has both general
2846         exception handlers.
2847         
2848         * typemanager.cs: runtime_compatibility_attr_type new predefined
2849         type.
2850
2851 2005-10-26  Raja R Harinath  <harinath@gmail.com>
2852
2853         Fix #76419.
2854         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
2855         treat it as an empty parameter list.
2856
2857 2005-10-26  Raja R Harinath  <rharinath@novell.com>
2858
2859         Fix #76271.     
2860         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
2861         ResolveAsTypeStep silent.
2862         * statement.cs (Block.AddConstant): Mark block as used.
2863         (Block.ResolveMeta): Avoid piling on error messages
2864         if a constant initializer resolution fails.
2865
2866 2005-10-25  Raja R Harinath  <rharinath@novell.com>
2867
2868         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
2869         Remove.
2870         (NamespaceEntry.VerifyAllUsing): New.
2871         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
2872         behaviour.  Delegates actual resolution of alias to ...
2873         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
2874         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
2875         Update.
2876         * driver.cs (Driver.MainDriver): Update.
2877         
2878         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
2879         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
2880         property.
2881         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
2882         Remove.
2883         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
2884         RootNamespace.DefineNamespacesForAll.
2885
2886 2005-10-24  Raja R Harinath  <harinath@gmail.com>
2887
2888         * typemanager.cs (assemblies, external_aliases, modules)
2889         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
2890         (ComputeNamespaces, GetRootNamespace): Remove extra staging
2891         overhead.  Move resposibility ...
2892         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
2893         * driver.cs, attribute.cs, codegen.cs: Update to changes.
2894
2895 2005-10-23  Raja R Harinath  <harinath@gmail.com>
2896
2897         * namespace.cs (RootNamespace.all_namespaces): Renamed from
2898         cached_namespaces.  Improve usage.
2899         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
2900         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
2901         Move from GlobalRootNamespace and simplify.
2902         (RootNamespace.Global): Make instance variable.
2903         (RootNamespace.RootNamespace): Add "alias name" parameter.
2904         (GlobalRootNamespace): Simplify drastically.
2905         (Namespace.Lookup): Don't use GetNamespace.
2906         * typemanager.cs (GetRootNamespace): Rename from
2907         ComputeNamespaceForAlias.
2908         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
2909
2910 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
2911
2912         * anonymous.cs (AnonymousContainer): Don't crash when container
2913         doesn't exist.
2914
2915 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
2916
2917         * expression.cs (Binary.DoResolve): Warn when comparing same
2918         values.
2919
2920 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
2921
2922         Fix #76486.
2923         * expression.cs (Binary.DoResolve): It looks like there are no
2924         convetsion rules in enum context.
2925
2926 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2927
2928         Add support for extern alias qualifiers.
2929         * typemanager.cs: Move some LookupTypeReflection code
2930         to namespace.cs, to have cleaner code. Added some methods
2931         to help us keep track of the extern aliased references.
2932         * driver.cs: Add suport for extern alias assemblies on command
2933         line and check for their warnings/errors. Also keep track of the
2934         extern aliased assemblies.
2935         * namespace.cs: Move the global functionality of Namespace
2936         to GlobalRootNamespace/RootNamespace. Now the global namespace
2937         is GlobalRootNamespace.Globa. Also the code moved from 
2938         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
2939         Finally added LocalAliasEntry (AliasEntry before) and
2940         ExternAliasEntry, to handle alias statements.
2941         * cs-parser.jay: Add support in the grammar for extern alias
2942         statement.
2943         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
2944         Update callings to Namespace (now in GlobalRootNamespace).
2945
2946 2005-10-25  Martin Baulig  <martin@ximian.com>
2947
2948         * convert.cs (ImplicitTypeParameterConversion): Make base
2949         interfaces actually work; fixes #76557.
2950
2951 2005-10-25  Martin Baulig  <martin@ximian.com>
2952
2953         * generic.cs
2954         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
2955         all the type parameters; fixes #76551.
2956
2957 2005-10-25  Martin Baulig  <martin@ximian.com>
2958
2959         Fix #76472.
2960
2961         * generic.cs
2962         (GenericMethod.ctor): Added `Expression return_type' and
2963         `Parameters parameters' arguments.
2964         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
2965         parameter and return types to check their constraints if they're
2966         generic types.
2967
2968         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
2969         boolean field.
2970
2971         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
2972         constraints of a generic type if `ec.ResolvingGenericMethod'.
2973
2974         * class.cs (MethodCore.DoDefineParameters): Set
2975         `ec.ResolvingGenericMethod' if we're a generic method.
2976         (MemberBase.MemberType): Likewise.
2977
2978 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2979
2980         * typemanager.cs (TypeManager): Added 
2981         TypeManager.internals_visible_attr_type to cache
2982         S.R.CompilerServices.InternalsVisibleToAttribute.
2983
2984         * codegen.cs (AssemblyClass): Added checks for 
2985         InternalsVisibleToAttribute in new method 
2986         CheckInternalsVisibleAttribute () and also cache the
2987         AssemblyName in AssemblyClass.Name.
2988         
2989 2005-10-24  Martin Baulig  <martin@ximian.com>
2990
2991         * typemanager.cs
2992         (TypeManager.ExpandInterfaces): Added overloaded version which
2993         just takes a `Type[]' array.
2994
2995         * generic.cs
2996         (Constraints.Resolve): Don't expand the interfaces here; ie. we
2997         just use the interfaces which were explicitly specified and not
2998         the interfaces they inherit.  Fixes #76482.
2999         (TypeParameter.FindMembers): Expand the interfaces here.
3000
3001 2005-10-21  Martin Baulig  <martin@ximian.com>
3002
3003         * generic.cs
3004         (Constraints.Resolve): Also resolve the actual types here.
3005         (Constraints.ResolveTypes): Just check the constraints here.
3006         Fixes #76363; see gtest-218.cs.
3007
3008 2005-10-21  Martin Baulig  <martin@ximian.com>
3009
3010         * convert.cs
3011         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3012         instead of a `BoxedCast'; fixes gtest-217.cs.
3013
3014 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3015
3016         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3017           1) "new()" is specified as generic parameter constraint and 2) the
3018           type is TypeBuilder and 3) the type is abstract even if it has a
3019           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3020
3021 2005-10-20  Martin Baulig  <martin@ximian.com>
3022
3023         * generic.cs
3024         (GenericConstraints.TypeParameter): New public property.
3025         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3026         (TypeParameter.DeclSpace): New public property.
3027         (TypeParameter.DefineType): Inflate the constraints if our
3028         `DeclSpace' is an `Iterator'.   
3029
3030 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3031
3032         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3033           GenericMethod argument to compare methods' generic type arguments.
3034           Fixed bug #76382.
3035
3036 2005-10-19  Martin Baulig  <martin@ximian.com>
3037
3038         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3039         not ResolveType() when resolving the base type, so we're not
3040         checking the constraints here.
3041         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3042         if we have any.
3043
3044 2005-10-19  Martin Baulig  <martin@ximian.com>
3045
3046         * generic.cs (ConstructedType.CheckConstraints): Committing
3047         untested fix for #76441.
3048
3049 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3050
3051         Fix #76371.
3052         * class.cs (TypeContainer.DefineType): Move updating of
3053         topological sort earlier in the code.
3054         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3055
3056 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3057
3058         Fix #76273.
3059         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3060         
3061         * constant.cs (Constant.TryReduce): Moved from Cast class.
3062         (Reduce): Made little bit more OO and fixed missing conversions.
3063         
3064         * ecore.cs (Reduce): Implemented.
3065         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3066         
3067         * literal.cs (Reduce): Implemented.
3068         
3069         * class.cs: Reverted Miguel's wrong commit.
3070
3071 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3072
3073         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3074
3075 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3076
3077         * cs-parser.jay, expression.cs : CS0214 was missing error location
3078           for constants. Fixed bug #76404.
3079
3080 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3081
3082         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3083         InstanceExpression.
3084         (PropertyExpr.EmitCall): Likewise.
3085         * expression.cs (Invocation.EmitArguments): Handle case where
3086         arguments == null.
3087         (Invocation.EmitCall): Avoid allocating temporary variable if
3088         there are no arguments.
3089
3090 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3091
3092         Fix #76370.
3093         * convert.cs (ExplicitConversionCore): Fixed object->enum
3094         conversion.
3095
3096 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3097
3098         Fix #76323.
3099         * convert.cs (ImplicitConversionStandard): Move conversion of
3100         void* to arbitrary pointer types ...
3101         (ExplicitConversionStandard): .. here.
3102         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3103         error to always print typenames.
3104
3105 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3106
3107         * convert.cs (GetConversionOperator): Rename from
3108         GetConversionOperators.  Move operator selection code from ...
3109         (UserDefinedConversion): ... here.
3110
3111 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3112
3113         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3114         conversion.
3115
3116 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3117
3118         * assign.cs (Assign.DoResolve): Error method changed.
3119
3120         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3121         
3122         * const.cs (ResolveValue): Reset in_transit immediately.
3123         
3124         * constant.cs: Error method changed.
3125         
3126         * convert.cs: Removed useless location parameter.
3127         (ExplicitNumericConversion): Don't do double enum check.
3128         (ExplicitConversionCore): Renamed from ExplicitConversion.
3129         (ExplicitUnsafe): Extracted from ExplicitConversion.
3130         (ExplicitConversion): Uses for error reporting.
3131         
3132         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3133         error messages.
3134         (ResolveBoolean): Uses common error method.
3135         (CastToDecimal): Get rid of ec.
3136         (CastFromDecimal): Optimized.
3137         (ConvCast): Get rid of ec.
3138         
3139         * enum.cs (ResolveValue): Reset in_transit immediately.
3140         (Emit): Return after first error.
3141         
3142         * expression.cs: Convert changes.
3143         
3144         * literal.cs: Error method changed.
3145         
3146         * statement.cs: Error method changed.
3147
3148 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3149
3150         Fix gtest-131.cs and gtest-211.cs.
3151         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3152         Only emit code for a label if it is used.  Unreachable code can
3153         violate ECMA evaluation stack invariants.
3154
3155 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3156
3157         * anonymous.cs: Implemented ExprClassName.
3158         
3159         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3160         delegate.
3161         
3162         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3163         check.
3164         
3165         * class.cs (StaticClass.DefineContainerMembers): Report protected
3166         members as error.
3167         
3168         * codegen.cs: if(ed) PRODUCTION.
3169         
3170         * convert.cs (Error_CannotImplicitConversion): Better error
3171         distinction.
3172         
3173         * cs-parser.jay: More error checks.
3174         
3175         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3176         
3177         * driver.cs (CSCParseOption): Enabled wrong option check.
3178         
3179         * ecore.cs (Expression.ExprClassName): Turned to property.
3180         (MemberExpr.CheckIntermediateModification): For checking boxed
3181         value types     modification.
3182         
3183         * statement.cs (Fixed.Resolve): Expression type must be
3184         convertible to fixed type.
3185         (CollectionForeach.GetEnumeratorFilter,TryType):
3186         Small refactoring for easier error checking.
3187
3188 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3189
3190         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3191         attributes.
3192         
3193         * class.cs (GeneratedBaseInitializer): New class for customization
3194         compiler generated initializers.
3195         (MemberBase.DoDefine): Check Obsolete attribute here.
3196         (FieldMember.DoDefine): Ditto.
3197         
3198         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3199         constants.
3200         
3201         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3202         (MemberCore.GetObsoleteAttribute): Removed argument.
3203         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3204         (MemberCore.CheckObsoleteType): New helper.
3205         
3206         * delegate.cs,
3207         * enum.cs,
3208         * statement.cs: Updates after MemberCore changes.
3209         
3210         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3211         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3212         
3213         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3214         obsolete attribute for compiler construct.
3215         (As.DoResolve): Cache result.
3216         
3217         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3218
3219 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3220
3221         * expression.cs (Probe): instead of having a "Type probe_type"
3222         keep the extra information as a TypeExpr probe_type_expr since the
3223         "As" operator needs to perform some type checks.
3224
3225         * (As.DoResolve): If the type is a type parameter, ensure that it
3226         is constrained by a class.
3227
3228 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3229
3230         * statement.cs (Lock): Use the TemporaryVariable class instead of
3231         manually using local variables as those do not work when variables
3232         are captured.
3233
3234         * ecore.cs: Moved the TemporaryVariable class from being a nested
3235         class inside Foreach to be a public class that can be employed in
3236         other places. 
3237
3238 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3239
3240         * cs-parser.jay: interface_accessors replaced by
3241         accessor_declarations.
3242
3243         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3244         location.
3245         
3246         * statement.cs (GotoCase.Resolve): Convert null constant to
3247         null case.
3248         (SwitchLabel.ResolveAndReduce): Ditto.
3249         (SwitchLabel.NullStringCase): Custom null stamp.
3250         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3251         
3252         typemanager.cs (CSharpSignature): Don't skip first argument
3253         for full names.
3254
3255 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3256
3257         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3258         expression.cs, iterators.cs, literal.cs: Store constants and
3259         literals location.
3260         
3261         * class.cs (MemberBase.ShortName): Pass location.
3262         
3263         * cs-parser.jay: Some location fixes.
3264         
3265         * ecore.cs (Expression.Location): Made virtual.
3266
3267 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3268
3269         Fix #72930.
3270         * const.cs (Const.ResolveValue): Check for assigning non-null
3271         value to reference type.
3272
3273 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3274
3275         Fix #76133.
3276         * expression.cs (This.VerifyFixed): In a value type T, the type of
3277         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3278         value type R, 'this' is treated as a value parameter.
3279
3280 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3281
3282         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3283         if the underlying types are the same, otherwise we need to produce
3284         code that will do the proper cast.
3285
3286         This was exposed by Marek's constant rewrite which produced
3287         invalid code for the call site:
3288
3289         enum X : long { a }
3290         void Method (X v) {}
3291
3292         Method ((X) 5)
3293
3294         This fixes test-49.cs
3295
3296 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3297
3298         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3299           Type/Object should be allowed as well. Fixed bug #75968.
3300
3301 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3302
3303         * expression.cs : (Binary.DoResolve): when one is enum constant and
3304           another is constant 0, then return enum one *as enum type*.
3305           Fixed bug 74846.
3306
3307 2005-10-04  Martin Baulig  <martin@ximian.com>
3308
3309         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3310         `SetMemberIsUsed()' work for generics, too.
3311
3312 2005-10-04  Martin Baulig  <martin@ximian.com>
3313
3314         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3315         for corlib.  Fixes #75691.
3316
3317 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3318
3319         Fix #76255.
3320         * driver.cs: Fix compilation files with full root path.
3321
3322 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3323
3324         * report.cs (SymbolRelatedToPreviousError): Format the output so
3325         it does not use an open parenthesis that is never closed. 
3326
3327         * driver.cs: Follow coding guidelines
3328
3329 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3330
3331         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3332
3333         * location.cs (InEmacs): in this mode, do not report column
3334         location as it confuses Emacs.
3335
3336 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3337
3338         * support.cs (SeekableStreamReader.Position): Don't error out when
3339         the requested position is just beyond the end of the current
3340         buffered data.
3341
3342 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3343
3344         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3345         try to keep in sync with the byte count of the underlying Stream.
3346         However, this limits us to a window size of 2048 characters: i.e.,
3347         the maximum lookahead of our lexer/parser can be 2048 characters.
3348
3349 2005-09-22  Martin Baulig  <martin@ximian.com>
3350
3351         * driver.cs: Removed a debugging FIXME.
3352
3353 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3354
3355         * cs-parser.jay (type_arguments): Add CS1644 check.
3356         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3357
3358 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3359
3360         * Makefile (PROGRAM): Make profile specific.
3361         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3362         the current directory.
3363
3364         Fix test-455.cs.
3365         * expression.cs (Invocation.EmitCall): Remove optimization on
3366         this_call since it doesn't handle 'this' being a value type.
3367
3368 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3369
3370         * driver.cs: Ensure file handles are closed after parsing
3371
3372 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3373
3374         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3375         if the underlying types are the same, otherwise we need to produce
3376         code that will do the proper cast.
3377
3378         This was exposed by Marek's constant rewrite which produced
3379         invalid code for the call site:
3380
3381         enum X : long { a }
3382         void Method (X v) {}
3383
3384         Method ((X) 5)
3385
3386         This fixes test-49.cs
3387
3388 2005-09-05  Martin Baulig  <martin@ximian.com>
3389
3390         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3391         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3392
3393         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3394
3395 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3396
3397         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3398           to be a pointer type due to the spec 25.2, so check if declaring
3399           type is generic type definition. Fixed bug #75772.
3400
3401 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3402
3403         Fixed bug #75957.
3404         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3405           both types are not defined by methods.
3406         * expression.cs : (Invocation.IsApplicable): it should work when
3407           the argument type is equal to the parameter type, not only when
3408           ImplicitConversionExists() returns true.
3409
3410 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3411
3412         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3413         internal.
3414
3415         Fix #75941.
3416         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3417         flow-branching for LocalVariableReferences in case we were invoked
3418         from a MemberAccess.
3419         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3420         Carved out of ...
3421         (LocalVariableReference.DoResolveBase): ... this.
3422         (MemberAccess.Resolve): Do the check that was disabled during
3423         SimpleNameResolve.
3424
3425 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3426
3427         * class.cs :
3428           (PartialContainer.Create): check abstract/sealed/static strictly
3429           but abstract/sealed can exist only at one side. Fixed bug #75883.
3430
3431 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3432
3433         Fix #75945.
3434         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3435         specified, don't default to UnmanagedType.I4.
3436
3437 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3438
3439         * expression.cs : conditional operator should check possibly
3440           incorrect assign expression. Fixed bug #75946.
3441
3442 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3443
3444         Fix #75934.
3445         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3446         (ScopeInfo.EmitScopeType): Use it to construct field names from
3447         names of captured locals.
3448
3449         Fix #75929.
3450         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3451         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3452         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3453         (ExplicitConversion): Remove enum cases already handled by
3454         implicit conversion.  Move implicit conversion check to the beginning.
3455         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3456         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3457         Don't treat System.Enum as a struct.
3458
3459 2005-08-30  Jb Evain  <jbevain@gmail.com>
3460
3461         * attribute.cs: handles as expression in parameters.
3462
3463 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3464
3465         Fix #75802.
3466         * class.cs (TypeContainer.VerifyClsName): Don't use a
3467         PartialContainer when verifying CLS compliance.
3468         (AbstractPropertyEventMethod): Set Parent here, ...
3469         (PropertyMethod): ... not here.
3470
3471 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
3472
3473         * attribute.cs : escaped attribute name should not be allowed to be
3474           resolved (e.g. @class as classAttribute). Fixed bug #75930.
3475
3476 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3477
3478         Fix #75927.
3479         * convert.cs (ImplicitStandardConversionExists): Allow zero also
3480         when converting a long constant to unsigned long.
3481         * expression.cs (Invocation.OverloadResolve): Add sanity check to
3482         detect where IsApplicable and VerifyArgumentsCompat disagree.
3483
3484 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3485         and Carlos Alberto Cortez  <carlos@unixmexico.org>
3486
3487         Fix #75848.
3488         * class.cs (TypeContainer.CanElideInitializer): New helper.
3489         (TypeContainer.EmitFieldInitializers): Use it to determine if we
3490         can safely emitting the initializer of a field.
3491
3492 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3493
3494         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
3495           allowed inside a switch (without loop). Fixed bug #75433.
3496
3497 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3498
3499         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3500         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3501
3502 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3503
3504         * driver.cs : kinda reverting the default encoding changes (not exact 
3505           revert since I noticed that "codepage:reset" might not work fine).
3506
3507 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3508
3509         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
3510           Location. Now getter and setter store location correctly.
3511           (errors/cs0111-12.cs now reports the expected location.)
3512
3513 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3514
3515         * driver.cs : Use default encoding on the environment.
3516           Removed (now that) extra parameter for SeekableStreamReader.
3517         * support.cs : (SeekableStreamReader) third .ctor() argument for
3518           StreamReader is not required (always true). preamble size could
3519           be acquired in simpler and safe way.
3520
3521 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
3522
3523         * cs-parser.jay: report CS0642 at warning level 3
3524           and report CS0642 for an if else statement also
3525           fixes bug #74745. Patch by John Luke (and a bit
3526           modified by me).
3527           Removed extra CS0642 warning check for "while",
3528           "for" and "fixed".
3529         * statement.cs: In Block.Resolve(), CS0642 check
3530           is reimplemented to check a sequence of an empty
3531           statement and a block.
3532
3533           Both fix bug #66777.
3534
3535 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
3536
3537         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
3538         detection until I fix it.
3539         
3540         * cs-tokenizer.cs: Changed error message.
3541         
3542         * cs-parser.jay: Fixed 2 error locations.
3543         
3544         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
3545         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
3546         properties.
3547         
3548         * enum.cs (GetSignatureForError): Fixed.
3549         
3550         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
3551         method detection.
3552         
3553         * class.cs,
3554         * typemanager.cs (RegisterProperty): Removed.
3555         
3556         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
3557
3558 2005-08-24  Raja R Harinath  <rharinath@novell.com>
3559
3560         Fix #75874.
3561         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
3562         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
3563
3564 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3565
3566         * expression.cs : tiny fix is required for not warning positive ulong.
3567           See test-441.cs.
3568
3569 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3570
3571         * expression.cs : add CS0652 check for constant and integral
3572           expression. Fixed bug #53974.
3573
3574 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3575
3576         * expression.cs : in DoNumericPromotions(), check if there is implicit
3577           conversion overload for string (to check CS0034). Fixed bug #52492.
3578
3579 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3580
3581         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
3582
3583 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3584
3585         * ecore.cs : report location when it is *not* Null.
3586
3587 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3588
3589         * codegen.cs,
3590           ecore.cs,
3591           flowanalysis.cs,
3592           expression.cs:
3593           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
3594           correctly. Fixed bug #75721.
3595
3596 2005-08-23  Raja R Harinath  <rharinath@novell.com>
3597
3598         * support.cs (SeekableStreamReader.Position): Avoid an expensive
3599         loop that performs 'min (pos, char_count)'.
3600
3601         Fix #75862.
3602         * expression.cs (Unary.ResolveOperator): Don't discard implicit
3603         converted value in Operator.OnesComplement.
3604
3605 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
3606
3607         * anonymous.cs: If the anon method is pulled into a helper class,
3608         it needs to be `internal' not `private'. Fixes runtime behavior on
3609         msft. bug #75704
3610
3611 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
3612
3613         Fix #75803
3614         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
3615         is a partial class.
3616
3617 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
3618
3619         The big constants rewrite
3620         Fix #75746, #75685 and more
3621         As a side effect saved 1MB for MWF ;-)
3622         
3623         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
3624         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
3625         enum based for corlib compilation.
3626         
3627         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
3628         subtractions.
3629         
3630         * class.cs (FixedField.Define): Use ResolveAsConstant.
3631         
3632         * const.cs (IConstant): Interface constants and enums.
3633         (Const.ResolveValue): New method for constant resolvning.
3634         (ExternalConstant): Constants from imported assemblies.
3635         
3636         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
3637         conversion; like enums.
3638         (Constant.ToType): Converts this constant to different type.
3639         (Constant.Increment): Adds 1.
3640         
3641         * convert.cs (ImplicitConversionRequired): Simplified.
3642         
3643         * cs-parser.jay: Create EnumMember directly.
3644         
3645         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
3646         
3647         * doc.cs (GenerateEnumDocComment): Removed.
3648         
3649         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
3650         (ConvertIntLiteral): Removed.
3651         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
3652         
3653         * enum.cs (EnumMember): Implement IConstant.
3654         (Enum.IsValidEnumConstant): Removed.
3655         (Enum.GetNextDefaultValue): Removed.
3656         (Enum.FindMembers): Updated.
3657         (Enum.GenerateDocComment): Iterate enum members.
3658         
3659         * expression.cs (Cast.TryReduce): Handle enums correctly.
3660         (New.Constantify): Made public.
3661         (MemberAccess.DoResolve): Removed contant specific if(s).
3662         
3663         * literal.cs (NullLiteral): Implement new abstract methods.
3664         
3665         * statement.cs (GotoCase.Resolve): Use new constant methods.
3666         (SwitchLabel.ResolveAndReduce): Use new constant methods.
3667         
3668         * typemanager.cs (LookupEnum): Removed.
3669         (IsEnumType): Fixed to work with corlib.
3670         (RegisterConstant): Removed.
3671         (LookupConstant): Removed.
3672         (GetConstant): Changed to work with IConstant.
3673
3674 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
3675
3676         * location.cs : Fixed overflown (>255) column number.
3677
3678 2005-08-03  Raja R Harinath  <rharinath@novell.com>
3679
3680         First cut of the qualified-alias-member feature.
3681         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
3682         token.
3683         * cs-parser.jay (DOUBLE_COLON): New token.
3684         (namespace_or_type_name): Add rule for recognizing
3685         qualified-alias-members.
3686         (primary_expression): Likewise.
3687         (element_access): Allow QualifiedAliasMember as a possible
3688         type-bearing expression.
3689         (local_variable_type, local_variable_pointer_type): Likewise.
3690         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
3691         aliases in the current and enclosing namespace declarations.
3692         (NamespaceEntry.UsingAlias): Add CS0440 warning.
3693         * decl.cs (MemberName.is_double_colon): New.
3694         (MemberName.MemberName): Add new constructor for alias-member.
3695         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
3696         * expression.cs (QualifiedAliasMember): New expression type.
3697
3698 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3699
3700         * location.cs : it borked when no argument was specified.
3701
3702 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3703
3704         * location.cs : tiny ToString() format fix.
3705
3706 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3707
3708         * statement.cs : oops, it was missing.
3709
3710 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3711
3712         A set of fixes for precise line/column location.
3713
3714         * location.cs :
3715           "token" field now holds a file/line "delta", a line number offset 
3716           from the segment, and a column number. See also:
3717           http://lists.ximian.com/pipermail/mono-devel-list/2004-
3718           December/009508.html
3719           Removed static IsNull. Use instance IsNull property instead.
3720         * cs-tokenizer.cs :
3721           For some tokens it stores Location. For Identifier it stores
3722           LocatedToken which is a pair of string name and location.
3723           Column numbers are adjusted only at getChar().
3724         * report.cs :
3725           Use Location.ToString() for reporting (it now contains column).
3726         * cs-parser.jay :
3727           Largely modified to use LocatedToken instead of
3728           string (IDENTIFIER), and to acquire Location from some tokens.
3729         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
3730           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
3731           codegen.cs :
3732           Now MemberName holds Location. DeclSpace.ctor() receives Location
3733           as a parameter. Removed extra parameters to all derived classes.
3734           Replaced Location.IsNull() with instance property.
3735         * assign.cs, expression.cs :
3736           Added .ctor() overload that omits Location.
3737         * attribute.cs :
3738           Added "nameEscaped" flag that indicates the identifier was escaped
3739           in the source file. This fixes bug #57047.
3740
3741 2005-09-02  Martin Baulig  <martin@ximian.com>
3742
3743         * class.cs: Make CS3005 a warning, not an error.
3744
3745 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
3746
3747         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
3748         New method, looking for lo-case imported cls type.
3749
3750         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
3751         here.
3752
3753         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
3754
3755         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
3756
3757         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
3758         all_imported_types.
3759         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
3760
3761         Optimized to save 3.5 MB for SWF compilation.
3762
3763 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
3764
3765         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
3766         (PartialContainer.Create): Moved logic AddToContainer.
3767         (PartialContainer.MarkForDuplicationCheck): Shares name.
3768         
3769         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
3770         place.
3771         
3772         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
3773         initialization.
3774         (Namespace.GetSignatureForError): New method.
3775         
3776         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
3777         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
3778
3779 2005-08-01  Raja R Harinath  <rharinath@novell.com>
3780
3781         Fix #75669.
3782         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
3783         member lookup rather than qualifier_type, since qualifier_type can
3784         be null.
3785
3786 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
3787
3788         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
3789         enum member.
3790
3791 2005-07-31  Miguel de Icaza  <miguel@novell.com>
3792
3793         * statement.cs: Copy the local exception into the exception
3794         captured local.  Fixes 75674
3795
3796 2005-07-31  Raja R Harinath  <harinath@gmail.com>
3797
3798         Fix #75658.
3799         * expression.cs (Invocation.OverloadResolve): Don't report error
3800         CS1501 if error CS1502 has been reported.
3801         (New.DoResolve): Delegate CS1501 reporting to
3802         Invocation.OverloadResolve.
3803
3804         Fix #75656.
3805         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
3806         invariant-meaning-in-block property in an enclosing block if
3807         necessary.
3808
3809 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
3810
3811         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
3812         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
3813         (Switch.CheckSwitch): Just save 50kb for SWF.
3814
3815 2005-07-27  Martin Baulig  <martin@ximian.com>
3816
3817         * anonymous.cs (CaptureContext.AddField): Added
3818         `AnonymousContainer am' argument; compute its toplevel scope if
3819         it's not already computed.  Fixes #75649.
3820
3821 2005-07-26  Raja R Harinath  <rharinath@novell.com>
3822
3823         Fix #75628.
3824         * class.cs (Constructor.Emit): Reset block to null if the block
3825         resolve fails.
3826
3827 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
3828
3829         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
3830
3831 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
3832
3833         * class.cs (MethodData.Define): Check whether accessor implementing
3834         interface is public.
3835
3836         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
3837
3838 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
3839
3840         Fix #57245
3841         * namespace.cs (LookupType): Moved same type check to...
3842         
3843         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
3844         with the same name.
3845
3846 2005-07-21  Raja R Harinath  <rharinath@novell.com>
3847
3848         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
3849         already found a typebuilder.
3850         * class.cs (MethodCore.IsDuplicateImplementation): Compare
3851         MemberNames, not strings.
3852
3853         * const.cs (Error_ExpressionMustBeConst): 
3854         Rename from Error_EpressionMustBeConst.
3855         * const.cs, class.cs, statement.cd: Update.
3856
3857 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
3858
3859         Fix #65573
3860
3861         * const.cs (Const.LookupConstantValue): Report missing contant expression
3862         everytime.
3863         (Error_EpressionMustBeConstant): Only one error method.
3864
3865         * class.cs, statement.c: Updated.
3866
3867 2005-07-20  Raja R Harinath  <rharinath@novell.com>
3868
3869         * statement.cs (Block.Flags): Add back HasVarargs.
3870         (Block.flags): Make protected.
3871         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
3872
3873         * typemanager.cs (types, typecontainers, user_types): Remove.
3874         (UserTypes, TypeContainers): Likewise.
3875         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
3876         (CleanUp, Reset): Update.
3877         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
3878         (GetNestedType): Use Type.GetNestedType.
3879         (CoreLookupType): Take two arguments, the namespace and the
3880         basename of the type.  Update to use the Namespace.Lookup
3881         mechanism.
3882         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
3883         (RealMemberLookup): Use IsNestedChildOf instead of playing with
3884         string concatenation and substring matches.
3885         * class.cs, enum.cs, delegate.cs: Update to changes.
3886
3887 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
3888
3889         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
3890         Expression and made virtual.
3891
3892         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
3893         (ImplicitStandardConversionExists): Fixed `byte' typo ?
3894
3895         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
3896
3897         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
3898         error message.
3899
3900         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
3901         change.
3902
3903 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
3904
3905         Fix #57707
3906         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
3907         AssemblyCultureAttribute is not used on executable.
3908
3909         * rootcontext.cs,
3910         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
3911
3912 2005-07-16  Raja R Harinath  <rharinath@novell.com>
3913
3914         Fix #60638.
3915         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
3916         New.  Reports CS0252/CS0253.
3917         Mostly taken from preliminary patch by Duncak Mak.
3918         (Binary.DoResolveOperator): Store results of operator lookup.
3919         Use them to detect if we need to warn about unintended reference
3920         comparisons.
3921
3922 2005-07-15  Raja R Harinath  <rharinath@novell.com>
3923
3924         Fix #72969.
3925         * namespace.cs (Namespace.Lookup): Add back location parameter.
3926         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
3927         * delegate.cs, ecore.cs, expression.cs: Update to changes.
3928
3929         * codegen.cs (EmitContext.DeclSpace): Make readonly.
3930         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
3931         (Namespace.LookupType): ... this.
3932         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
3933         of namespaces.
3934         * typemanager.cs (LookupTypeReflection): Remove buggy code that
3935         purported to handle pointers.
3936         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
3937         CoreLookupType.
3938
3939 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
3940
3941         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
3942         type as namespace.
3943
3944 2005-07-15  Raja R Harinath  <rharinath@novell.com>
3945
3946         * namespace.cs (Namespace.Lookup): Drop location parameter.
3947         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
3948         (NamespaceEntry.Lookup): ... this.
3949         (NamespaceEntry.Error_AmbiguousTypeReference):
3950         Move here from DeclSpace.
3951         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
3952         names ...
3953         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
3954         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
3955         Move to NamespaceEntry.
3956         * delegate.cs, expression.cs: Update to changes.
3957
3958 2005-08-31  Martin Baulig  <martin@ximian.com>
3959
3960         Committing a patch from Atsushi Enomoto for #75850.
3961
3962         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
3963         Prefer a generic enumerator over a non-generic one.
3964
3965 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3966
3967         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3968         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3969
3970 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3971
3972         * driver.cs : reverting default encoding change as well as mcs.
3973
3974 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3975
3976         * driver.cs, support.cs : merged r48826.
3977           Marek Safer wrote:
3978           > could you integrate your mcs changes to gmcs otherwise
3979           > gmcs cannot compile some files.
3980
3981 2005-08-20  Martin Baulig  <martin@ximian.com>
3982
3983         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
3984         scope if we don't already have it.
3985
3986         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
3987         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
3988         fixes #75867.
3989
3990 2005-07-31  Miguel de Icaza  <miguel@novell.com>
3991
3992         * statement.cs: Copy the local exception into the exception
3993         captured local.  Fixes 75674
3994
3995 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
3996
3997         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
3998         type as namespace.
3999
4000 2005-08-12  Martin Baulig  <martin@ximian.com>
4001
4002         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4003         for nested types here to avoid hitting the cache too early.
4004
4005 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4006
4007         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4008         an error. 
4009
4010 2005-08-03  Martin Baulig  <martin@ximian.com>
4011
4012         Make iterators in generic methods work; see gtest-191.cs.
4013
4014         * generic.cs
4015         (Constraints.Resolve): Protect against being called twice.
4016
4017         * class.cs
4018         (TypeContainer.GetClassBases): Make this `protected virtual'.
4019
4020         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4021         (Iterator.GetClassBases): Override this and compute the base
4022         classes here.
4023         (Iterator.DefineNestedTypes): If we're a generic method, all our
4024         method type parameters become class type parameters on the proxy
4025         class.
4026
4027         * statement.cs
4028         (ToplevelBlock.Parameters): Make this a property, not a field.
4029         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4030
4031 2005-08-03  Martin Baulig  <martin@ximian.com>
4032
4033         * typemanager.cs (TypeManager.IsSubclassOf): Use
4034         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4035         (TypeManager.GetFullName_recursed): Improved.
4036
4037 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4038
4039         Fix #75417
4040         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4041         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4042         invocation_type == mi.DeclaringType, since the first one also checks
4043         other condition used by generic instances.
4044         
4045 2005-07-27  Martin Baulig  <martin@ximian.com>
4046
4047         * anonymous.cs (CaptureContext.AddField): Added
4048         `AnonymousContainer am' argument; compute its toplevel scope if
4049         it's not already computed.  Fixes #75649.
4050
4051 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4052
4053         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4054         CheckAttributeType and refactored.
4055         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4056         ResolveAsTypeTerminal error handling.
4057         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4058         handling.
4059         (GetSignatureForError): Print errors in same way.
4060
4061         * class.cs,
4062         * codegen.cs: Reflect attribute GetSignatureForError change.
4063
4064         * ecore.cs,
4065         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4066
4067         * namespace.cs (UsingEntry): Refactored to make fields private.
4068
4069         * assign.cs,
4070         statement.cs: Error_UnexpectedKind has extra parameter.
4071
4072 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4073
4074         * ecore.cs (IAlias): Remove.
4075         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4076         that implement the interface.
4077         * namespace.cs (Namespace): Likewise.
4078         (Namespace.declspaces): Renamed from 'defined_names'.
4079         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4080         DeclSpace instead of an IAlias.
4081         * tree.cs (Tree.AddDecl): Update.
4082
4083 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4084
4085         * statement.cs (Block.Flags); Remove HasVarargs.
4086         (Block.HasVarargs): Move to ToplevelBlock.
4087         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4088         (Block.Variables): Make protected.  Initialize variable hashtable
4089         if necessary.
4090         (Block.AddVariable): Update.
4091         (Block.Resolve): Update to changes.
4092         (ToplevelBlock.HasVarargs): New boolean.
4093         (ToplevelBlock.ThisVariable): Move here from Block.
4094         (ToplevelBlock.AddThisVariable): Likewise.
4095         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4096         * expression.cs (This.ResolveBase): Update to changes.
4097         (ArglistAccess.DoResolve): Likewise.
4098
4099 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4100
4101         Fix #75321
4102         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4103
4104         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4105         not used and not used & assigned.
4106         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4107
4108 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4109
4110         Fix #75053
4111         * expression.cs (Is.DoResolve): null is never provided type.
4112
4113 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4114
4115         Fix #52496
4116         * cs-parser.jay: Less strict event error rule to catch more errors.
4117
4118 2005-07-11  Martin Baulig  <martin@ximian.com>
4119
4120         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4121         for the constructor constraint: we do not only have to check
4122         whether the class has a public constructor, but also ensure that
4123         it's parameterless.  Fixes #75492.
4124
4125 2005-07-11  Martin Baulig  <martin@ximian.com>
4126
4127         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4128         between type parameters if they either have the reference type
4129         constraint or the class constraint.
4130
4131 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4132
4133         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4134
4135 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4136
4137         Fix #74975
4138         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4139         (ExtractSecurityPermissionSet): Cope with self referencing security
4140         attributes properly.
4141
4142         * driver.cs (SetOutputFile): Made public property OutputFile.
4143
4144 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4145
4146         Fix #75486.
4147         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4148         has_nonstatic_fields.  Make into a FieldBase pointer.
4149         (TypeContainer.AddField): Add CS0282 check.
4150         (TypeContainer.EmitType): Update.
4151
4152 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4153
4154         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4155         compare if they start with __.
4156
4157 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4158
4159         * statement.cs (Switch.SwitchGoverningType): Only look at
4160         UserCasts that don't need implicit standard conversions to one of
4161         the allowed switch types (Fixes test-322.cs).
4162         (LocalInfo.Resolve): Re-enable sanity-test.
4163
4164 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4165
4166         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4167         
4168         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4169         
4170         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4171
4172 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4173
4174         Fix #75472.
4175         * ecore.cs (SimpleName.GetSignatureForError): Add.
4176         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4177         (MemberAccess.GetSignatureForError): Add.
4178
4179 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4180  
4181         The big error and warning messages review.
4182         
4183         * anonymous.cs,
4184         * assign.cs,
4185         * attribute.cs,
4186         * class.cs,
4187         * codegen.cs,
4188         * convert.cs,
4189         * cs-parser.jay,
4190         * cs-tokenizer.cs,
4191         * decl.cs,
4192         * delegate.cs,
4193         * doc.cs,
4194         * driver.cs,
4195         * ecore.cs,
4196         * enum.cs,
4197         * expression.cs,
4198         * flowanalysis.cs,
4199         * iterators.cs,
4200         * literal.cs,
4201         * location.cs,
4202         * modifiers.cs,
4203         * namespace.cs,
4204         * parameter.cs,
4205         * pending.cs,
4206         * report.cs,
4207         * rootcontext.cs,
4208         * statement.cs,
4209         * support.cs,
4210         * tree.cs,
4211         * typemanager.cs: Updated.
4212         
4213         * class.cs: (MethodCore.SetYields): Moved here to share.
4214         (PropertyMethod.Define): Moved iterator setup here.
4215         
4216         * iterators.cs: Add orig_method to have full access to parent
4217         container.
4218
4219 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4220
4221         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4222         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4223         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4224         variable of struct type.
4225         * expression.cs (Unary.ResolveOperator): Update to change.
4226         (Indirection.VerifyFixed): Likewise.
4227         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4228         (ParameterReference.VerifyFixed): Value parameters are fixed.
4229         (This.VerifyFixed): Treat 'this' as a value parameter.
4230         * statement.cs (LocalInfo.IsFixed): Remove.
4231
4232 2005-07-01  Martin Baulig  <martin@ximian.com>
4233
4234         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4235         `ec.EmitThis ()' to get the correct scope.
4236
4237 2005-07-01  Martin Baulig  <martin@ximian.com>
4238
4239         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4240         instance is a ParameterReference; fixes #75299.
4241
4242 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4243
4244         Fix #75412.
4245         * expression.cs (Indexers.map): Remove.
4246         (Indexers.Append): Filter out inaccessible setters and getters.
4247         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4248
4249         Fix #75283.
4250         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4251         Refactored from ...
4252         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4253         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4254         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4255         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4256
4257 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4258
4259         Fix #75322
4260         * class.cs (FieldBase.GetInitializerExpression): One more field
4261         for backup.
4262
4263 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4264
4265         * pending.cs: Do not define a proxy if the base method is virtual,
4266         it will be picked up by the runtime (bug 75270).
4267
4268 2005-07-08  Martin Baulig  <martin@ximian.com>
4269
4270         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4271         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4272
4273 2005-07-07  Martin Baulig  <martin@ximian.com>
4274
4275         * generic.cs (ConstructedType.CheckConstraint): Use
4276         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4277         called recursively; fixes #75329.
4278
4279 2005-07-06  Martin Baulig  <martin@ximian.com>
4280
4281         * generic.cs (TypeManager.InferTypeArguments): Added support for
4282         anonymous methods; fixes #75461.
4283
4284 2005-07-01  Martin Baulig  <martin@ximian.com>
4285
4286         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4287         `ec.EmitThis ()' to get the correct scope.
4288
4289 2005-07-01  Martin Baulig  <martin@ximian.com>
4290
4291         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4292         instance is `This'; fixes #75299.
4293
4294 2005-06-30  Martin Baulig  <martin@ximian.com>
4295
4296         * class.cs (Indexer): Implement IIteratorContainer; added support
4297         for iterators in indexers.
4298
4299         * codegen.cs
4300         (EmitContext.CurrentIterator): Make this a property, not a field.
4301
4302         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4303
4304 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4305
4306         * pending.cs: Do not define a proxy if the base method is virtual,
4307         it will be picked up by the runtime (bug 75270).
4308
4309 2005-06-28  Martin Baulig  <martin@ximian.com>
4310
4311         * cs-parser.jay (interface_method_declaration): Avoid a
4312         reduce/reduce conflict by moving some of the code into a separate
4313         `interface_method_declaration_body' rule; fixes #75368.
4314
4315 2005-06-28  Martin Baulig  <martin@ximian.com>
4316
4317         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4318         array check after the check for TypeBuilder's.
4319
4320 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4321
4322         * convert.cs (FindMostEncompassedType): Add two trivial special
4323         cases (number_of_types == 0 || number_of_types == 1).
4324         (FindMostEncompasingType): Likewise.
4325
4326 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4327
4328         Some cleanups preparing for the fix of #75283.
4329         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4330         error testing.
4331         (EventExpr.InstanceResolve): Likewise.
4332         (EventExpr.DoResolve): Remove redundant checks.
4333
4334 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4335
4336         * class.cs: Small fix.
4337
4338 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4339
4340         Fix #75160.
4341         * class.cs (GetPartialBases): Fix return value check of
4342         part.GetClassBases.
4343
4344 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4345
4346         Ensure that partial classes are registered in their enclosing
4347         namespace.  Initial part of fix of #75160.
4348         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4349         Register declspace with namespace here, not in
4350         DeclSpace.RecordDecl.
4351         * cs-parser.jay: Pass namespace to RecordDecl.
4352         * class.cs (PartialContainer.Create): Likewise.
4353         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4354         called.
4355         * decl.cs (Declspace.RecordDecl): Remove.
4356         * namespace.cs (NamespaceEntry.DefineName): Remove.
4357
4358 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4359
4360         * rootcontext.cs: Reset TargetExt as well.
4361
4362 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4363
4364         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4365         -langversion:ISO-1.
4366
4367 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4368
4369         Fix #75080, cs0119.cs.
4370         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4371         of ...
4372         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4373         allowing ExprClass.Type and ExprClass.Namespace for
4374         ResolveFlags.VariableOrValue.
4375         (Expression.Resolve) [1-argument variant]: Change default resolve
4376         flags based on language version.
4377         (Expression.Error_UnexpectedKind): Use a simple string array
4378         rather than an ArrayList.
4379         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4380         not ExprClass.Type.
4381         (TypeOfVoid.DoResolve): Likewise.
4382         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4383         flags argument -- it always has the same value.
4384
4385 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4386
4387         Fix #75081.
4388         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4389         Use it in the error message.
4390         * assign.cs, expression.cs, statement.cs: Update.
4391
4392 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4393
4394         Fix #75088.
4395         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4396         the "almostMatchedMember" case too.
4397         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4398         that failed the accessibility checks to 'almost_match'.
4399
4400 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4401
4402         * attribute.cs: Use internal MethodBuilder methods to set
4403         ExactSpelling and SetLastError on PInvoke methods, instead
4404         of passing them via charset.  Fixes #75060.
4405
4406 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4407
4408         * parameter.cs (Parameter): Remove TODO comment.
4409         (Parameter.DefineParameter): Remove Location parameter.
4410         (Parameters.LabelParameters): Likewise.
4411         * class.cs (Constructor.Emit): Update to change.
4412         (MethodData.Emit): Likewise.
4413         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4414         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4415
4416 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4417
4418         * parameter.cs,
4419           Removed Parameters.Location and added Parameter.Location instead.
4420           Removed Location parameter from Emit() and GetSignature().
4421         * anonymous.cs,
4422           class.cs,
4423           cs-parser.jay,
4424           delegate.cs,
4425           iterators.cs,
4426           statement.cs :
4427           Modified all related calls.
4428
4429 2005-06-21  Martin Baulig  <martin@ximian.com>
4430
4431         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4432         left-hand side is not a nullable type; fixes #75328.
4433
4434 2005-06-21  Martin Baulig  <martin@ximian.com>
4435
4436         * typemanager.cs
4437         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4438         (TypeManager.GetFullNameSignature): Likewise.
4439
4440         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4441         `source.FullName' and `target.FullName' to check whether there are
4442         two conflicting definitions.
4443
4444 2005-06-21  Martin Baulig  <martin@ximian.com>
4445
4446         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4447         a BoxedCast - also for reference types - to be compatible with csc.
4448
4449 2005-06-21  Martin Baulig  <martin@ximian.com>
4450
4451         * expression.cs (MemberAccess.DoResolve): Add support for nested
4452         types in a generic instance; fixes #75320.
4453
4454 2005-06-20  Martin Baulig  <martin@ximian.com>
4455
4456         * generic.cs (TypeManager.InferType): Also walk the class
4457         hierarchy for generic instances; fixes #75261.
4458
4459 2005-06-17  Martin Baulig  <martin@ximian.com>
4460
4461         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4462         to make things work for corlib.
4463
4464 2005-06-15  Martin Baulig  <martin@ximian.com>
4465
4466         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4467         obsolete `SecurityAction' values.
4468
4469 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4470
4471         * rootcontext.cs: Reset TargetExt as well.
4472         
4473 2005-06-09  Martin Baulig  <martin@ximian.com>
4474
4475         * delegate.cs (Delegate.VerifyMethod): Added
4476         `MethodGroupExpr old_mg' argument; inherit its
4477         `HasTypeParameters'; fix #75085.
4478
4479 2005-06-09  Martin Baulig  <martin@ximian.com>
4480
4481         * expression.cs (Invocation.OverloadResolve): Correctly handle
4482         generic methods for the SetMemberIsUsed(); fix #75064.
4483
4484 2005-06-09  Martin Baulig  <martin@ximian.com>
4485
4486         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
4487         fixes #75062.
4488
4489 2005-06-08  Martin Baulig  <martin@ximian.com>
4490
4491         * cs-parser.jay (nullable_type_or_conditional): If we put the
4492         nullable back and our `type' is a `ComposedCast', remove the
4493         nullable from it.  Fixes #75156.
4494
4495         * expression.cs (ComposedCast.RemoveNullable): New public method.
4496
4497 2005-06-08  Martin Baulig  <martin@ximian.com>
4498
4499         The big Iterators rewrite :-)
4500
4501         * iterators.cs: Rewrite this to use the anonymous methods framework.
4502
4503         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
4504         before the TypeContainers; see 2test-21.cs.
4505
4506         * class.cs
4507         (TypeContainer.DefineType): Don't create a new EmitContext if we
4508         already have one (this only happens if we're an Iterator).
4509         (TypeContainer.Define): Also call Define() on all our iterators.
4510         (Method.CreateEmitContext): Added support for iterators.
4511
4512         * anonymous.cs
4513         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
4514         (AnonymousContainer.CreateMethodHost): Moved here from
4515         AnonymousMethod and made abstract.
4516         (AnonymousContainer.CreateScopeType): New abstract method.
4517         (AnonymousContainer.IsIterator): New public property.
4518         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
4519         get the ScopeTypeBuilder rather than manually defining it here. 
4520         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
4521         iterators here.
4522
4523         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
4524         before RootContext.DefineTypes().
4525
4526         * codegen.cs (EmitContext.RemapToProxy): Removed.
4527         (EmitContext.CurrentAnonymousMethod): Changed type from
4528         AnonymousMethod -> AnonymousContainer.
4529         (EmitContext.ResolveTopBlock): Protect from being called twice.
4530         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
4531         (EmitContext.EmitThis): Removed the iterators hacks; use the
4532         anonymous methods framework for that.
4533
4534         * statement.cs
4535         (ToplevelBlock.Container): Make this a property, not a field.
4536         (ToplevelBlock.ReParent): New public method; move the
4537         ToplevelBlock into a new container.
4538         (Foreach.TemporaryVariable): Simplify.
4539
4540 2005-06-05  Martin Baulig  <martin@ximian.com>
4541
4542         * statement.cs (LocalInfo.CompilerGenerated): New flag.
4543         (Block.AddTemporaryVariable): New public method; creates a new
4544         `LocalInfo' for a temporary variable.
4545         (Block.EmitMeta): Create the LocalBuilders for all the temporary
4546         variables here.
4547         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
4548         non-iterator variables.
4549
4550 2005-06-05  Martin Baulig  <martin@ximian.com>
4551
4552         * statement.cs (Foreach.TemporaryVariable): Create the
4553         LocalBuilder in the Emit phase and not in Resolve since in some
4554         situations, we don't have an ILGenerator during Resolve; see
4555         2test-19.cs for an example.
4556
4557 2005-06-04  Martin Baulig  <martin@ximian.com>
4558
4559         The big Foreach rewrite - Part II.
4560
4561         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
4562         with `PropertyInfo ienumerator_getcurrent'.
4563
4564         * codegen.cs (VariableStorage): Removed.
4565
4566         * statement.cs
4567         (Foreach): Derive from Statement, not ExceptionStatement.
4568         (Foreach.CollectionForeach): New nested class.  Moved all the code
4569         dealing with collection foreach here.
4570         (Foreach.ForeachHelperMethods): Removed.
4571         (Foreach.TemporaryVariable): Implement IMemoryLocation.
4572
4573 2005-05-23  Martin Baulig  <martin@ximian.com>
4574
4575         * statement.cs (Try.DoResolve): Don't create a `finally' if we
4576         don't need to.  Fix #75014.
4577
4578 2005-05-26  Raja R Harinath  <rharinath@novell.com>
4579
4580         Improve user-defined conversion handling.
4581         * convert.cs (GetConversionOperators): Rewrite.  Return only the
4582         applicable operators.
4583         (AddConversionOperators): New.  Helper for GetConversionOperators.
4584         (FindMostEncompassedType, FindMostEncompassingType): Verify that
4585         there is only one most encompassed/encompassing type.
4586         (FindMostSpecificSource, FindMostSpecificTarget): Remove
4587         "applicable operator" handling.
4588         (UserConversion): Move cache here from GetConversionOperators.
4589         Directly cache the chosen operator, rather than the whole
4590         MethodGroup.
4591         (ExplicitNumericConversion): Fix buggy implementation of Decimal
4592         case.  Allow conversion of decimal to sbyte and byte too.
4593         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4594         New static methods.  Used to avoid allocating EmptyExpressions in
4595         convert.cs.
4596
4597 2005-05-24  Duncan Mak  <duncan@novell.com>
4598
4599         * ecore.cs (CastFromDecimal): New class for casting a decimal to
4600         another class, used in Convert.ExplicitNumericConversion.
4601         (CastToDecimal): New class, similar to above, but casts to
4602         System.Decimal, used in Convert.ImplicitNumericConversion and also
4603         in explicit convesion from double/float to decimal.
4604
4605         * convert.cs (ImplicitNumericConversion): Handle implicit
4606         conversions to System.Decimal.
4607         (ExplicitNumericConversion): handle explicit conversions to
4608         System.Decimal.
4609
4610         This fixes #68711.
4611         
4612 2005-05-20  Miguel de Icaza  <miguel@novell.com>
4613
4614         * typemanager.cs: Do not throw an exception in the TypeBuilder
4615         case, we take care of it on the TypeCode.
4616
4617 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
4618         
4619         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
4620         is back.
4621         
4622         * cs-parser.jay: Catch more lexical errors.
4623         
4624         * report.cs: Add one more Error method.
4625         
4626         * rootcontext.cs,
4627         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
4628
4629 2005-05-20  Martin Baulig  <martin@ximian.com>
4630
4631         * class.cs (TypeContainer.CircularDepException): Removed.
4632         (TypeContainer.DefineType): Removed the `InTransit' stuff.
4633         (TypeContainer.CheckRecursiveDefinition): Check for circular class
4634         (CS0146) and interface (CS0529) dependencies here.
4635
4636 2005-05-20  Martin Baulig  <martin@ximian.com>
4637
4638         * expression.cs (New.DoResolve): Move the CS0712 check above the
4639         CS0144 check; otherwise it can never be reached.
4640
4641 2005-05-20  Martin Baulig  <martin@ximian.com>
4642
4643         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
4644
4645 2005-05-20  Martin Baulig  <martin@ximian.com>
4646
4647         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
4648
4649         * typemanager.cs (TypeManager.IsAttributeType): New public method.
4650
4651 2005-05-19  Martin Baulig  <martin@ximian.com>
4652
4653         * delegate.cs
4654         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
4655         to disable error reporting.
4656
4657         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
4658         here since we don't want to report an error; see the new test-336.cs.
4659
4660 2005-05-19  Raja R Harinath  <rharinath@novell.com>
4661
4662         * statement.cs (ToplevelBlock.GetParameterReference)
4663         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
4664         Move here from class Block.
4665         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
4666         * expression.cs (ParameterReference.DoResolveBase): Likewise.
4667
4668 2005-05-18  Martin Baulig  <martin@ximian.com>
4669
4670         Fix #74978.
4671
4672         * flowanalysis.cs
4673         (FlowBranching.Reachability): Add non-static public And() and Or()
4674         methods.
4675         (FlowBranchingSwitch): New class; do the `break_origins' thing
4676         like in FlowBranchingLoop.
4677         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
4678         reachability, not just locals and parameters.
4679         (FlowBranching.MergeChild): Remove some of the hacks for loop and
4680         switch; MergeBreakOrigins() now takes care of that.
4681
4682 2005-05-18  Martin Baulig  <martin@ximian.com>
4683
4684         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4685         a loop and may leave it, reset the barrier; fixes #74974.
4686
4687 2005-05-16  Raja R Harinath  <rharinath@novell.com>
4688
4689         Fix test-382.cs.  Emit values of decimal constants.
4690         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
4691         Carved out of ...
4692         (TypeContainer.AddField): ... this.
4693         (TypeContainer.EmitFieldInitializers): Allow the list of fields
4694         with initializers to include 'Const's.
4695         (ClassPart.RegisterFieldForInitialization): Forward to
4696         PartialContainer.
4697         * const.cs (Const.Const): Pass initializer to base class.
4698         (Const.Define): In case of decimal constants, register them for
4699         initialization in a static constructor.
4700
4701 2005-05-14  Martin Baulig  <martin@ximian.com>
4702
4703         * statement.cs (Block.Resolve): Correctly handle unreachable code;
4704         do not call ResolveUnreachable() on unreachable statements in
4705         here, see the comment in the source code.
4706
4707 2005-05-13  Raja R Harinath  <rharinath@novell.com>
4708
4709         Fix #74934.
4710         * expression.cs (BinaryResolveOperator): If one of the operands of
4711         an equality comparison is 'null' and the other is a pointer type,
4712         convert the null to a NullPointer.
4713         * convert.cs (ImplicitReferenceConversion): If the expression is a
4714         NullLiteral and the target type is a pointer type, return a
4715         NullPointer instead.
4716         (ImplicitConversionStandard): Likewise.
4717
4718 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
4719         
4720         * cs-parser.jay: Set readonly context based on special constructs.
4721         
4722         * expression.cs (LocalVariableReference.DoResolveBase): Improved
4723         readonly variable error handling.
4724         
4725         * rootcontext.cs (EmitCode): Don't verify members when error
4726         occurred.
4727         
4728         * statement.cs (LocalInfo): Add reaodnly context information.
4729         (SetReadOnlyContext, GetReadOnlyContext): New methods.
4730
4731 2005-05-17  Martin Baulig  <martin@ximian.com>
4732
4733         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
4734         #70970. 
4735
4736 2005-05-13  Martin Baulig  <martin@ximian.com>
4737
4738         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
4739         handle unreachable blocks.
4740
4741 2005-05-13  Martin Baulig  <martin@ximian.com>
4742
4743         * class.cs
4744         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
4745         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
4746         #74905. 
4747
4748 2005-05-13  Martin Baulig  <martin@ximian.com>
4749
4750         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
4751         instance variable, not a local.  Fix #74873.
4752         (Block.ResolveUnreachable): Set it to true here.
4753
4754 2005-05-12  Martin Baulig  <martin@ximian.com>
4755
4756         * cs-parser.jay (property_declaration): Pass the `current_class',
4757         not the `current_container' to Property's .ctor.  Fixes #74912.
4758
4759 2005-05-11  Martin Baulig  <martin@ximian.com>
4760
4761         * typemanager.cs (Closure): Copy this from MCS and merge all the
4762         GMCS-specific changes into it.
4763
4764 2005-05-12  Raja R Harinath  <harinath@gmail.com>
4765
4766         Fix #74920.
4767         * typemanager.cs (unmanaged_enclosing_types): New.
4768         (IsUnmanagedType): Avoid infloops by using
4769         'unmanaged_enclosing_types' to talk with recursive invocations.
4770
4771 2005-05-11  Duncan Mak  <duncan@novell.com>
4772
4773         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
4774         continuing to process for 'arg'.
4775         (handle_preprocessing_directive): Check the argument of the #endif
4776         directive and report error CS1025 if there are any trailing
4777         characters.
4778
4779         According to the C# spec, having even whitespace after the #endif
4780         directive is illegal; however, because we call arg.TrimEnd ()
4781         beforehand, we have the same behavior as csc, allowing whitespace
4782         after the directive.
4783
4784         Fixes #74892.
4785
4786 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
4787
4788         Fix #74863.
4789         
4790         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
4791         (Constructor.GetObsoleteAttribute): Implemented correctly.
4792
4793 2005-05-10  Martin Baulig  <martin@ximian.com>
4794
4795         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
4796         resolve the type; fixes #74864.
4797         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
4798         in DoResolve(); fixes #74862.
4799
4800 2005-05-10  Martin Baulig  <martin@ximian.com>
4801
4802         * support.cs (ReflectionParameters.ParameterModifier): Use
4803         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
4804         and `ParameterAttributes.In'.  Fixes #74884.
4805
4806 2005-05-10  Martin Baulig  <martin@ximian.com>
4807
4808         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
4809         the cache if we're just looking for `MemberTypes.NestedType' in a
4810         generic instance.
4811
4812         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
4813         constraints if we're still resolving the type tree.
4814         (Expression.MemberLookup): If we're resolving the type tree, only
4815         look for `MemberTypes.NestedType' since we're only interested in
4816         getting types.
4817
4818         * class.cs (TypeContainer.DefineType): Don't resolve the type
4819         parameters here; do this later in ResolveType() after the type
4820         tree has been resolved.
4821         (TypeContainer.ResolveType): New public method; this is called
4822         after the type tree is resolved and before the types are being
4823         populated.  We resolve the generic constraints here.
4824         (TypeContainer.DoDefineMember): Check the constraints on our base
4825         class and interfaces.
4826
4827         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
4828         set the `ResolvingTypeTree' flag on the EmitContext.
4829
4830         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
4831
4832 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
4833
4834         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
4835         
4836         * expression.cs (Argument.GetParameterModifier): Turned to property.
4837         (Invocation.Error_InvalidArguments): Add more descriptive errors.
4838         
4839         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
4840         its C# equivalent.
4841         
4842 2005-05-09  Raja R Harinath  <rharinath@novell.com>
4843
4844         Fix #74852.
4845         * decl.cs (MemberCache.AddMethods): Register override methods,
4846         rather than non-override methods.
4847         * typemanager.cs (RegisterOverride): New.
4848         (IsOverride): Update.
4849
4850 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
4851
4852         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
4853
4854 2005-05-06  Martin Baulig  <martin@ximian.com>
4855
4856         * attribute.cs
4857         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
4858         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
4859
4860 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
4861
4862         Fix #73105.
4863         
4864         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
4865         recursive declaration.
4866         
4867         * statement.cs (Block.ResolveMeta): Report any error in resolving.
4868         
4869 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
4870
4871         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
4872         
4873         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
4874
4875 2005-05-05  Raja R Harinath  <rharinath@novell.com>
4876
4877         Fix #74797.
4878         * decl.cs (DeclSpace.FamilyAccessible): 
4879         Use TypeManager.IsNestedFamilyAccessible.
4880
4881         Fix reopened #64812.
4882         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
4883         internal'.
4884
4885 2005-05-04  Raja R Harinath  <rharinath@novell.com>
4886             Abin Thomas  <projectmonokochi@rediffmail.com>
4887             Anoob V E  <projectmonokochi@rediffmail.com>
4888             Harilal P R  <projectmonokochi@rediffmail.com>
4889
4890         Fix #64812.
4891         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
4892         allow access to all static members.
4893
4894 2005-05-04  Martin Baulig  <martin@ximian.com>
4895
4896         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
4897
4898 2005-05-04  Martin Baulig  <martin@ximian.com>
4899
4900         Fix #74655.
4901
4902         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
4903         section at the end; make things work if `default' is not the last
4904         section.        
4905
4906 2005-05-04  Martin Baulig  <martin@ximian.com>
4907
4908         Fix #70400.
4909
4910         * statement.cs (Switch): Replaced the `got_default' field with a
4911         `default_section' one.
4912         (Switch.CheckSwitch): Set `default_section' here.
4913         (Switch.Resolve): If we're a constant switch and the constant is
4914         not found, use the default section.
4915
4916 2005-05-03  Martin Baulig  <martin@ximian.com>
4917
4918         * expression.cs (ArrayAccess.EmitGetLength): New public method.
4919
4920         * statement.cs (Foreach.ArrayForeach): New nested class.
4921         (Foreach.TemporaryVariable): New nested class.
4922         (Foreach.EmitArrayForeach): Removed; this is now in the new
4923         ArrayForeach class.
4924
4925 2005-05-03  Raja R Harinath  <rharinath@novell.com>
4926
4927         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
4928         more conservative.
4929         (VerifyPendingMethods): Revert change below.
4930
4931         * typemanager.cs (IsOverride, RegisterNonOverride): New.
4932         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
4933         that used to trigger warning -28.  Remove warning -28.
4934         * expression.cs (Invocation.OverloadResolve): Use
4935         TypeManager.IsOverride to distinguish override methods.
4936
4937         Fix #74773.
4938         * pending.cs (VerifyPendingMethods): If a base type implements the
4939         requested interface, don't bother checking individual methods of
4940         the base type.  As a side-effect, this prevents the creation of
4941         unnecessary proxies.
4942
4943 2005-05-02  Martin Baulig  <martin@ximian.com>
4944
4945         Fix #70182.
4946
4947         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
4948         Also `And' the locals if the old vector is null.
4949         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
4950         null; in this case we basically reset all the variables.        
4951
4952 2005-05-02  Martin Baulig  <martin@ximian.com>
4953
4954         Fix #74529.
4955
4956         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
4957         Added `FlowBranching branching' argument; always `and' the
4958         variables instead of `or'ing them unless we're an infinite loop.
4959
4960         * statement.cs (While.Resolve): Create a new sibling unless we're
4961         infinite.       
4962
4963 2005-05-02  Martin Baulig  <martin@ximian.com>
4964
4965         Fix #70140.
4966
4967         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
4968         arguments; use it instead of creating a new TopLevelBlock.
4969         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
4970         our ConstructorInitializer.
4971
4972         * statement.cs
4973         (TopLevelBlock.TopLevelBranching): New public property.
4974         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
4975         and create our `TopLevelBranching'.
4976
4977         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
4978         anonymous method host, use `block.TopLevelBranching' rather than
4979         creating a new branching.
4980
4981 2005-04-20  Miguel de Icaza  <miguel@novell.com>
4982
4983         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
4984         a ScopeInfo, if any of the current children is a child of the new
4985         entry, move those children there.
4986
4987 2005-04-30  Martin Baulig  <martin@ximian.com>
4988
4989         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
4990         at the beginning of a SwitchSection.  Fix #73335.
4991
4992 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
4993
4994         Fix #74378
4995         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
4996         
4997         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
4998         (FieldExpr.DoResolve): Obsolete members are ignored for field
4999         initializers.
5000         
5001 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5002
5003         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5004         of arrays detection.
5005
5006         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5007         verification.
5008         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5009
5010         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5011         arrays report.
5012
5013 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5014
5015         * cs-parser.jay: Use the prefered version of -unsafe in error
5016         message.
5017
5018 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5019
5020         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5021         circumstances.
5022
5023 2005-04-20  John Luke  <john.luke@gmail.com>
5024
5025         * driver.cs: fix typo in error message, --outout to --output
5026
5027 2005-04-30  Martin Baulig  <martin@ximian.com>
5028
5029         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5030         handle the .NET 2.x security attributes.
5031
5032 2005-04-30  Martin Baulig  <martin@ximian.com>
5033
5034         * typemanager.cs
5035         (TypeManager.ExpandInterfaces): Don't add things twice.
5036
5037         * class.cs
5038         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5039
5040 2005-04-29  Martin Baulig  <martin@ximian.com>
5041
5042         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5043
5044         * anonymous.cs: Added support for anonymous generic methods.
5045
5046 2005-04-29  Martin Baulig  <martin@ximian.com>
5047
5048         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5049         generic instances.
5050
5051 2005-04-29  Martin Baulig  <martin@ximian.com>
5052
5053         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5054
5055         * expression.cs (New.DoResolve): Fix the CS0304 check.
5056
5057 2005-04-29  Martin Baulig  <martin@ximian.com>
5058
5059         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5060         naming schema.
5061
5062         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5063         explicit interface implementation, compare the interface types.
5064         (MethodData.Define): Use the new naming scheme from the latest
5065         .NET 2.x beta2.
5066         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5067
5068         * decl.cs (MemberName.GetMemberName): Removed.
5069         (MemberName.MethodName, FullName): New properties.
5070
5071 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5072
5073         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5074
5075 2005-04-22  Martin Baulig  <martin@ximian.com>
5076
5077         * generic.cs (GenericMethod): Create the EmitContext in the
5078         `Define()'; in `Define(MethodBuilder)', create the type parameters
5079         before calling `Define()'.  Fixes #73933.
5080
5081 2005-04-22  Martin Baulig  <martin@ximian.com>
5082
5083         * generic.cs
5084         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5085         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5086
5087         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5088         ConstructedType, check its constraints.
5089
5090 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5091
5092         * codegen.cs (InRefOutArgumentResolving): New field.
5093         
5094         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5095         fields outside contructor.
5096         
5097         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5098         
5099 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5100
5101         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5102         parameter code was not completed ever, so it was not as up-to-date
5103         as local variables.  Must finish it.
5104
5105         The bug fix was to compare the Toplevel of the block, not the
5106         current block.  Thanks for Ben for pointing this out. 
5107
5108 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5109
5110         * decl.cs (AddMethods): Use the declaring type of the problem
5111         method to determine if we want to squash a warning.
5112
5113 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5114
5115         * attribute.cs: Removed debug output.
5116
5117         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5118         
5119         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5120         Report.Stderr.
5121         
5122 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5123
5124         Fix #74481.
5125         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5126         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5127         all null comparisons against reference types.
5128
5129 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5130
5131         Fix# 74565
5132         * class.cs (TypeContainer.CircularDepException) New nested
5133         exception class.
5134         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5135         (TypeContainer.DefineType): Removed error, reset InTransit before
5136         exit.
5137         (Class.DefineType): Throw exception when is in Transit.
5138         Catch exception and report error.
5139         (Struct.DefineType): Throw exception when is in Transit.
5140         Catch exception and report error.
5141         (Interface.DefineType): Throw exception when is in Transit.
5142         Catch exception and report error.
5143
5144         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5145         handle nested exception handlers.
5146
5147         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5148         a catch.
5149
5150         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5151         InFinally and InCatch storage.
5152
5153         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5154         (Catch.Resolve): Set and Restore ec.InCatch.
5155         (Try.Resolve): Set and Restore ec.InFinally.
5156         (Try.HasCatch): True when try has catch.
5157
5158 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5159
5160         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5161           for the same event member, so exclude such cases from warning 419.
5162           Fixed bug #74633.
5163
5164 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5165
5166         * expression.cs (Binary.ResolveOperator): Apply patch from John
5167         Luke to fix bug 59864: operators &, | and ^ on enumerations
5168         require that the same enum type on both sides.
5169
5170         * driver.cs: Add warnings to old flag usage, this is to assist
5171         people who produce Makefiles and hope that the Makefiles will be
5172         used on Windows.
5173
5174         * class.cs (TypeContainer.EmitType): Moved the definition of the
5175         special $PRIVATE$ field from the resolve phase to the Emit phase.
5176         During resolve we do not know if we are a struct with
5177         HasExplicitLayout, we know this only after the attributes for the
5178         type are emitted.
5179
5180         Set the FieldOffset to zero on the dummy field that we create for
5181         the class.   Fixes 74590.
5182
5183 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5184
5185         Fix #73834.
5186         * ecore.cs (PropertyExpr.resolved): New.
5187         (DoResolve): Use it to handle a case of double resolution here.
5188         Handle a case of identical-name-and-type-name.
5189         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5190         resolution by storing the results of expression resolution back
5191         into the "probes" array.
5192
5193 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5194
5195         Fix cs0208-7.cs and cs0208-8.cs.
5196         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5197         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5198         error reporting to point out the reason a struct is not unmanaged.
5199
5200 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5201
5202         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5203           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5204
5205 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5206
5207         Fix #74528.
5208         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5209         IdenticalNameAndTypeName here.
5210         (EventExpr.InstanceResolve): Likewise.
5211
5212 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5213
5214         C# 2.0 DefaultCharSetAttribute implementation
5215         
5216         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5217         which allows us to set GlobalNamespace for every resolve.
5218         (Attribute.ResolveArguments): Cut from Resolve.
5219         (Attribute.GetCharSetValue): Returns CharSet named argument.
5220         (Attribute.DefinePInvokeMethod): Gets default charset from
5221         module settings.
5222         (GlobalAttribute.ResolveAsTypeStep): Override.
5223         (GlobalAttribute.ResolveArguments): Override.
5224         
5225         * class.cs (TypeAttr): Is protected.
5226         
5227         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5228         (ModuleClass.DefaultCharSetType): New memeber.
5229         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5230         
5231         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5232         charset from module.
5233         
5234         * delegate.cs (TypeAttr): Override.
5235         (Delegate.DefineType): Use this TypeAttr.
5236         
5237         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5238         at very early stage (before types are defined) to resolve model
5239         module attributes. It will probably not work with corlib but it
5240         should be ok.
5241         
5242         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5243         charset from module.
5244         
5245         * typemanager.cs (default_charset_type): New type.
5246
5247 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5248
5249         * decl.cs (MemberCache.AddMethods): Don't warn if
5250         System.Object.Finalize has buggy MethodAttributes.
5251
5252         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5253         removed below.
5254
5255 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5256
5257         * doc.cs : detect ambiguous reference to overloaded members.
5258           Fixed bug #71603. MS 1.1 csc does not detect it.
5259
5260 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5261
5262         * doc.cs : delegates must not be referenced with parameters.
5263           Fixed bug #71605.
5264
5265 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5266
5267         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5268
5269 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5270
5271         * driver.cs (MainDriver): Stop processing if the CLS stage found
5272         errors. 
5273
5274         (CompilerCallableEntryPoint.InvokeCompiler): Always
5275         reset after execution;   Take a TextWriter argument for the
5276         output.
5277
5278         * report.cs: Use the error stream instead of hardcoding stderr. 
5279
5280 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5281
5282         * class.cs: Reduce code paths to test, too small of an
5283         optimization to make it worth the extra testing.  Always perform
5284         it. 
5285
5286 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5287
5288         Fix #74510.
5289         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5290         operators that had errors reported on them.
5291
5292 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5293
5294         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5295         argument types.
5296         (Attribute.Resolve): Add named argument type checking.
5297         
5298         * class.cs (FixedField.Define): Use IsPrimitiveType
5299         
5300         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5301         
5302         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5303         unsafe parameter types.
5304         
5305         * statement.cs (Using.ResolveExpression): Add better error description.
5306         
5307         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5308         
5309 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5310
5311         Fix #74484.
5312         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5313         AttributeUsageAttribute in the emitcontext of the attribute class,
5314         not in the emitcontext of the attributable entity it was attached to.
5315         * cs-parser.jay: Use 'current_class', not 'current_container',
5316         when creating a GlobalAttribute.
5317
5318 2005-04-08  Alp Toker  <alp@atoker.com>
5319
5320         * pending.cs: The fix to #58413 failed to compile methods implementing
5321         interfaces with/without params modifiers and vice versa, even though
5322         params modifiers aren't part of the signature. Make the modifier check
5323         less strict as in csc.
5324
5325 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5326             Anoob V E  <projectmonokochi@rediffmail.com>
5327             Harilal P R  <projectmonokochi@rediffmail.com>
5328
5329         Fix #58413.
5330         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5331         modifiers of pending methods.
5332         (PendingImplementation.PendingImplementation): Initialize it.
5333         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5334         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5335         with ParameterData.  Add check for modifiers.
5336         * class.cs (MethodData.Define): Update to changes.
5337
5338 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5339
5340         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5341
5342 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5343
5344         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5345         property.
5346         
5347         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5348         
5349         * rootcontext.cs,
5350         * typemanager.cs: Registered RequiredAttributeAttribute.
5351         
5352 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5353
5354         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5355         Warning CS0169 is back at level 3.
5356         (IMethodData.SetMemberIsUsed): New method.
5357         
5358         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5359         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5360         
5361         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5362
5363         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5364         contants.
5365         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5366         is used.
5367         
5368         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5369         is used.
5370         
5371         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5372         to avoid the problems with nested types.
5373
5374 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5375             Anoob V.E  <projectmonokochi@rediffmail.com>
5376             Harilal P.R  <projectmonokochi@rediffmail.com>
5377             Raja R Harinath  <rharinath@novell.com>
5378
5379         Fix #73820.
5380         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5381         attribute.
5382         * typemanager (GetConstructor): Make public.
5383
5384 2005-04-05  John Luke  <john.luke@gmail.com>
5385             Raja R Harinath  <rharinath@novell.com>
5386
5387         Fix #62232.
5388         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5389         struct too.  Return false quicker in a few cases.
5390         (VerifyUnManaged): Use it.
5391
5392 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5393
5394         Fix #74041.
5395         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5396         not 'unreachable_seen'.
5397
5398 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5399
5400         * attribute.cs (Attribute.GetValue): Removed unused.
5401         
5402         * codegen.cs (CodeGen.TrimExt): Removed unused.
5403         
5404         * cs-parser.jay (output): Removed unused.
5405         
5406         * cs-tokenizer.cs (hex_digits): Removed unused.
5407         
5408         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5409         
5410         * expression.cs (Indirection.LoadExprValue): Removed unused.
5411         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5412         
5413         * iterators.cs (Iterator.param_types): Removed unused.
5414         
5415         * statement.cs (Goto.block): Removed unused.
5416         (ToplevelBlock.did): Removed unused.
5417         (Switch.ResolveConstantSwitch): Removed unused.
5418
5419 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5420
5421         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5422         resetting thingy.
5423
5424 2005-04-19  Martin Baulig  <martin@ximian.com>
5425
5426         Merged r42462 from MCS and made it work for GMCS.
5427
5428         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5429
5430         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5431
5432 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5433
5434         Fix #74232 and cs0208-3.cs.
5435         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5436         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5437         unmanaged type.  Don't use FieldBuilders when 't' is a
5438         TypeBuilder.  Use ModFlags and MemberType fields.
5439         * class.cs (MemberBase.member_type): Rename from MemberType.
5440         (MemberBase.MemberType): New property.  Determines member_type on
5441         demand.
5442         (MemberBase.DoDefine): Don't initialize MemberType here.
5443         (FieldMember.Define): Likewise.
5444
5445 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5446
5447         Fix #74241
5448         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5449         Attributes are emitted there.
5450         
5451 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5452
5453         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5454         keyword in 'partial enum' too.
5455         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5456         is not allowed).
5457         Report from Kamil Skalski <nazgul@omega.pl>.
5458
5459         Fix #74309.
5460         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5461         have partial containers too.
5462
5463         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5464         in block' checks to Block.CheckInvariantMeaningInBlock.
5465         * statement.cs (Block.GetKnownVariableInfo): Make private.
5466         (Block.IsVariableUsedInChildBlock): Remove.
5467         (Block.IsVariableUsedInBlock): Likewise.
5468         (Block.CheckInvariantMeaningInBlock): New.  Show location of
5469         conflicting declaration.
5470         (Block.AddVariable): Make error messages less long-winded and more
5471         specific.  Show location of conflicting declaration.
5472         * parameter.cs (Parameters.Location): New readonly property.
5473
5474 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5475
5476         Clean up semantics of invoking ResolveMemberAccess.
5477         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
5478         can have an instance, ensure that we pass in a non-TypeExpression
5479         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
5480         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
5481         argument.  Update to changes and simplify.
5482         (FieldExpr.Emitinstance): Remove CS0120 check.
5483         (PropertyExpr.EmitInstance): Likewise.
5484         * expression.cs (Argument.Resolve): Likewise.
5485         (Invocation.DoResolve): Update to changes in semantics of
5486         InstanceExpression.
5487
5488 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
5489
5490         Fix #74241
5491         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
5492         customization.
5493         
5494         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
5495
5496 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5497
5498         Fix difference in behaviour with commandline invocation.
5499         * driver.cs (Driver.Reset): New.
5500         (CompilerCallableEntryPoint): Call it.
5501
5502         * statement.cs (If.Resolve): Avoid spurious "uninitialized
5503         variable" warnings if the boolean expression failed to resolve.
5504
5505 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
5506
5507         * attribute.cs: Fix the union of several permissions when some of them
5508         are unrestricted (so the result isn't an unrestricted permission set).
5509         Fix #74036.
5510
5511 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5512
5513         * ecore.cs (MemberExpr): New class.  Convert from interface
5514         IMemberExpr.
5515         (MemberExpr.ResolveMemberAccess): Refactor and move here from
5516         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
5517         error checks.
5518         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
5519         (MethodGroupExpr.IsExplicitImpl): Remove.
5520         (Expression.GetFieldFromEvent): Remove.
5521         (SimpleName.MemberStaticCheck): Remove.
5522         (SimpleName.DoSimpleNameResolve): Update to changes.
5523         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
5524         (MemberAccess.IdenticalNameAndTypeName): Remove.
5525         (MemberAccess.error176): Move to MemberExpr.
5526         (MemberAccess.DoResolve): Update to changes.
5527         (BaseAccess.DoResolve): Likewise.
5528
5529 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
5530
5531         C# 2.0 Conditional attribute class implementation
5532         
5533         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
5534         Analyzes class whether it has attribute which has ConditionalAttribute
5535         and its condition is not defined.
5536         
5537         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
5538         (Class.IsExcluded): New method. Search for at least one defined
5539         condition in ConditionalAttribute of attribute class.
5540
5541 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5542
5543         * ecore.cs (PropertyExpr): Derive from Expression, not
5544         ExpressionStatement.
5545         (PropertyExpr.EmitStatement): Remove.
5546
5547 2005-03-29  Raja R Harinath  <rharinath@novell.com>
5548
5549         Fix #74060.
5550         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
5551         internal field "value__" of an enum be private.  The examples for
5552         "value__" that I found on MSDN all used FieldAttributes.Private.
5553
5554         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
5555         Don't mention IL method attribute names.
5556
5557         Fix #47991.  Remove a TODO.
5558         * statement.cs (Block.Toplevel): Make into a field.
5559         (Block.Parameters): Move into ToplevelBlock.
5560         (Block.known_variables): Rename from child_variable_names.
5561         (Block.Block): Remove variants that take Parameters.  Initialize
5562         'Toplevel' with the immediately surrounding toplevel block.
5563         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
5564         LocalInfo parameter.
5565         (Block.GetKnownVariableInfo): New.
5566         (Block.IsVariableNameUsedInChildBlock): Update.
5567         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
5568         the block, even though it may not be in scope.
5569         (Block.AddVariable): Remove Parameters parameter.  Use
5570         Toplevel.Parameters instead.
5571         (Block.AddConstant): Remove Parameters parameter.
5572         (Block.GetParameterReference): Update to use Toplevel.Parameters.
5573         (Block.IsParamaterReference): Likewise.
5574         (Block.IsLocalParameter): Likewise.  Simplify a lot.
5575         (ToplevelBlock.Parameters): New.  Moved from Block.
5576         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
5577         initialize Parameters to a non-null value.
5578         * cs-parser.jay: Update to changes.
5579         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
5580         simple names that mean different things in the same block.  Use
5581         Block.IsVariableNameUsedInBlock.
5582
5583 2005-03-28  Raja R Harinath  <rharinath@novell.com>
5584
5585         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
5586
5587 2005-03-26  Raja R Harinath  <harinath@acm.org>
5588
5589         Fix #73038.
5590         * assign.cs (Assign.DoResolve): When the RHS of an assignment
5591         fails to resolve, ensure that the LHS is still resolved as an
5592         lvalue.
5593
5594 2005-03-25  Raja R Harinath  <harinath@acm.org>
5595
5596         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
5597         ec.ContainerType.
5598         (Enum.current_ec): Remove.
5599         (Enum.LookupEnumValue): Remove EmitContext argument.
5600         Just uses the one created during DefineType.
5601         (Enum.FindMembers): Update.
5602         * expression.cs (MemberAccess.DoResolve): Update.
5603
5604 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
5605
5606         * assign.cs (Assign.DoResolve): Check for CS1717 when
5607         source and target are same (uses Equals).
5608
5609         * expression.cs (LocalVariableReference, ParameterReference,
5610         This): Implemented Equals, GetHashCode.
5611
5612         * statement.cs (Block.GetParameterReference): Removed useless
5613         local variable.
5614
5615 2005-03-22  Raja R Harinath  <rharinath@novell.com>
5616
5617         Fix cs0128.cs
5618         * statement.cs (Block.AddVariable): Ensure that we skip implicit
5619         blocks before deciding whether the error is cs0136 or cs0128.
5620
5621         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
5622         (using_alias_directive, using_namespace_directive): Pass
5623         MemberName, not an expression to Namespace.UsingAlias and
5624         Namespace.Using.
5625         (MakeName): Use the MemberName of the namespace.
5626         * namespace.cs (Namespace.MemberName): New.
5627         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
5628         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
5629         Likewise.
5630         * decl.cs (MemberName.Name): Make readonly.
5631         (MemberName.FromDotted): New "constructor".
5632         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
5633         (MemberCore.Name): Compute from MemberName on demand.
5634         (MemberCore.SetMemberName): Provide a way to change the
5635         MemberName.
5636         (MemberCore.AddToContainer): Don't take a fullname parameter.
5637         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
5638         fully qualified name of the container to the member name.
5639         (TypeContainer.AddToTypeContainer): Use a fully qualified name
5640         only if the type is a member of the root container.
5641         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
5642         MemberName.Left rather than searching for an embedded ".".
5643         (PartialContainer.CreatePart): Update to changes in RootContext.
5644         (MemberBase.ShortName): Turn into a property.  Use
5645         MemberCore.SetMemberName.
5646         (MemberBase.ExplicitInterfaceName): Remove.
5647         (MemberBase.UpdateMemberName): Remove.
5648         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
5649         (PropertyBase.SetMemberName): New override.
5650         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
5651         (Tree.GetDecl): New.
5652         (Tree.AllDecls): Rename from Decls.
5653         * attribute.cs, enum.cs, report.cs: Update to changes.
5654         * driver.cs (MainDriver): Use MemberName.FromDotted on
5655         RootContext.MainClass.
5656
5657 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
5658
5659         * class.cs (FixedField.Define): Check for CS1664 and more sanity
5660         checks.
5661
5662         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
5663
5664 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
5665
5666         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
5667         property accessor modifiers.
5668
5669         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
5670         fixed buffer attribute (CS1716).
5671         (PropertyMethod.HasCustomAccessModifier): When property accessor
5672         has custom modifier.
5673
5674         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
5675         modifiers.
5676         (PropertyExpr.DoResolveLValue): Add CS0272.
5677
5678 2005-03-17  Miguel de Icaza  <miguel@novell.com>
5679
5680         * convert.cs: When converting to a pointer, use the proper Conv.U
5681         or Conv.I depending on the source data type.
5682
5683         * cs-tokenizer.cs: Make the size for large decimal constants,
5684         fixes #72957.
5685
5686 2005-03-17  Martin Baulig  <martin@ximian.com>
5687
5688         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
5689         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
5690
5691 2005-03-17  Martin Baulig  <martin@ximian.com>
5692
5693         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
5694         to bool so we can return an error condition.
5695         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
5696         returned an error.
5697
5698 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
5699
5700         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
5701         attributes.
5702
5703 2005-03-16  Raja R Harinath  <rharinath@novell.com>
5704
5705         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
5706         Refactor to avoid traversing the list of assemblies, and to avoid
5707         string concatenation.
5708         * typemanager.cs (guid_attr_type): Remove.
5709         (negative_hits, pointers, references): Remove hashes.
5710         (type_hash): New.
5711         (GetConstructedType): New.  Uses type_hash to handle constructed
5712         types (arrays, references, pointers).
5713         (GetReferenceType, GetPointerType): Use it.
5714         (GetNestedType): New.  Uses type_hash to handle nested types of
5715         reflected types.
5716         (LookupType, LookupTypeDirect): Remove.
5717         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
5718         'types' hash and LookupTypeReflection directly.
5719         (params_string, params_object): Use GetConstructedType.
5720         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
5721         top-level types.
5722         (Namespace.Lookup): Use cached_types.
5723         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
5724         provided by old TypeManager.LookupType.
5725         * rootcontext.cs (MakeFQN): Remove.
5726         * decl.cs (DeclSpace.MakeFQN): Likewise.
5727         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
5728         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
5729         TypeManager.GetConstructedType.
5730         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
5731
5732 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
5733
5734         * cs-parser.jay: Fix build.
5735
5736 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
5737
5738         * class.cs (TypeContainer.CircularDepException) New nested
5739         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
5740
5741         * cs-parser.jay: Reports CS1527 for any namespace element.
5742
5743         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
5744         Added CS0407.
5745
5746         * expression.cs (ParameterReference.IsAssigned): Changed error to
5747         CS0269.
5748         (Error_WrongNumArguments): Moved CS0245 detection here.
5749
5750         * statement.cs (Return.Resolve): Add CS1622 report.
5751
5752 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
5753
5754         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
5755
5756 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
5757
5758         * attribute.cs expression.cs: Get rid of some allocations.
5759
5760 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
5761
5762         * doc.cs : just eliminate the latest change.
5763
5764 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5765
5766         * doc.cs : commented out the latest change. It breaks xml-030.cs
5767
5768 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5769
5770         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
5771           fail. So invoke CreateType() in FindDocumentedType().
5772
5773 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5774
5775         * cs-tokenizer.cs : added IsKeyword().
5776         * doc.cs : Detect keyword incorrectly used as identifier.
5777           Allow identifiers prefixed by @.
5778
5779 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
5780
5781         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
5782         It caused exception in namespace resolving (again!).
5783         
5784         * class.cs (Class.ctor): Removed exit.
5785         (PropertyMethod.ctor): ditto.
5786         
5787         * codegen.cs (Codegen.Reset): Reset static data.
5788         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
5789         
5790         * cs-tokenizer.cs (Cleanup): Removed.
5791         
5792         * driver.cs (GetSystemDir): Rewrote to one line command.
5793         It caused problem with unloaded dynamic modules.
5794         (UnixParseOption): Removed Exit.
5795         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
5796         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
5797         Now can be mcs used as library.
5798         
5799         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
5800         empty location.
5801         
5802         * location.cs (Reset): Reset static data.
5803         
5804         * namespace.cs (Reset): Reset static data.
5805         
5806         * report.cs (Report.Reset): Reset static data.
5807         
5808         * rootcontext.cs (RootContext.Reset): Reset static data.
5809         
5810         * tree.cs (RootTypes.ctor): Use Location.Null
5811         
5812         * typemanager.cs (TypeManager.Reset): Reset static data.
5813         (CoreLookupType): Removed Exit.
5814         (TypeHandle.Reset): Reset static data.
5815         
5816 2005-03-10  Raja R Harinath  <rharinath@novell.com>
5817
5818         Fix #73516.
5819         * typemanager.cs (ComputeNamespaces): Import namespaces from
5820         referenced modules too.
5821
5822 2005-03-09  Raja R Harinath  <rharinath@novell.com>
5823
5824         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
5825         than '.'.
5826
5827 2005-03-09  Raja R Harinath  <rharinath@novell.com>
5828
5829         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
5830         enclosing DeclSpace.  This ensures that a name-lookup populates
5831         more caches and there are fewer 'TypeExpression's.  Carve out
5832         nested type lookup into ...
5833         (LookupNestedTypeInHierarchy): ... this.
5834
5835 2005-04-15  Martin Baulig  <martin@ximian.com>
5836
5837         Merged r41590 from MCS and make it work in the generics land.
5838
5839         * generic.cs (TypeParameter.UpdateConstraints): Removed the
5840         `check' argument.
5841
5842         * class.cs (PartialContainer.UpdateConstraints): Removed.
5843         (PartialContainer.CheckConstraints): Removed.
5844         (PartialContainer.SetParameterInfo): Store the constraints here.
5845         (PartialContainer.DefineTypeParameters): New public method;
5846         resolve the type parameter's constraints here.  Note that the
5847         PartialContainer doesn't have an EmitContext anymore, so we must
5848         do this in the ClassPart.
5849
5850 2005-03-09  Raja R Harinath  <rharinath@novell.com>
5851
5852         Clean up a few partial-class semantics.  
5853         Fixes test-357.cs and cs1618-2.cs.
5854         * cs-parser.jay (struct_declaration): Use 'current_class' as
5855         parent of newly-created struct.  Remove call to Register ().
5856         Use 'pop_current_class' to complete handing the current struct.
5857         (interface_declaration): Likewise.
5858         (class_declaration): Likewise.
5859         (enum_declaration): Use 'current_class' as parent of newly created
5860         enum.
5861         (delegate_declaration): Likewise.
5862         (pop_current_class): New function.  This is used to handle closing
5863         up the 'current_class' and 'current_container', and pointing them
5864         to the enclosing class/container.
5865         (CSharpParser): Initialize 'current_class' too.
5866         * decl.cs (MemberCore): Add check for invariant: a partial
5867         container is not a parsed entity, and thus does not enclose any
5868         parsed members.
5869         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
5870         (DeclSpace.BaseTypeExpr): Use it.
5871         (DeclSpace.LookupType): Add check for invariant.
5872         * class.cs (TypeContainer): Add check for invariant: a nested
5873         class should have the same NamespaceEntry as its enclosing class.
5874         (TypeContainer.EmitFieldInitializers): Make virtual.
5875         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
5876         MemberCore.
5877         (TypeContainer.Register): Remove.
5878         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
5879         null.  Use TypeResolveEmitContext for resolving base types and
5880         interfaces.  Move initialization of Parts.TypeBuilder here from
5881         ...
5882         (TypeContainer.DefineNestedTypes): ... here.
5883         (PartialContainer): Take a Namespace not a NamespaceEntry.
5884         (PartialContainer.Create): Don't use Register.  Call the
5885         appropriate Add... function directly.
5886         (ClassPart): Take both the PartialContainer and the enclosing
5887         class as constructor arguments.
5888         (ClassPart.EmitFieldInitializers): Override.
5889         (ClassPart.PartFindNestedTypes): Remove.
5890         (FieldBase.GetInitializerExpression): Resolve the initializer
5891         expression in the emit context of the enclosing class.
5892         * tree.cs (RootTypes): Remove Register ().
5893         
5894 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
5895
5896         * cs-parser.jay: Removed CS0134.
5897         
5898         * driver.cs: Removed CS1901.
5899         
5900         * expression.cs (SizeOf.DoResolve): Don't report CS0233
5901         for predefined types.
5902
5903 2005-03-07  Duncan Mak  <duncan@novell.com>
5904
5905         * codegen.cs (Save):  Catch UnauthorizedAccessException as
5906         well. Fixes bug #73454.
5907
5908 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
5909
5910         * cs-tokenizer.cs (xtoken): Add CS1035.
5911         
5912         * class.cs (MethodData.Define): Add CS0683.
5913         (FieldMember.ctor): Add CS0681.
5914
5915 2005-03-07  Raja R Harinath  <rharinath@novell.com>
5916
5917         * ecore.cs (SimpleName.DoResolve): Rename from
5918         SimpleName.DoResolveAllowStatic.
5919         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
5920         Pass 'intermediate' flag to MemberStaticCheck.
5921         (SimpleName.MemberStaticCheck): Skip "static check" only in case
5922         of "intermediate" lookups via MemberAccess.
5923         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
5924         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
5925
5926 2005-03-07  Raja R Harinath  <rharinath@novell.com>
5927
5928         Fix #73394.
5929         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
5930         slipped in because of variable names that are identical to a
5931         builtin type's BCL equivalent ('string String;', 'int Int32;').
5932         (PropertyExpr.EmitInstance): Likewise.
5933
5934 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
5935
5936         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
5937         
5938         * report.cs (warning_ignore_table): Made public.
5939
5940 2005-03-04  Raja R Harinath  <rharinath@novell.com>
5941
5942         Fix #73282.
5943         * class.cs (MethodData.Emit): Pass 'container' to
5944         container.GetObsoleteAttribute instead of 'container.Parent'.
5945
5946 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
5947
5948         * cs-parser.jay: Add 1534 error test.
5949
5950         * iterators.cs (Yield.CheckContext): Add error 1629.
5951         (Iterator.ctor): Save unsafe modifier.
5952         (MoveNextMethod.DoEmit): Restore unsafe context.
5953
5954         * namespace.cs (UsingAlias): Better error message.
5955
5956 2005-03-03  Dan Winship  <danw@novell.com>
5957
5958         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
5959         the warning message [#73219]
5960
5961 2005-03-03  Raja R Harinath  <rharinath@novell.com>
5962
5963         Fix compile with MCS 1.0.0.0.
5964         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
5965         w_restore to not depend on string constant folding.
5966
5967 2005-03-03  Raja R Harinath  <rharinath@novell.com>
5968
5969         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
5970         CS0246 check to users who passed 'silent = false'.
5971         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
5972         check.
5973         (SimpleName.SimpleNameResolve): Update.
5974         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
5975         (MemberAccess.IdenticalNameAndTypeName): Update.
5976         * doc.cs (FindDocumentedTypeNonArray): Update.
5977
5978 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
5979
5980         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
5981         * parameters.cs (ComputeAndDefineParameters): Remove.
5982         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
5983         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
5984         Use GetParameterInfo.
5985
5986 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
5987
5988         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
5989
5990 2005-03-02  Raja R Harinath  <rharinath@novell.com>
5991
5992         Unify DeclSpace.LookupType and DeclSpace.FindType.
5993         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
5994         is in charge of defining nested types on demand.
5995         (DeclSpace.LookupType): Use it when the current_type is a
5996         TypeBuilder.  Use LookupTypeDirect for reflected types.
5997         (DeclSpace.FindType): Remove.
5998         (DeclSpace.LookupInterfaceOrClass): Likewise.
5999         (DeclSpace.DefineTypeAndParents): Likewise.
6000         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6001         DeclSpace.LookupType.
6002         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6003         * typemanager.cs (LookupType): Simplify.
6004         (AddUserType): Remove type from negative_hits.
6005         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6006         * class.cs (TypeContainer.FindMembers): Move handling of nested
6007         types ...
6008         (TypeContainer.FindMembers_NestedTypes): ... here.
6009         (TypeContainer.FindNestedType): Implement override.
6010         (ClassPart.FindNestedType): Delegate to PartialContainer.
6011         (ClassPart.PartFindNestedType): Looks up the nested types of the
6012         part alone.
6013
6014 2005-04-14  Martin Baulig  <martin@ximian.com>
6015
6016         * generic.cs (ConstructedType): Moved all the type lookup and
6017         nested class logic into SimpleName.
6018         (ConstructedType.ResolveConstructedType): Our underlying type is
6019         already fully resolved; all the type lookup stuff is in
6020         SimpleName.
6021
6022         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6023         constructed types here instead of in ConstructedType.
6024
6025         * decl.cs (MemberName.GetTypeExpression): Always create a
6026         SimpleName, not a ConstructedType.
6027         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6028
6029 2005-03-02  Martin Baulig  <martin@ximian.com>
6030
6031         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6032         static constructor in static classes.
6033
6034 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6035
6036         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6037         sizeParamIndex is not specified.
6038
6039 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6040
6041         Fix #73117
6042         * report.cs (WarningMessage.IsEnabled): Missing null check.
6043
6044 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6045
6046         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6047         in the fields and not in the properties.
6048
6049 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6050
6051         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6052         fields as well.
6053
6054 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6055
6056         * attribute.cs: Small refactoring (improved robustness).
6057         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6058         (ValidateGuid): Removed.
6059         (Resolve): Removed referenced to above mentioned.
6060         (GetAttributeUsage): Made private and changed to work without
6061         class assistance.
6062         (GetIndexerAttributeValue): Don't crash.
6063         (GetConditionalAttributeValue): Ditto.
6064         (GetClsCompliantAttributeValue): Ditto.
6065         (ExtractSecurityPermissionSet): All attributes exceptions are
6066         error 648.
6067         (GetPropertyValue): New helper.
6068         (GetMethodImplOptions): New method.
6069         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6070         some missing properties.
6071         
6072         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6073         (Method.ApplyAttributeBuilder): Updated.
6074         
6075         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6076         exception.
6077
6078 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6079
6080         Fix #73052.
6081         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6082         non-simple types (array, pointer, reference).
6083
6084 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6085
6086         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6087
6088         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6089         for operators.
6090         (Method.CheckBase): Catch wrong destructor here.
6091         (MethodData.Define): Add errors 550, 668.
6092
6093         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6094
6095         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6096
6097         * pending.cs (VerifyPendingMethods): Add error 551.
6098
6099         * typemanager.cs (CSharpName): Next error report helper.
6100
6101 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6102
6103         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6104         attributes. Removed useless attribute double check.
6105         It saves almost 2MBs for corlib.
6106
6107 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6108
6109         Fix #72924.
6110         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6111         called twice in case of error.
6112
6113 2005-02-23  Chris Toshok  <toshok@ximian.com>
6114
6115         Fix compiler portions of #72827.
6116         * statement.cs (Block.Emit): call Begin/EndScope on the
6117         EmitContext instead of the ILGenerator.
6118
6119         * codegen.cs (EmitContext.BeginScope): new method, call
6120         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6121         we have one.)
6122         (EmitContext.BeginScope): same, but EndScope and CloseScope
6123
6124         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6125         offset and call the superclass's OpenScope(int) with it.
6126         (SymbolWriter.CloseScope): get the current il
6127         offset and call superclass's CloseScope(int) with it.
6128
6129 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6130
6131         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6132         CS1677 for out and ref as well.
6133
6134         * class.cs (Method.Define): Add error CS1599 detection.
6135         
6136         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6137         
6138         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6139         
6140         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6141         
6142         * support.cs.cs (ModifierDesc): New helper method.
6143
6144 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6145             Abin Thomas  <projectmonokochi@rediffmail.com>
6146             Anoob V E  <projectmonokochi@rediffmail.com>
6147             Harilal P R  <projectmonokochi@rediffmail.com>
6148
6149         Fix #57851, #72718.
6150         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6151         MemberLookup (used for error reporting) actually returns a result.
6152         Fix error report number (122, not 112).
6153
6154 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6155             Anoob V E  <projectmonokochi@rediffmail.com>
6156             Harilal P R  <projectmonokochi@rediffmail.com>
6157
6158         Fix #71134.
6159         * pending.cs (PendingImplementation.GetAbstractMethods):
6160         Find NonPublic members too.
6161
6162 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6163
6164         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6165         Fixed error 217.
6166         
6167         * class.cs (MethodCore.CheckMethodAgainstBase):
6168         Add error 239 report.
6169
6170 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6171
6172         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6173         
6174         * class.cs (Operator.Define): Add error 217 report.
6175         
6176 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6177
6178         Fix #68955.
6179         * expression.cs (Invocation.IsApplicable): Make public.
6180         (Invocation.IsParamsMethodApplicable): Likewise.
6181         * delegate.cs (Delegate.VerifyApplicability): Don't use
6182         Invocation.VerifyArgumentCompat for parameter applicability
6183         testing.  Use Invocation.IsApplicable and
6184         Invocation.IsParamsMethodApplicable.
6185
6186 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6187
6188         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6189         
6190         * class.cs (Operator.Define): Add error 217 report.
6191         
6192 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6193
6194         * namespace.cs (UsingEntry.Resolve): Undo change below.
6195
6196 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6197
6198         Fix #72756.
6199         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6200         disable the error message when the extended MemberLookup also
6201         fails.
6202         (Expression.MemberLookupFinal): Update.
6203         (SimpleName.DoSimpleNameResolve): Update.
6204         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6205         Don't use MemberLookupFinal.
6206         (New.DoResolve): Update.
6207         (BaseAccess.CommonResolve): Update.
6208
6209 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6210
6211         Fix #72732.
6212         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6213         occured previously, don't resolve again.
6214
6215 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6216
6217         Fix #69949
6218         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6219         argument. Call ResolveAttributeUsage for unresolved.
6220         when types doesn't match ctor arguments.
6221         
6222         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6223         for nested attribute classes.
6224         (Class.attribute_usage): Removed.
6225         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6226         for attribute class.
6227         
6228         * ecore.cs (IsAttribute): Removed.
6229         
6230         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6231         
6232         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6233         now normal types.
6234         (attribute_types): Removed.
6235         (EmitCode): Global attributes are emited as the latest.
6236
6237 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6238
6239         * class.cs (EmitFieldInitializers): Don't emit field initializer
6240         for default values when optimilization is on.
6241         
6242         * constant.cs (Constant.IsDefaultValue): New property.
6243         
6244         * driver.cs: Add /optimize handling.
6245         
6246         * constant.cs,
6247         * ecore.cs,
6248         * literal.cs: Implement new IsDefaultValue property.
6249         
6250         * rootcontext.cs (Optimize): New field, holds /optimize option.
6251
6252 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6253
6254         Fix crasher in re-opened #72347.
6255         * namespace.cs (Namespace.Lookup): Return null if
6256         DeclSpace.DefineType returns null.
6257
6258         Fix #72678.
6259         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6260
6261 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6262
6263         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6264         now returns null if it cannot resolve to an lvalue.
6265         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6266         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6267         returned null.  Remove check for SimpleName.
6268         (EventExpr.DoResolveLValue): New.
6269         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6270         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6271         error from ...
6272         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6273         avoid CS0131 error.
6274         (Unary.ResolveOperator): Move CS0211 check ...
6275         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6276         CS0131 error.
6277         (Unary.DoResolveLValue): Simplify.
6278         (AddressOf.DoResolveLValue): New.
6279         (ArrayAccess.DoResolveLValue): New.
6280
6281 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6282
6283         * attribute.cs (Attribute.Resolve): Add arguments casting for
6284         when types doesn't match ctor arguments.
6285
6286 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6287
6288         Fix parts of #63202.
6289         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6290         lookup of operator in base type.  Ensure that all checks happen
6291         when the operator resolves to an "op_..." method.
6292
6293 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6294
6295         Fix #71992.
6296         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6297         'ignore_cs0104' parameter.  Pass it to ...
6298         (NamespaceEntry.Lookup): ... this.
6299         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6300         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6301         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6302         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6303         Update.  Request that cs0104 errors be ignored.
6304         (ComposedCast.ResolveAsTypeStep): Update.
6305
6306 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6307
6308         Fix #59209.
6309         * expression.cs (Invocation.BetterFunction): Remove support for
6310         comparing virtual functions and their overrides.
6311         (Invocation.IsOverride): New.
6312         (Invocation.OverloadResolve): Don't consider 'override' functions
6313         during candidate selection.  Store them in a lookaside list.
6314         If the selected method is a 'virtual' function, use the list to
6315         find any overrides that are closer to the LHS type.
6316
6317 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6318
6319         * expression.cs (New.DoResolve): Add complex core type reduction.
6320         (New.Constantify): Converts complex core type syntax like 'new int ()'
6321         to simple constant.
6322         
6323 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6324
6325         * decl.cs (EntryType.EntryType): New constructor to create an
6326         updated copy of a cache entry.
6327         (MemberCache.AddMethods): Use it.
6328         (MemberCache.ClearDeclaredOnly): Remove.
6329         (MemberCache.MemberCache): Update.
6330
6331 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6332
6333         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6334         variable.  This one is represents the actual low-level declaration
6335         of the method, as opposed to the semantic level `IsStatic'.   
6336
6337         An anonymous method which is hosted into a static method might be
6338         actually an instance method.  IsStatic would reflect the
6339         container, while MethodIsStatic represents the actual code
6340         generated.
6341
6342         * expression.cs (ParameterReference): Use the new MethodIsStatic
6343         instead of IsStatic.
6344
6345         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6346         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6347         set on the current EmitContext. 
6348
6349         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6350         resolve our casted expression as an LValue.  This triggers the
6351         proper LValue processing that is later required by Assign.
6352
6353         This fixes 72347.
6354
6355         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6356
6357 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6358
6359         C# 2.0 Fixed buffer implementation
6360
6361         * anonymous.cs: Update after RegisterHelperClass renaming.
6362
6363         * attribute.cs (AttributeTester.fixed_buffer_cache):
6364         Cache of external fixed buffers.
6365         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6366         implementation if field is fixed buffer else null.
6367
6368         * class.cs
6369         (TypeContainer.AddField): Accept FieldMember instead of Field.
6370         (FieldBase.IsFieldClsCompliant): Extracted code from
6371         VerifyClsCompliance descendant customization.
6372         (FixedField): New class handles fixed buffer fields.
6373         (FixedFieldExternal): Keeps information about imported fixed
6374         buffer.
6375         (IFixedField): Make access to internal or external fixed buffer
6376         same.
6377
6378         * cs-parser.jay: Add fixed buffer parsing.
6379
6380         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6381         buffer.
6382
6383         * expression.cs (Indirection): Extended implementation to accept
6384         fixed buffer field.
6385         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6386         (ElementAccess.MakePointerAccess): Get type as parameter.
6387         (DoResolve): Add fixed buffer field expression conversion.
6388         (DoResolveLValue): Ditto.
6389         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6390         (ArrayPtr): Derives from FixedBufferPtr.
6391         (ArrayPtr.Emit): Add extra emit for array elements.
6392
6393         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6394
6395         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6396         for compiler generated types.
6397         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6398
6399         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6400         and consume less memory.
6401         (Fixed.Resolve): Add fixed buffer case.
6402
6403         * typemanager.cs (compiler_generated_attr_ctor,
6404         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6405         (HasElementType): Add our own implementation to work on every
6406         runtime.
6407
6408 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6409
6410         * anonymous.cs (CaptureContext): Track whether `this' has been
6411         referenced.   
6412
6413         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6414         only captured `this' if it was implicitly done (instance
6415         methods/variables were used). 
6416
6417         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6418         `this' must be captured.
6419
6420 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6421  
6422         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6423         is null it means that there has been no need to capture anything,
6424         so we just create a sibling.
6425
6426         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6427
6428         Just a partial fix.  The other half is fairly elusive.
6429         
6430 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6431
6432         Fix #52586, cs0121-4.cs.
6433         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6434         and return a hashtable.
6435         (MemberCache.ClearDeclaredOnly): New.
6436         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6437         the method_hash of a base type too.
6438         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6439         type methods.  Overwrite entries with the same MethodHandle so
6440         that the ReflectedType is correct.  The process leaves in base
6441         virtual functions and their overrides as distinct entries.
6442         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6443         matters since it was boxed in a ArrayList before.
6444         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6445         modifier.
6446         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6447         case of a virtual function and its override (choose the overload
6448         as better).
6449         (Invocation.OverloadResolve): Avoid 'override' members during
6450         'applicable_type' calculation.
6451
6452 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6453
6454         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6455         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6456         GetTypeHandle.  It is possible for a reflected type to derive from
6457         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6458         System.Array during mscorlib compilation).
6459         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6460         contain a method_hash, don't create one either.  Don't create a
6461         deep copy of the base cache's method_hash.
6462         (MemberCache.SetupCache): Rename back from DeepCopy.
6463         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6464         already initialized.  If we see an override function, add its
6465         underlying base virtual function to the member_hash too.
6466
6467 2005-02-09  Raja R Harinath  <rharinath@novell.com>
6468
6469         Combine two near-redundant caches.
6470         * typemanager.cs (method_params): Rename from method_internal_params.
6471         (TypeManager.GetParameterData): New.  Replace
6472         Invocation.GetParameterData.
6473         (TypeManager.LookupParametersByBuilder): Remove.
6474         * expression.cs (Invocation.method_parameter_cache): Remove.
6475         (Invocation.GetParameterData): Remove.
6476         Update to changes.
6477         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
6478         Update to changes.
6479
6480 2005-02-08  Raja R Harinath  <rharinath@novell.com>
6481
6482         Fix #72015.
6483         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
6484         TypeManager.multicast_delegate_type is null, resolve it by looking
6485         up "System.MulticastDelegate".
6486         * rootcontext.cs (RootContext.ResolveCore): Simplify.
6487
6488 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
6489             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
6490             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
6491
6492         Fix cs0164.cs.
6493         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
6494         (LabeledStatement.AddReference): New.  Set 'referenced'.
6495         (Goto.Resolve): Use it.
6496
6497 2005-02-05  John Luke  <john.luke@gmail.com>
6498
6499         * driver.cs: remove duplicate -doc line in Usage ()
6500
6501 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6502
6503         * location.cs (Location.AddFile): Fix CS2002 error report.
6504
6505 2005-02-02  Martin Baulig  <martin@ximian.com>
6506
6507         * delegate.cs (Delegate.DefineType): Report an internal error if
6508         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6509         details.        
6510
6511 2005-02-02  Raja R Harinath  <rharinath@novell.com>
6512
6513         Fix a crasher in a variant of #31984.
6514         * const.cs (Constant.CheckBase): New override that defers the
6515         new-or-override check in case the base type hasn't been populated
6516         yet.
6517         (Constant.Define): Ensure the new-or-override check is performed.
6518
6519 2005-02-01  Duncan Mak  <duncan@ximian.com>
6520
6521         * const.cs (LookupConstantValue): Check that `ce' is not null
6522         before calling GetValue ().
6523
6524 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6525
6526         Fix test-334.cs (#69519).
6527         * cs-parser.jay (using_alias_directive): Pass in an expression to
6528         NamespaceEntry.UsingAlias.
6529         (using_namespace_directive): Pass in an expression to
6530         NamespaceEntry.Using.
6531         (namespace_name): Don't flatten to a string.
6532         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
6533         (NamespaceEntry.AliasEntry.Resolve): Lookup using
6534         ResolveAsTypeStep.
6535         (NamespaceEntry.UsingEntry): Likewise.
6536         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
6537         changes.
6538         (NamespaceEntry.LookupForUsing): Remove.
6539         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
6540         names.
6541         (NamespaceEntry.Lookup): Remove support for dotted names.
6542
6543 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6544
6545         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
6546         split into two.
6547         (NamespaceEntry.ImplicitParent): Compute on demand.
6548         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
6549         parallels the current.
6550         (NamespaceEntry.LookupForUsing): Use it.
6551         (NamespaceEntry.Lookup): If the current namespace-entry is
6552         implicit, don't search aliases and using tables.
6553
6554 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6555
6556         Fix #31984.
6557         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
6558         BaseCache here.
6559         (TypeContainer.BaseCache): Compute on demand.
6560         (TypeContainer.FindMembers): Define constants and types if they're
6561         not already created.
6562         (FieldMember.Define): Move resetting of ec.InUnsafe before error
6563         check.
6564         * const.cs (Constant.Define): Make idempotent.
6565
6566 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6567
6568         * pending.cs: Produce better code (no nops produced by using Ldarg
6569         + value).
6570         
6571         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6572         i - 1' it should be arg + 1.
6573
6574         Fixes bug #71819.
6575
6576 2005-01-28  Raja R Harinath  <rharinath@novell.com>
6577
6578         * attribute.cs (Attribute.CheckAttributeType): Make private
6579         non-virtual.
6580         (Attribute.ResolveType): Make virtual.
6581         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
6582         handling of RootContext.Tree.Types.
6583
6584 2005-01-27  Raja R Harinath  <rharinath@novell.com>
6585
6586         Update attribute-handling to use the SimpleName/MemberAccess
6587         mechanisms.
6588         * cs-parser.jay (attribute): Pass in an expression to the
6589         constructors of Attribute and GlobalAttribute.
6590         * attribute.cs (Attribute): Take an expression for the name.
6591         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
6592         passed in attribute name expression.
6593         (Attribute.CheckAttributeType): Use it.
6594         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
6595         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
6596         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
6597         argument to prevent error messages if the lookup fails.
6598
6599 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
6600
6601         * expression.cs (Indirection): Implemented IVariable interface
6602         to support indirection in AddressOf operator.
6603         (PointerArithmetic.Emit): Add optimalization for case where
6604         result can be precomputed.
6605
6606 2005-01-26  Martin Baulig  <martin@ximian.com>
6607
6608         * class.cs (TypeContainer.AttributeTargets): Return the correct
6609         AttributeTargets depending on our `Kind' instead of throwing an
6610         exception; fixes #71632.
6611
6612 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
6613
6614         Fix #71257
6615         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
6616         constant members.
6617
6618 2005-03-17  Martin Baulig  <martin@ximian.com>
6619
6620         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6621         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6622
6623 2005-03-17  Martin Baulig  <martin@ximian.com>
6624
6625         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6626         to bool so we can return an error condition.
6627         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6628         returned an error.
6629
6630 2005-03-17  Martin Baulig  <martin@ximian.com>
6631
6632         * generic.cs (TypeMananager.IsIEnumerable): New public method.
6633
6634         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
6635         converting from an array-type of T to `IEnumerable<T>'.
6636
6637 2005-03-16  Martin Baulig  <martin@ximian.com>
6638
6639         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
6640         (Nullable.LiftedUnaryMutator): New public class.
6641
6642         * expression.cs (UnaryMutator.DoResolve): Added support for
6643         Nullable Types.
6644
6645 2005-03-14  Martin Baulig  <martin@ximian.com>
6646
6647         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
6648
6649 2005-03-14  Martin Baulig  <martin@ximian.com>
6650
6651         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
6652         the comparision operators `<', `>', `<=' and `>='.
6653
6654 2005-03-13  Martin Baulig  <martin@ximian.com>
6655
6656         * generic.cs
6657         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
6658         avoid confusion with the `NullLiteral'.
6659         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
6660
6661 2005-03-13  Martin Baulig  <martin@ximian.com>
6662
6663         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
6664         comparing arbitrary types with the null literal.
6665
6666 2005-03-13  Martin Baulig  <martin@ximian.com>
6667
6668         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
6669         boolean operators '&&', '||', '&' and '|'.
6670         (Nullable.OperatorTrueOrFalse): New public class.
6671
6672         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
6673         instead of a `StaticCallExpr'; added support for nullables.
6674
6675 2005-03-10  Martin Baulig  <martin@ximian.com>
6676
6677         * expression.cs
6678         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
6679         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
6680
6681 2005-03-07  Martin Baulig  <martin@ximian.com>
6682
6683         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
6684         it work if `expr' is not an IMemoryLocation.
6685         (Nullable.Lifted): Implement IMemoryLocation.
6686         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
6687         target type.
6688
6689 2005-03-05  Martin Baulig  <martin@ximian.com>
6690
6691         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
6692         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
6693         (Nullable): Added support for lifted unary and binary operators.
6694
6695         * expression.cs (Unary.DoResolve): Added support for nullable types.
6696         (Binary.DoResolve): Likewise.
6697         (Conditional.DoResolve): Likewise.
6698
6699 2005-03-02  Martin Baulig  <martin@ximian.com>
6700
6701         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
6702
6703         * class.cs (ClassPart.SetParameterInfo): Override this.
6704         (PartialContainer.SetParameterInfo): Override this.
6705         (TypeContainer.CheckConstraints): New protected method.
6706         (PartialContainer.CheckConstraints): Override this and check
6707         whether the same contraints were specified in all parts of a
6708         partial generic type definition.
6709         (PartialContainer.UpdateConstraints): New public method.
6710
6711         * generic.cs (TypeParameter.UpdateConstraints): New public method.
6712
6713 2005-03-02  Martin Baulig  <martin@ximian.com>
6714
6715         Committing a patch from Carlos Alberto Cortez to fix #72887.
6716
6717         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
6718         casts from `T []' to `int []'.
6719
6720 2005-03-02  Martin Baulig  <martin@ximian.com>
6721
6722         * generic.cs (TypeManager.IsEqual): Make this symmetric.
6723
6724         * expression.cs (Binary.ResolveOperator): When resolving a
6725         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
6726         `=='.  Fixes #71866.  See gen-127.cs.
6727
6728 2005-03-02  Martin Baulig  <martin@ximian.com>
6729
6730         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6731         static constructor in static classes.
6732
6733 2005-03-02  Martin Baulig  <martin@ximian.com>
6734
6735         * generic.cs
6736         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
6737         (Nullable.LiftedConversion): Added support for user-defined
6738         conversions.
6739
6740         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
6741
6742         * cs-parser.jay: Use ComposedCast everywhere instead of
6743         NullableType, so we don't need to check for NullableType
6744         everywhere.
6745         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
6746         case where we'll be resolved into a `parenthesized_expression_0'
6747         afterwards.
6748
6749         * convert.cs
6750         (Convert.UserDefinedConversion): Added nullable conversions.
6751
6752 2005-02-28  Martin Baulig  <martin@ximian.com>
6753
6754         * generic.cs (TypeManager.IsNullableType): New static method.
6755         (Nullable): New abstract class.
6756         (Nullable.NullLiteral): New public class.
6757         (Nullable.LiftedConversion): New public class.
6758
6759         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
6760         `builtin_types opt_nullable'.
6761
6762         * convert.cs
6763         (Convert.ImplicitConversionStandard): Added nullable conversions.
6764         (Convert.ExplicitConversionStandard): Likewise.
6765         (Convert.ExplicitConversion): Likewise.
6766
6767 2005-02-26  Martin Baulig  <martin@ximian.com>
6768
6769         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
6770         begin with a "?", for instance "?[]".  Don't do a type lookup if
6771         `dim' is empty.
6772
6773 2005-02-25  Martin Baulig  <martin@ximian.com>
6774
6775         The first part of Nullable Types :-)
6776
6777         * generic.cs (NullableType): New public class.
6778         (NullCoalescingOperator): New public class.
6779         (TypeArguments.Resolve): Add a CS0306 check.
6780
6781         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
6782         (opt_nullable): New rule.
6783         (type): Added `opt_nullable' to `namespace_or_type_name',
6784         `builtin_types' and `pointer_type'.
6785         (array_type): Added `opt_nullable'.
6786         (opt_rank_specifier_or_nullable): New rule; this is the
6787         combination of `opt_rank_specifier' and `opt_nullable'.
6788         (opt_error): New rule; catch errors here.
6789         (nullable_type_or_conditional): New rule; we use this to check for
6790         nullable and still detect the conditional operator.
6791         (local_variable_type): Use `opt_rank_specifier_or_nullable'
6792         instead `opt_rank_specifier'.
6793
6794         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
6795         for nullables.
6796
6797 2005-02-24  Martin Baulig  <martin@ximian.com>
6798
6799         * README, README.Changes: Removed; they're old and obsolete.
6800
6801 2005-02-22  Martin Baulig  <martin@ximian.com>
6802
6803         * generic.cs (TypeParameter.Resolve): If resolving the constraints
6804         returned an error, set `constraints' to null to avoid a crash
6805         later on.
6806         (TypeParameter.ResolveType): Likewise.
6807
6808 2005-02-22  Martin Baulig  <martin@ximian.com>
6809
6810         * generic.cs
6811         (Constraints.ResolveTypes): Protect against being called twice.
6812         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
6813         (TypeParameter.ResolveType): New public method; calls
6814         constraints.ResolveTypes().
6815         (TypeParameter.DefineType): Moved constraints.ResolveType() out
6816         into the new ResolveType().
6817         (GenericMethod.Define): Call ResolveType() on all our
6818         TypeParameter's.        
6819
6820 2005-02-21  Martin Baulig  <martin@ximian.com>
6821
6822         * generic.cs
6823         (TypeManager.generic_nullable_type): New static public field.
6824         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
6825
6826         * rootcontext.cs
6827         (RootContext.ResolveCore): Resolve "System.Nullable`1".
6828
6829 2005-02-15  Martin Baulig  <martin@ximian.com>
6830
6831         * generic.cs (ConstructedType.Constraints): Correctly check
6832         constraints if the argument type is a type parameter; fixes
6833         #72326. 
6834
6835 2005-02-02  Martin Baulig  <martin@ximian.com>
6836
6837         * delegate.cs (Delegate.DefineType): Report an internal error if
6838         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6839         details.        
6840
6841 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6842
6843         * pending.cs: Produce better code (no nops produced by using Ldarg
6844         + value).
6845         
6846         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6847         i - 1' it should be arg + 1.
6848
6849         Fixes bug #71819.
6850         
6851 2005-01-26  Martin Baulig  <martin@ximian.com>
6852
6853         * cs-parser.jay (indexer_declarator): Don't report an error if we
6854         have type parameters since we can be an explicit interface
6855         implementation; fixes #71449.
6856
6857 2005-01-26  Martin Baulig  <martin@ximian.com>
6858
6859         * class.cs (TypeContainer.AttributeTargets): Return the correct
6860         AttributeTargets depending on our `Kind' instead of throwing an
6861         exception; fixes #71632.
6862
6863 2005-01-26  Martin Baulig  <martin@ximian.com>
6864
6865         * delegate.cs (Delegate.DefineType): Correctly define our type
6866         parameters.  Fixes #71483.
6867
6868 2005-01-25  Raja R Harinath  <rharinath@novell.com>
6869
6870         Fix #71602.
6871         * expression.cs (MemberAccess.DoResolve): Don't complain with
6872         cs0572 when the LHS of a member access has identical name and type
6873         name.
6874
6875 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
6876
6877         Fix #71651, #71675
6878         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
6879         CreatePermission.
6880         Create custom PermissionSet only for PermissionSetAttribute.
6881
6882 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
6883
6884         Fix #71649
6885         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
6886         delegates in static class.
6887
6888 2005-01-24  Martin Baulig  <martin@ximian.com>
6889
6890         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
6891         merging an implicit block, just use its reachability.
6892
6893         * statement.cs (Block.Resolve): Make the unreachable code check
6894         work wrt. implicit blocks; see test-337 from #63842.
6895
6896 2005-01-21  Alp Toker  <alp@atoker.com>
6897  
6898         * cs-parser.jay: destructor_declaration's container is PartialContainer
6899         not Class when partial types are used, so use Kind prop instead of
6900         'is'.
6901         
6902 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
6903
6904         * cs-parser.jay: Improve error reporting when an interface
6905         declares new types.
6906
6907 2005-01-20  Dick Porter  <dick@ximian.com>
6908
6909         * support.cs: SeekableStreamReader fix from Sandor Dobos
6910         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
6911         chars are read.  Fixes bug 70369.
6912
6913 2005-01-20  Raja R Harinath  <rharinath@novell.com>
6914
6915         * cs-parser.jay (catch_clause): Simplify current_block handling
6916         somewhat.
6917
6918 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
6919
6920         * convert.cs (ImplicitStandardConversionExists): Synchronize the
6921         code with ImplicitStandardConversion to handle the implicit
6922         conversion of method groups into valid delegate invocations. 
6923
6924         The problem is that in parameter handling we were using this code
6925         path.  Fixes bug #64698
6926
6927 2005-01-19  Raja R Harinath  <rharinath@novell.com>
6928
6929         * cs-parser.jay: Fix several infelicities.
6930         - Avoid assigning to the parser value stack.  Code like 
6931           '$3 = null' is unclean.  Synthesize a value for the code block
6932           instead. 
6933         - Avoid using oob_stack for storing location information.  Use ...
6934         (_mark_): ... this.  New (empty) rule.  Saves the current location
6935         in $$.
6936         (foreach_statement): Avoid using oob_stack for current_block
6937         handling.  Use technique used in for_statement and
6938         using_statement.  Synthesize a value for the code block to store
6939         additional intermediate information.
6940
6941 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
6942
6943         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
6944         of a different type is only allowed to private fields of a
6945         containing type, not on fields of a base class.
6946
6947         See test-174.cs and error cs0122-9.cs
6948
6949 2005-01-13  Raja R Harinath  <rharinath@novell.com>
6950
6951         Fix test-335.cs (bug #58126).
6952         * cs-parser.jay (argument): Split out non-expression parts of the
6953         rule into 'non_simple_argument'.
6954         (invocation_expression): Support parenthesized invocations with
6955         multiple arguments, and with single non-simple arguments.
6956
6957 2005-01-13  Raja R Harinath  <rharinath@novell.com>
6958
6959         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
6960         places.
6961
6962 2005-01-12  Raja R Harinath  <rharinath@novell.com>
6963
6964         Fix cs0038-1.cs, cs1640-6.cs.
6965         * ecore.cs (Expression.Resolve): Remove special-case for
6966         SimpleName in error-handling.
6967         (Expression.almostMatchedMembers): Relax access permission to
6968         protected.
6969         (Expression.MemberLookupFailed): Handle duplicates in
6970         almostMatchedMembers list.
6971         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
6972         * expression.cs (New.DoResolve): Report CS1540 for more cases.
6973         * typemanager.cs (GetFullNameSignature): Use the MethodBase
6974         overload if the passed in MemberInfo is a MethodBase.
6975
6976 2005-01-25  Martin Baulig  <martin@ximian.com>
6977
6978         * doc.cs
6979         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
6980
6981 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
6982
6983         Fix #70749
6984         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
6985         for non-CAS & merge permission sets properly.
6986
6987 2005-01-11  Raja R Harinath  <rharinath@novell.com>
6988
6989         Improve standard-compliance of simple name and member access 
6990         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
6991         * ecore.cs (FullNamedExpression): New abstract base class 
6992         for Namespaces and TypeExpressions.
6993         (ResolveFlags.SimpleName): Remove.
6994         (SimpleName): Remove support for dotted names.
6995         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
6996         DeclSpace.FindType and DeclSpace.LookupType.
6997         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
6998         (Expression.ExprClassName): Make member function.
6999         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7000         a namespace.  Remove creation of dotted "SimpleName"s.
7001         (MemberAccess.DoResolve): Likewise.
7002         * decl.cs (DeclSpace.Cache): Make private.
7003         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7004         (DeclSpace.FindType): Update.
7005         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7006         FullNamedExpression.
7007         * namespace.cs (Namespace): Derive from FullNamedExpression
7008         so that it can be part of expression resolution.
7009         (Namespace.Lookup): Return an FullNamedExpression.
7010         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7011         namespace.
7012         * rootcontext.cs (NamespaceLookup): Remove.
7013         (LookupType): Move to DeclSpace.
7014         * attribute.cs (CheckAttributeType): Update.
7015         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7016         (FindDocumentedTypeNonArray): Likewise.
7017
7018 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7019
7020         Fix cs0509.cs, cs1632.cs.
7021         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7022         is the same as IsInterface.
7023         (TypeContainer.GetClassBases): Likewise.
7024         * statement.cs (LabeledStatement.ig): New field.
7025         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7026         label.
7027         (LabeledStatement.DoEmit): Check that the label was created with
7028         the same ILGenerator.
7029
7030 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7031
7032         Fix #71058
7033         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7034         accessors to its properties.
7035
7036         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7037         from accessors to property.
7038         
7039 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7040
7041         Fix #70722
7042         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7043         only for overrides.
7044         
7045 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7046
7047         * attribute.cs: Check for null and empty strings.  
7048
7049         I have lost another battle to Paolo.
7050
7051 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7052
7053         Fix #70942
7054         * class.cs (PropertyMethod): Set Parent field in ctors.
7055         (SetMethod.InternalParameters): Add unsafe switch hack.
7056         Override MarkForDuplicationCheck where it is appropriate.
7057
7058         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7059         It says whether container allows members with the same name.
7060         Base default is no.
7061         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7062         Removed is_method parameter.
7063
7064 2005-01-06  Duncan Mak  <duncan@ximian.com>
7065
7066         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7067         because the previous change led to incorrect reporting of CS1032
7068         ("Cannot define/undefine preprocessor symbols after first token in
7069         file"). Instead of using `tokens_seen' as the only flag that
7070         triggers CS1040, introduce `comments_seen'. This new flag is used
7071         to signify having seen comments on the current line, so it is
7072         unset after a newline.
7073
7074 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7075
7076         * doc.cs : When searching for a type, find nested type too.
7077           This fixes bug #71040.
7078
7079 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7080
7081         * doc.cs :
7082           - Warn missing member comment on those classes which also does not
7083             have doc comments. Fixed bug #71041.
7084           - Don't warn missing doc comment on default constructor.
7085             Fixed bug #71042.
7086
7087 2005-01-06  Duncan Mak  <duncan@ximian.com>
7088
7089         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7090         comments, set `tokens_seen' to true. This allows us to detect
7091         misplaced preprocessor directives (i.e. not at the beginning of
7092         the a line, nor after whitespaces). In that case, report error
7093         CS1040. This fixes bug #56460.
7094
7095         * cs-parser.jay (interface_member_declaration): Add checks for
7096         IsExplicitImpl, and report CS0541 error if an interface member is
7097         defined as an explicit interface declaration.
7098
7099 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7100
7101         Fix #70817
7102         * class.cs (PropertyMethod): Set Parent field in ctors.
7103         (SetMethod.InternalParameters): Add unsafe switch hack.
7104         
7105         * decl.cs (MemberCore.Parent): Cannot be readonly.
7106
7107 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7108
7109         * decl.cs (DeclSpace.ResolveType): Remove.
7110         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7111         Merge in code from ...
7112         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7113         * class.cs, enum.cs: Update to changes.
7114
7115 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7116
7117         * anonymous.cs: Ensure that we init the scope of our parent if it
7118         has not been initialized yet.
7119
7120 2004-12-30  Duncan Mak  <duncan@ximian.com>
7121
7122         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7123         if field.FieldBuilder is null. Fixes #70758.
7124
7125         * convert.cs: Fixed some typos and updated some of the comments.
7126         (ImplicitStandardConversionExists):
7127         (TryImplicitIntConversion): If `target_type' is an interface and
7128         the type of `ic' implements this interface, return true or a new
7129         BoxedCast instead of null. This fixes #70468.
7130
7131 2004-12-29  Duncan Mak  <duncan@ximian.com>
7132
7133         * expression.cs (Argument.Emit): Check that Expr is
7134         IMemoryLocation before casting to it, and report CS1510 otherwise.
7135
7136         This fixes #70402.
7137
7138 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7139
7140         * statement.cs (Block.ThisVariable): remove the recursion here, to
7141         make the --profile more sane.
7142
7143 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7144
7145         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7146         assembly, by JB Evain.
7147
7148 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7149
7150         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7151           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7152         "parent" refers to enclosing type/class.  "base" refers to superclass.
7153
7154 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7155
7156         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7157         Ensure that we only have GlobalAttributes.
7158         * attribute.cs (Attribute.Emit): Make non-virtual.
7159         (GlobalAttribute.Emit): Remove.
7160         (Attribute.Resolve): Make virtual.
7161         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7162         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7163         the argument. Don't create one.
7164         (Attribute.GetObsoleteAttribute): Likewise.
7165         (Attribute.GetClsCompliantAttributeValue): Likewise.
7166         * class.cs, decl.cs: Update to changes.
7167
7168 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7169
7170         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7171         
7172         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7173         
7174         * statement.cs (Foreach.Resolve): Add error 186 report.
7175
7176 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7177
7178         * expression.cs (Conditional.DoResolve): Add warning 429.
7179         
7180         * statement.cs (If.Resolve): Add warning 665.
7181
7182 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7183
7184         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7185         except when in the parser, and in GlobalAttribute.
7186         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7187         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7188         RootContext.Tree.Types.NamespaceEntry once work is done.
7189         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7190         and resets RootContext.Tree.Types.NamespaceEntry.
7191
7192 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7193
7194         * cs-parser.jay: Don't create a block for every variable.
7195
7196 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7197
7198         * location.cs: Provide extra information.
7199
7200         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7201         variables from the captured environment, it is the ldarg_0.
7202
7203 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7204
7205         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7206         find a conclusion.
7207         
7208         * class.cs: Changed warning level for 169 to avoid developer
7209         displeasure from warning flooding. It will be changed back when they
7210         fix most of current BCL warnings.
7211         
7212         * RootContext.cs: Pushed default WarningLevel to 3.
7213         
7214         * statement.cs: Removed unused variable.
7215
7216 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7217
7218         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7219         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7220         Add error 502 report.
7221         (StaticClass.DefineType): Add error 441 report.
7222         (Class.AllowedModifiersProp): New virtual property as temporary
7223         extension to AllowedModifiers.
7224         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7225         to share implementation with StaticClass and don't call virtual
7226         methods from ctor.
7227         
7228         * driver.cs (MainDriver): Add error 1558 test.
7229
7230         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7231         report. Moved error 36 test here.
7232
7233         * statement.cs (Throw.Resolve): Add error 724 report.
7234
7235         * typemanager.cs: Add out_attribute_type core type.
7236         
7237 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7238
7239         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7240         3018 report.
7241         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7242
7243         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7244         3017 report.
7245         
7246         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7247
7248         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7249         Add error 3023 report.
7250         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7251
7252         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7253         implementation.
7254
7255 2004-12-12  John Luke  <john.luke@gmail.com>
7256
7257         * driver.cs (AddArgs): take -- into account when
7258         adding arguments, fixes bug 65710 
7259
7260 2004-12-12  Martin Baulig  <martin@ximian.com>
7261
7262         * expression.cs (Unary.TryReduceNegative): Added support for
7263         SByteConstant and ByteConstant.
7264         (Unary.Reduce): Check error values from TryReduceNegative().
7265
7266 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7267
7268         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7269         and report exception as error 182.
7270
7271 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7272
7273         * driver.cs (Main): Fix message when there are warnings.
7274
7275 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7276
7277         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7278
7279 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7280
7281         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7282         Reduced number of warnings.
7283         
7284         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7285
7286 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7287
7288         * driver.cs: Removed message.
7289
7290         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7291
7292 2004-12-08    <vargaz@freemail.hu>
7293
7294         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7295
7296 2004-12-08  Martin Baulig  <martin@ximian.com>
7297
7298         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7299         instead of a CS3002 for properties and indexer.
7300
7301 2004-12-08  Martin Baulig  <martin@ximian.com>
7302
7303         * decl.cs (MemberName.ToString): Make this work again.
7304
7305 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7306
7307         * attribute.cs (Resolve): Add error 591 detection.
7308
7309         * class.cs (FieldMember.Define): Add error 1547 detection.
7310         (Indexer.Define): Add error 620 detection.
7311         (Operator.Define): Add error 590 detection.
7312
7313         * ecore.cs: Missing argument for error 79.
7314
7315         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7316         detection.
7317
7318 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7319
7320         Fix #70106
7321         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7322         only.
7323
7324 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7325
7326         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7327           Some operator comments were suppressed.
7328         * doc.cs : Implicit/explicit operator name in doc comments are like
7329           "op_Explicit(type)~returnType", so added suffix handling.
7330
7331 2005-01-21  Alp Toker  <alp@atoker.com>
7332
7333         * cs-parser.jay: destructor_declaration's container is PartialContainer
7334         not Class when partial types are used, so use Kind prop instead of 'is'.
7335
7336 2004-12-12  Martin Baulig  <martin@ximian.com>
7337
7338         * expression.cs (Unary.TryReduceNegative): Added support for
7339         SByteConstant and ByteConstant.
7340         (Unary.Reduce): Check error values from TryReduceNegative().
7341
7342 2004-12-11  Martin Baulig  <martin@ximian.com>
7343
7344         * support.cs (ReflectionParameters.ParameterName): If we have a
7345         `gpd', call `ParameterName' on it.
7346
7347         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7348
7349         * pending.cs (PendingImplementation.DefineProxy): Call
7350         DefineParameter() for all of the MethodBuilder's arguments.
7351
7352 2004-12-09  Martin Baulig  <martin@ximian.com>
7353
7354         * doc.cs (DocUtil): Make this a static class.
7355
7356 2004-12-09  Martin Baulig  <martin@ximian.com>
7357
7358         * expression.cs (Invocation.InferType): Moved the type inference
7359         implementation into TypeManager.
7360
7361         * generics.cs (TypeManager): Moved the type inference
7362         implementation here.
7363
7364 2004-12-09  Martin Baulig  <martin@ximian.com>
7365
7366         * typemanager.cs (TypeManager): Make this a partial class.
7367
7368         * generics.cs
7369         (TypeManager): Move the generics part of `TypeManager' here.
7370
7371 2004-12-08  Martin Baulig  <martin@ximian.com>
7372
7373         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7374         instead of a CS3002 for properties and indexer.  Added CS3024
7375         check for generic interfaces.
7376
7377         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7378         instances are not CLS-compliant.
7379
7380 2004-12-08  Martin Baulig  <martin@ximian.com>
7381
7382         * cs-parser.jay
7383         (void_pointer_expression): New rule for `void*', `void**' etc.
7384         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7385
7386 2004-12-08  Martin Baulig  <martin@ximian.com>
7387
7388         * expression.cs (Invocation.InferType): Removed the hack for
7389         MethodCore.MayUnify().  
7390
7391         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7392         this actually work.
7393
7394         * class.cs (MethodCore.MayUnify): Use
7395         TypeManager.MayBecomeEqualGenericTypes().       
7396
7397 2004-12-08  Martin Baulig  <martin@ximian.com>
7398
7399         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7400         parameter, box it.  Fixes #69233.
7401
7402 2004-12-08  Martin Baulig  <martin@ximian.com>
7403
7404         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7405         have the ctor constraint.  Fixes #68326.
7406
7407 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7408
7409         * cs-parser.jay : interface comment was not consumed because of
7410           extra opt_semicolon before doc handling.
7411
7412 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7413
7414         Fix test-327.cs, test-328.cs, and put in early infrastructure
7415         for eventually fixing #52697.
7416         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7417         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7418         from other methods.
7419         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7420         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7421         (VerifyUsing, error246): Update.
7422         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7423         'NamespaceEntry.LookupNamespaceOrType'.
7424
7425 2004-12-07  Martin Baulig  <martin@ximian.com>
7426
7427         * driver.cs: Call it "BETA SOFTWARE" :-)
7428
7429 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7430
7431         Fix crash on cs0657-17.cs.
7432         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7433         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7434         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7435         the case where the NamespaceEntry gets overwritten.
7436
7437 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7438
7439         Fixed #69195, #56821
7440         * ecore.cs (ResolveBoolean): Tiny refactoring.
7441
7442         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7443         of right expression resolving when left is false constant and
7444         operator is LogicalAnd OR true constant and operator is LogicalOr.
7445
7446         * statement.cs (ResolveUnreachable): Always reports warning.
7447
7448 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7449
7450         * class.cs: Distinguish between 1721 and 1722 (just a little help
7451         for the programmer).
7452
7453 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7454
7455         * delegate.cs: Only allow this on new versions of the language. 
7456
7457 2004-12-02  Duncan Mak  <duncan@ximian.com>
7458
7459         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7460         Expression class.
7461         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7462         here as a static method. Take an additional bool out parameter
7463         `must_do_cs1540_check' for signaling to InstanceResolve.
7464         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7465         member field from PropertyExpr class and made it an argument of
7466         the method instead.
7467         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
7468         check for MarshalByRefObject, and report CS0122 instead of CS1540.
7469         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
7470         and `remove_accessor' as well as InstanceResolve: report CS0122
7471         where applicable.
7472
7473         Fixes #70129.
7474
7475 2004-12-07  Martin Baulig  <martin@ximian.com>
7476
7477         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
7478         and CS0692 where appropriate.
7479
7480 2004-12-06  Martin Baulig  <martin@ximian.com>
7481
7482         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
7483         IsDuplicateImplementation() and improved it.
7484
7485         * expression.cs (Invocation.InferTypeArguments): Added
7486         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
7487         and removed the "ref" modifier from `infered_types'.
7488
7489         * decl.cs (MemberName.ToString): Removed the exception.
7490
7491 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
7492
7493         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
7494           comments are allowed.
7495
7496 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7497
7498         * delegate.cs: Add checks for subtypes in paramaters and return values
7499         in VerifyMethod () to add support for Covariance/Contravariance
7500         in delegates.
7501         
7502 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7503
7504         * report.cs: Remove extra closing parenthesis.
7505
7506         * convert.cs (Error_CannotImplicitConversion): If the name of the
7507         types are the same, provide some extra information.
7508
7509 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
7510
7511         Fix bug #70102
7512         * attribute.cs (Resolve): Improved implementation of params
7513         attribute arguments.
7514
7515         * support.cs (ParameterData): Add HasParams to be faster.
7516
7517 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
7518
7519         all things are for /doc support:
7520
7521         * doc.cs: new file that supports XML documentation generation.
7522         * mcs.exe.sources: added doc.cs.
7523         * driver.cs:
7524           Handle /doc command line option.
7525           Report error 2006 instead of 5 for missing file name for /doc.
7526           Generate XML documentation when required, after type resolution.
7527         * cs-tokenizer.cs:
7528           Added support for picking up documentation (/// and /** ... */),
7529           including a new XmlCommentState enumeration.
7530         * cs-parser.jay:
7531           Added lines to fill Documentation element for field, constant,
7532           property, indexer, method, constructor, destructor, operator, event
7533           and class, struct, interface, delegate, enum.
7534           Added lines to warn incorrect comment.
7535         * rootcontext.cs :
7536           Added Documentation field (passed only when /doc was specified).
7537         * decl.cs:
7538           Added DocComment, DocCommentHeader, GenerateDocComment() and
7539           OnGenerateDocComment() and some supporting private members for
7540           /doc feature to MemberCore.
7541         * class.cs:
7542           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
7543         * delegate.cs:
7544           Added overriden DocCommentHeader.
7545         * enum.cs:
7546           Added overriden DocCommentHeader and GenerateDocComment().
7547
7548 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
7549
7550         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
7551         unwrapping the enumeration values, chain to
7552         DoConstantNumericPromotions again, so we can promote things to the
7553         fundamental types (takes care of enums that are bytes, sbytes).
7554
7555         Fixes bug #62054.
7556
7557 2004-12-01  Raja R Harinath  <rharinath@novell.com>
7558
7559         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
7560         Fix long-standing bug in type-lookup.  Use FindType instead of
7561         LookupType when ec.ResolvingTypeTree.
7562         (Attribute.ResolveType, Attribute.Resolve)
7563         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
7564         Update to changes.
7565         (Attributes.Search): Remove internal version.  Update.
7566         (Attributes.SearchMulti): Update.
7567         (Attributes.GetClsCompliantAttribute): Remove.
7568         (Attributes.GetIndexerNameAttribute): Remove.
7569         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
7570         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
7571         * class.cs (Indexer.Define): Likewise.
7572
7573 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
7574
7575         Fix bug #68790
7576         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
7577         MarshallByReference members access.
7578
7579         * expression.cs: Use CheckMarshallByRefAccess;
7580         Better error CS0197 message.
7581
7582         * report.cs: Print whole related error message.
7583
7584 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7585
7586         * class (GetClassBases): Better error 60 report.
7587         (EventProperty): Disabled warning 67 detection.
7588
7589 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7590
7591         Fix bug #60324
7592         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
7593
7594         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
7595         precise values.
7596
7597 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7598
7599         Fix bug #49488
7600         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
7601
7602         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
7603
7604 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
7605
7606         * attribute.cs (Attribute.Resolve): Refine error reporting and
7607         report a cs0117 if the identifier does not exist, to distinguish
7608         from 0617 which is a miss-use of the actual identifier.
7609
7610         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
7611         between cs0070 and cs0079.
7612
7613         * class.cs (MemberBase.DoDefine): When reporting a wrong
7614         accessibility level, we use MethodCore to compare instead of
7615         Method (this was a regression in some refactoring effort).
7616
7617         So now we correctly report cs0056 again.
7618
7619         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
7620         testing the target_type (which was known to be object_type) and
7621         not the source type (which is anonymous_method).
7622
7623         Fixed reporting of error cs1660.
7624
7625         * expression.cs (UserCast.Source): Expose the underlying cast.
7626
7627         * statement.cs (Switch.SwitchGoverningType): Sort the list of
7628         allowed types to find a match to int32 first (most common).
7629
7630         In addition, it ignores any ImplicitUserConversions that did an
7631         internal implicit conversion (as the switch statement allows only
7632         one integral conversion to exist).
7633
7634         * class.cs (PartialContainer.Create): rename `name' to
7635         `member_name' for clarity.  Then replace the string calls with a
7636         call to MemberName.GetPartialName, as now using
7637         MemberName.ToString is an error (this is due to the side effects
7638         it had, that were fixed in the past).
7639
7640         This will restore the error reporting on a number of partial class
7641         errors that were missusing this (and getting an exception as a
7642         results, which is now just a plain textual warning, because
7643         yyparse debug output would crash otherwise).
7644
7645 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7646
7647         * Makefile (PROGRAM_INSTALL_DIR): Remove.
7648
7649 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7650
7651         * rootcontext.cs (LookupType): Make sure to cache lookups that
7652         don't give us a negative result. This saves about 5% of corlib
7653         compilation time.
7654
7655 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7656
7657         * report.cs (AbstractMessage.Print): messages are sent to stderr
7658
7659         * class.cs (TypeContainer.GetClassBases): It is an error to have a
7660         non-interface in the list of interfaces (at this point, either
7661         parent was properly set, or a base class is being listed in the
7662         interfaces section).
7663
7664         This flags error 1722, and resolves the crash from bug 69259.
7665
7666 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7667
7668         * statement.cs (Using.EmitExpressionFinally): make this work right
7669         for valuetypes. Fixes 69926.
7670
7671 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7672
7673         * const.cs (Const.ChangeType): Cope with the "0 literal can be
7674         converted to an enum" here, before we try to change the underlying
7675         type.  This code exists, but it is a different code path than the
7676         one used while encoding constants.
7677
7678         (ImplicitReferenceConversionExists): In addition, resynchronized
7679         the code here, so it matches the same code in
7680         ImplicitReferenceConversionExists for the `from any class-type S
7681         to any interface-type T'.       
7682
7683 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
7684
7685         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
7686
7687 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
7688
7689         * cs-parser.jay: Use verbosity accordingly. 
7690
7691 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7692
7693         * expression.cs (Unary.ResolveOperator): Do not report warning;
7694         AddressOf reads from variable.
7695         
7696         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
7697
7698 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7699
7700         Fix bug #69462
7701
7702         * attribute.cs (Attributable): Removed CheckTargets.
7703         (Attributes.Emit): Explicit attribute targets are tested here.
7704
7705         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
7706         not enabled for interfaces.
7707
7708         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
7709         (GetAssemblyName): Ouch next bug there.
7710
7711 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7712
7713         * expression.cs: Error 275 added.
7714         
7715 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
7716
7717         Fix bug #69177 (Implemented decimal constant support)
7718
7719         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
7720         (BinaryFold): Add DecimalConstant.
7721
7722         * const.cs (Define): Decimal constant 
7723         (is not constant.
7724         (ChangeType): Add decimal type handling.
7725         (LookupConstantValue): Don't set value for decimal type but
7726         emit DecimalConstantAttribute. Needed for constant optimization.
7727
7728         * constant.cs (ToDecimal): New method.
7729         (ConvertToDecimal): New method.
7730         (IntConstant): Implemented ConvertToDecimal.
7731         (DecimalConstant.Emit): Emit optimized version for decimals in
7732         int range.
7733
7734         * expression.cs (ResolveOperator): Changed order of constant
7735         reduction to work correctly with native types which have
7736         overloaded operators.
7737         (ResolveMemberAccess): Extract constant value from attribute
7738         for decimal type.
7739
7740         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
7741
7742         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
7743         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
7744         (ChangeType): Decimal is special.
7745         (TypeToCoreType): Add decimal type.
7746
7747 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
7748
7749         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
7750         decimal types.
7751
7752 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
7753
7754         * class.cs (EventField.ApplyAttributeBuilder): Fix error
7755         test cs1667-5.cs.
7756
7757 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
7758
7759         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
7760
7761         * pending.cs (PendingImplementation): Grab only interfaces.
7762
7763 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
7764
7765         * statement.cs (ForeachHelperMethods): Add location member and
7766         error 202 detection.
7767
7768 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
7769
7770         * expression.cs (DoResolveBase): Fixed wrong warning for out
7771         variables.
7772
7773 2004-12-04  Martin Baulig  <martin@ximian.com>
7774
7775         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
7776         to check whether the conversion is ok.
7777
7778         * typemanager.cs (TypeManager.GetTypeArguments): Just return
7779         `Type.EmptyTypes' if we're not a generic TypeContainer.
7780
7781 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7782
7783         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
7784         old bug: when converting from the null literal to a pointer,
7785         return an EmptyCast, not the NullLiteral.
7786
7787         This fixes #69921, the recent null_type changes probably made this
7788         bug more prominent.
7789
7790 2004-12-03  Martin Baulig  <martin@ximian.com>
7791
7792         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
7793         method as our child, call AnonymousMethod.Compatible() on it.
7794
7795 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7796
7797         * class.cs (FieldBase): Use an unused bit field from the field to
7798         encode the `has_offset' property from the FieldMember.  This saves
7799         a couple of Ks on bootstrap compilation.
7800
7801         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
7802         method as our child, return the AnonymousMethod resolved
7803         expression.
7804
7805         * expression.cs (New.DoResolve): Allow return values from
7806         NewDelegate to also include AnonymousMethods.
7807
7808         Fixes #70150.
7809
7810 2004-11-29  Raja R Harinath  <rharinath@novell.com>
7811
7812         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
7813         cs1648 report.
7814         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
7815         System.Runtime.InteropServices._Exception, since it's a base
7816         interface of the core type System.Exception in the net_2_0 profile.
7817
7818 2004-11-27  Martin Baulig  <martin@ximian.com>
7819
7820         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
7821
7822 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7823
7824         * Makefile: Convert to use executable.make.
7825         * gmcs.exe.sources: New.
7826
7827 2004-11-25  Martin Baulig  <martin@ximian.com>
7828
7829         * expression.cs (Invocation.InferType): Added support for byref types.
7830
7831 2004-11-25  Martin Baulig  <martin@ximian.com>
7832
7833         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
7834         in TypeManager.TypeToCoreType().
7835
7836 2004-11-25  Martin Baulig  <martin@ximian.com>
7837
7838         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
7839         "Dispose" method from the `current_type'.
7840         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
7841         DoDefineMembers() instead of using the MethodBuilder; this is
7842         required for generic iterators.
7843
7844         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
7845
7846 2004-11-24  Martin Baulig  <martin@ximian.com>
7847
7848         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
7849
7850 2004-11-20  Martin Baulig  <martin@ximian.com>
7851
7852         * expression.cs (Invocation.InferType): Correctly infer generic
7853         instances; see gen-103.cs.
7854         (Invocation.InferTypeArguments): If a generic method doesn't have
7855         any unbound type parameters, we don't need to infer anything.
7856
7857 2004-11-19  Raja R Harinath  <rharinath@novell.com>
7858
7859         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
7860
7861 2004-11-17  Raja R Harinath  <rharinath@novell.com>
7862
7863         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
7864         (TypeHandle.GetMemberCache): New.
7865         (TypeHandle.TypeHandle): Update.
7866         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
7867         (TypeManager.LookupParentInterfacesCache):
7868         Rename from LookupInterfaceCache.  Optimize slightly.
7869         (TypeManager.MemberLookup_FindMembers): Update.
7870         * decl.cs (MemberCache.MemberCache): Set Container to null in the
7871         multi-type variant.
7872         (AddCacheContents): Rename from AddHashtable.
7873         * class.cs (TypeContainer.parent_container): Remove.
7874         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
7875         (TypeContainer.DoDefineMembers): Don't initialize it.
7876         Update to name changes.
7877         
7878 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
7879
7880         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
7881         that factors the code to check access modifiers on override.  
7882
7883         (PropertyBase): Use the code here.
7884
7885         Patch from Lluis S'anchez, fixes bug #69361.
7886
7887 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
7888
7889         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
7890         routine that is used to report the use of a captured variable
7891         whose address has been taken.
7892
7893         There are two checks: one when variables are being captured and
7894         the other check is when the address of a variable is taken. 
7895         
7896         (because an anonymous methods might be resolved before *or* after
7897         the address has been taken) and 
7898
7899         * expression.cs (Conditional.DoResolve): Remove the special
7900         casing that Martin added to trueExpr and falseExpr being both
7901         NullLiteral.  We get the right behavior now just by introducing
7902         the null_type into the compiler. 
7903
7904         * convert.cs (ExplicitConversion): Change the code to use
7905         null_type instead of testing `expr is NullLiteral'.
7906         (ImplicitConversionStandard): use null_type too.
7907         (ImplicitReferenceConversionExists): use null_type too.
7908         (ImplicitReferenceConversion): use null_type too.
7909
7910         * literal.cs: The type of `NullLiteral' is now null_type instead
7911         of object_type. 
7912         (Resolve): Set the type here.
7913
7914         * typemanager.cs: Introduce null_type.
7915
7916 2004-11-18  Martin Baulig  <martin@ximian.com>
7917
7918         * rootcontext.cs
7919         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
7920
7921 2004-11-18  Martin Baulig  <martin@ximian.com>
7922
7923         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
7924
7925 2004-11-18  Martin Baulig  <martin@ximian.com>
7926
7927         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
7928         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
7929         call ResolveConstructedType() on it to resolve it without checking
7930         constraints.
7931         (Constraints.ResolveTypes): Check them here.
7932         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
7933         but don't check constraints.
7934         (ConstructedType.ResolveAsTypeTerminal): Override this and also
7935         check constraints here.
7936         (ConstructedType.ResolveConstructedType): New public method.  This
7937         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
7938         resolve ourselves without checking constraints.
7939
7940         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
7941
7942 2004-11-18  Martin Baulig  <martin@ximian.com>
7943
7944         * decl.cs
7945         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
7946
7947         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
7948
7949 2004-11-18  Martin Baulig  <martin@ximian.com>
7950
7951         * ecore.cs (TypeExpr.ResolveType): Removed.
7952         (Expression.ResolveAsTypeTerminal): We always return a fully
7953         resolved `TypeExpr', so we can just access its `Type'.
7954
7955         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
7956
7957 2004-11-17  Martin Baulig  <martin@ximian.com>
7958
7959         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
7960         sure we don't return any unresolved TypeExpr's.
7961         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
7962         a `TypeExpr'.
7963         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
7964
7965         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
7966         unresolved `ConstructedType's.
7967
7968 2004-11-17  Martin Baulig  <martin@ximian.com>
7969
7970         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
7971
7972 2004-11-17  Martin Baulig  <martin@ximian.com>
7973
7974         * ecore.cs
7975         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
7976
7977         * decl.cs (DeclSpace.ResolveType): Removed.
7978         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
7979
7980 2004-11-17  Martin Baulig  <martin@ximian.com>
7981
7982         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
7983         direction, like FindMembers() does.  Fixes #69546, testcase is in
7984         test-315.cs.    
7985
7986 2004-11-16  Martin Baulig  <martin@ximian.com>
7987
7988         This is based on a patch from Marek Safar, see bug #69082.
7989         Fixes bugs #63705 and #67130.
7990
7991         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
7992         method; create a MemberCache for an interface type and cache the
7993         result.
7994
7995         * decl.cs (IMemberContainer.ParentContainer): Removed.
7996         (IMemberContainer.ParentCache): New property.
7997         (MemberCache.SetupCacheForInterface): Removed.
7998         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
7999         to create a cache for an interface's "parent".
8000
8001         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8002         interfaces too.
8003
8004 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8005
8006         * statement.cs: Avoid adding bools to a hashtable.
8007
8008 2004-11-15  Martin Baulig  <martin@ximian.com>
8009
8010         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8011
8012 2004-11-11  Martin Baulig  <martin@ximian.com>
8013
8014         * typemanager.cs (TypeManager.GetMethodName): New method.
8015
8016         * class.cs (MethodData.Define): Include the generic arity in the
8017         name of an explicit interface; also add it to the method name.
8018
8019         * pending.cs (PendingImplementation.InterfaceMethod): The method
8020         name now includes the generic arity.
8021
8022 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8023
8024         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8025         calling an unsafe method from a safe location.
8026
8027 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8028
8029         Fix #69167
8030         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8031
8032 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8033
8034         * namespace.cs (VerifyUsing): use GetPartialName instead of
8035         ToString. 
8036
8037 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8038
8039         * statement.cs (Return.Resolve): Fix regression in typo: if
8040         `in_exc', we have to request a NeedReturnLabel, this was a typo
8041         introduced in the anonymous method check-in.  Fixes #69131.
8042
8043         * Indexers were using the ShortName when defining themselves,
8044         causing a regression in the compiler bootstrap when applying the
8045         patch from 2004-11-02 (first part), now they use their full name
8046         and the bug is gone.
8047
8048 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8049
8050         * driver.cs: Strip the path from the names of embedded resources. Fixes
8051         #68519.
8052
8053 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8054
8055         Fix error message regression: cs0104-2.cs.
8056         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8057         (AliasEntry.Resolve): Update.
8058         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8059         'silent' flag.
8060         (RootContext.LookupType): Update.
8061
8062 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8063
8064         * cs-parser.jay: Add support for handling accessor modifiers
8065         * class: Add support port accessor modifiers and error checking,
8066         define PropertyMethod.Define as virtual (not abstract anymore)
8067         * ecore.cs: Add checking for proeprties access with access modifiers
8068         * iterators.cs: Modify Accessor constructor call based in the modified
8069         constructor
8070 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8071
8072         * expression.cs (StringConcat): Handle being called twice,
8073         as when we have a concat in a field init with more than two
8074         ctors in the class
8075
8076 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8077
8078         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8079         special case explicit implementations, we should always produce
8080         the .property or .event declaration.
8081         
8082         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8083         since it will not return correct data if people use this
8084         unresolved in the presence of using statements (see test-313).
8085
8086         * class.cs (MethodData.Define): If we are an explicit interface
8087         implementation, set the method name to the full name of the
8088         interface plus the name of the method.  
8089
8090         Notice that using the method.MethodName.GetFullName() does not
8091         work, as it will only contain the name as declared on the source
8092         file (it can be a shorthand in the presence of using statements)
8093         and not the fully qualifed type name, for example:
8094
8095         using System;
8096
8097         class D : ICloneable {
8098                 object ICloneable.Clone ()  {
8099                 }
8100         }
8101
8102         Would produce a method called `ICloneable.Clone' instead of
8103         `System.ICloneable.Clone'.
8104
8105         * namespace.cs (Alias.Resolve): Use GetPartialName.
8106         
8107 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8108
8109         * cs-parser.jay: Add error 1055 report.
8110
8111 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8112
8113         * assign.cs (Assign.DoResolve): Only do the transform of
8114         assignment into a New if the types are compatible, if not, fall
8115         through and let the implicit code deal with the errors and with
8116         the necessary conversions. 
8117
8118 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8119
8120         * cs-parser.jay: Add error 1031 report.
8121
8122         * cs-tokenizer.cs: Add location for error 1038.
8123
8124 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8125
8126         * cs-parser.jay: Add error 1016 report.
8127
8128 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8129
8130         * cs-parser.jay: Add errors 1575,1611 report.
8131
8132 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8133
8134         * cs-parser.jay: Add error 1001 report.
8135
8136 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8137
8138         Fix #68850
8139         * attribute.cs (GetMarshal): Add method argument for
8140         caller identification.
8141
8142         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8143         agument for GetMarshal and RuntimeMissingSupport.
8144
8145 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8146
8147         * attribute.cs (ExtractSecurityPermissionSet): Removed
8148         TypeManager.code_access_permission_type.
8149
8150         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8151
8152 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8153
8154         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8155         for obsolete use of a variable here.   Fixes regression on errors
8156         cs0619-25 and cs0619-26.
8157
8158 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8159
8160         Fix #62358, implemented security attribute encoding.
8161
8162         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8163         Tests permitted SecurityAction for assembly or other types.
8164         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8165         data from SecurityPermissionAttribute to PermisionSet class.
8166
8167         * class.cs (ApplyAttributeBuilder): Added special handling
8168         for System.Security.Permissions.SecurityAttribute based types.
8169
8170         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8171         special handling for System.Security.Permissions.SecurityAttribute
8172         based types.
8173
8174         * enum.cs (ApplyAttributeBuilder): Added special handling
8175         for System.Security.Permissions.SecurityAttribute based types.
8176
8177         * parameter.cs (ApplyAttributeBuilder): Added special handling
8178         for System.Security.Permissions.SecurityAttribute based types.
8179
8180         * rootcontext.cs: Next 2 core types.
8181
8182         * typemanager.cs (TypeManager.security_permission_attr_type):
8183         Built in type for the SecurityPermission Attribute.
8184         (code_access_permission_type): Build in type.
8185
8186 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8187
8188         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8189         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8190         all of this information into
8191         EmitContext.EmitCapturedVariableInstance.
8192         
8193         * codegen.cs (EmitCapturedVariableInstance): move here the
8194         funcionality of emitting an ldarg.0 in the presence of a
8195         remapping.   This centralizes the instance emit code.
8196
8197         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8198         then emit a load of this: it means that we have reached the
8199         topmost ScopeInfo: the one that contains the pointer to the
8200         instance of the class hosting the anonymous method.
8201
8202         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8203         captures to the topmost CaptureContext.
8204
8205 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8206
8207         * expression.cs (LocalVariableReference): Move the knowledge about
8208         the iterators into codegen's EmitCapturedVariableInstance.
8209
8210 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8211
8212         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8213         all code paths return a value from an anonymous method (it is the
8214         same as the 161 error, but for anonymous methods).
8215
8216 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8217
8218         The introduction of anonymous methods in the compiler changed
8219         various ways of doing things in the compiler.  The most
8220         significant one is the hard split between the resolution phase
8221         and the emission phases of the compiler.
8222
8223         For instance, routines that referenced local variables no
8224         longer can safely create temporary variables during the
8225         resolution phase: they must do so from the emission phase,
8226         since the variable might have been "captured", hence access to
8227         it can not be done with the local-variable operations from the runtime.
8228         
8229         * statement.cs 
8230
8231         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8232         is a toplevel block.
8233
8234         (ToplevelBlock): A new kind of Block, these are the blocks that
8235         are created by the parser for all toplevel method bodies.  These
8236         include methods, accessors and anonymous methods.
8237
8238         These contain some extra information not found in regular blocks:
8239         A pointer to an optional CaptureContext (for tracking captured
8240         local variables and parameters).  A pointer to the parent
8241         ToplevelBlock.
8242         
8243         (Return.Resolve): Catch missmatches when returning a value from an
8244         anonymous method (error 1662).
8245         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8246         phase.
8247
8248         (Break.Resolve): ditto.
8249
8250         (SwitchLabel): instead of defining the labels during the
8251         resolution phase, we now turned the public ILLabel and ILLabelCode
8252         labels into methods called GetILLabelCode() and GetILLabel() that
8253         only define the label during the Emit phase.
8254
8255         (GotoCase): Track the SwitchLabel instead of the computed label
8256         (its contained therein).  Emit the code by using
8257         SwitchLabel.GetILLabelCode ().
8258
8259         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8260         whether the Local has been captured or not.
8261
8262         (LocalInfo.IsCaptured): New property, used to tell whether the
8263         local has been captured.
8264         
8265         * anonymous.cs: Vastly updated to contain the anonymous method
8266         support.
8267
8268         The main classes here are: CaptureContext which tracks any
8269         captured information for a toplevel block and ScopeInfo used to
8270         track the activation frames for various local variables.   
8271
8272         Each toplevel block has an optional capture context associated
8273         with it.  When a method contains an anonymous method both the
8274         toplevel method and the anonymous method will create a capture
8275         context.   When variables or parameters are captured, they are
8276         recorded on the CaptureContext that owns them, for example:
8277
8278         void Demo () {
8279              int a;
8280              MyDelegate d = delegate {
8281                  a = 1;
8282              }
8283         }
8284
8285         Here `a' will be recorded as captured on the toplevel
8286         CapturedContext, the inner captured context will not have anything
8287         (it will only have data if local variables or parameters from it
8288         are captured in a nested anonymous method.
8289
8290         The ScopeInfo is used to track the activation frames for local
8291         variables, for example:
8292
8293         for (int i = 0; i < 10; i++)
8294                 for (int j = 0; j < 10; j++){
8295                    MyDelegate d = delegate {
8296                         call (i, j);
8297                    }
8298                 }
8299
8300         At runtime this captures a single captured variable `i', but it
8301         captures 10 different versions of the variable `j'.  The variable
8302         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8303         recorded on a child.  
8304
8305         The toplevel ScopeInfo will also track information like the `this'
8306         pointer if instance variables were referenced (this is necessary
8307         as the anonymous method lives inside a nested class in the host
8308         type of the method). 
8309
8310         (AnonymousMethod): Expanded to track the Toplevel, implement
8311         `AnonymousMethod.Compatible' to tell whether an anonymous method
8312         can be converted to a target delegate type. 
8313
8314         The routine now also produces the anonymous method content
8315
8316         (AnonymousDelegate): A helper class that derives from
8317         DelegateCreation, this is used to generate the code necessary to
8318         produce the delegate for the anonymous method that was created. 
8319
8320         * assign.cs: API adjustments for new changes in
8321         Convert.ImplicitStandardConversionExists.
8322
8323         * class.cs: Adjustments to cope with the fact that now toplevel
8324         blocks are of type `ToplevelBlock'. 
8325
8326         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8327         insteda of standard blocks.
8328
8329         Flag errors if params arguments are passed to anonymous methods.
8330
8331         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8332         `CurrentAnonymousMethod' which points to the current Anonymous
8333         Method.  The variable points to the AnonymousMethod class that
8334         holds the code being compiled.  It is set in the new EmitContext
8335         created for the anonymous method.
8336
8337         (EmitContext.Phase): Introduce a variable and an enumeration to
8338         assist in enforcing some rules about when and where we are allowed
8339         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8340         only one that enfonces this right now).
8341
8342         (EmitContext.HaveCaptureInfo): new helper method that returns
8343         whether we have a CapturedContext initialized.
8344
8345         (EmitContext.CaptureVariable): New method used to register that a
8346         LocalInfo must be flagged for capturing. 
8347
8348         (EmitContext.CapturedParameter): New method used to register that a
8349         parameters must be flagged for capturing. 
8350         
8351         (EmitContext.CapturedField): New method used to register that a
8352         field must be flagged for capturing. 
8353
8354         (EmitContext.HaveCapturedVariables,
8355         EmitContext.HaveCapturedFields): Return whether there are captured
8356         variables or fields. 
8357
8358         (EmitContext.EmitMethodHostInstance): This is used to emit the
8359         instance for the anonymous method.  The instance might be null
8360         (static methods), this (for anonymous methods that capture nothing
8361         and happen to live side-by-side with the current method body) or a
8362         more complicated expression if the method has a CaptureContext.
8363
8364         (EmitContext.EmitTopBlock): Routine that drives the emission of
8365         code: it will first resolve the top block, then emit any metadata
8366         and then emit the code.  The split is done so that we can extract
8367         any anonymous methods and flag any captured variables/parameters.
8368         
8369         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8370         during this phase, the ILGenerator should not be used as labels
8371         and local variables declared here might not be accessible to any
8372         code that is part of an anonymous method.  
8373
8374         Exceptions to this include the temporary variables that are
8375         created by some statements internally for holding temporary
8376         variables. 
8377         
8378         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8379         metadata for a cb
8380
8381         (EmitContext.TemporaryReturn): This method is typically called
8382         from the Emit phase, and its the only place where we allow the
8383         ReturnLabel to be defined other than the EmitMeta.  The reason is
8384         that otherwise we would have to duplicate a lot of logic in the
8385         Resolve phases of various methods that today is on the Emit
8386         phase. 
8387
8388         (EmitContext.NeedReturnLabel): This no longer creates the label,
8389         as the ILGenerator is not valid during the resolve phase.
8390
8391         (EmitContext.EmitThis): Extended the knowledge in this class to
8392         work in anonymous methods in addition to iterators. 
8393
8394         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8395         code is necessary on the stack to access the instance to a local
8396         variable (the variable will be accessed as a field).
8397
8398         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8399         EmitContext.EmitAddressOfParameter): Routines to support
8400         parameters (not completed at this point). 
8401         
8402         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8403         will also remove the parameters.
8404
8405         * convert.cs (Convert): Define a `ConstantEC' which points to a
8406         null.  This is just to prefity some code that uses
8407         ImplicitStandardConversion code and do not have an EmitContext
8408         handy.
8409
8410         The idea is to flag explicitly that at that point in time, it is
8411         known that the conversion will not trigger the delegate checking
8412         code in implicit conversions (which requires a valid
8413         EmitContext). 
8414
8415         Everywhere: pass new EmitContext parameter since
8416         ImplicitStandardConversionExists now requires it to check for
8417         anonymous method conversions. 
8418
8419         (Convert.ImplicitStandardConversionExists): If the type of an
8420         expression is the anonymous_method_type, and the type is a
8421         delegate, we invoke the AnonymousMethod.Compatible method to check
8422         whether an implicit conversion is possible. 
8423
8424         (Convert.ImplicitConversionStandard): Only do implicit method
8425         group conversions if the language level is not ISO_1.
8426
8427         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8428         MethodInfo for the Invoke method.  used by Delegate and
8429         AnonymousDelegate.
8430
8431         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8432         method conversions if the target type is a delegate.
8433
8434         Removed extra debugging nops.
8435
8436         (LocalVariableReference): Turn the `local_info' into a public
8437         field. 
8438
8439         Add `prepared' field, the same hack used for FieldExprs to cope
8440         with composed assignments, as Local variables do not necessarily
8441         operate purely on the stack as they used to: they can be captured
8442         fields. 
8443
8444         Add `temp' for a temporary result, like fields.
8445
8446         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8447
8448         It now copes with Local variables that are captured and emits the
8449         proper instance variable to load it from a field in the captured
8450         case. 
8451
8452         (ParameterReference.DoResolveBase): During the resolve phase,
8453         capture parameters if we are in an anonymous method.
8454
8455         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8456         anonymous method, use the EmitContext helper routines to emit the
8457         parameter reference.
8458
8459         * iterators.cs: Set RemapToProxy to true/false during the
8460         EmitDispose class.
8461
8462         * parameters.cs (GetParameterByName): New helper method. 
8463
8464         * typemanager.cs (anonymous_method_type) a new type that
8465         represents an anonyous method.  This is always an internal type,
8466         used as a fencepost to test against the anonymous-methodness of an
8467         expression. 
8468         
8469 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
8470
8471         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
8472         561 report.
8473         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
8474
8475 2004-11-10  Martin Baulig  <martin@ximian.com>
8476
8477         * expression.cs (Invocation.BetterFunction): If two methods have
8478         equal parameter types, but only one of them is generic, the
8479         non-generic one wins.
8480         (New.DoResolve): Don't set `is_struct' to false if we're a generic
8481         instance; just use `Type.IsValueType' to determine whether
8482         something is a struct or not.
8483         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
8484         so we can be called multiple times.
8485
8486 2004-11-10  Martin Baulig  <martin@ximian.com>
8487
8488         * generic.cs (TypeParameter.DefineConstraints): New public method.
8489         (TypeParameter.CheckAccessLevel): Override this and return true.
8490         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
8491         override ResolveType() anymore.
8492         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
8493
8494 2004-11-10  Martin Baulig  <martin@ximian.com>
8495
8496         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
8497         call DeclSpace.ResolveNestedType() on it.
8498
8499 2004-11-10  Martin Baulig  <martin@ximian.com>
8500
8501         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
8502         non-null, call ParameterModifier() on it.
8503
8504 2004-11-10  Martin Baulig  <martin@ximian.com>
8505
8506         * iterators.cs
8507         (Iterators): Added `current_type' and `this_type' fields.
8508         (Iterators.DefineIterator): Create a new EmitContext and store it
8509         in `ec'; compute `this_type'.
8510
8511 2004-11-10  Martin Baulig  <martin@ximian.com>
8512
8513         * typemanager.cs
8514         (TypeManager.IsPrivateAccessible): New public method.
8515         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
8516
8517 2004-11-10  Martin Baulig  <martin@ximian.com>
8518
8519         * class.cs (TypeContainer.DefineType): Call
8520         TypeBuilder.DefineGenericParameters() before resolving the type
8521         parameters.
8522         (MethodData.parent_method): New protected field.
8523         (MethodData..ctor): Added `MethodInfo parent_method' argument.
8524         (MethodData.Define): Compute `parent_method'.
8525
8526         * decl.cs
8527         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
8528         (MemberCore.GetClsCompliantAttributeValue): Likewise.
8529         (DeclSpace.ec): New protected field; store the EmitContext here.
8530         (DeclSpace.EmitContext): New public property.
8531         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
8532         (DeclSpace.ResolveNestedType): New public method.
8533         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
8534         (DeclSpace.NestedAccessible): Added `Type tb' argument.
8535         (DeclSpace.FamilyAccessible): Likewise.
8536         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
8537         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
8538         EmitContext.
8539
8540         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
8541         field.
8542
8543         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
8544         (Enum.Emit): Don't create a new EmitContext.
8545
8546 2004-10-18  Martin Baulig  <martin@ximian.com>
8547
8548         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
8549         `Type' directly, but call ResolveType() on it.
8550         (Catch.Resolve): Likewise.
8551         (Foreach.Resolve): Likewise.
8552
8553 2004-10-18  Martin Baulig  <martin@ximian.com>
8554
8555         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
8556         `Type' directly, but call ResolveType() on it.
8557         (Probe.DoResolve): Likewise.
8558         (ArrayCreation.LookupType): Likewise.
8559         (TypeOf.DoResolve): Likewise.
8560         (SizeOf.DoResolve): Likewise.
8561
8562 2004-10-18  Raja R Harinath  <rharinath@novell.com>
8563
8564         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
8565         the ResolveType.
8566
8567 2004-10-17  John Luke  <john.luke@gmail.com>
8568
8569         * class.cs (Operator.GetSignatureForError): use CSharpName
8570
8571         * parameter.cs (Parameter.GetSignatureForError): Returns
8572         correct name even if was not defined.
8573
8574 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8575
8576         Fix #65816.
8577         * class.cs (TypeContainer.EmitContext): New property.
8578         (DefineNestedTypes): Create an emitcontext for each part.
8579         (MethodCore.DoDefineParameters): Use container's emitcontext.
8580         Pass type array to InternalParameters.
8581         (MemberBase.DoDefine): Use container's emitcontext.
8582         (FieldMember.Define): Likewise.
8583         (Event.Define): Likewise.
8584         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8585         Pass type array to InternalParameters.
8586         (SetIndexerMethod.GetParameterInfo): Likewise.
8587         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8588         * delegate.cs (Define): Pass emitcontext to
8589         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8590         array to InternalParameters.
8591         * expression.cs (ParameterReference.DoResolveBase): Pass
8592         emitcontext to GetParameterInfo.
8593         (ComposedCast.DoResolveAsTypeStep): Remove check on
8594         ec.ResolvingTypeTree.
8595         * parameter.cs (Parameter.Resolve): Change argument to
8596         EmitContext.  Use ResolveAsTypeTerminal.
8597         (Parameter.GetSignature): Change argument to EmitContext.
8598         (Parameters.ComputeSignature): Likewise.
8599         (Parameters.ComputeParameterTypes): Likewise.
8600         (Parameters.GetParameterInfo): Likewise.
8601         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8602         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8603         * support.cs (InternalParameters..ctor): Remove variant that takes
8604         a DeclSpace.
8605         * typemanager.cs (system_intptr_expr): New.
8606         (InitExpressionTypes): Initialize it.
8607
8608 2004-10-12  Chris Toshok  <toshok@ximian.com>
8609
8610         * cs-parser.jay: fix location for try_statement and catch_clause.
8611
8612 2004-10-18  Martin Baulig  <martin@ximian.com>
8613
8614         * class.cs (FieldMember.Define): Don't access the TypeExpr's
8615         `Type' directly, but call ResolveType() on it.
8616         (MemberBase.DoDefine): Likewise.
8617
8618         * expression.cs (New.DoResolve): Don't access the TypeExpr's
8619         `Type' directly, but call ResolveType() on it.
8620         (ComposedCast.DoResolveAsTypeStep): Likewise.
8621
8622         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
8623         `Type' directly, but call ResolveType() on it.
8624
8625 2004-10-17  John Luke  <john.luke@gmail.com>
8626
8627         * class.cs (Operator.GetSignatureForError): use CSharpName
8628
8629         * parameter.cs (Parameter.GetSignatureForError): Returns
8630         correct name even if was not defined.
8631
8632 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8633
8634         Fix #65816.
8635         * class.cs (TypeContainer.EmitContext): New property.
8636         (DefineNestedTypes): Create an emitcontext for each part.
8637         (MethodCore.DoDefineParameters): Use container's emitcontext.
8638         Pass type array to InternalParameters.
8639         (MemberBase.DoDefine): Use container's emitcontext.
8640         (FieldMember.Define): Likewise.
8641         (Event.Define): Likewise.
8642         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8643         Pass type array to InternalParameters.
8644         (SetIndexerMethod.GetParameterInfo): Likewise.
8645         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8646         * delegate.cs (Define): Pass emitcontext to
8647         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8648         array to InternalParameters.
8649         * expression.cs (ParameterReference.DoResolveBase): Pass
8650         emitcontext to GetParameterInfo.
8651         (ComposedCast.DoResolveAsTypeStep): Remove check on
8652         ec.ResolvingTypeTree.
8653         * parameter.cs (Parameter.Resolve): Change argument to
8654         EmitContext.  Use ResolveAsTypeTerminal.
8655         (Parameter.GetSignature): Change argument to EmitContext.
8656         (Parameters.ComputeSignature): Likewise.
8657         (Parameters.ComputeParameterTypes): Likewise.
8658         (Parameters.GetParameterInfo): Likewise.
8659         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8660         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8661         * support.cs (InternalParameters..ctor): Remove variant that takes
8662         a DeclSpace.
8663         * typemanager.cs (system_intptr_expr): New.
8664         (InitExpressionTypes): Initialize it.
8665
8666 2004-10-12  Chris Toshok  <toshok@ximian.com>
8667
8668         * cs-parser.jay: fix location for try_statement and catch_clause.
8669
8670 2004-10-07  Raja R Harinath  <rharinath@novell.com>
8671
8672         More DeclSpace.ResolveType avoidance.
8673         * decl.cs (MemberCore.InUnsafe): New property.
8674         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
8675         with newly created EmitContext.
8676         (FieldMember.Define): Likewise.
8677         * delegate.cs (Delegate.Define): Likewise.
8678         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
8679         only if normal name-lookup fails.
8680         (TypeExpr.DoResolve): Enable error-checking.
8681         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
8682         (SizeOf.DoResolve): Likewise.
8683         (ComposedCast.DoResolveAsTypeStep): Likewise.
8684         (StackAlloc.DoResolve): Likewise.
8685         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
8686         (Block.Unsafe): New property.
8687         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
8688         (Unsafe): Set 'unsafe' flag of contained block.
8689         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
8690         (Fixed.Resolve): Likewise.
8691         (Catch.Resolve): Likewise.
8692         (Using.ResolveLocalVariableDecls): Likewise.
8693         (Foreach.Resolve): Likewise.
8694
8695 2004-10-05  John Luke <john.luke@gmail.com>
8696
8697         * cs-parser.jay: add location to error CS0175
8698
8699 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
8700
8701         * ecore.cs (Expression.Constantity): Add support for turning null
8702         into a constant.
8703
8704         * const.cs (Const.Define): Allow constants to be reference types
8705         as long as the value is Null.
8706
8707 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
8708
8709         * namespace.cs (NamespaceEntry.Using): No matter which warning
8710         level is set, check if this namespace name has already been added.
8711
8712 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
8713
8714         * expression.cs: reftype [!=]= null should always use br[true,false].
8715         # 67410
8716
8717 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
8718
8719         Fix #67108
8720         * attribute.cs: Enum conversion moved to 
8721         GetAttributeArgumentExpression to be applied to the all
8722         expressions.
8723
8724 2004-10-01  Raja R Harinath  <rharinath@novell.com>
8725
8726         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
8727         * class.c (TypeContainer.DefineType): Flag error if
8728         base types aren't accessible due to access permissions.
8729         * decl.cs (DeclSpace.ResolveType): Move logic to
8730         Expression.ResolveAsTypeTerminal.
8731         (DeclSpace.ResolveTypeExpr): Thin layer over
8732         Expression.ResolveAsTypeTerminal.
8733         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
8734         Refactor code into NestedAccess.  Use it.
8735         (DeclSpace.NestedAccess): New.
8736         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
8737         argument to silence errors.  Check access permissions.
8738         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
8739         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
8740         (Cast.DoResolve): Likewise.
8741         (New.DoResolve): Likewise.
8742         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
8743         (TypeOf.DoResolve): Likewise.
8744
8745         * expression.cs (Invocation.BetterConversion): Return the Type of
8746         the better conversion.  Implement section 14.4.2.3 more faithfully.
8747         (Invocation.BetterFunction): Make boolean.  Make correspondence to
8748         section 14.4.2.2 explicit.
8749         (Invocation.OverloadResolve): Update.
8750         (Invocation): Remove is_base field.
8751         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
8752         (Invocation.Emit): Likewise.
8753
8754 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
8755
8756         * cs-parser.jay: Reverted 642 warning fix.
8757
8758 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8759
8760         Fix bug #66615
8761         * decl.cs (FindMemberWithSameName): Indexer can have more than
8762         1 argument.
8763
8764 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8765
8766         * expression.cs (LocalVariableReference.DoResolveLValue):
8767         Do not report warning 219 for out values.
8768         (EmptyExpression.Null): New member to avoid extra allocations.
8769
8770 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8771
8772         * cs-parser.jay: Fix wrong warning 642 report.
8773
8774         * cs-tokenizer.cs (CheckNextToken): New helper;
8775         Inspect next character if is same as expected.
8776
8777 2004-09-23  Martin Baulig  <martin@ximian.com>
8778
8779         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
8780         (Convert.ImplicitReferenceConversionExists): Likewise.
8781
8782 2004-11-09  Raja R Harinath  <rharinath@novell.com>
8783
8784         * Makefile (DISTFILES): Comment out a few missing files.
8785
8786 2004-10-29  Raja R Harinath  <rharinath@novell.com>
8787
8788         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
8789         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
8790         (gmcs.exe): Invoke bootstrap-libs.
8791         (clean-local): Clean the net_2_0_bootstrap profile too.
8792         (PROGRAM_INSTALL_DIR): New.
8793         (install-local): Use it.
8794
8795 2004-10-13  Martin Baulig  <martin@ximian.com>
8796
8797         * generic.cs (TypeManager.InflatedConstraints): New nested class.
8798         (TypeParameter.DefineType): If we're a method type parameter and
8799         that method is overriding something, "inflate" its constraints.
8800
8801 2004-10-12  Martin Baulig  <martin@ximian.com>
8802
8803         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
8804         and have type arguments, create and resolve a ConstructedType.
8805
8806 2004-10-12  Martin Baulig  <martin@ximian.com>
8807
8808         * decl.cs (MemberCache.FindMemberToOverride): Use
8809         TypeManager.IsEqual() to compare the parameters and Type.Equals()
8810         to compare the invocationType.
8811
8812         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
8813         When comparing two type parameters, only do the signature-only
8814         comparision for method type parameters.
8815
8816 2004-10-11  Martin Baulig  <martin@ximian.com>
8817
8818         * report.cs: Don't make --fatal abort on warnings, we have
8819         -warnaserror for that.
8820
8821 2004-10-11  Martin Baulig  <martin@ximian.com>
8822
8823         * typemanager.cs
8824         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
8825         (TypeManager.IsEqual): Call ourself recursively instead of using
8826         Type.IsEqual(). 
8827
8828 2004-10-11  Martin Baulig  <martin@ximian.com>
8829
8830         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
8831         on our own type parameters, not on the ones we inherit from a containing
8832         class.
8833
8834         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
8835         the comparision.
8836
8837         * generic.cs (TypeParameter.Define): We may only be called once.
8838
8839         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
8840         instead of TypeManager.IsEqual().
8841
8842 2004-09-28  Martin Baulig  <martin@ximian.com>
8843
8844         * generic.cs
8845         (GenericConstraints.EffectiveBaseClass): New public property.
8846         (TypeParameter.GenericConstraints): New public property.
8847         (ConstructedType.CheckConstraints): Improved.
8848
8849         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
8850         (Convert.TypeParameterConversion): New private method; use this in
8851         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
8852         for all conversions related to type parameters.
8853
8854 2004-09-24  Martin Baulig  <martin@ximian.com>
8855
8856         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
8857         type parameter conversions for type parameters which are known to
8858         be reference types.
8859
8860 2004-09-24  Martin Baulig  <martin@ximian.com>
8861
8862         * generic.cs (GenericConstraints): Added `IsReferenceType' and
8863         `IsValueType' properties.
8864
8865         * support.cs (ReflectionConstraints): Use
8866         Type.GetGenericParameterConstraints() instead of the old hack.
8867
8868 2004-09-24  Martin Baulig  <martin@ximian.com>
8869
8870         * generic.cs (GenericConstraints): Moved here and made it an
8871         abstract class.
8872
8873         * support.cs (GenericConstraints): Moved to generic.cs.
8874
8875 2004-09-24  Martin Baulig  <martin@ximian.com>
8876
8877         * support.cs
8878         (ReflectionConstraints): Un-nested this class and made it public.
8879
8880         * typemanager.cs
8881         (TypeManager.GetTypeParameterConstraints): New public method.
8882         (TypeManager.HasConstructorConstraint): Use the attributes.
8883
8884 2004-09-24  Martin Baulig  <martin@ximian.com>
8885
8886         * support.cs (GenericConstraints): Replaced `HasConstructor',
8887         `IsReferenceType' and `IsValueType' with `Attributes'.
8888         (ReflectionParameters.ReflectionConstraints): Removed the Create()
8889         method and made the .ctor public.
8890
8891         * generic.cs (Constraints.Attributes): New public property.
8892         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
8893         `IsReferenceType' -> `HasReferenceTypeConstraint' and
8894         `IsValueType' -> `HasValueTypeConstraint'.
8895
8896 2004-09-23  Martin Baulig  <martin@ximian.com>
8897
8898         * generic.cs (Constraints): Reflect latest runtime changes.
8899
8900 2004-09-23  Martin Baulig  <martin@ximian.com>
8901
8902         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
8903         (Convert.ImplicitReferenceConversionExists): Likewise.
8904
8905 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8906
8907         * class.cs (Operator.Define): Add error 448 and 559 report.
8908         
8909 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
8910
8911         * class.cs (MemberBase.IsTypePermitted): New protected
8912         method for checking error CS0610.
8913
8914 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
8915
8916         * class.cs (TypeContainer.HasExplicitLayout): New property
8917         Returns whether container has StructLayout attribute set Explicit.
8918         (FieldMember): New abstract class for consts and fields.
8919         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
8920         (Field): Reuse FieldMember.
8921
8922         * const.cs (Const): Reuse FieldMember.
8923
8924         * rootcontext.cs: EmitConstants call moved to class.
8925
8926 2004-09-22  Martin Baulig  <martin@ximian.com>
8927
8928         Marek and me just fixed one of our oldest bugs: #28562 :-)
8929
8930         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
8931
8932         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
8933         we're an EnumConstant, just return that.
8934         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
8935         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
8936         to get the value which'll actually be written into the attribute.
8937         However, we have to use GetValue() to access the attribute's value
8938         in the compiler.        
8939
8940 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
8941
8942         * constant.cs (Constant.IsNegative): New abstract property
8943         IsNegative.
8944
8945         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
8946         (StackAlloc.DoResolve): Reused IsNegative.
8947
8948 2004-09-22  Martin Baulig  <martin@ximian.com>
8949
8950         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
8951         public method; like LookupTypeContainer, but also works for
8952         generic instances.
8953
8954         * report.cs (Report.SymbolRelatedToPreviousError): Use
8955         TypeManager.LookupGenericTypeContainer().       
8956
8957 2004-09-22  Martin Baulig  <martin@ximian.com>
8958
8959         Thanks to Peter Sestoft for this bug report.
8960
8961         * expression.cs (Conditional): If both the `trueExpr' and the
8962         `falseExpr' is a NullLiteral, return a NullLiteral.
8963
8964 2004-09-22  Martin Baulig  <martin@ximian.com>
8965
8966         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
8967         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
8968         for the "get_Current" call.
8969
8970 2004-09-21  Martin Baulig  <martin@ximian.com>
8971
8972         * convert.cs (Convert.ImplicitReferenceConversion): When
8973         converting to an interface type, first check whether we're
8974         converting from a reference type.
8975
8976 2004-09-14  Martin Baulig  <martin@ximian.com>
8977
8978         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
8979
8980 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
8981
8982         Fixed bug #61902
8983         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
8984         called and is obsolete then this member suppress message
8985         when call is inside next [Obsolete] method or type.
8986
8987         * expression.cs: Use TestObsoleteMethodUsage member.
8988
8989 2004-09-14  Martin Baulig  <martin@ximian.com>
8990
8991         * genericparser.cs: Removed.
8992
8993 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
8994
8995         * class.cs (MethodCore.CheckBase): Fix bug #65757.
8996
8997 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
8998
8999         * attribute.cs (Attribute.Resolve): Add error 653 report.
9000
9001         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9002         report.
9003         (Method.ApplyAttributeBuilder): Add error 685 report.
9004         (Operator.Define): Add error 564 report.
9005
9006         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9007
9008         * expression.cs (Invocation.DoResolve): Add error
9009         245 and 250 report.
9010
9011         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9012         error 674 report.
9013
9014 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9015
9016         * class.cs (ConstructorInitializer.Resolve):
9017         Wrong error number (515->516).
9018
9019 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9020
9021         * class.cs (Indexer.Define): Add error 631 report.
9022
9023 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9024
9025         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9026
9027 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9028
9029         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9030
9031 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9032
9033         * cs-parser.jay: Added error CS0241 report.
9034
9035 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9036
9037         * cs-parser.jay (fixed_statement): Introduce a scope for the
9038         declaration in the 'fixed' statement.
9039
9040 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9041
9042         * cs-parser.jay: Added CS0230 error report.
9043
9044 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9045
9046         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9047
9048 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9049
9050         * expression.cs (Argument.Resolve): Added error CS0192 and
9051         CS0199 report.
9052
9053 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9054
9055         C# 2.0 #pragma warning feature
9056
9057         * cs-tokenizer.cs (PreProcessPragma): New method; 
9058         Handles #pragma directive.
9059
9060         * report.cs (WarningRegions): New class; Support
9061         class for #pragma warning directive. It tests whether
9062         warning is enabled for a given line.
9063
9064 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9065
9066         * const.cs: Add more descriptive error report, tahnks to
9067         Sebastien. 
9068
9069 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9070
9071         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9072
9073 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9074
9075         * expression.cs: Apply patch from Ben: Remove dead code from
9076         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9077         as that code just threw an exception anwyays.
9078
9079         * const.cs: Remove the call to the turnintoconstant, for details
9080         see bug: #63144
9081         
9082         * literal.cs: The type of the null-literal is the null type;  So
9083         we use a placeholder type (literal.cs:System.Null, defined here)
9084         for it.
9085
9086         * expression.cs (Conditional.DoResolve): Remove some old code that
9087         is no longer needed, conversions have been fixed.
9088
9089         (ArrayCreationExpression.DoResolve): Return false if we fail to
9090         resolve the inner expression.
9091
9092 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9093
9094         Fix test-290.cs.
9095         * cs-parser.jay (delegate_declaration): Record a delegate
9096         declaration as a type declaration.
9097         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9098
9099 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9100
9101         * parameter.cs: Do not crash if the type can not be resolved. 
9102
9103         * expression.cs: Report errors with unsafe pointers, fixes #64896
9104
9105 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9106
9107         * expression.cs: Pointer arith always needs to do a conv.i
9108         if the operand is a long. fix 65320
9109
9110 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9111
9112         Fixed cs0619-37.cs, cs0619-38.cs
9113
9114         * enum.cs (GetObsoleteAttribute): Removed.
9115
9116         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9117         on Enum member is double staged. The first is tested member
9118         and then enum.
9119
9120 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9121
9122         Fixed #56986, #63631, #65231
9123
9124         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9125         adds member to name container.
9126         (TypeContainer.AddToTypeContainer): New method, adds type to
9127         name container.
9128         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9129         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9130         AddOperator): Simplified by reusing AddToMemberContainer.
9131         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9132         instead of field.
9133         (Method.CheckForDuplications): Fixed implementation to test all
9134         possibilities.
9135         (MemberBase): Detection whether member is explicit interface
9136         implementation is now in constructor.
9137         (MemberBase.UpdateMemberName): Handles IndexerName.
9138         (Accessor): Changed to keep also location information.
9139         (AbstractPropertyEventMethod): Is derived from MemberCore.
9140         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9141         will be emited or not.
9142         (PropertyBase.AreAccessorsDuplicateImplementation):
9143         Tests whether accessors are not in collision with some method.
9144         (Operator): Is derived from MethodCore to simplify common
9145         operations.
9146
9147         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9148         must be performed.
9149         (DeclSpace.AddToContainer): Adds the member to defined_names
9150         table. It tests for duplications and enclosing name conflicts.
9151
9152         * enum.cs (EnumMember): Clean up to reuse the base structures
9153
9154 2004-09-03  Martin Baulig  <martin@ximian.com>
9155
9156         Merged latest changes into gmcs.  Please keep this comment in
9157         here, it makes it easier for me to see what changed in MCS since
9158         the last time I merged.
9159
9160 2004-09-03  Martin Baulig  <martin@ximian.com>
9161
9162         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9163         into TypeContainer, to make partial classes work again.
9164
9165 2004-09-03  Martin Baulig  <martin@ximian.com>
9166
9167         * rootcontext.cs (RootContext.V2): Removed.
9168
9169 2004-03-23  Martin Baulig  <martin@ximian.com>
9170
9171         * expression.cs (Invocation.OverloadResolve): Added `bool
9172         may_fail' argument and use it instead of the Location.IsNull() hack.
9173
9174 2004-09-09  Martin Baulig  <martin@ximian.com>
9175
9176         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9177
9178 2004-09-09  Martin Baulig  <martin@ximian.com>
9179
9180         * generic.cs (TypeParameter.DefineType): Added support for
9181         explicit interface methods.
9182
9183 2004-09-09  Martin Baulig  <martin@ximian.com>
9184
9185         * README.Changes: New document.  Started to list important changes
9186         between MCS and GMCS here.
9187
9188 2004-09-08  Martin Baulig  <martin@ximian.com>
9189
9190         * class.cs
9191         (TypeContainer.CheckRecursiveDefinition): New protected method.
9192         (TypeContainer.DefineType): Move the CS0146 check into
9193         CheckRecursiveDefinition().     
9194
9195 2004-09-06  Martin Baulig  <martin@ximian.com>
9196
9197         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9198         types for the constructor constraint.
9199
9200 2004-09-03  Martin Baulig  <martin@ximian.com>
9201
9202         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9203         into TypeContainer, to make partial classes work again.
9204
9205 2004-09-03  Martin Baulig  <martin@ximian.com>
9206
9207         * rootcontext.cs (RootContext.V2): Removed.
9208
9209 2004-03-23  Martin Baulig  <martin@ximian.com>
9210
9211         * expression.cs (Invocation.OverloadResolve): Added `bool
9212         may_fail' argument and use it instead of the Location.IsNull() hack.
9213
9214 2004-09-03  Martin Baulig  <martin@ximian.com>
9215
9216         Merged latest changes into gmcs.  Please keep this comment in
9217         here, it makes it easier for me to see what changed in MCS since
9218         the last time I merged.
9219
9220 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9221
9222         Fix #61128.
9223         * expression.cs (BetterConversion): Don't allow either conversion 
9224         to be null.  Remove redundant implicit conversion test when 'q ==
9225         null' -- when this function is invoked, we already know that the
9226         implicit conversion exists.
9227         (BetterFunction): Assume that 'best' is non-null.  Remove
9228         redundant reimplementation of IsApplicable when 'best' is null.
9229         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9230         number of arguments.
9231         (IsAncestralType): Extract from OverloadResolve.
9232         (OverloadResolve): Make robust to the MethodGroupExpr being
9233         unsorted.  Implement all the logic of Section 14.5.5.1, and
9234         support overloading of methods from multiple applicable types.
9235         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9236
9237         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9238         (RealError, Warning): Append type of report to related symbol.
9239
9240 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9241
9242         * enum.cs: Fixed CLS-Compliance checks for enum members.
9243         Error tests cs3008-8.cs, cs3014-8.cs
9244
9245 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9246
9247         Fixed bug #62342, #63102
9248         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9249         like ImplementMethod.
9250
9251 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9252
9253         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9254         Fixed bug #65170.
9255
9256 2004-09-02  Martin Baulig  <martin@ximian.com>
9257
9258         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9259         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9260         on the MethodBase.
9261
9262 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9263
9264         C# 2.0 Static classes implemented
9265
9266         * class.cs (TypeContainer): instance_constructors,
9267         initialized_fields, initialized_static_fields,
9268         default_constructor, base_inteface_types are protected to be
9269         accessible from StaticClass.
9270         (TypeContainer.DefineDefaultConstructor): New virtual method
9271         for custom default constructor generating
9272         (StaticClass): New class to handle "Static classes" feature.
9273
9274         * cs-parser.jay: Handle static keyword on class like instance
9275         of StaticClass.
9276
9277         * driver.cs: Added "/langversion" command line switch with two
9278         options (iso-1, default).
9279
9280 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9281
9282         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9283
9284 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9285
9286         * delegate.cs: Style.
9287
9288 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9289
9290         * delegate.cs: Add seperate instance expr field for miguel.
9291
9292 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9293
9294         * PointerArithmetic (Resolve): make sure we are not doing
9295         pointer arith on void*. Also, make sure we are resolved
9296         by not setting eclass until resolve.
9297
9298         All callers: Make sure that PointerArithmetic gets resolved.
9299
9300 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9301
9302         * ArrayCreation (LookupType): If the type does not resolve 
9303         to an array, give an error.
9304
9305 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9306
9307         * statement.cs (Try.Resolve): Fixed bug #64222
9308
9309 2004-08-27  Martin Baulig  <martin@ximian.com>
9310
9311         * class.cs
9312         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9313         crash here.     
9314
9315 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9316
9317         * ecore.cs (Constantify): Get underlying type via
9318         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9319         Windows in special cases.
9320
9321 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9322
9323         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9324         for obtaining also private methods.
9325         (GetRemoveMethod): Used GetRemoveMethod (true)
9326         for obtaining also private methods.
9327
9328 2004-09-02  Martin Baulig  <martin@ximian.com>
9329
9330         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9331         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9332         on the MethodBase.
9333
9334 2004-08-27  Martin Baulig  <martin@ximian.com>
9335
9336         * class.cs
9337         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9338         crash here.     
9339
9340 2004-08-25  Martin Baulig  <martin@ximian.com>
9341
9342         * support.cs (ReflectionParameters..ctor): If this is a generic
9343         method, retrieve and store its type parameters.
9344         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9345         (ReflectionParameters.GenericConstraints): The argument specifies
9346         the type parameter, not the method parameter.
9347         (InternalParameters.GenericConstraints): Likewise.
9348
9349         * generic.cs (TypeParameter.DefineType): Correctly handle
9350         constraints wrt. generic methods in interfaces and their
9351         implementations.        
9352
9353 2004-08-24  Martin Baulig  <martin@ximian.com>
9354
9355         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9356         (Constraints.IsSubclassOf): New internal method.
9357
9358         * typemanager.cs (TypeManager.FindMembers): Added special support
9359         for GenericTypeParameterBuilder's.      
9360         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9361         type parameters.
9362
9363 2004-08-24  Martin Baulig  <martin@ximian.com>
9364
9365         * typemanager.cs
9366         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9367         this for accessibility checks.
9368         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9369         IsNestedFamilyAccessible.
9370         (TypeManager.IsSubclassOf): New method, do what the name actually
9371         says.   
9372
9373 2004-08-24  Martin Baulig  <martin@ximian.com>
9374
9375         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9376         as a SimpleName, include the generic arity.
9377
9378 2004-08-24  Martin Baulig  <martin@ximian.com>
9379
9380         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9381         MethodAttributes.HideBySig for operators.
9382
9383 2004-08-23  Martin Baulig  <martin@ximian.com>
9384
9385         Back to the old error reporting system :-)
9386
9387         * report.cs (Message): Removed.
9388         (Report.MessageData, ErrorData, WarningData): Removed.
9389         (Report.Error, Warning): Back to the old system.
9390
9391 2004-08-23  Martin Baulig  <martin@ximian.com>
9392
9393         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9394
9395         * class.cs (TypeContainer.ParentContainer): New public virtual
9396         method; replaces the explicit interface implementation.
9397         (ClassPart.ParentContainer): Override.
9398
9399 2004-08-23  Martin Baulig  <martin@ximian.com>
9400
9401         * statement.cs (Switch): Added support for constant switches; see
9402         #59428 or test-285.cs.
9403
9404 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9405
9406         Fixed bug #62740.
9407         * statement.cs (GetEnumeratorFilter): Removed useless
9408         logic because C# specs is strict. GetEnumerator must be
9409         public.
9410
9411 2004-08-22  Martin Baulig  <martin@ximian.com>
9412
9413         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9414         a switch and may break, reset the barrier.  Fixes #59867.
9415
9416 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9417
9418         CLS-Compliance speed up (~5% for corlib)
9419
9420         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9421         New method. Tests container for CLS-Compliant names
9422
9423         * class.cs (TypeContainer.VerifyClsName): New method.
9424         Checks whether container name is CLS Compliant.
9425         (Constructor): Implements IMethodData.
9426
9427         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9428         low-case table for CLS Compliance test.
9429         (MemberCache.VerifyClsParameterConflict): New method.
9430         Checks method parameters for CS3006 error.
9431
9432         * enum.cs (EnumMember): Is derived from MemberCore.
9433         (Enum.VerifyClsName): Optimized for better performance.
9434
9435 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9436
9437         * report.cs: Renamed Error_T to Error and changed all
9438         references.
9439
9440 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9441
9442         * class.cs (TypeContainer.IndexerArrayList): New inner class
9443         container for indexers.
9444         (TypeContainer.DefaultIndexerName): New constant for default
9445         indexer name. Replaced all "Item" with this constant.
9446         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9447
9448         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9449         DefaultMemberAttribute constructor.
9450
9451 2004-08-05  Martin Baulig  <martin@ximian.com>
9452
9453         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9454         Fix bug #59429.
9455
9456 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9457
9458         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9459         multi platforms problem.
9460
9461         * compiler.csproj: Included shared files.
9462
9463 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9464
9465         Fix bug 60333, 55971 in the more general way
9466         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9467         Added arg_type argument for constant conversion.
9468         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
9469
9470 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9471
9472         Fix bug #59760
9473         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
9474         OperatorArrayList, MethodCoreArrayList for typecontainer
9475         containers. Changed class member types to these new types.
9476         (MethodArrayList.DefineMembers): Added test for CS0659.
9477
9478 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
9479
9480         * cfold.cs: Synchronize the folding with the code in expression.cs
9481         Binary.DoNumericPromotions for uint operands.
9482
9483         * attribute.cs: Revert patch from Raja, it introduced a regression
9484         while building Blam-1.2.1 (hard to isolate a test case).
9485
9486 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9487
9488         Fix for #55382
9489         * class.cs:
9490         (TypeContainer.Define): Renamed to DefineContainerMembers because of
9491         name collision.
9492         (MethodCore.parent_method): New member. The method we're overriding
9493         if this is an override method.
9494         (MethodCore.CheckBase): Moved from Method class and made common.
9495         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
9496         private.
9497         (MethodCore.CheckForDuplications): New abstract method. For custom
9498         member duplication search in a container
9499         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
9500         method and its return type.
9501         (Event.conflict_symbol): New member. Symbol with same name in the
9502         parent class.
9503
9504         * decl.cs:
9505         (MemberCache.FindMemberWithSameName): New method. The method
9506         is looking for conflict with inherited symbols.
9507
9508 2004-08-04  Martin Baulig  <martin@ximian.com>
9509
9510         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9511
9512         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9513
9514 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9515
9516         * report.cs (Message): New enum for better error, warning reference in
9517         the code.
9518         (MessageData): New inner abstract class. It generally handles printing of
9519         error and warning messages.
9520         Removed unused Error, Warning, Message methods.
9521
9522 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9523
9524         Fix for cs0592-8.cs test
9525         * attribute.cs
9526         (Attributable.ValidAttributeTargets): Made public.
9527         (Attribute.ExplicitTarget): New member for explicit target value.
9528         (Attribute.CheckTargets): Now we translate explicit attribute
9529         target to Target here.
9530
9531 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
9532
9533         * ecore.cs (MethodGroupExpr): new IsBase property.
9534
9535         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
9536
9537         * delegate.cs (DelegateCreation): store a MethodGroupExpr
9538         rather than an instance expr.
9539
9540         (DelegateCreation.Emit): Use the method group rather than
9541         the instance expression. Also, if you have base.Foo as the
9542         method for a delegate, make sure to emit ldftn, not ldftnvirt.
9543
9544         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
9545
9546         (NewDelegate.DoResolve): Only check for the existance of Invoke
9547         if the method is going to be needed. Use MethodGroupExpr.
9548
9549         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
9550
9551         * expression.cs: For pointer arith., make sure to use
9552         the size of the type, not the size of the pointer to
9553         the type.
9554
9555 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9556
9557         Fix for #60722
9558         * class.cs (Class): Added error CS0502 test.
9559
9560 2004-08-03  John Luke  <jluke@cfl.rr.com>
9561             Raja R Harinath  <rharinath@novell.com>
9562
9563         Fix for #60997.
9564         * attribute.cs (Attribute.complained_before): New flag.
9565         (Attribute.ResolveType, Attribute.Resolve),
9566         (Attribute.DefinePInvokeMethod): Set it.
9567         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
9568         
9569 2004-08-03  Martin Baulig  <martin@ximian.com>
9570
9571         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9572         use a user-defined operator; we still need to do numeric
9573         promotions in case one argument is a builtin type and the other
9574         one has an implicit conversion to that type.  Fixes #62322.
9575
9576 2004-08-18  Martin Baulig  <martin@ximian.com>
9577
9578         * class.cs (Method.Define): Use the correct method name when
9579         creating the MethodBuilder for a generic method.
9580
9581 2004-08-17  Martin Baulig  <martin@ximian.com>
9582
9583         * generic.cs (Constraints): Support type parameter constraints.
9584
9585 2004-08-16  Martin Baulig  <martin@ximian.com>
9586
9587         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
9588         (Token.GENERIC_DIMENSION): New token; this is returned if we
9589         encounter an unbound generic type in a typeof() expression.
9590
9591         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
9592         this token is only generated while parsing a typeof() expression.
9593         (typeof_expression): Removed the old unbound_type hack.
9594
9595         * generic.cs (TypeArguments.IsUnbound): New public property.
9596
9597         * decl.cs (MemberName): Added support for unbound types.
9598
9599 2004-08-14  Martin Baulig  <martin@ximian.com>
9600
9601         * typemanager.cs
9602         (TypeManager.IsEqualGenericInstance): New static method.
9603         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
9604         just used to check accessibility, so follow the rules of 26.1.6.        
9605
9606         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
9607         ConstructedType instead of a TypeExpression if we have type arguments.
9608
9609         * cs-parser.jay (typeof_expression): Support unbound generic types.
9610
9611         * ecore.cs (UnboundTypeExpression): New public class.
9612
9613 2004-08-12  Martin Baulig  <martin@ximian.com>
9614
9615         * typemanager.cs (TypeManager.IsNestedChildOf): Use
9616         TypeManager.IsEqual() rather than `=='.
9617
9618         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
9619         generic instances as well.
9620
9621 2004-08-12  Martin Baulig  <martin@ximian.com>
9622
9623         * expression.cs (Invocation.InferType): We can only infer method
9624         type parameters.  Fixes #62647.
9625
9626 2004-08-11  Martin Baulig  <martin@ximian.com>
9627
9628         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
9629         before resolving the base classes.
9630
9631 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
9632
9633         * Makefile: install .mdb file too.
9634
9635 2004-08-05  Martin Baulig  <martin@ximian.com>
9636
9637         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
9638         initializer, the current type is just the TypeBuilder, not the
9639         instantiated generic type.
9640         (FieldExpr.IsFieldInitializer): New public property.
9641
9642 2004-08-04  Martin Baulig  <martin@ximian.com>
9643
9644         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9645
9646         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9647
9648 2004-08-03  Martin Baulig  <martin@ximian.com>
9649
9650         * class.cs (MethodData.Define): If we're an explicit
9651         implementation, remove the generic arity from the type name.
9652
9653 2004-08-03  Martin Baulig  <martin@ximian.com>
9654
9655         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9656         use a user-defined operator; we still need to do numeric
9657         promotions in case one argument is a builtin type and the other
9658         one has an implicit conversion to that type.  Fixes #62322.
9659
9660 2004-08-02  Martin Baulig  <martin@ximian.com>
9661
9662         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
9663         `TypeExpr[]' array.
9664         (TypeContainer.GetClassBases): Return the unexpanded list of
9665         interfaces; we expand them later.
9666         (TypeContainer.DefineType): After creating the TypeBuilder, call
9667         TypeManager.ExpandInterfaces() to get an expanded and resolved
9668         list of interfaces.
9669
9670         * ecore.cs (TypeExpr.GetInterfaces): Removed
9671
9672         * generics.cs (Constraints.InterfaceConstraints): Remove.
9673         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
9674         register the interface constraints.
9675
9676         * typemanager.cs
9677         (TypeManager.AddUserType): Removed the `ifaces' argument.
9678         (TypeManager.AddTypeParameter): Likewise.
9679         (TypeManager.AddUserInterface): Removed, was unused.
9680         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
9681         `TypeExpr[]' array for the interfaces.
9682         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
9683         has been defined, returns a list of the resolved interfaces types.
9684         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
9685         (TypeManager.GetExplicitInterfaces): Likewise.  
9686
9687 2004-08-02  Martin Baulig  <martin@ximian.com>
9688
9689         * expression.cs (Invocation.EmitCall): If we're invoking a method
9690         on a type parameter, use the new `Constrained' prefix opcode.
9691
9692 2004-08-02  Martin Baulig  <martin@ximian.com>
9693
9694         * statement.cs (LocalInfo.Flags): Added `IsThis'.
9695         (LocalInfo.IsThis): New public property.
9696         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
9697
9698 2004-08-01  Martin Baulig  <martin@ximian.com>
9699
9700         * class.cs (TypeContainer.GetClassBases): Don't set the default
9701         here since we may get called from GetPartialBases().
9702         (TypeContainer.DefineType): If GetClassBases() didn't return a
9703         parent, use the default one.
9704
9705 2004-07-30  Martin Baulig  <martin@ximian.com>
9706
9707         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
9708
9709         * class.cs (SourceMethod): New public class, derive from the
9710         symbol writer's ISourceMethod.
9711         (Method): Use the new symbol writer API.
9712
9713         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
9714         as argument and use the new symbol writer.
9715
9716         * location.cs
9717         (SourceFile): Implement the symbol writer's ISourceFile.
9718         (Location.SymbolDocument): Removed.
9719         (Location.SourceFile): New public property.
9720
9721         * symbolwriter.cs: Use the new symbol writer API.
9722
9723 2004-07-30  Raja R Harinath  <rharinath@novell.com>
9724
9725         * Makefile (install-local): Remove.  Functionality moved to
9726         executable.make.
9727
9728 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
9729
9730         * Makefile: Install mcs.exe.config file together with mcs.exe.
9731         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
9732         correct runtime version.
9733         
9734 2004-07-25  Martin Baulig  <martin@ximian.com>
9735
9736         * class.cs
9737         (TypeContainer.RegisterOrder): Removed, this was unused.
9738         (TypeContainer, interface_order): Removed.
9739         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
9740         TypeContainer as argument since we can also be called with a
9741         `PartialContainer' for a partial class/struct/interface.
9742         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
9743         of checking whether we're an `Interface' - we could be a
9744         `PartialContainer'.
9745         (PartialContainer.Register): Override; call
9746         AddClass()/AddStruct()/AddInterface() on our parent.
9747
9748         * cs-parser.jay (interface_member_declaration): Add things to the
9749         `current_container', not the `current_class'.
9750
9751         * rootcontext.cs (RegisterOrder): The overloaded version which
9752         takes an `Interface' was unused, removed.
9753
9754         * typemanager.cs (TypeManager.LookupInterface): Return a
9755         `TypeContainer', not an `Interface'.
9756         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
9757         contain a `PartialContainer' for an interface, so check it's
9758         `Kind' to figure out what it is.
9759
9760 2004-07-25  Martin Baulig  <martin@ximian.com>
9761
9762         * class.cs (Class.DefaultTypeAttributes): New public constant.
9763         (Struct.DefaultTypeAttributes): Likewise.
9764         (Interface.DefaultTypeAttributes): Likewise.
9765         (PartialContainer.TypeAttr): Override this and add the
9766         DefaultTypeAttributes.
9767
9768 2004-07-25  Martin Baulig  <martin@ximian.com>
9769
9770         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
9771         we can just use the `Parent' field instead.
9772
9773 2004-07-25  Martin Baulig  <martin@ximian.com>
9774
9775         * class.cs (TypeContainer.Emit): Renamed to EmitType().
9776
9777 2004-07-25  Martin Baulig  <martin@ximian.com>
9778
9779         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
9780         our parts before defining any methods.
9781         (TypeContainer.VerifyImplements): Make this virtual.
9782         (ClassPart.VerifyImplements): Override and call VerifyImplements()
9783         on our PartialContainer.
9784
9785 2004-07-25  Martin Baulig  <martin@ximian.com>
9786
9787         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
9788
9789         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
9790         argument, we can just use the `Parent' field instead.
9791
9792         * class.cs
9793         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
9794         (MemberBase.DoDefine): Likewise.
9795
9796 2004-07-24  Martin Baulig  <martin@ximian.com>
9797
9798         * decl.cs (MemberCore.Parent): New public field.
9799         (DeclSpace.Parent): Moved to MemberCore.
9800
9801         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
9802         (MemberBase.ctor): Added TypeContainer argument, pass it to our
9803         parent's .ctor.
9804         (FieldBase, Field, Operator): Likewise.
9805         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
9806         (EventField, Event): Likewise.
9807
9808 2004-07-23  Martin Baulig  <martin@ximian.com>
9809
9810         * class.cs (PartialContainer): New public class.
9811         (ClassPart): New public class.
9812         (TypeContainer): Added support for partial classes.
9813         (TypeContainer.GetClassBases): Splitted some of the functionality
9814         out into GetNormalBases() and GetPartialBases().
9815
9816         * cs-tokenizer.cs (Token.PARTIAL): New token.
9817         (Tokenizer.consume_identifier): Added some hacks to recognize
9818         `partial', but only if it's immediately followed by `class',
9819         `struct' or `interface'.
9820
9821         * cs-parser.jay: Added support for partial clases.
9822
9823 2004-07-23  Martin Baulig  <martin@ximian.com>
9824
9825         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
9826         a `DeclSpace' and also made it readonly.
9827         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
9828         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
9829         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
9830
9831         * cs-parser.jay: Pass the `current_class', not the
9832         `current_container' (at the moment, this is still the same thing)
9833         to a new Method, Property, Event, Indexer or Constructor.
9834
9835 2004-07-23  Martin Baulig  <martin@ximian.com>
9836
9837         * cs-parser.jay (CSharpParser): Added a new `current_class' field
9838         and removed the `current_interface' one.
9839         (struct_declaration, class_declaration, interface_declaration):
9840         Set `current_class' to the newly created class/struct/interface;
9841         set their `Bases' and call Register() before parsing their body.
9842
9843 2004-07-23  Martin Baulig  <martin@ximian.com>
9844
9845         * class.cs (Kind): New public enum.
9846         (TypeContainer): Made this class abstract.
9847         (TypeContainer.Kind): New public readonly field.
9848         (TypeContainer.CheckDef): New public method; moved here from
9849         cs-parser.jay.
9850         (TypeContainer.Register): New public abstract method.
9851         (TypeContainer.GetPendingImplementations): New public abstract
9852         method.
9853         (TypeContainer.GetClassBases): Removed the `is_class' and
9854         `is_iface' parameters.
9855         (TypeContainer.DefineNestedTypes): Formerly known as
9856         DoDefineType().
9857         (ClassOrStruct): Made this class abstract.
9858
9859         * tree.cs (RootTypes): New public type. 
9860
9861 2004-07-20  Martin Baulig  <martin@ximian.com>
9862
9863         * tree.cs (Tree.RecordNamespace): Removed.
9864         (Tree.Namespaces): Removed.
9865
9866         * rootcontext.cs (RootContext.IsNamespace): Removed.
9867
9868         * cs-parser.jay (namespace_declaration): Just create a new
9869         NamespaceEntry here.
9870
9871 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
9872
9873         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
9874         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
9875         entry to make sure it runs in the correct runtime version.
9876         
9877 2004-07-18  Martin Baulig  <martin@ximian.com>
9878
9879         * generic.cs (ConstructedType.CheckConstraints): Improved
9880         constraints checking.
9881
9882 2004-07-18  Martin Baulig  <martin@ximian.com>
9883
9884         * expression.cs (Invocation.BetterMethod): Call
9885         TypeManager.TypeToCoreType() on all types and removed my previous
9886         hack; we're already doig the right thing here.
9887
9888 2004-07-17  Martin Baulig  <martin@ximian.com>
9889
9890         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
9891
9892 2004-07-16  Martin Baulig  <martin@ximian.com>
9893
9894         * iterators.cs: Added generics support.
9895
9896 2004-07-16  Martin Baulig  <martin@ximian.com>
9897
9898         * iterators.cs: Rewrote this.  We're now using one single Proxy
9899         class for both the IEnumerable and the IEnumerator interface and
9900         `Iterator' derives from Class so we can use the high-level API.
9901
9902         * class.cs (TypeContainer.AddIterator): New method.
9903         (TypeContainer.DoDefineType): New protected virtual method, which
9904         is called from DefineType().
9905         (TypeContainer.DoDefineMembers): Call DefineType() and
9906         DefineMembers() on all our iterators.
9907         (TypeContainer.Emit): Call Emit() on all our iterators.
9908         (TypeContainer.CloseType): Call CloseType() on all our iterators.
9909
9910         * codegen.cs (EmitContext.CurrentIterator): New public field.
9911
9912 2004-07-15  Martin Baulig  <martin@ximian.com>
9913
9914         * typemanager.cs
9915         (TypeManager.not_supported_exception_type): New type.   
9916
9917 2004-07-14  Martin Baulig  <martin@ximian.com>
9918
9919         * typemanager.cs
9920         (TypeManager.generic_ienumerable_type): New type.
9921         (TypeManager.generic_ienumerator_type): New type.
9922
9923         * rootcontext.cs
9924         (RootContext.interfaces_first_stage): Added
9925         "System.Collections.Generic.IEnumerator`1" and
9926         "System.Collections.Generic.IEnumerable`1".     
9927
9928 2004-07-14  Martin Baulig  <martin@ximian.com>
9929
9930         * iterators.cs: Use real error numbers.
9931
9932 2004-07-14  Martin Baulig  <martin@ximian.com>
9933
9934         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
9935         requires this to be a System.Collection.IEnumerable and not a
9936         class implementing that interface.
9937         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
9938
9939 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
9940
9941         * class.cs: Fixed previous fix, it broke some error tests.
9942
9943 2004-07-12  Martin Baulig  <martin@ximian.com>
9944
9945         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
9946         Fixes #61293.
9947
9948 2004-07-14  Martin Baulig  <martin@ximian.com>
9949
9950         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
9951         an exclamation mark (!) for the generic arity to reflect the
9952         latest spec changes; ie. use "System.Collections.Generic.IList`1".
9953
9954 2004-07-13  Martin Baulig  <martin@ximian.com>
9955
9956         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
9957         specifiers being part of a type argument.
9958
9959 2004-07-13  Martin Baulig  <martin@ximian.com>
9960
9961         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
9962         name for generic types.
9963
9964 2004-07-13  Martin Baulig  <martin@ximian.com>
9965
9966         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
9967         bit to fix #60119.
9968
9969 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
9970
9971         * assign.cs (LocalTemporary): Add new argument: is_address,If
9972         `is_address' is true, then the value that we store is the address
9973         to the real value, and not the value itself.
9974         
9975         * ecore.cs (PropertyExpr): use the new local temporary
9976         stuff to allow us to handle X.Y += z (where X is a struct)
9977
9978 2004-07-08  Martin Baulig  <martin@ximian.com>
9979
9980         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
9981         not always return, just like we're doing in Using.Resolve().
9982
9983 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
9984
9985         * cs-parser.jay (fixed_statement): flag this as Pinned.
9986
9987 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
9988
9989         * typemanager.cs (TypeManager): Removed MakePinned method, this
9990         mechanism is replaced with the .NET 2.x compatible mechanism of
9991         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
9992
9993         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
9994         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
9995         `IsFixed' property which has a different meaning.
9996
9997 2004-07-02  Raja R Harinath  <rharinath@novell.com>
9998
9999         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10000         visible from inside a nested class, not just the names of the
10001         immediately enclosing class.
10002         Fix for bug #60730.
10003
10004 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10005
10006         * expression.cs (BetterConversion): Remove buggy special-case
10007         handling of "implicit constant expression conversions".  At this
10008         point, we already know that the conversion is possible -- we're
10009         only checking to see which is better.
10010
10011 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10012
10013         * cs-parser.jay: Added error CS0210 test.
10014
10015 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10016
10017         * cs-parser.jay: Added error CS0134 test.
10018
10019 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10020
10021         Fix bug #52507
10022         * cs-parser.jay: Added error CS0145 test.
10023
10024 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10025
10026         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10027
10028 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10029         
10030         * expression.cs (StackAlloc.Resolve): The argument may not
10031         be a constant; deal with this case.
10032         
10033 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10034
10035         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10036         GetIndexerAttributeValue.
10037         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10038
10039         * class.cs (Indexer.Define): Added error tests for CS0415,
10040         CS0609.
10041
10042 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10043
10044         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10045         property code.
10046
10047 2004-06-23  Martin Baulig  <martin@ximian.com>
10048
10049         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10050         neither return nor throw, reset the barrier as well.  Fixes #60457.
10051
10052 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10053
10054         * class.cs : EventAttributes is now set to None by default.
10055           This fixes bug #60459.
10056
10057 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10058
10059         Fix bug #60219
10060         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10061         Don't throw exception but return null (it's sufficient now).
10062
10063 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10064
10065         * typemanager.cs (GetArgumentTypes): Faster implementation.
10066
10067 2004-06-18  Martin Baulig  <martin@ximian.com>
10068
10069         * attribute.cs (Attribute.Resolve): Check whether we're an
10070         EmptyCast which a Constant child.  Fixes #60333.
10071
10072 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10073
10074         * statement.cs (EmitCollectionForeach): Account for the fact that
10075         not all valuetypes are in areas which we can take the address of.
10076         For these variables, we store to a temporary variable. Also, make
10077         sure that we dont emit a `callvirt' on a valuetype method.
10078
10079 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10080
10081         * expression.cs (StackAlloc.DoReSolve): Added test for
10082         negative parameter (CS0247).
10083
10084 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10085
10086         Fix bug #59792
10087         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10088
10089 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10090
10091         Fix bug #59781
10092         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10093         ulong.
10094
10095 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10096
10097         Fix bug #58254 & cs1555.cs, cs1556.cs
10098         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10099
10100 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10101
10102         * cs-parser.jay: Added error CS1669 test for indexers.
10103
10104 2004-06-18  Martin Baulig  <martin@ximian.com>
10105
10106         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10107         argument.  Fixes #60441.
10108
10109 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10110         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10111         The name needs to have the actual name of the method in order
10112         for other tests (such as the one in OverloadResolve for Invoke
10113         on a delegate) to work. As well, it does not really help
10114         error reporting because the method group had multiple methods.
10115         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10116         Make profiling work.
10117         
10118 2004-06-13  Martin Baulig  <martin@ximian.com>
10119
10120         * cs-parser.jay: Don't allow generic attributes.
10121
10122 2004-06-13  Martin Baulig  <martin@ximian.com>
10123
10124         * class.cs (MemberBase.DoDefineBase): New protected method.
10125         (MemberBase.DoDefine): Compute the `flags' in the new
10126         DoDefineBase() which must be called first.
10127         (Method.Define): Call DoDefineBase() first so we have the flags
10128         when defining the generic method.
10129
10130         * cs-parser.jay (interface_method_declaration): Support generic methods.
10131
10132 2004-06-13  Martin Baulig  <martin@ximian.com>
10133
10134         * decl.cs (TypeName): Removed.
10135         (MemberName): Removed TypeName and MemberNow; now we just have
10136         MemberName.
10137
10138         * cs-parser.jay: Don't distinguish between type arguments and type
10139         parameters in the grammar and simplified the rules a bit.  The
10140         reduce/reduce conflicts are now gone (except the one we inherited
10141         from mcs).
10142
10143 2004-06-11  Martin Baulig  <martin@ximian.com>
10144
10145         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10146         call this twice: for params and varargs methods.
10147
10148 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10149
10150         * class.cs:
10151         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10152
10153 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10154
10155         * attribute.cs (Attribute.GetValidTargets): Made public.
10156
10157         * class.cs: 
10158         (AbstractPropertyEventMethod): New class for better code sharing.
10159         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10160         CS1667 report.
10161         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10162
10163 2004-06-09  Martin Baulig  <martin@ximian.com>
10164
10165         * cs-parser.jay: Removed a reduce/reduce conflict.
10166
10167 2004-06-03  Martin Baulig  <martin@ximian.com>
10168
10169         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10170         GetSimpleName() and return a SimpleName.
10171
10172         * ecore.cs (SimpleName.Arguments): New public field.
10173         (SimpleName): Added overloaded ctor which takes an additional
10174         TypeArguments argument.
10175         (SimpleName.SimpleNameResolve): Added support for generic methods.
10176         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10177         formerly in MemberAccess.DoResolve(), but we also need it in
10178         SimpleNameResolve().
10179
10180         * expression.cs (MemberAccess.DoResolve): Use the new
10181         MethodGroupExpr.ResolveGeneric().       
10182
10183 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10184
10185         * decl.cs: If possible, use lookuptypedirect here. We can only do
10186         this if there is no `.' after the namespace. Avoids using
10187         LookupType, which does lots of slow processing.
10188         (FindNestedType) New method, does what it says :-).
10189         * namespace.cs: use LookupTypeDirect.
10190         * rootcontext.cs: use membercache, if possible.
10191         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10192
10193 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10194
10195         * expression.cs:
10196         According to the spec, 
10197
10198         In a member access of the form E.I, if E is a single identifier,
10199         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10200         field, property, localvariable, or parameter with the same type as
10201         the meaning of E as a type-name (§3.8), then both possible
10202         meanings of E are permitted.
10203
10204         We did not check that E as a simple-name had the same type as E as
10205         a type name.
10206
10207         This trivial check gives us 5-7% on bootstrap time.
10208
10209 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10210
10211         * expression.cs (Invocation.OverloadResolve): Avoid the
10212         use of hashtables and boxing here by allocating on demand.
10213
10214 2004-05-30  Martin Baulig  <martin@ximian.com>
10215
10216         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10217         we're doing a silent lookup.  Don't try to lookup nested types in
10218         TypeManager.object_type (thanks to Ben Maurer).
10219
10220 2004-05-30  Martin Baulig  <martin@ximian.com>
10221
10222         Committing a patch from Ben Maurer.
10223
10224         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10225
10226 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10227
10228         * convert.cs: add a trivial cache for overload operator resolution.
10229
10230 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10231
10232         * attribute.cs
10233         (AttributeTester.GetObsoleteAttribute): Returns instance of
10234         ObsoleteAttribute when type is obsolete.
10235
10236         * class.cs
10237         (TypeContainer.VerifyObsoleteAttribute): Override.
10238         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10239         (MethodCode.VerifyObsoleteAttribute): Override.
10240         (MemberBase.VerifyObsoleteAttribute): Override.
10241
10242         * decl.cs
10243         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10244         and report proper error.
10245
10246         *delegate.cs
10247         (Delegate.VerifyObsoleteAttribute): Override.
10248
10249         * ecore.cs
10250         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10251         and report proper error.
10252         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10253
10254         * enum.cs
10255         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10256         and enum member.
10257
10258         * expression.cs
10259         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10260         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10261         Added test for ObsoleteAttribute.
10262
10263         * statement.cs
10264         (Catch): Derived from Statement.
10265
10266 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10267
10268         * decl.cs: If possible, use lookuptypedirect here. We can only do
10269         this if there is no `.' after the namespace. Avoids using
10270         LookupType, which does lots of slow processing.
10271         (FindNestedType) New method, does what it says :-).
10272         * namespace.cs: use LookupTypeDirect.
10273         * rootcontext.cs: use membercache, if possible.
10274         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10275
10276 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10277
10278         * expression.cs:
10279         According to the spec, 
10280
10281         In a member access of the form E.I, if E is a single identifier,
10282         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10283         field, property, localvariable, or parameter with the same type as
10284         the meaning of E as a type-name (§3.8), then both possible
10285         meanings of E are permitted.
10286
10287         We did not check that E as a simple-name had the same type as E as
10288         a type name.
10289
10290         This trivial check gives us 5-7% on bootstrap time.
10291
10292 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10293
10294         Fixed bug #59071 & cs0160.cs
10295         * statement.cs (Try.Resolve): Check here whether order of catch
10296         clauses matches their dependencies.
10297
10298 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10299
10300         Fixed bug #58624
10301         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10302         unsafe type.
10303
10304 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10305
10306         * expression.cs (Invocation.OverloadResolve): Avoid the
10307         use of hashtables and boxing here by allocating on demand.
10308
10309 2004-05-30  Martin Baulig  <martin@ximian.com>
10310
10311         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10312         we're doing a silent lookup.  Don't try to lookup nested types in
10313         TypeManager.object_type (thanks to Ben Maurer).
10314
10315 2004-05-30  Martin Baulig  <martin@ximian.com>
10316
10317         Committing a patch from Ben Maurer.
10318
10319         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10320
10321 2004-05-29  Martin Baulig  <martin@ximian.com>
10322
10323         * class.cs (IMethodData.ShouldIgnore): New method.
10324
10325         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10326         `Location' argument, we don't need it anywhere.  Use
10327         `IMethodData.ShouldIgnore ()' instead of
10328         `MethodData.GetMethodFlags ()'.
10329         (TypeManager.AddMethod): Removed.
10330         (TypeManager.AddMethod2): Renamed to AddMethod.
10331
10332 2004-05-29  Martin Baulig  <martin@ximian.com>
10333
10334         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10335
10336         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10337         converting from a class type S to an interface type and we already
10338         have an object on the stack, don't box it again.  Fixes #52578.
10339
10340 2004-05-29  Martin Baulig  <martin@ximian.com>
10341
10342         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10343         Added support for `params' parameters.  Fixes #59267.
10344
10345 2004-05-29  Martin Baulig  <martin@ximian.com>
10346
10347         * literal.cs (NullPointer): Provide a private .ctor which sets
10348         `type' to TypeManager.object_type.  Fixes #59048.
10349
10350 2004-05-29  Martin Baulig  <martin@ximian.com>
10351
10352         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10353         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10354
10355         * ecore.cs (EventExpr.instance_expr): Make the field private.
10356
10357 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10358
10359         Fixed bug #50080 & cs0214-2.cs
10360         * expression.cs (Cast.DoResolve): Check unsafe context here.
10361         
10362         * statement.cs (Resolve.DoResolve): Likewise.
10363
10364 2004-05-26  Martin Baulig  <martin@ximian.com>
10365
10366         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10367
10368         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10369         (RootContext.LookupType): Pass down the `silent' flag.
10370
10371 2004-05-25  Martin Baulig  <martin@ximian.com>
10372
10373         * expression.cs
10374         (MethodGroupExpr.IdenticalTypeName): New public property.
10375         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10376         expression actually refers to a type.
10377
10378 2004-05-25  Martin Baulig  <martin@ximian.com>
10379
10380         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10381         for #56176 and made it actually work.
10382
10383 2004-05-25  Martin Baulig  <martin@ximian.com>
10384
10385         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10386         (FieldExpr, PropertyExpr): Override and implement
10387         CacheTemporaries.  Fixes #52279.
10388
10389 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10390
10391         * location.cs: In the new compiler listing a file twice is a
10392         warning, not an error.
10393
10394 2004-05-24  Martin Baulig  <martin@ximian.com>
10395
10396         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10397         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10398
10399 2004-05-24  Martin Baulig  <martin@ximian.com>
10400
10401         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10402         walking the `using' list.  Fixes #53921.
10403
10404 2004-05-24  Martin Baulig  <martin@ximian.com>
10405
10406         * const.cs (Const.LookupConstantValue): Added support for
10407         EmptyCast's; fixes #55251.
10408
10409 2004-05-24  Martin Baulig  <martin@ximian.com>
10410
10411         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10412         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10413         which does the CS0135 check.  The reason is that we first need to
10414         check whether the variable actually exists.
10415
10416 2004-05-24  Martin Baulig  <martin@ximian.com>
10417
10418         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10419         than RootContext.LookupType() to find the explicit interface
10420         type.  Fixes #58584.
10421
10422 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10423
10424         * Makefile: Simplify.  Use executable.make.
10425         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10426
10427 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10428
10429         * decl.cs:
10430         * enum.cs:
10431         Use the invariant culture when doing String.Compare for CLS case
10432         sensitivity.
10433         
10434 2004-05-23  Martin Baulig  <martin@ximian.com>
10435
10436         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10437         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10438
10439         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10440
10441 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10442
10443         * class.cs (MemberBase.Define): Reuse MemberType member for 
10444         resolved type. Other methods can use it too.
10445
10446 2004-05-23  Martin Baulig  <martin@ximian.com>
10447
10448         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10449         the variable also exists in the current block (otherwise, we need
10450         to report a CS0103).  Fixes #58670.
10451
10452 2004-05-23  Martin Baulig  <martin@ximian.com>
10453
10454         * flowanalysis.cs (Reachability.Reachable): Compute this
10455         on-the-fly rather than storing it as a field.
10456
10457 2004-05-23  Martin Baulig  <martin@ximian.com>
10458
10459         * flowanalysis.cs (Reachability.And): Manually compute the
10460         resulting `barrier' from the reachability.      
10461        
10462 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10463
10464         Fix bug #57835
10465         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10466         instance of ObsoleteAttribute when symbol is obsolete.
10467
10468         * class.cs
10469         (IMethodData): Extended interface for ObsoleteAttribute support.
10470
10471 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10472
10473         * attribute.cs: Fix bug #55970
10474
10475 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10476
10477         Fix bug #52705
10478         * attribute.cs
10479         (GetObsoleteAttribute): New method. Creates the instance of
10480         ObsoleteAttribute.
10481         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
10482         ObsoleteAttribute when member is obsolete.
10483         (AttributeTester.Report_ObsoleteMessage): Common method for
10484         Obsolete error/warning reporting.
10485
10486         * class.cs
10487         (TypeContainer.base_classs_type): New member for storing parent type.
10488
10489         * decl.cs
10490         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
10491         for this MemberCore.
10492
10493 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10494
10495         * attribute.cs, const.cs: Fix bug #58590
10496
10497 2004-05-21  Martin Baulig  <martin@ximian.com>
10498
10499         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
10500         out parameters if the end of the method is unreachable.  Fixes
10501         #58098. 
10502
10503 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10504
10505         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
10506         Hari was right, why extra method.
10507
10508 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10509
10510         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
10511
10512 2004-05-20  Martin Baulig  <martin@ximian.com>
10513
10514         * delegate.cs: Convert this file to Unix mode - like the original
10515         version in mcs is.
10516
10517 2004-05-20  Martin Baulig  <martin@ximian.com>
10518
10519         * attribute.cs: Convert this file to Unix mode - like the original
10520         version in mcs is.
10521
10522 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
10523
10524        Fix bug #58688 (MCS does not report error when the same attribute
10525        is assigned twice)
10526
10527        * attribute.cs (Attribute.Emit): Distinction between null and default.
10528
10529 2004-05-19  Raja R Harinath  <rharinath@novell.com>
10530
10531        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
10532        of a top-level attribute without an attribute target.
10533        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
10534        Make non-static.
10535        (Attribute.Conditional_GetConditionName), 
10536        (Attribute.Obsolete_GetObsoleteMessage): Update.
10537        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
10538        part of ScanForIndexerName.
10539        (Attribute.CanIgnoreInvalidAttribute): New function.
10540        (Attribute.ScanForIndexerName): Move to ...
10541        (Attributes.ScanForIndexerName): ... here.
10542        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
10543        (Attributes.Search): New internal variant that can choose not to
10544        complain if types aren't resolved.  The original signature now
10545        complains.
10546        (Attributes.GetClsCompliantAttribute): Use internal variant, with
10547        complaints suppressed.
10548        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
10549        only if it not useful.
10550        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
10551        top-level for attributes that are shared between the assembly
10552        and a top-level class.
10553        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
10554        * class.cs: Update to reflect changes.
10555        (DefineIndexers): Fuse loops.
10556        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
10557        a couple more variants of attribute names.
10558
10559 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
10560
10561         Fix bug #52585 (Implemented explicit attribute declaration)
10562
10563         * attribute.cs:
10564         (Attributable.ValidAttributeTargets): New abstract method. It gets
10565         list of valid attribute targets for explicit target declaration.
10566         (Attribute.Target): It holds target itself.
10567         (AttributeSection): Removed.
10568         (Attribute.CheckTargets): New method. It checks whether attribute
10569         target is valid for the current element.
10570
10571         * class.cs:
10572         (EventProperty): New class. For events that are declared like
10573         property (with add and remove accessors).
10574         (EventField): New class. For events that are declared like field.
10575         class.cs
10576
10577         * cs-parser.jay: Implemented explicit attribute target declaration.
10578
10579         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
10580         Override ValidAttributeTargets.
10581
10582         * parameter.cs:
10583         (ReturnParameter): Class for applying custom attributes on 
10584         the return type.
10585         (ParameterAtribute): New class. Class for applying custom
10586         attributes on the parameter type.
10587
10588 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
10589
10590         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
10591         definitions. 
10592
10593         (Method): Allow UNSAFE here.
10594
10595         * modifiers.cs: Support unsafe reporting.
10596
10597 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
10598
10599         * decl.cs: Fix bug #58478.
10600
10601 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10602
10603         * statement.cs: When checking for unreachable code on an EmptyStatement,
10604         set the location. Fixes bug #58488.
10605
10606 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
10607
10608         * driver.cs: Add -pkg handling.
10609
10610         From Gonzalo: UseShelLExecute=false
10611
10612 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
10613
10614         * attribute.cs:
10615         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
10616         for attribute.
10617         (Attribute.IsClsCompliaceRequired): Moved to base for better
10618         accesibility.
10619         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
10620         when attribute is AttributeUsageAttribute.
10621         (Attribute.GetValidTargets): Simplified.
10622         (Attribute.GetAttributeUsage): New method returns AttributeUsage
10623         attribute for this type.
10624         (Attribute.ApplyAttributes): Method renamed to Emit and make
10625         non-static.
10626         (GlobalAttributeSection): New class for special handling of global
10627         attributes (assembly, module).
10628         (AttributeSection.Emit): New method.
10629
10630         * class.cs: Implemented Attributable abstract methods.
10631         (MethodCore.LabelParameters): Moved to Parameter class.
10632         (Accessor): Is back simple class.
10633         (PropertyMethod): Implemented Attributable abstract class.
10634         (DelegateMethod): Implemented Attributable abstract class.
10635         (Event): New constructor for disctintion between normal Event
10636         and Event with accessors.
10637
10638         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
10639
10640         * codegen.cs, const.cs, decl.cs, delegate.cs:
10641         (CommonAssemblyModulClass): Implemented Attributable abstract class
10642         and simplified.
10643
10644         * enum.cs: Implement IAttributeSupport interface.
10645         (EnumMember): New class for emum members. Implemented Attributable
10646         abstract class
10647
10648         * parameter.cs:
10649         (ParameterBase): Is abstract.
10650         (ReturnParameter): New class for easier [return:] attribute handling.
10651
10652         * typemanager.cs: Removed builder_to_attr.
10653
10654 2004-05-11  Raja R Harinath  <rharinath@novell.com>
10655
10656         Fix bug #57151.
10657         * attribute.cs (Attribute.GetPositionalValue): New function.
10658         * class.cs (TypeContainer.VerifyMembers): New function.
10659         (TypeContainer.Emit): Use it.
10660         (ClassOrStruct): New base class for Class and Struct.
10661         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
10662         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
10663         class.
10664         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
10665         then each non-static field should have a FieldOffset attribute.
10666         Otherwise, none of the fields should have a FieldOffset attribute.
10667         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
10668         and FieldOffset attributes.
10669         * typemanager.cs (TypeManager.struct_layout_attribute_type)
10670         (TypeManager.field_offset_attribute_type): New core types.
10671         (TypeManager.InitCoreTypes): Initialize them.
10672
10673 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
10674
10675         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
10676         Return correct type.
10677         From bug #58270.
10678
10679 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
10680
10681         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
10682         be implicitly converted to ulong.
10683         
10684         * expression.cs: The logic for allowing operator &, | and ^ worked
10685         was wrong, it worked before because we did not report an error in
10686         an else branch.  Fixes 57895.
10687
10688         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
10689         allow volatile fields to be reference types.
10690
10691 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
10692
10693         * driver.cs: Add support for /debug-
10694
10695 2004-05-07  Raja R Harinath  <rharinath@novell.com>
10696
10697         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
10698         Add a 'complain' parameter to silence errors.
10699         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
10700         silently overlooked type-resolutions.
10701         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
10702         to reflect changes.
10703         (Attributes.Search): New function.
10704         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
10705         (Attributes.GetAttributeFullName): Remove hack.
10706         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
10707         Update to reflect changes.
10708         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10709         Use Attributes.Search instead of nested loops.
10710
10711 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
10712
10713         * decl.cs:
10714         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
10715         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
10716         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
10717
10718         * report.cs: (Report.Warning): Renamed to Warning_T because of
10719         parameter collision.
10720
10721 2004-05-05  Raja R Harinath  <rharinath@novell.com>
10722
10723         * expression.cs (MemberAccess.ResolveMemberAccess):
10724         Exit with non-zero status after Report.Error.
10725         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
10726         Likewise.
10727         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
10728
10729 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10730
10731         * support.cs: Don't hang when the file is empty.
10732
10733 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10734
10735         * support.cs: In SeekableStreamReader, compute the preamble size of the
10736           underlying stream. Position changes should take into account that initial
10737           count of bytes.
10738
10739 2004-05-03  Todd Berman  <tberman@sevenl.net>
10740
10741         * driver.cs: remove unused GetSysVersion function.
10742
10743 2004-05-03  Todd Berman  <tberman@sevenl.net>
10744
10745         * driver.cs: Remove the hack from saturday, as well as the hack
10746         from jackson (LoadAssemblyFromGac), also adds the CWD to the
10747         link_paths to get that bit proper.
10748
10749 2004-05-01  Todd Berman  <tberman@sevenl.net>
10750
10751         * driver.cs: Try a LoadFrom before a Load, this checks the current
10752         path. This is currently a bug in mono that is be fixed, however, this
10753         provides a workaround for now. This will be removed when the bug
10754         is fixed.
10755
10756 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
10757
10758         * CryptoConvert.cs: Updated to latest version. Fix issue with 
10759         incomplete key pairs (#57941).
10760
10761 2004-05-01  Todd Berman  <tberman@sevenl.net>
10762
10763         * driver.cs: Remove '.' from path_chars, now System.* loads properly
10764         from the GAC
10765
10766 2004-04-30  Jackson Harper  <jackson@ximian.com>
10767
10768         * codegen.cs: Open keys readonly.
10769         
10770 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10771
10772         * typemanager.cs: don't report cyclic struct layout when a struct
10773         contains 2 or more fields of the same type. Failed for Pango.AttrShape
10774         which has 2 Pango.Rectangle fields.
10775
10776 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
10777
10778         * expression.cs: Handle IntPtr comparisons with IL code
10779         rather than a method call.
10780
10781 2004-04-29  Martin Baulig  <martin@ximian.com>
10782
10783         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
10784         the list of PropertyInfo's in class hierarchy and find the
10785         accessor.  Fixes #56013.
10786
10787 2004-04-29  Martin Baulig  <martin@ximian.com>
10788
10789         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
10790
10791 2004-04-29  Martin Baulig  <martin@ximian.com>
10792
10793         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
10794
10795         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
10796
10797 2004-04-29  Martin Baulig  <martin@ximian.com>
10798
10799         * class.cs (ConstructorInitializer.Resolve): Check whether the
10800         parent .ctor is accessible.  Fixes #52146.
10801
10802 2004-04-29  Martin Baulig  <martin@ximian.com>
10803
10804         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
10805
10806         * statement.cs (Using.EmitLocalVariableDecls): Use
10807         TypeManager.idisposable_type, not typeof (IDisposable).
10808         (Foreach.EmitCollectionForeach): Added support for valuetypes.
10809
10810 2004-04-29  Martin Baulig  <martin@ximian.com>
10811
10812         * class.cs (Event.Define): Don't emit the field and don't set
10813         RTSpecialName and SpecialName for events on interfaces.  Fixes
10814         #57703. 
10815
10816 2004-04-29  Raja R Harinath  <rharinath@novell.com>
10817
10818         Refactor Attribute.ApplyAttributes.
10819         * attribute.cs (Attributable): New base class for objects that can
10820         have Attributes applied on them.
10821         (Attribute): Make AttributeUsage fields public.
10822         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
10823         (Attribute.IsInternalCall): New property.
10824         (Attribute.UsageAttr): Convert to a public read-only property.
10825         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
10826         (Attribute.ResolveType, Attribute.Resolve)
10827         (Attribute.ScanForIndexerName): Update to reflect changes.
10828         (Attribute.CheckAttributeTarget): Re-format.
10829         (Attribute.ApplyAttributes): Refactor, to various
10830         Attributable.ApplyAttributeBuilder methods.
10831         * decl.cs (MemberCore): Make Attributable.
10832         * class.cs (Accessor): Make Attributable.
10833         (MethodData.ApplyAttributes): Use proper attribute types, not
10834         attribute names.
10835         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
10836         (TypeContainer.ApplyAttributeBuilder)
10837         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
10838         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
10839         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
10840         (Operator.ApplyAttributeBuilder): New factored-out methods.
10841         * const.cs (Const.ApplyAttributeBuilder): Likewise.
10842         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
10843         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
10844         * parameter.cs (ParameterBase): New Attributable base class
10845         that can also represent Return types.
10846         (Parameter): Update to the changes.
10847
10848 2004-04-29  Jackson Harper  <jackson@ximian.com>
10849
10850         * driver.cs: Prefer the corlib system version when looking for
10851         assemblies in the GAC. This is still a hack, but its a better hack
10852         now.
10853         
10854 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
10855
10856         * decl.cs, enum.cs: Improved error 3005 reporting.
10857   
10858         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
10859         (related_symbols): New private member for list of symbols
10860         related to reported error/warning.
10861         
10862         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
10863
10864 2004-04-29  Martin Baulig  <martin@ximian.com>
10865
10866         * ecore.cs (Expression.Constantify): If we're an enum and
10867         TypeManager.TypeToCoreType() doesn't give us another type, use
10868         t.UnderlyingSystemType.  Fixes #56178.  
10869
10870 2004-04-29  Martin Baulig  <martin@ximian.com>
10871
10872         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
10873         interfaces and for each interface, only add members directly
10874         declared in that interface.  Fixes #53255.
10875
10876 2004-04-28  Martin Baulig  <martin@ximian.com>
10877
10878         * expression.cs (ConditionalLogicalOperator): Use a temporary
10879         variable for `left' to avoid that we evaluate it more than once;
10880         bug #52588.
10881
10882 2004-04-28  Martin Baulig  <martin@ximian.com>
10883
10884         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
10885         `void[]' (CS1547).
10886
10887 2004-04-28  Martin Baulig  <martin@ximian.com>
10888
10889         * statement.cs (LocalInfo.Resolve): Check whether the type is not
10890         void (CS1547).
10891
10892         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
10893         whether the type is not void (CS1547).
10894
10895 2004-04-28  Martin Baulig  <martin@ximian.com>
10896
10897         * expression.cs (Unary.DoResolveLValue): Override this and report
10898         CS0131 for anything but Operator.Indirection.
10899
10900 2004-04-28  Martin Baulig  <martin@ximian.com>
10901
10902         Committing a patch from Ben Maurer; see bug #50820.
10903
10904         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
10905         check for classes.
10906
10907         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
10908         classes.        
10909
10910 2004-04-28  Martin Baulig  <martin@ximian.com>
10911
10912         Committing a patch from Ben Maurer; see bug #50820.
10913
10914         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
10915         check for classes.
10916
10917         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
10918         classes.        
10919
10920 2004-04-28  Martin Baulig  <martin@ximian.com>
10921
10922         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
10923         (Block.AddLabel): Call DoLookupLabel() to only search in the
10924         current block.
10925
10926 2004-04-28  Martin Baulig  <martin@ximian.com>
10927
10928         * cfold.cs (ConstantFold.BinaryFold): Added special support for
10929         comparing StringConstants and NullLiterals in Equality and Inequality.
10930
10931 2004-04-28  Jackson Harper  <jackson@ximian.com>
10932
10933         * driver.cs: Attempt to load referenced assemblies from the
10934         GAC. This is the quick and dirty version of this method that
10935         doesnt take into account versions and just takes the first
10936         canidate found. Will be good enough for now as we will not have more
10937         then one version installed into the GAC until I update this method.
10938
10939 2004-04-28  Martin Baulig  <martin@ximian.com>
10940
10941         * typemanager.cs (TypeManager.CheckStructCycles): New public
10942         static method to check for cycles in the struct layout.
10943
10944         * rootcontext.cs (RootContext.PopulateTypes): Call
10945         TypeManager.CheckStructCycles() for each TypeContainer.
10946         [Note: We only need to visit each type once.]
10947
10948 2004-04-28  Martin Baulig  <martin@ximian.com>
10949
10950         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
10951
10952         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
10953         success and added `out object value'.  Use a `bool resolved' field
10954         to check whether we've already been called rather than
10955         `ConstantValue != null' since this breaks for NullLiterals.
10956
10957 2004-04-28  Raja R Harinath  <rharinath@novell.com>
10958
10959         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
10960         setting of this flag, since the 'set' method may be non-public.
10961
10962 2004-04-28  Raja R Harinath  <rharinath@novell.com>
10963
10964         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
10965         check on current_vector.Block.
10966
10967 2004-04-27  Martin Baulig  <martin@ximian.com>
10968
10969         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
10970         a field initializer.  Fixes #56459.
10971
10972 2004-04-27  Martin Baulig  <martin@ximian.com>
10973
10974         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
10975         we're not attempting to use an indexer.  Fixes #52154.
10976
10977 2004-04-27  Martin Baulig  <martin@ximian.com>
10978
10979         * statement.cs (Return): Don't create a return label if we don't
10980         need it; reverts my change from January 20th.  Thanks to Ben
10981         Maurer for this.
10982
10983 2004-04-27  Martin Baulig  <martin@ximian.com>
10984
10985         According to the spec, `goto' can only leave a nested scope, but
10986         never enter it.
10987
10988         * statement.cs (Block.LookupLabel): Only lookup in the current
10989         block, don't recurse into parent or child blocks.
10990         (Block.AddLabel): Check in parent and child blocks, report
10991         CS0140/CS0158 if we find a duplicate.
10992         (Block): Removed this indexer for label lookups.
10993         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
10994         this already does the error reporting for us.
10995
10996         * flowanalysis.cs
10997         (FlowBranching.UsageVector.Block): New public variable; may be null.
10998         (FlowBranching.CreateSibling): Added `Block' argument.
10999         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11000         label for the target of a `goto' and check whether we're not
11001         leaving a `finally'.
11002
11003 2004-04-27  Martin Baulig  <martin@ximian.com>
11004
11005         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11006         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11007         just for returns).
11008
11009 2004-04-27  Martin Baulig  <martin@ximian.com>
11010
11011         * statement.cs (Block.AddLabel): Also check for implicit blocks
11012         and added a CS0158 check.
11013
11014 2004-04-27  Martin Baulig  <martin@ximian.com>
11015
11016         * flowanalysis.cs (FlowBranchingLoop): New class.
11017         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11018         UsageVector's instead of an ArrayList.
11019         (FlowBranching.Label): Likewise.
11020         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11021         (FlowBranching.AddBreakVector): New method.
11022
11023 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11024
11025         * attribute.cs: Small regression fix: only convert the type if we
11026         the type is different, fixes System.Drawing build.
11027
11028 2004-04-27  Martin Baulig  <martin@ximian.com>
11029
11030         * attribute.cs (Attribute.Resolve): If we have a constant value
11031         for a named field or property, implicity convert it to the correct
11032         type.
11033
11034 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11035
11036         * statement.cs (Block.Block): Implicit blocks share
11037         'child_variable_names' fields with parent blocks.
11038         (Block.AddChildVariableNames): Remove.
11039         (Block.AddVariable): Mark variable as "used by a child block" in
11040         every surrounding block.
11041         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11042         been used in a child block, complain about violation of "Invariant
11043         meaning in blocks" rule.
11044         * cs-parser.jay (declare_local_variables): Don't use
11045         AddChildVariableNames.
11046         (foreach_statement): Don't create an implicit block: 'foreach'
11047         introduces a scope.
11048
11049 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11050
11051         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11052         converting from 0L to ulong.  Fixes 57522.
11053
11054 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11055
11056         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11057         derived class hides via 'new' keyword field from base class (test-242.cs).
11058         TODO: Handle this in the more general way.
11059         
11060         * class.cs (CheckBase): Ditto.
11061
11062 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11063
11064         * decl.cs (caching_flags): New member for storing cached values
11065         as bit flags.
11066         (MemberCore.Flags): New enum where bit flags for caching_flags
11067         are defined.
11068         (MemberCore.cls_compliance): Moved to caching_flags.
11069         (DeclSpace.Created): Moved to caching_flags.
11070
11071         * class.cs: Use caching_flags instead of DeclSpace.Created
11072         
11073 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11074
11075         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11076         if we are only a derived class, not a nested class.
11077
11078         * typemanager.cs: Same as above, but do this at the MemberLookup
11079         level (used by field and methods, properties are handled in
11080         PropertyExpr).   Allow for the qualified access if we are a nested
11081         method. 
11082
11083 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11084
11085         * class.cs: Refactoring.
11086         (IMethodData): New inteface; Holds links to parent members
11087         to avoid member duplication (reduced memory allocation).
11088         (Method): Implemented IMethodData interface.
11089         (PropertyBase): New inner classes for get/set methods.
11090         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11091         (Event): New inner classes for add/remove methods.
11092         (Event.DelegateMethod): Implemented IMethodData interface.
11093
11094         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11095         EmitContext (related to class.cs refactoring).
11096
11097 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11098
11099         * delegate.cs (Delegate.VerifyApplicability): If the number of
11100         arguments are the same as the number of parameters, first try to
11101         verify applicability ignoring  any 'params' modifier on the last
11102         parameter.
11103         Fixes #56442.
11104
11105 2004-04-08  Martin Baulig  <martin@ximian.com>
11106
11107         Merged latest changes into gmcs.  Please keep this comment in
11108         here, it makes it easier for me to see what changed in MCS since
11109         the last time I merged.
11110
11111 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11112
11113         * class.cs (TypeContainer.AddIndexer): Use
11114         'ExplicitInterfaceName' to determine if interface name was
11115         explicitly specified.  'InterfaceType' is not initialized at this time.
11116         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11117         Indexers array is already in the required order.  Initialize
11118         'IndexerName' only if there are normal indexers.
11119         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11120         (TypeContainer.Emit): Emit DefaultMember attribute only if
11121         IndexerName is initialized.
11122         Fixes #56300.
11123
11124 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11125
11126         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11127         Fixes #57007
11128
11129 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11130
11131         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11132         attributes.
11133         Fix for #56456.
11134
11135         * attribute.cs (Attribute.Resolve): Check for duplicate named
11136         attributes.
11137         Fix for #56463.
11138
11139 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11140
11141         * iterators.cs (MarkYield): track whether we are in an exception,
11142         and generate code accordingly.  Use a temporary value to store the
11143         result for our state.
11144
11145         I had ignored a bit the interaction of try/catch with iterators
11146         since their behavior was not entirely obvious, but now it is
11147         possible to verify that our behavior is the same as MS .NET 2.0
11148
11149         Fixes 54814
11150
11151 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11152
11153         * iterators.cs: Avoid creating temporaries if there is no work to
11154         do. 
11155
11156         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11157         Enumerations, use TypeManager.EnumToUnderlying and call
11158         recursively. 
11159
11160         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11161         bug #57013
11162
11163         (This.Emit): Use EmitContext.EmitThis to emit our
11164         instance variable.
11165
11166         (This.EmitAssign): Ditto.
11167
11168         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11169         codepaths, we will move all the functionality into
11170         Mono.CSharp.This 
11171
11172         (FieldExpr.EmitAssign): Ditto.
11173
11174         This fixes several hidden bugs that I uncovered while doing a code
11175         review of this today.
11176
11177         * codegen.cs (EmitThis): reworked so the semantics are more clear
11178         and also support value types "this" instances.
11179
11180         * iterators.cs: Changed so that for iterators in value types, we
11181         do not pass the value type as a parameter.  
11182
11183         Initialization of the enumerator helpers is now done in the caller
11184         instead of passing the parameters to the constructors and having
11185         the constructor set the fields.
11186
11187         The fields have now `assembly' visibility instead of private.
11188
11189 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11190
11191         * expression.cs (Argument.Resolve): Check if fields passed as ref
11192         or out are contained in a MarshalByRefObject.
11193
11194         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11195         another compiler type.
11196
11197 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11198
11199         * class.cs (Indexer.Define): use the new name checking method.
11200         Also, return false on an error.
11201         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11202         (is_identifier_[start/part]_character): make static.
11203
11204 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11205
11206         * expression.cs (Binary.ResolveOperator): Do no append strings
11207         twice: since we can be invoked more than once (array evaluation)
11208         on the same concatenation, take care of this here.  Based on a fix
11209         from Ben (bug #56454)
11210
11211 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11212
11213         * codegen.cs: Fix another case where CS1548 must be reported (when 
11214         delay-sign isn't specified and no private is available #56564). Fix
11215         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11216         error when MCS is used on the MS runtime and we need to delay-sign 
11217         (which seems unsupported by AssemblyBuilder - see #56621).
11218
11219 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11220
11221         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11222         (TypeManager.ComputeNamespaces): Faster implementation for
11223         Microsoft runtime.
11224
11225         * compiler.csproj: Updated AssemblyName to mcs.
11226
11227 2004-05-11  Jackson Harper  <jackson@ximian.com>
11228
11229         * Makefile: Preserve MONO_PATH
11230         
11231 2004-05-11  Jackson Harper  <jackson@ximian.com>
11232
11233         * Makefile: Use mono and mcs to build gmcs
11234         
11235 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11236
11237         * codegen.cs: Add patch from Robert Shade
11238         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11239         sync with mcs.
11240
11241 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11242
11243         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11244         incomplete key pairs (#57941).
11245
11246 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11247
11248         * codegen.cs: Fix another case where CS1548 must be reported (when 
11249         delay-sign isn't specified and no private is available #56564). Fix
11250         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11251         error when MCS is used on the MS runtime and we need to delay-sign 
11252         (which seems unsupported by AssemblyBuilder - see #56621).
11253
11254 2004-04-29  Jackson Harper  <jackson@ximian.com>
11255
11256         * Makefile: Set MONO_PATH to use the bootstrap corlib
11257         * driver.cs: Check the GAC for referenced assemblies.
11258                 
11259 2004-04-29  Martin Baulig  <martin@ximian.com>
11260
11261         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11262
11263 2004-04-07  Martin Baulig  <martin@ximian.com>
11264
11265         * expression.cs (Binary.ResolveOperator): Added special case for
11266         Equality/Inequality between a type parameter and a null literal.
11267
11268 2004-04-07  Martin Baulig  <martin@ximian.com>
11269
11270         * convert.cs: Check null literal -> type parameter conversions.
11271
11272 2004-04-07  Martin Baulig  <martin@ximian.com>
11273
11274         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11275         `class' and `struct' constraints.
11276
11277 2004-04-07  Martin Baulig  <martin@ximian.com>
11278
11279         * generic.cs (SpecialConstraint): New public enum.
11280         (Constraints.Resolve): Added support for the `class' and `struct'
11281         constraints.
11282
11283         * cs-parser.jay (type_parameter_constraint): Added support for the
11284         `class' and `struct' constraints.
11285
11286 2004-04-07  Martin Baulig  <martin@ximian.com>
11287
11288         * support.cs (GenericConstraints): Replaced `Types' by
11289         `ClassConstraint' and `InterfaceConstraints'; added
11290         `HasClassConstraint'.   
11291
11292 2004-04-07  Martin Baulig  <martin@ximian.com>
11293
11294         * generic.cs
11295         (Constraints.InterfaceConstraints): New public property.
11296         (Constraints.Types): Make this property public
11297         (TypeParameter): Implement IMemberContainer.
11298         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11299         instead of a TypeBuilder/MethodBuilder; pass the interface
11300         constraints to TypeManager.AddTypeParameter().
11301         (TypeParameter.DefineType): Just take an EmitContext and no
11302         TypeBuilder/MethodBuilder.  Use the new public API.
11303
11304         * typemanager.cs (TypeManager.AddTypeParameter): Added
11305         `TypeExpr[]' argument; add the interfaces to the
11306         `builder_to_ifaces' hash.
11307         (TypeManager.LookupMemberContainer): For
11308         GenericTypeParameterBuilders, get the TypeParameter from the
11309         `builder_to_type_param'.
11310         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11311         the TypeParameter and call FindMembers on it.
11312
11313 2004-04-07  Martin Baulig  <martin@ximian.com>
11314
11315         * class.cs
11316         (MethodCore.GenericMethod): Moved this field here from Method.
11317         (MethodCore.IsDuplicateImplementation): Take the number of type
11318         parameters into account if we're a generic method.
11319
11320         * expression.cs (Invocation.InferTypeArguments): Don't return true
11321         if `arguments' is null; we still need to check whether we actually
11322         don't need to infer anything in this case.
11323         (MemberAccess): Merged the functionality from GenericMemberAccess
11324         into this class.
11325
11326         * generic.cs (GenericMemberAccess): Removed.
11327
11328 2004-04-05  Martin Baulig  <martin@ximian.com>
11329
11330         * decl.cs (MemberCore): For generic classes, interfaces and
11331         structs, `Name' now includes the number of type parameters
11332         ("Stack!1.Node!1").
11333         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11334         encode the number of type arguments in the type name.
11335
11336         * expression.cs (Expression.MemberLookup): Removed the
11337         `num_type_args' argument; we now encode the number of type
11338         arguments in the type name.
11339
11340         * ecore.cs (SimpleName): Encode the number of type arguments in
11341         the type name itself.
11342
11343         * generic.cs (ConstructedType): Likewise.
11344
11345         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11346         `MemberName'; we now include the number of type parameters in the
11347         type name.
11348
11349         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11350         (TypeManager.MemberLookup): Removed the
11351         `num_type_args' argument; we now encode the number of type
11352         arguments in the type name.     
11353
11354 2004-04-03  Martin Baulig  <martin@ximian.com>
11355
11356         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11357         (MemberCore.MemberName): Moved here from MemberBase.
11358         (DeclSpace.SetParameterInfo): Just take the constraints as an
11359         ArrayList; we already have the type parameters in our
11360         `MemberName'; also do the CS0080 reporting here.
11361
11362         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11363         `IDENTIFIER opt_type_parameter_list'; when constructing our
11364         `MemberName', it'll already include our type parameters.
11365         (class_declaration, interface_declaration): Likewise.
11366         (delegate_declaration): Likewise.
11367         (MakeName): Take a MemberName and return a MemberName.
11368         The following two changes are required to avoid shift/reduce conflicts:
11369         (member_name): Don't include a TypeName anymore; ie. this is now
11370         just 'IDENTIFIER opt_type_parameter_list'.
11371         (property_declaration, event_declaration): Use a
11372         `namespace_or_type_name' instead of a `member_name'.            
11373
11374 2004-04-03  Martin Baulig  <martin@ximian.com>
11375
11376         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11377         `MemberName' class.
11378         (TypeName): Formerly known as MemberName.
11379
11380         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11381         instead of a `MemberName'.
11382
11383         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11384         (member_name): New rule; create a MemberName.
11385
11386 2004-04-02  Martin Baulig  <martin@ximian.com>
11387
11388         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11389         (CS0305 and CS0308).
11390
11391 2004-04-02  Martin Baulig  <martin@ximian.com>
11392
11393         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11394         support for nested types.
11395
11396 2004-04-02  Martin Baulig  <martin@ximian.com>
11397
11398         * ecore.cs (IAlias): New public interface.
11399         (TypeExpr, TypeExpression): Implement IAlias.
11400         (TypeAliasExpression): New public class.
11401
11402         * namespace.cs (Namespace): Implement IAlias.
11403         (Namespace.Lookup): Return an IAlias instead on an object.
11404         (Namespace.DefineName): Take an IAlias instead of an object.
11405         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11406         an object.
11407         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11408         Expression.
11409         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11410         object.
11411         (NamespaceEntry.Lookup): Likewise.
11412
11413         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11414         instead of a Type.      
11415
11416         * decl.cs (DeclSpace): Implement IAlias.
11417         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11418
11419         * generic.cs (ConstructedType): Improved error checking.
11420
11421 2004-04-02  Martin Baulig  <martin@ximian.com>
11422
11423         * convert.cs: Added type parameter conversions.
11424
11425         * ecore.cs
11426         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11427         (ClassCast.Emit): If the source type is a type parameter, box it.
11428         If the target type is a type parameter, emit an `unbox.any'
11429         instead of a `classcast'.1      
11430
11431 2004-04-01  Martin Baulig  <martin@ximian.com>
11432
11433         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11434
11435 2004-04-01  Martin Baulig  <martin@ximian.com>
11436
11437         * generic.cs (ConstructedType.CheckConstraints): Use
11438         Convert.ImplicitStandardConversionExists(); user-defined implicit
11439         conversions are not allowed according to the spec.
11440
11441 2004-03-30  Martin Baulig  <martin@ximian.com>
11442
11443         * expression.cs (New): Added support for type parameters.
11444
11445         * typemanager.cs
11446         (TypeManager.activator_type): New public static field.
11447         (TypeManager.activator_create_instance): Likewise.
11448
11449 2004-03-30  Martin Baulig  <martin@ximian.com>
11450
11451         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11452         public method.
11453
11454 2004-03-30  Martin Baulig  <martin@ximian.com>
11455
11456         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11457         the spec here: the argument type must be convertible to the
11458         constraints.
11459
11460 2004-03-30  Martin Baulig  <martin@ximian.com>
11461
11462         * generic.cs
11463         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11464         TypeManager.AddTypeParameter().
11465         (ConstructedType.CheckConstraints): Re-enable this and actually
11466         check whether we have a constructor constraint.
11467
11468         * typemanager.cs
11469         (TypeManager.builder_to_type_param): New static field.
11470         (TypeManager.AddTypeParameter): New static method.
11471         (TypeManager.LookupTypeParameter): New public method.
11472
11473 2004-03-30  Martin Baulig  <martin@ximian.com>
11474
11475         * generic.cs (TypeParameter.DefineType): Return a boolean and use
11476         the new API to actually define the constructor constraint.
11477
11478         * typemanager.cs
11479         (TypeManager.new_constraint_attr_type): New static field.
11480         (TypeManager.InitCoreTypes): Initialize it.
11481
11482 2004-03-30  Martin Baulig  <martin@ximian.com>
11483
11484         * generic.cs (Constraints): Completed error checking, use correct
11485         error numbers.
11486
11487 2004-03-29  Martin Baulig  <martin@ximian.com>
11488
11489         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
11490
11491         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11492         public version which takes a `ParameterData pd' instead of an
11493         `ArrayList args'.
11494
11495 2004-03-29  Martin Baulig  <martin@ximian.com>
11496
11497         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
11498         not a MethodInfo.       
11499
11500 2004-03-29  Martin Baulig  <martin@ximian.com>
11501
11502         * expression.cs (Argument.ResolveMethodGroup): If we're a
11503         ConstructedType, call GetMemberAccess() on it.  
11504
11505 2004-03-29  Martin Baulig  <martin@ximian.com>
11506
11507         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
11508         (MethodCore.CheckGenericOverride): When overriding a generic
11509         method, check whether the constraints match.
11510
11511         * support.cs (GenericConstraints): New public interface.
11512         (ParameterData.GenericConstraints): New public method.
11513
11514         * parameter.cs (Parameter.Resolve): Check whether we're a generic
11515         method parameter and compute our constraints if appropriate.
11516         (Parameter.GenericConstraints): New public property.
11517
11518         * generic.cs (Constraints): Implement GenericConstraints.
11519
11520 2004-03-29  Martin Baulig  <martin@ximian.com>
11521
11522         * decl.cs (MemberCache.FindMemberToOverride): Use
11523         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
11524
11525 2004-03-29  Martin Baulig  <martin@ximian.com>
11526
11527         * generic.cs (GenericMethod.Define): Resolve our type parameters.
11528
11529 2004-03-29  Martin Baulig  <martin@ximian.com>
11530
11531         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
11532         not allowed on non-generic declarations").
11533
11534 2004-03-29  Martin Baulig  <martin@ximian.com>
11535
11536         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11537         public version of this method.
11538
11539         * class.cs (MethodCore.IsDuplicateImplementation): Use
11540         Invocation.InferTypeArguments() to check this.
11541
11542 2004-03-29  Martin Baulig  <martin@ximian.com>
11543
11544         * convert.cs: Use TypeManager.IsDelegateType() instead of
11545         comparing types correctly.
11546
11547 2004-03-29  Martin Baulig  <martin@ximian.com>
11548
11549         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
11550         types directly to make it work for generic instances.
11551
11552         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
11553
11554 2004-03-29  Martin Baulig  <martin@ximian.com>
11555
11556         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
11557         support for arrays.     
11558
11559 2004-03-24  Martin Baulig  <martin@ximian.com>
11560
11561         * decl.cs (DeclSpace.FindType): Also use
11562         TypeManager.CheckGeneric() for types from the using clauses.
11563
11564 2004-03-23  Martin Baulig  <martin@ximian.com>
11565
11566         * expression.cs (Invocation.OverloadResolve): Added `bool
11567         may_fail' argument and use it instead of the Location.IsNull() hack.
11568
11569 2004-03-23  Martin Baulig  <martin@ximian.com>
11570
11571         * expression.cs (Invocation.InferType): Use correct type inference
11572         rules here.     
11573
11574 2004-03-23  Martin Baulig  <martin@ximian.com>
11575
11576         * ecore.cs (MethodGroupExpr.Name): Use
11577         TypeManager.CSharpSignature() instead of just the name.
11578
11579         * expression.cs (Invocation.OverloadResolve): Provide better error
11580         reporting.
11581         (Invocation.DoResolve): OverloadResolve() never returns null
11582         without reporting an error, so removed the error -6 reporting here.
11583
11584 2004-03-23  Martin Baulig  <martin@ximian.com>
11585
11586         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
11587         generic methods.
11588
11589         * cs-parser.jay (delegate_declaration): Support generic delegates.
11590
11591         * delegate.cs: Support generic delegates.
11592
11593 2004-03-22  Martin Baulig  <martin@ximian.com>
11594
11595         * expression.cs (Invocation.InferParamsTypeArguments): New static
11596         method; does type inference for params arguments.
11597
11598 2004-03-21  Martin Baulig  <martin@ximian.com>
11599
11600         * typemanager.cs (TypeManager.IsGenericMethod): New public static
11601         method; checks whether a method is a generic method.    
11602
11603         * expression.cs (Invocation.InferTypeArguments): New static method;
11604         infer type arguments for generic method invocation.
11605
11606         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
11607         property; we set this to true if we're resolving a generic method
11608         invocation and the user specified type arguments, ie. we're not
11609         doing type inference.
11610
11611 2004-03-20  Martin Baulig  <martin@ximian.com>
11612
11613         * class.cs (MethodData.DeclaringType): New public property.
11614         (MethodData.Define): Set DeclaringType here.
11615         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
11616         instead of OperatorMethodBuilder.DeclaringType.
11617
11618 2004-03-20  Martin Baulig  <martin@ximian.com>
11619
11620         * cs-tokenizer.cs (xtoken): Return a special
11621         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
11622
11623         * cs-parser.jay (default_value_expression): Switch to the new
11624         syntax (14.5.13).
11625
11626 2004-03-19  Martin Baulig  <martin@ximian.com>
11627
11628         * decl.cs (MemberName): New class.  We use this to "construct"
11629         namespace_or_type_name's.
11630
11631         * generics.cs (TypeArguments.GetDeclarations): New public method;
11632         returns the type arguments as a string[] and reports a CS0081 if
11633         one of them is not an identifier.
11634
11635         * class.cs (MemberBase): The .ctor now takes the name as a
11636         MemberName instead of a string.
11637         (MemberBase.ExplicitInterfaceName): Changed type from string to
11638         Expression.
11639         (MemberBase.DoDefine): If we're an explicit implementation, the
11640         InterfaceType may be a generic instance.
11641
11642         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
11643         (namespace_name): Call MemberName.GetName () to transform the
11644         MemberName into a string and ensure we don't have any type
11645         arguments.
11646         (type_name): Call MemberName.GetTypeExpression() to transfrom the
11647         MemberName into an expression.
11648         (method_header): Use namespace_or_type_name instead of member_name.     
11649
11650 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
11651
11652         * rootcontext.cs: Add new types to the boot resolution.
11653
11654         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
11655         MulticastDelegate is not allowed.
11656
11657         * typemanager.cs: Add new types to lookup: System.TypedReference
11658         and ArgIterator.
11659
11660         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
11661         check for TypedReference or ArgIterator, they are not allowed. 
11662
11663         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
11664         makes us properly catch 1510 in some conditions (see bug 56016 for
11665         details). 
11666
11667 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
11668
11669         * CryptoConvert.cs: update from corlib version
11670         with endian fixes.
11671
11672 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
11673
11674         * class.cs (Indexer.Define): Check indexername declaration
11675
11676 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
11677
11678         * attribute.cs (IsClsCompliant): Fixed problem with handling
11679         all three states (compliant, not-compliant, undetected).
11680
11681 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
11682
11683         * attribute.cs (Attribute): Location is now public.
11684         (Resolve): Store resolved arguments (pos_values) in attribute class.
11685         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
11686         (GetClsCompliantAttributeValue): New method that gets
11687         CLSCompliantAttribute value.
11688         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
11689         if exists else null.
11690         (AttributeTester): New class for CLS-Compliant verification routines.
11691
11692         * class.cs (Emit): Add CLS-Compliant verification.
11693         (Method.GetSignatureForError): Implemented.
11694         (Constructor.GetSignatureForError): Implemented
11695         (Constructor.HasCompliantArgs): Returns if constructor has
11696         CLS-Compliant arguments.
11697         (Constructor.Emit): Override.
11698         (Construcor.IsIdentifierClsCompliant): New method; For constructors
11699         is needed to test only parameters.
11700         (FieldBase.GetSignatureForError): Implemented.
11701         (TypeContainer): New member for storing base interfaces.
11702         (TypeContainer.FindMembers): Search in base interfaces too.
11703
11704         * codegen.cs (GetClsComplianceAttribute): New method that gets
11705         assembly or module CLSCompliantAttribute value.
11706         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
11707         for assembly.
11708         (ModuleClass.Emit): Add error 3012 test.
11709
11710         * const.cs (Emit): Override and call base for CLS-Compliant tests.
11711
11712         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
11713         state for all decl types.
11714         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
11715         if CLS-Compliant tests are required.
11716         (IsClsCompliaceRequired): New method. Analyze whether code
11717         must be CLS-Compliant.
11718         (IsExposedFromAssembly): New method. Returns true when MemberCore
11719         is exposed from assembly.
11720         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
11721         value or gets cached value.
11722         (HasClsCompliantAttribute): New method. Returns true if MemberCore
11723         is explicitly marked with CLSCompliantAttribute.
11724         (IsIdentifierClsCompliant): New abstract method. This method is
11725         used to testing error 3005.
11726         (IsIdentifierAndParamClsCompliant): New method. Common helper method
11727         for identifier and parameters CLS-Compliant testing.
11728         (VerifyClsCompliance): New method. The main virtual method for
11729         CLS-Compliant verifications.
11730         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
11731         null. I don't know why is null (too many public members !).
11732         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
11733         and get value of first CLSCompliantAttribute that found.
11734
11735         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
11736         (VerifyClsCompliance): Override and add extra tests.
11737
11738         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
11739         clscheck- disable CLS-Compliant verification event if assembly is has
11740         CLSCompliantAttribute(true).
11741
11742         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
11743         ApllyAttribute is now called in emit section as in the other cases.
11744         Possible future Emit integration.
11745         (IsIdentifierClsCompliant): New override.
11746         (VerifyClsCompliance): New override.
11747         (GetEnumeratorName): Returns full enum name.
11748
11749         * parameter.cs (GetSignatureForError): Implemented.
11750
11751         * report.cs (WarningData): New struct for Warning message information.
11752         (LocationOfPreviousError): New method.
11753         (Warning): New method. Reports warning based on the warning table.
11754         (Error_T): New method. Reports error based on the error table.
11755
11756         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
11757         verifications are done here.
11758
11759         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
11760
11761         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
11762         CLSCompliantAttribute.
11763         (all_imported_types): New member holds all imported types from other
11764         assemblies.
11765         (LoadAllImportedTypes): New method fills static table with exported types
11766         from all referenced assemblies.
11767         (Modules): New property returns all assembly modules.
11768
11769 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
11770
11771         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
11772         throwing a parser error.
11773
11774         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
11775         which removes the hardcoded get_/set_ prefixes for properties, as
11776         IL allows for the properties to be named something else.  
11777
11778         Bug #56013
11779
11780         * expression.cs: Do not override operand before we know if it is
11781         non-null.  Fix 56207
11782
11783 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11784
11785         * typemanager.cs: support for pinned variables.
11786
11787 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11788
11789         * decl.cs, typemanager.cs: Avoid using an arraylist
11790         as a buffer if there is only one result set.
11791
11792 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11793
11794         * expression.cs: Make sure you cant call a static method
11795         with an instance expression, bug #56174.
11796
11797 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
11798
11799         * class.cs (IsDuplicateImplementation): Improve error reporting to
11800         flag 663 (method only differs in parameter modifier).
11801
11802         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
11803         in preprocessor directives.
11804
11805         * location.cs (LookupFile): Allow for the empty path.
11806
11807         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
11808         better approach for some of that patch, but its failing with the
11809         CharSet enumeration.  For now try/catch will do.
11810
11811         * typemanager.cs: Do not crash if a struct does not have fields.
11812         Fixes 56150.
11813
11814 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
11815
11816         * expression.cs: cs0213, cant fix a fixed expression.
11817         fixes 50231.
11818
11819 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
11820
11821         * cs-parser.jay: detect invalid embeded statements gracefully.
11822         bug #51113.
11823
11824 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
11825
11826         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
11827         As a regex:
11828         s/
11829         the invocation type may not be a subclass of the tye of the item/
11830         The type of the item must be a subclass of the invocation item.
11831         /g
11832
11833         Fixes bug #50820.
11834
11835 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
11836
11837         * attribute.cs: Added methods to get a string and a bool from an
11838         attribute. Required to information from AssemblyKeyFileAttribute,
11839         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
11840         * codegen.cs: Modified AssemblyName creation to include support for
11841         strongnames. Catch additional exceptions to report them as CS1548.
11842         * compiler.csproj: Updated include CryptoConvert.cs.
11843         * compiler.csproj.user: Removed file - user specific configuration.
11844         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
11845         Mono.Security assembly. The original class is maintained and tested in
11846         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
11847         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
11848         like CSC 8.0 (C# v2) supports.
11849         * Makefile: Added CryptoConvert.cs to mcs sources.
11850         * rootcontext.cs: Added new options for strongnames.
11851
11852 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
11853
11854         * driver.cs: For --expect-error, report error code `2'
11855         if the program compiled with no errors, error code `1' if
11856         it compiled with an error other than the one expected.
11857
11858 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
11859
11860         * compiler.csproj: Updated for Visual Studio .NET 2003.
11861         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
11862         * compiler.sln: Updated for Visual Studio .NET 2003.
11863
11864 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
11865
11866         * expression.cs: Fix bug #47234. We basically need to apply the
11867         rule that we prefer the conversion of null to a reference type
11868         when faced with a conversion to 'object' (csc behaviour).
11869
11870 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11871
11872         * statement.cs: Shorter form for foreach, eliminates
11873         a local variable. r=Martin.
11874
11875 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11876
11877         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
11878         checks if we can use brtrue/brfalse to test for 0.
11879         * expression.cs: use the above in the test for using brtrue/brfalse.
11880         cleanup code a bit.
11881
11882 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11883
11884         * expression.cs: Rewrite string concat stuff. Benefits:
11885
11886         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
11887         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
11888         rather than a concat chain.
11889
11890         * typemanager.cs: Add lookups for more concat overloads.
11891
11892 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
11893
11894         * expression.cs: Emit shorter il code for array init.
11895
11896         newarr
11897         dup
11898         // set 1
11899
11900         // set 2
11901
11902         newarr
11903         stloc.x
11904
11905         ldloc.x
11906         // set 1
11907
11908         ldloc.x
11909         // set 2
11910
11911 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
11912
11913         * statement.cs: Before, two switch blocks would be merged if the
11914         total size of the blocks (end_item - begin_item + 1) was less than
11915         two times the combined sizes of the blocks.
11916
11917         Now, it will only merge if after the merge at least half of the
11918         slots are filled.
11919
11920         fixes 55885.
11921
11922 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
11923
11924         * class.cs : csc build fix for GetMethods(). See bug #52503.
11925
11926 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
11927
11928         * expression.cs: Make sure fp comparisons work with NaN.
11929         This fixes bug #54303. Mig approved this patch a long
11930         time ago, but we were not able to test b/c the runtime
11931         had a related bug.
11932
11933 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
11934
11935         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
11936
11937 2004-03-19  Martin Baulig  <martin@ximian.com>
11938
11939         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
11940         two overloads may unify for some type parameter substitutions and
11941         report a CS0408 if appropriate.
11942
11943 2004-03-19  Martin Baulig  <martin@ximian.com>
11944
11945         * class.cs (MemberCore.IsDuplicateImplementation): Report the
11946         error here and not in our caller.
11947
11948 2004-03-19  Martin Baulig  <martin@ximian.com>
11949
11950         * interface.cs: Completely killed this file.
11951         (Interface): We're now a TypeContainer and live in class.cs.
11952
11953         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
11954         argument; we're now also called for interfaces.
11955         (TypeContainer.DefineMembers): Allow this method being called
11956         multiple times.
11957         (TypeContainer.GetMethods): New public method; formerly known as
11958         Interface.GetMethod().  This is used by PendingImplementation.
11959         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
11960         it's now private and non-static.
11961         (Interface): Moved this here; it's now implemented similar to
11962         Class and Struct.
11963         (Method, Property, Event, Indexer): Added `bool is_interface'
11964         argument to their .ctor's.
11965         (MemberBase.IsInterface): New public field.
11966
11967         * cs-parser.jay: Create normal Method, Property, Event, Indexer
11968         instances instead of InterfaceMethod, InterfaceProperty, etc.
11969         (opt_interface_base): Removed; we now use `opt_class_base' instead.
11970         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
11971
11972 2004-03-19  Martin Baulig  <martin@ximian.com>
11973
11974         * class.cs (MethodCore.IsDuplicateImplementation): New private
11975         method which does the CS0111 checking.
11976         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
11977         Use IsDuplicateImplementation().
11978
11979 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
11980
11981         * decl.cs (FindMemberToOverride): New method to find the correct
11982         method or property to override in the base class.
11983         * class.cs
11984             - Make Method/Property use the above method to find the
11985               version in the base class.
11986             - Remove the InheritableMemberSignatureCompare as it is now
11987               dead code.
11988
11989         This patch makes large code bases much faster to compile, as it is
11990         O(n) rather than O(n^2) to do this validation.
11991
11992         Also, it fixes bug 52458 which is that nested classes are not
11993         taken into account when finding the base class member.
11994
11995         Reviewed/Approved by Martin.
11996
11997 2004-03-17  Martin Baulig  <martin@ximian.com>
11998
11999         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12000         of type arguments into account; use the `real_num_type_args'
12001         approach like in DoResolveAsTypeStep().
12002
12003         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12004         nested types.
12005
12006 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12007
12008         * interface.cs: In all interface classes removed redundant
12009         member initialization.
12010
12011 2004-03-16  Martin Baulig  <martin@ximian.com>
12012
12013         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12014
12015 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12016
12017         * decl.cs (DefineTypeAndParents): New helper method to define a
12018         type's containers before the type itself is defined;  This is a
12019         bug exposed by the recent changes to Windows.Forms when an
12020         implemented interface was defined inside a class that had not been
12021         built yet.   
12022
12023         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12024
12025         (Check): Loop correctly to report errors modifiers
12026         (UNSAFE was not in the loop, since it was the same as TOP).
12027
12028         * interface.cs: Every interface member now takes a ModFlags,
12029         instead of a "is_new" bool, which we set on the base MemberCore. 
12030
12031         Every place where we called "UnsafeOk" in the interface, now we
12032         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12033         the unsafe settings from the member declaration instead of the
12034         container interface. 
12035
12036         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12037
12038         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12039         `set_indexer_name' to the pending bits (one per type).
12040
12041         We fixed a bug today that was picking the wrong method to
12042         override, since for properties the existing InterfaceMethod code
12043         basically ignored the method name.  Now we make sure that the
12044         method name is one of the valid indexer names.
12045
12046 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12047  
12048         * support.cs (SeekableStreamReader): Keep track of stream byte
12049         positions and don't mix them with character offsets to the buffer.
12050
12051         Patch from Gustavo Giráldez
12052
12053 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12054
12055         * interface.cs (InterfaceSetGetBase): Removed double member
12056         initialization, base class does it as well.
12057
12058 2004-03-13  Martin Baulig  <martin@ximian.com>
12059
12060         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12061         when compiling corlib.
12062
12063 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12064
12065         * convert.cs (ExplicitConversion): We were reporting an error on
12066         certain conversions (object_type source to a value type, when the
12067         expression was `null') before we had a chance to pass it through
12068         the user defined conversions.
12069
12070         * driver.cs: Replace / and \ in resource specifications to dots.
12071         Fixes 50752
12072
12073         * class.cs: Add check for duplicate operators.  Fixes 52477
12074
12075 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12076
12077         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12078         that are in the middle of the statements, not only at the end.
12079         Fixes #54987
12080
12081         * class.cs (TypeContainer.AddField): No longer set the
12082         `HaveStaticConstructor' flag, now we call it
12083         `UserDefineStaticConstructor' to diferentiate the slightly
12084         semantic difference.
12085
12086         The situation is that we were not adding BeforeFieldInit (from
12087         Modifiers.TypeAttr) to classes that could have it.
12088         BeforeFieldInit should be set to classes that have no static
12089         constructor. 
12090
12091         See:
12092
12093         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12094
12095         And most importantly Zoltan's comment:
12096
12097         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12098
12099         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12100          before its static fields are used', i.e. initialization does not need
12101          to be triggered by the first access to the type. Setting this flag
12102          helps the JIT to compile better code, since it can run the static
12103          constructor at JIT time, and does not need to generate code to call it
12104          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12105          this flag for lots of classes like String. 
12106          
12107          csc sets this flag if the type does not have an explicit static 
12108          constructor. The reasoning seems to be that if there are only static
12109          initalizers for a type, and no static constructor, then the programmer
12110          does not care when this initialization happens, so beforefieldinit
12111          can be used.
12112          
12113          This bug prevents the AOT compiler from being usable, since it 
12114          generates so many calls to mono_runtime_class_init that the AOT code
12115          is much slower than the JITted code. The JITted code is faster, 
12116          because it does not generate these calls if the vtable is type is
12117          already initialized, which is true in the majority of cases. But the
12118          AOT compiler can't do this."
12119
12120 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12121
12122         * class.cs (MethodData.Emit): Refactor the code so symbolic
12123         information is generated for destructors;  For some reasons we
12124         were taking a code path that did not generate symbolic information
12125         before. 
12126
12127 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12128
12129         * class.cs: Create a Constructor.CheckBase method that
12130         takes care of all validation type code. The method
12131         contains some code that was moved from Define.
12132
12133         It also includes new code that checks for duplicate ctors.
12134         This fixes bug #55148.
12135
12136 2004-03-09  Joshua Tauberer <tauberer@for.net>
12137
12138         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12139         a { ... }-style array creation invokes EmitStaticInitializers
12140         which is not good for reference-type arrays.  String, decimal
12141         and now null constants (NullCast) are not counted toward
12142         static initializers.
12143
12144 2004-03-05  Martin Baulig  <martin@ximian.com>
12145
12146         * location.cs (SourceFile.HasLineDirective): New public field;
12147         specifies whether the file contains or is referenced by a "#line"
12148         directive.
12149         (Location.DefineSymbolDocuments): Ignore source files which
12150         either contain or are referenced by a "#line" directive.        
12151
12152 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12153
12154         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12155         direct access to our parent, so check the method inline there.
12156
12157 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12158
12159         * expression.cs (Invocation.EmitCall): Miguel's last commit
12160         caused a regression. If you had:
12161
12162             T t = null;
12163             t.Foo ();
12164
12165         In Foo the implict this would be null.
12166
12167 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12168
12169         * expression.cs (Invocation.EmitCall): If the method is not
12170         virtual, do not emit a CallVirt to it, use Call.
12171
12172         * typemanager.cs (GetFullNameSignature): Improve the method to
12173         cope with ".ctor" and replace it with the type name.
12174
12175         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12176         as an argument the ConstructorBuilder where it is being defined,
12177         to catch the recursive constructor invocations.
12178
12179 2004-03-16  Martin Baulig  <martin@ximian.com>
12180
12181         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12182         ConstructedType, call ResolveType() on it to get the type rather
12183         than just using `expr.Type'.
12184
12185 2004-03-16  Martin Baulig  <martin@ximian.com>
12186
12187         * generics.cs (ConstructedType.GetMemberAccess): Take the
12188         EmitContext instead on the TypeExpr and use
12189         ec.TypeContainer.CurrentType/ec.ContainerType.
12190
12191 2004-03-16  Martin Baulig  <martin@ximian.com>
12192
12193         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12194         parameters before aliases.
12195
12196 2004-03-16  Martin Baulig  <martin@ximian.com>
12197
12198         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12199         New oublic function; checks whether two generic instances may become
12200         equal under some instantiations (26.3.1).
12201
12202         * class.cs (TypeContainer.Define): Call
12203         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12204         error.
12205
12206 2004-03-16  Martin Baulig  <martin@ximian.com>
12207
12208         * class.cs (TypeContainer.GetClassBases): Moved
12209         Error_TypeParameterAsBase() here and also check whether the base
12210         class is not an attribute.
12211
12212 2004-03-16  Martin Baulig  <martin@ximian.com>
12213
12214         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12215
12216 2004-03-16  Martin Baulig  <martin@ximian.com>
12217
12218         * class.cs (Error_TypeParameterAsBase): Use correct error number
12219         here (CS0689).  
12220
12221 2004-03-16  Martin Baulig  <martin@ximian.com>
12222
12223         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12224         for generics.
12225
12226         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12227         error reporting.
12228
12229 2004-03-15  Martin Baulig  <martin@ximian.com>
12230
12231         * typemanager.cs (TypeManager.GetFullName): New public method.
12232         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12233         argument; only return members with the correct number of type
12234         arguments.
12235         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12236         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12237         whether the number of type arguments matches.
12238
12239         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12240         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12241
12242         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12243         field; it's set by the protected .ctor when we're actually a
12244         GenericMemberAccess.
12245         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12246         arguments and pass it to MemberLookupFinal ().
12247
12248         * ecore.cs (Expression.MemberLookup): Added `int
12249         num_type_arguments' argument; only return members with the correct
12250         number of type arguments.
12251         (Expression.MemberLookupFailed): Check whether the MemberLookup
12252         failed because we did not have the correct number of type
12253         arguments; report CS0305 in this case.
12254
12255         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12256         `e.ResolveAsTypeTerminal()' already did so.
12257
12258 2004-03-15  Martin Baulig  <martin@ximian.com>
12259
12260         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12261         we're a ConstructedType; in this case, the caller must report an
12262         error (for instance CS0131).
12263
12264         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12265         (TypeArguments.Resolve): Actually report errors here.
12266
12267 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12268
12269         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12270         `set_indexer_name' to the pending bits (one per type).
12271
12272         We fixed a bug today that was picking the wrong method to
12273         override, since for properties the existing InterfaceMethod code
12274         basically ignored the method name.  Now we make sure that the
12275         method name is one of the valid indexer names.
12276
12277 2004-03-15  Martin Baulig  <martin@ximian.com>
12278
12279         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12280         for generic instances.
12281
12282 2004-03-13  Martin Baulig  <martin@ximian.com>
12283
12284         * class.cs (TypeContainer.DefineType): Call
12285         TypeManager.AddUserType() immediately after creating the
12286         TypeBuilder; pass all type parameters when creating the
12287         CurrentType.
12288
12289         * decl.cs (DeclSpace.FindNestedType): New public method.
12290         (DeclSpace.FindType): Added `int num_type_args' argument; only
12291         return types with the correct number of type parameters.
12292         (DeclSpace.CountTypeParams): New public property.
12293
12294         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12295         the number of type parameters; defaults to zero.
12296
12297         * generic.cs (TypeArguments.Count): New public property.
12298         (ConstructedType.DoResolveAsTypeStep): First call
12299         ds.FindNestedType() to find out whether we're nested in the
12300         current generic type; in this case, we inherit all type parameters
12301         from the current class.
12302
12303         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12304         num_type_args' argument.
12305         (RootContext.LookupType): Added overloaded version which takes the
12306         number of type arguments; only return types with the correct
12307         number of type arguments.
12308
12309         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12310         checks whether `Type t' has `int num_type_args'.
12311
12312 2004-03-13  Martin Baulig  <martin@ximian.com>
12313
12314         * generic.cs (GenericMethod.DefineType): New method; calls
12315         DefineType() on all the type parameters.
12316
12317         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12318         (MethodData.Define): If we're a generic method, call
12319         GenericMethod.DefineType() to define the type parameters.       
12320
12321 2004-03-10  Martin Baulig  <martin@ximian.com>
12322
12323         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12324         instead of IsAssignableFrom.    
12325
12326 2004-03-10  Martin Baulig  <martin@ximian.com>
12327
12328         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12329
12330         * support.cs (ParameterData.HasArrayParameter): New property.
12331         (ReflectionParameters.ctor): Take a MethodBase instead of a
12332         ParameterInfo[].  If we have any type parameters, get the generic
12333         method definition and ask it whether we have variable arguments.
12334
12335 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12336
12337         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12338         routines to check if a type is an enumerable/enumerator allow
12339         classes that implement the IEnumerable or IEnumerator interfaces.
12340
12341         * class.cs (Property, Operator): Implement IIteratorContainer, and
12342         implement SetYields.
12343
12344         (Property.Define): Do the block swapping for get_methods in the
12345         context of iterators.   We need to check if Properties also
12346         include indexers or not.
12347
12348         (Operator): Assign the Block before invoking the
12349         OperatorMethod.Define, so we can trigger the Iterator code
12350         replacement. 
12351
12352         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12353         Property and Operator classes are not created when we parse the
12354         declarator but until we have the block completed, so we use a
12355         singleton SimpleIteratorContainer.Simple to flag whether the
12356         SetYields has been invoked.
12357
12358         We propagate this setting then to the Property or the Operator to
12359         allow the `yield' to function.
12360
12361 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12362
12363         * codegen.cs: Implemented attribute support for modules.
12364         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12365         Assembly/Module functionality.
12366
12367         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12368         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12369         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12370
12371 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12372
12373         * interface.cs (FindMembers): The operation is performed on all base
12374         interfaces and not only on the first. It is required for future CLS Compliance patch.
12375
12376 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12377
12378         * statement.cs, codegen.cs:
12379         This patch deals with patterns such as:
12380
12381         public class List : IEnumerable {
12382
12383                 public MyEnumerator GetEnumerator () {
12384                         return new MyEnumerator(this);
12385                 }
12386
12387                 IEnumerator IEnumerable.GetEnumerator () {
12388                         ...
12389                 }
12390                 
12391                 public struct MyEnumerator : IEnumerator {
12392                         ...
12393                 }
12394         }
12395
12396         Before, there were a few things we did wrong:
12397         1) we would emit callvirt on a struct, which is illegal
12398         2) we emited ldarg when we needed to emit ldarga
12399         3) we would mistakenly call the interface methods on an enumerator
12400         type that derived from IEnumerator and was in another assembly. For example:
12401
12402         public class MyEnumerator : IEnumerator
12403
12404         Would have the interface methods called, even if there were public impls of the
12405         method. In a struct, this lead to invalid IL code.
12406
12407 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12408
12409         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12410           renamed to Emit.
12411
12412         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12413
12414 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12415
12416         * cs-parser.jay: Fix small regression: we were not testing V2
12417         compiler features correctly.
12418
12419         * interface.cs: If the emit context is null, then create one
12420
12421 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12422
12423         * decl.cs (GetSignatureForError): New virtual method to get full name
12424           for error messages.
12425
12426         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12427           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12428
12429         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12430           Duplicated members and code in these classes has been removed.
12431           Better encapsulation in these classes.
12432
12433 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12434
12435         * assign.cs (Assign.DoResolve): When dealing with compound
12436         assignments, there is a new rule in ECMA C# 2.4 (might have been
12437         there before, but it is documented here) that states that in:
12438
12439         a op= b;
12440
12441         If b is of type int, and the `op' is a shift-operator, then the
12442         above is evaluated as:
12443
12444         a = (int) a op b 
12445
12446         * expression.cs (Binary.ResolveOperator): Instead of testing for
12447         int/uint/long/ulong, try to implicitly convert to any of those
12448         types and use that in pointer arithmetic.
12449
12450         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12451         method to print information for from the type, not from the
12452         null-method we were given.
12453
12454 2004-02-01  Duncan Mak  <duncan@ximian.com>
12455
12456         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12457         parsing for cmd, fixes bug #53694.
12458
12459 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12460
12461         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12462         in the member name duplication tests. Property and operator name duplication
12463         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12464
12465 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12466
12467         * interface.cs (PopulateMethod): Fixed crash when interface method
12468         returns not existing type (error test cs0246-3.cs).
12469
12470 2004-02-02  Ravi Pratap M <ravi@ximian.com>
12471
12472         * cs-parser.jay (interface_accessors): Re-write actions to also
12473         store attributes attached to get and set methods. Fix spelling
12474         while at it.
12475
12476         (inteface_property_declaration): Modify accordingly.
12477
12478         (InterfaceAccessorInfo): New helper class to store information to pass
12479         around between rules that use interface_accessors.
12480
12481         * interface.cs (Emit): Apply attributes on the get and set
12482         accessors of properties and indexers too.
12483
12484         * attribute.cs (ApplyAttributes): Modify accordingly to use the
12485         right MethodBuilder when applying attributes to the get and set accessors.
12486
12487 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
12488
12489         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
12490
12491 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
12492
12493         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
12494
12495 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
12496
12497         * cs-parser.jay: Remove YIELD token, instead use the new grammar
12498         changes that treat `yield' specially when present before `break'
12499         or `return' tokens.
12500
12501         * cs-tokenizer.cs: yield is no longer a keyword.
12502
12503 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
12504
12505         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
12506         setting for default constructors.
12507         For default constructors are almost every time set wrong Modifier. The
12508         generated IL code has been alright. But inside mcs this values was
12509         wrong and this was reason why several of my CLS Compliance tests
12510         failed.
12511
12512 2004-02-27  Martin Baulig  <martin@ximian.com>
12513
12514         * generics.cs (ConstructedType.ResolveType): Make the nested type
12515         stuff actually work.
12516
12517 2004-02-25  Martin Baulig  <martin@ximian.com>
12518
12519         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
12520         property; returns the type parameters just from the current type,
12521         ie. with the ones from outer classes.
12522         (DeclSpace.LookupGeneric): First search in the current class, then
12523         in outer classes.
12524         (DeclSpace.initialize_type_params): When hiding a type parameter
12525         from an outer class, put it into the `type_param_list' anyways.
12526
12527         * expression.cs (MemberAccess.expr): Made this field protected.
12528
12529         * class.cs (TypeContainer.Define): The `CurrentType' just contains
12530         the type parameters from the current class.
12531
12532         * generic.cs (ConstructedType.ResolveType): Support nested generic
12533         types by taking the type parameters which we inherit from outer
12534         classes into account.
12535         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
12536         support for nested generic types.
12537
12538 2004-02-23  Martin Baulig  <martin@ximian.com>
12539
12540         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
12541         field and check whether we're nested inside a generic type.
12542         (DeclSpace.ResolveType): If we're resolving to a generic type
12543         definition, create a ConstructedType and return its resolved type.
12544         (DeclSpace.initialize_type_params): New private method;
12545         initializes the `type_param_list' field from the type parameters
12546         from this and all enclosing classes.
12547         (DeclSpace.TypeParameters): Call initialize_type_params() unless
12548         we're already initialized.
12549
12550 2004-02-23  Martin Baulig  <martin@ximian.com>
12551
12552         * class.cs (Method.Define): Create the generic method before
12553         calling DoDefine().
12554         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
12555         the TypeContainer one); we use this for generic methods.
12556
12557         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
12558         parent's TypeBuilder.
12559
12560 2004-02-18  Martin Baulig  <martin@ximian.com>
12561
12562         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
12563         to check for equality.
12564
12565 2004-02-05  Martin Baulig  <martin@ximian.com>
12566
12567         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
12568         `ec.TypeContainer.CurrentType', use it instead of
12569         `ec.ContainerType' to check whether we're in the type's ctor.
12570
12571 2004-01-29  Martin Baulig  <martin@ximian.com>
12572
12573         * expression.cs (Invocation.DoResolve): If we're a
12574         `ConstructedType', then we're actually a generic method, so
12575         rewrite the expr as a GenericMemberAccess.
12576
12577         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
12578         here; manually parse it into a string.
12579
12580 2004-01-28  Martin Baulig  <martin@ximian.com>
12581
12582         * typemanager.cs (TypeManager.IsEqual): New static method.
12583         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
12584         check for equality instead of using `=='.
12585
12586 2004-01-26  Martin Baulig  <martin@ximian.com>
12587
12588         * decl.cs (DeclSpace.CurrentType): New public field.
12589
12590         * expression.cs (This.ResolveBase): If we have an
12591         `ec.TypeContainer.CurrentType', use it instead of
12592         `ec.ContainerType'.
12593
12594         * class.cs (TypeContainer.DefineType): If we're a generic type,
12595         create the `CurrentType' (unresolved).
12596         (TypeContainer.GenericType): New private field.
12597         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
12598         it and store it in `GenericType' before creating the MemberCache.
12599         (TypeContainer.GetMembers): If we have a `GenericType', call
12600         TypeManager.FindMembers() on it.
12601
12602         * interface.cs (Interface.GenericType): New private field.
12603         (Interface.DefineType): If we're a generic type, create the
12604         `CurrentType' (unresolved).
12605         (Interface.DefineMembers): If we have a `CurrentType', resolve it
12606         and store it in `GenericType' before creating the MemberCache.
12607         (Interface.GetMembers): If we have a `GenericType', call
12608         TypeManager.FindMembers() on it.
12609
12610 2004-01-22  Martin Baulig  <martin@ximian.com>
12611
12612         * cs-parser.jay (namespace_or_type_name): Return an Expression,
12613         not a QualifiedIdentifier.  This is what `type_name_expression'
12614         was previously doing.
12615         (type_name_expression): Removed; the code is now in
12616         `namespace_or_type_name'.
12617         (qualified_identifier): Removed, use `namespace_or_type_name'
12618         instead.
12619         (QualifiedIdentifier): Removed this class.      
12620
12621 2004-01-22  Martin Baulig  <martin@ximian.com>
12622
12623         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
12624         not a string as alias name.
12625
12626 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
12627
12628         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
12629         #52730 bug, and instead compute correctly the need to use a
12630         temporary variable when requesting an address based on the
12631         static/instace modified of the field and the constructor.
12632  
12633 2004-01-21  Martin Baulig  <martin@ximian.com>
12634
12635         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
12636         class and namespace before looking up aliases.  Fixes #52517.
12637
12638 2004-01-21  Martin Baulig  <martin@ximian.com>
12639
12640         * flowanalysis.cs (UsageVector.Merge): Allow variables being
12641         assinged in a 'try'; fixes exception4.cs.
12642
12643 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12644         * class.cs : Implemented parameter-less constructor for TypeContainer
12645
12646         * decl.cs: Attributes are now stored here. New property OptAttributes
12647
12648         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
12649
12650         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
12651
12652 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12653
12654         * typemanager.cs (CSharpSignature): Now reports also inner class name.
12655           (CSharpSignature): New method for indexer and property signature.
12656
12657 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12658
12659         * pending.cs (IsVirtualFilter): Faster implementation.
12660
12661 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12662
12663         * typemanager.cs: Avoid inclusion of same assembly more than once.
12664
12665 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12666
12667         * cs-parser.jay: Fixed problem where the last assembly attribute
12668           has been applied also to following declaration (class, struct, etc.)
12669           
12670 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12671
12672         * class.cs: Added error CS0538, CS0539 reporting.
12673         Fixed crash on Microsoft runtime when field type is void.
12674
12675         * cs-parser.jay: Added error CS0537 reporting.
12676
12677         * pending.cs: Added error CS0535 reporting.
12678         Improved error report for errors CS0536, CS0534.
12679
12680 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
12681
12682         Merge a few bits from the Anonymous Method MCS tree.
12683
12684         * statement.cs (ToplevelBlock): New class for toplevel methods,
12685         will hold anonymous methods, lifted variables.
12686
12687         * cs-parser.jay: Create toplevel blocks for delegates and for
12688         regular blocks of code. 
12689
12690 2004-01-20  Martin Baulig  <martin@ximian.com>
12691
12692         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
12693         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
12694         and `NeedExplicitReturn'; added `IsLastStatement'.
12695         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
12696         have a `ReturnLabel' or we're not unreachable.
12697
12698         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
12699         child's reachability; don't just override ours with it.  Fixes
12700         #58058 (lluis's example).
12701         (FlowBranching): Added public InTryOrCatch(), InCatch(),
12702         InFinally(), InLoop(), InSwitch() and
12703         BreakCrossesTryCatchBoundary() methods.
12704
12705         * statement.cs (Return): Do all error checking in Resolve().
12706         Unless we are the last statement in a top-level block, always
12707         create a return label and jump to it.
12708         (Break, Continue): Do all error checking in Resolve(); also make
12709         sure we aren't leaving a `finally'.
12710         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
12711         statement in a top-level block.
12712         (Block.Flags): Added `IsDestructor'.
12713         (Block.IsDestructor): New public property.
12714
12715 2004-01-20  Martin Baulig  <martin@ximian.com>
12716
12717         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
12718
12719 2004-01-20  Martin Baulig  <martin@ximian.com>
12720
12721         * statement.cs (Statement.ResolveUnreachable): New public method.
12722         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
12723         (Block.Resolve): Resolve unreachable statements.
12724
12725 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12726
12727         * expression.cs: We need to fix the case where we do
12728         not have a temp variable here.
12729
12730         * assign.cs: Only expression compound assignments need
12731         temporary variables.
12732
12733 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12734
12735         * flowanalysis.cs: Reduce memory allocation in a few ways:
12736           - A block with no variables should not allocate a bit
12737             vector for itself.
12738           - A method with no out parameters does not need any tracking
12739             for assignment of the parameters, so we need not allocate
12740             any data for it.
12741           - The arrays:
12742                 public readonly Type[] VariableTypes;
12743                 public readonly string[] VariableNames;
12744             Are redundant. The data is already stored in the variable
12745             map, so we need not allocate another array for it.
12746           - We need to add alot of checks for if (params | locals) == null
12747             due to the first two changes.
12748
12749 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
12750
12751         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
12752         implement IMemoryLocation, we store a copy on a local variable and
12753         take the address of it.  Patch from Benjamin Jemlich
12754
12755         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
12756         to use a special "type_name_expression" rule which reduces the
12757         number of "QualifiedIdentifier" classes created, and instead
12758         directly creates MemberAccess expressions.
12759
12760 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
12761
12762         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
12763         that fixes #52853.  Null literal assignment to ValueType
12764
12765         * class.cs (MethodData.Emit): Instead of checking the name of the
12766         method to determine if its a destructor, create a new derived
12767         class from Method called Destructor, and test for that.  
12768
12769         * cs-parser.jay: Create a Destructor object instead of a Method.  
12770
12771         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
12772
12773         Fixes: 52933
12774
12775 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
12776
12777         * expression.cs (Binary.ResolveOperator): Perform an implicit
12778         conversion from MethodGroups to their delegate types on the
12779         Addition operation.
12780
12781         * delegate.cs: Introduce a new class DelegateCreation that is the
12782         base class for `NewDelegate' and `ImplicitDelegateCreation',
12783         factor some code in here.
12784
12785         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
12786         conversion from MethodGroups to compatible delegate types. 
12787
12788         * ecore.cs (Expression.Resolve): Do not flag error 654
12789         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
12790         we allow conversions from MethodGroups to delegate types now.
12791
12792         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
12793         assignments in v2 either.
12794
12795 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
12796
12797         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
12798         static read-only fields in ctors.
12799
12800         Applied patch from Benjamin Jemlich 
12801
12802         * expression.cs (UnaryMutator): Avoid leaking local variables. 
12803
12804 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
12805
12806         * cs-tokenizer.cs (IsCastToken): Allow the various native types
12807         here to return true, as they can be used like this:
12808
12809                 (XXX) int.MEMBER ()
12810
12811         Fixed 49836 and all the other dups
12812
12813 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
12814
12815         * driver.cs: Implement /win32res and /win32icon.
12816
12817 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
12818
12819         * cs-parser.jay: Add a rule to improve error handling for the
12820         common mistake of placing modifiers after the type.
12821
12822 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
12823
12824         * cs-parser.jay (interface_event_declaration): Catch
12825         initialization of events on interfaces, and report cs0068
12826
12827         * cs-parser.jay (interface_event_declaration): Catch
12828         initialization of events. 
12829
12830         * ecore.cs: Better report missing constructors.
12831
12832         * expression.cs (Binary.ResolveOperator): My previous bug fix had
12833         the error reporting done in the wrong place.  Fix.
12834
12835         * expression.cs (Binary.ResolveOperator): Catch the 
12836         operator + (E x, E y) error earlier, and later allow for implicit
12837         conversions in operator +/- (E e, U x) from U to the underlying
12838         type of E.
12839
12840         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
12841         52596, if the container class is abstract, the default constructor
12842         is protected otherwise its public (before, we were always public).
12843
12844         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
12845         fixed statement.
12846
12847         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
12848         Jemlich that fixes bug #52597, MCS was generating invalid code for
12849         idisposable structs.   Thanks to Ben for following up with this
12850         bug as well.
12851
12852 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
12853
12854         * driver.cs: Allow assemblies without code to be generated, fixes
12855         52230.
12856
12857 2004-01-07  Nick Drochak <ndrochak@gol.com>
12858
12859         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
12860
12861 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
12862
12863         * cs-parser.jay: Add rules to improve error reporting if fields or
12864         methods are declared at the namespace level (error 116)
12865
12866         * Add rules to catch event add/remove
12867
12868 2004-01-04  David Sheldon <dave-mono@earth.li>
12869
12870   * expression.cs: Added matching ")" to error message for 
12871   CS0077
12872
12873 2004-01-03 Todd Berman <tberman@gentoo.org>
12874
12875         * ecore.cs, attribute.cs:
12876         Applying fix from #52429.
12877
12878 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12879
12880         * ecore.cs, expression.cs, statement.cs:
12881         Total rewrite of how we handle branching. We
12882         now handle complex boolean expressions with fewer
12883         jumps. As well if (x == 0) no longer emits a ceq.
12884
12885         if (x is Foo) is much faster now, because we generate
12886         better code.
12887
12888         Overall, we get a pretty big improvement on our benchmark
12889         tests. The code we generate is smaller and more readable.
12890
12891         I did a full two-stage bootstrap. The patch was reviewed
12892         by Martin and Miguel.
12893
12894 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12895
12896         * cs-parser.jay: Make primary_expression not take a QI.
12897         we dont need this because the member_access rule covers
12898         us here. So we replace the rule with just IDENTIFIER.
12899
12900         This has two good effects. First, we remove a s/r conflict.
12901         Second, we allocate many fewer QualifiedIdentifier objects.
12902
12903 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12904
12905         * attribute.cs: Handle MarshalAs attributes as pseudo, and
12906         set the correct information via SRE. This prevents
12907         hanging on the MS runtime. Fixes #29374.
12908
12909 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
12910
12911         * convert.cs: correctly handle conversions to value types
12912         from Enum and ValueType as unboxing conversions.
12913
12914         Fixes bug #52569. Patch by Benjamin Jemlich.
12915
12916 2004-01-02  Ravi Pratap  <ravi@ximian.com>
12917
12918         * expression.cs (BetterConversion): Prefer int -> uint
12919         over int -> ulong (csc's behaviour). This fixed bug #52046.
12920
12921 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
12922
12923         * decl.cs (MemberCache.FindMembers): now returns a
12924         MemberInfo [].
12925
12926         * typemanager.cs: In general, go with with ^^.
12927         (CopyNewMethods): take an IList.
12928         (RealMemberLookup): Only allocate an arraylist
12929         if we copy from two sets of methods.
12930
12931         This change basically does two things:
12932         1) Fewer array lists allocated due to CopyNewMethods.
12933         2) the explicit cast in MemberList costed ALOT.
12934
12935 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
12936
12937         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
12938         a hashtable to avoid needless string allocations when an identifier is
12939         used more than once (the common case).
12940
12941 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
12942
12943         * pending.cs: MS's TypeBuilder.GetInterfaces ()
12944         is broken, it will not return anything. So, we
12945         have to use the information we have in mcs to
12946         do the task.
12947
12948         * typemanager.cs: Add a cache for GetInterfaces,
12949         since this will now be used more often (due to ^^)
12950
12951         (GetExplicitInterfaces) New method that gets the
12952         declared, not effective, interfaces on a type
12953         builder (eg, if you have interface IFoo, interface
12954         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
12955         { IBar }.
12956
12957         This patch makes MCS able to bootstrap itself on
12958         Windows again.
12959
12960 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
12961
12962         * expression.cs: Remove the Nop's that Miguel put
12963         in by mistake.
12964
12965 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12966
12967         * report.cs, codegen.cs: Give the real stack trace to
12968         the error when an exception is thrown.
12969
12970 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12971
12972         * decl.cs: only allocate hashtables for ifaces if 
12973         it is an iface!
12974
12975 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12976
12977         * expression.cs: fix the error from cs0121-2.cs
12978         (a parent interface has two child interfaces that
12979         have a function with the same name and 0 params
12980         and the function is called through the parent).
12981
12982 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12983
12984         * class.cs, rootcontext.cs, typmanager.cs: do not
12985         leak pointers.
12986
12987 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12988
12989         * codegen.cs: remove stack for the ec flow branching.
12990         It is already a linked list, so no need.
12991
12992 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12993
12994         * Makefile: Allow custom profiler here.
12995
12996 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
12997
12998         * typemanager.cs (LookupType):
12999           - Use a static char [], because split takes
13000             a param array for args, so it was allocating
13001             every time.
13002           - Do not store true in a hashtable, it boxes.
13003
13004 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13005
13006         * flowanalysis.cs: bytify common enums.
13007
13008 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13009
13010         * modifiers.cs: Add a new set of flags for the
13011         flags allowed on explicit interface impls.
13012         * cs-parser.jay: catch the use of modifiers in
13013         interfaces correctly.
13014         * class.cs: catch private void IFoo.Blah ().
13015
13016         All related to bug #50572.
13017
13018 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13019
13020         * decl.cs: Rewrite the consistant accessability checking.
13021         Accessability is not linear, it must be implemented in
13022         a tableish way. Fixes #49704.
13023
13024 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13025
13026         * expression.cs: Handle negation in a checked context.
13027         We must use subtraction from zero. Fixes #38674.
13028
13029 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13030
13031         * class.cs: Ignore static void main in DLLs.
13032         * rootcontext.cs: Handle the target type here,
13033         since we are have to access it from class.cs
13034         * driver.cs: account for the above.
13035
13036 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13037
13038         * report.cs: Give line numbers and files if available.
13039
13040 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13041
13042         * driver.cs: Implement /addmodule.
13043
13044         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13045         ModuleBuilders.
13046
13047 2003-12-20  Martin Baulig  <martin@ximian.com>
13048
13049         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13050         (FieldBase.IsAssigned): Removed this field.
13051         (FieldBase.SetAssigned): New public method.
13052         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13053
13054 2003-12-20  Martin Baulig  <martin@ximian.com>
13055
13056         * expression.cs (LocalVariableReference.DoResolve): Don't set
13057         `vi.Used' if we're called from DoResolveLValue().
13058
13059         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13060         returns the usage vector it just merged into the current one -
13061         pass this one to UsageWarning().
13062         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13063         of the `EmitContext', don't call this recursively on our children.
13064
13065 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13066
13067         * driver.cs: Implement /target:module.
13068
13069 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13070
13071         * support.cs (CharArrayHashtable): New helper class.
13072
13073         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13074         char arrays, not strings, so we can avoid creating a string in
13075         consume_identifier if the identifier is a keyword.
13076
13077 2003-12-16  Martin Baulig  <martin@ximian.com>
13078
13079         * statement.cs (LocalInfo.Assigned): Removed this property.
13080         (LocalInfo.Flags): Removed `Assigned'.
13081         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13082         and uses flow analysis.
13083         (Block.UsageWarning): Made this method private.
13084         (Block.Resolve): Call UsageWarning() if appropriate.
13085
13086         * expression.cs (LocalVariableReference.DoResolve): Always set
13087         LocalInfo.Used here.
13088
13089 2003-12-13  Martin Baulig  <martin@ximian.com>
13090
13091         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13092         any value here; we're now using flow analysis to figure out
13093         whether a statement/block returns a value.
13094
13095 2003-12-13  Martin Baulig  <martin@ximian.com>
13096
13097         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13098         working again.
13099         (FlowBranching.MergeFinally): Don't call
13100         `branching.CheckOutParameters()' here, this is called in
13101         MergeTopBlock().
13102         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13103         when adding the `finally' vector.       
13104
13105 2003-12-13  Martin Baulig  <martin@ximian.com>
13106
13107         * flowanalysis.cs
13108         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13109         actually work and also fix #48962.
13110
13111 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13112
13113         * decl.cs: Do not check System.Object for nested types,
13114         since we know it does not have any. Big bang for buck:
13115
13116         BEFORE:
13117            Run 1:   8.35 seconds
13118            Run 2:   8.32 seconds
13119            corlib:  17.99 seconds
13120         AFTER:
13121            Run 1:   8.17 seconds
13122            Run 2:   8.17 seconds
13123            corlib:  17.39 seconds
13124
13125 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13126
13127         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13128         time we are returning 0 members, so we save alot here.
13129
13130 2003-12-11  Martin Baulig  <martin@ximian.com>
13131
13132         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13133         `MergeChild()', also just take the `FlowBranching' as argument;
13134         call Merge() on it and return the result.
13135         (FlowBranching.Merge): We don't need to do anything if we just
13136         have one sibling.
13137
13138 2003-12-11  Martin Baulig  <martin@ximian.com>
13139
13140         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13141         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13142         Maurer for this idea.
13143
13144 2003-12-11  Martin Baulig  <martin@ximian.com>
13145
13146         * flowanalysis.cs (MergeResult): This class is now gone; we now
13147         use the `UsageVector' for this.  The reason for this is that if a
13148         branching just has one sibling, we don't need to "merge" them at
13149         all - that's the next step to do.
13150         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13151         `MergeResult'.
13152
13153 2003-12-11  Martin Baulig  <martin@ximian.com>
13154
13155         Reworked flow analyis and made it more precise and bug-free.  The
13156         most important change is that we're now using a special `Reachability'
13157         class instead of having "magic" meanings of `FlowReturns'.  I'll
13158         do some more cleanups and optimizations and also add some more
13159         documentation this week.
13160
13161         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13162         largely reworked this class.
13163         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13164         the new `Reachability' class instead of having "magic" values here.
13165         (FlowBranching): We're now using an instance of `Reachability'
13166         instead of having separate `Returns', `Breaks' etc. fields.
13167
13168         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13169         based on flow analysis; ignore the return value of block.Emit ().
13170
13171 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13172
13173         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13174         if they are private.
13175
13176 2003-12-09  Martin Baulig  <martin@ximian.com>
13177
13178         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13179         call them directly on the UsageVector.
13180
13181 2003-12-09  Martin Baulig  <martin@ximian.com>
13182
13183         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13184         Changed return type from `FlowReturns' to `Reachability'.
13185
13186 2003-12-09  Martin Baulig  <martin@ximian.com>
13187
13188         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13189         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13190         `Reachable' fields with a single `Reachability' one.
13191
13192 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13193
13194         * class.cs (FindMembers): Remove foreach's.
13195
13196         Bootstrap times:
13197
13198         BEFORE
13199                 Run 1:   8.74 seconds
13200                 Run 2:   8.71 seconds
13201
13202         AFTER
13203                 Run 1:   8.64 seconds
13204                 Run 2:   8.58 seconds
13205
13206
13207 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13208
13209         * cs-parser.jay:
13210         * gen-treedump.cs:
13211         * statement.cs:
13212         This patch does a few things:
13213                 1. EmptyStatement is now a singleton, so it is never reallocated.
13214                 2. All blah is EmptyStatement constructs have been changed to
13215                    blah == EmptyStatement.Value, which is much faster and valid
13216                    now that EmptyStatement is a singleton.
13217                 3. When resolving a block, rather than allocating a new array for
13218                    the non-empty statements, empty statements are replaced with
13219                    EmptyStatement.Value
13220                 4. Some recursive functions have been made non-recursive.
13221         Mainly the performance impact is from (3), however (1) and (2) are needed for
13222         this to work. (4) does not make a big difference in normal situations, however
13223         it makes the profile look saner.
13224
13225         Bootstrap times:
13226
13227         BEFORE
13228         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13229         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13230         Total memory allocated: 56397 KB
13231
13232         AFTER
13233         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13234         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13235         Total memory allocated: 55666 KB
13236
13237 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13238
13239         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13240         than the hashtable in a hashtable version
13241
13242         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13243         we always end up concating a string. This results in a huge perf
13244         loss, because many strings have to be tracked by the GC. In this
13245         patch, we first use a hashtable that works with two keys, so that
13246         the strings do not need to be concat'ed.
13247
13248         Bootstrap times:
13249         BEFORE
13250                 Run 1:   8.74 seconds
13251                 Run 2:   8.71 seconds
13252
13253         AFTER
13254                 Run 1:   8.65 seconds
13255                 Run 2:   8.56 seconds
13256
13257 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13258
13259         * Makefile: Add a new target `do-time' that does a quick and simple
13260         profile, leaving easy to parse output.
13261
13262 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13263
13264         * codegen.cs (Init): Create the dynamic assembly with 
13265         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13266
13267 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13268
13269         * support.cs: Make the PtrHashtable use only one
13270         instance of its comparer.
13271
13272 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13273
13274         * typemanager.cs: Fix lookup of GetNamespaces.
13275
13276 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13277
13278         * expression.cs: Removed redundant line.
13279
13280         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13281         ArrayLists, use for loops with bounds.  
13282
13283         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13284         arraylist.
13285
13286         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13287         arraylists, use for loop with bounds.
13288
13289         The above three changes give us a 0.071 second performance
13290         improvement out of 3.294 seconds down to 3.223.  On my machine
13291         the above changes reduced the memory usage by 1,387 KB during
13292         compiler bootstrap.
13293
13294         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13295         QualifiedIdentifiers.  Before we created a new string through
13296         concatenation, and mostly later on, the result would be
13297         manipulated by DecomposeQI through string manipulation.
13298
13299         This reduced the compiler memory usage for bootstrapping from
13300         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13301         compile times in 0.05 seconds.
13302
13303 2003-11-28  Dick Porter  <dick@ximian.com>
13304
13305         * support.cs: Do string compares with the Invariant culture.
13306
13307         * rootcontext.cs: 
13308         * gen-treedump.cs: 
13309         * expression.cs: 
13310         * driver.cs: 
13311         * decl.cs: 
13312         * codegen.cs: 
13313         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13314         the comparison is done with the Invariant culture.
13315
13316 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13317
13318         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13319         GetEnumerator method.
13320
13321         (ProbeCollectionType): Iterate starting at the most specific type
13322         upwards looking for a GetEnumerator
13323
13324         * expression.cs: Shift count can be up to 31 for int/uint and 63
13325         for long/ulong.
13326
13327 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13328
13329         * statement.cs (Block.LookupLabel): Also look for the label on the
13330         children blocks.  Use a hash table to keep track of visited
13331         nodes. 
13332
13333         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13334         we actually did transform the other operand, otherwise fall back
13335         to the common codepath that casts to long.
13336
13337         * cs-tokenizer.cs: Use the same code pattern as the int case.
13338         Maybe I should do the parsing myself, and avoid depending on the
13339         Parse routines to get this done.
13340
13341 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13342
13343         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13344         which fixes bug 51347.  This time test it.
13345
13346         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13347         attributes for example can not tell the difference between these.
13348         The difference was only a syntax feature of the language. 
13349
13350         * attribute.cs: Apply attributes to delegates.
13351
13352         * delegate.cs: Call the apply attributes method.
13353
13354 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13355
13356         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13357         comparing 0 vs Byte.MinValue, not the value
13358
13359         (ImplicitConversionRequired): When reporting a conversion error,
13360         use error 31 to print out the constant error instead of the
13361         simpler 29.
13362
13363         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13364         which fixes bug 51347.
13365
13366 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13367
13368         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13369         which fixes the -warnaserror command line option.
13370
13371 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13372
13373         * cfold.cs (DoNumericPromotions): During constant folding of
13374         additions on UIntConstant, special case intconstants with
13375         IntConstants like we do on the expression binary operator. 
13376
13377 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13378
13379         * convert.cs (ImplicitReferenceConversion): We were missing a case
13380         (System.Enum are not value types or class types, so we need to
13381         classify them separatedly).
13382
13383         * driver.cs: We do not support error 2007.
13384
13385 2003-11-12 Jackson Harper <jackson@ximian.com>
13386
13387         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13388         system directory. Also use the full file name so users can
13389         libraries names mscorlib-o-tron.dll in a non system dir.
13390         
13391 2004-01-04  David Sheldon <dave-mono@earth.li>
13392
13393         * expression.cs: Added matching ")" to error message for CS0077.
13394
13395 2003-12-19  Martin Baulig  <martin@ximian.com>
13396
13397         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13398         static method; see documentation in the method.
13399         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13400
13401         * convert.cs (Convert.ImplicitReferenceConversion,
13402         Convert.ImplicitReferenceConversionExists): Add support for
13403         generic type declarations; see gen-36.cs.
13404
13405 2003-12-19  Martin Baulig  <martin@ximian.com>
13406
13407         * pending.cs (Pending.InterfaceMethod): Use
13408         `Type.IsAssignableFrom()' instead of `=='.
13409
13410 2003-12-18  Martin Baulig  <martin@ximian.com>
13411
13412         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13413         byref types first.
13414
13415         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13416         `expr_type.Equals (target_type)' instead of `=='.
13417
13418 2003-12-08  Martin Baulig  <martin@ximian.com>
13419
13420         * generics.cs (Constraints.Types): Removed.
13421         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13422         to Type's.
13423         (Constraints.ResolveTypes): New public method; resolves the
13424         TypeExpr's to Type's.
13425         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13426         longer takes the constraints.
13427         (TypeParameter.DefineMethod): Likewise.
13428         (TypeParameter.DefineType): New public method.  Calls
13429         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13430         the constraints.
13431
13432 2003-12-08  Martin Baulig  <martin@ximian.com>
13433
13434         * convert.cs (Convert.ImplicitConversionStandard): Use
13435         `expr_type.Equals (target_type)' instead of `=='.
13436
13437 2003-12-08  Martin Baulig  <martin@ximian.com>
13438
13439         * typemanager.cs (TypeManager.GetReferenceType): Call
13440         `Type.MakeByRefType ()'.
13441
13442 2003-12-08  Martin Baulig  <martin@ximian.com>
13443
13444         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13445         just has some special meaning in some situations.  For instance,
13446         it is allowed to use `where' as the name of a variable etc.
13447
13448 2003-12-04  Martin Baulig  <martin@ximian.com>
13449
13450         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13451         `Type.MakeArrayType()' for array types.
13452
13453 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13454
13455         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13456         debugging message.
13457
13458         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13459         corlib to compile.
13460
13461 2003-11-16  Martin Baulig  <martin@ximian.com>
13462
13463         * codegen.cs (EmitContext.IsGeneric): Removed.
13464
13465         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13466         ResolveGeneric() on the DeclSpace.
13467
13468 2003-11-16  Martin Baulig  <martin@ximian.com>
13469
13470         * generic.cs (TypeArguments.Resolve):
13471         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
13472         `ResolveType()' on it to get the Type.
13473
13474 2003-11-15  Martin Baulig  <martin@ximian.com>
13475
13476         * generic.cs (ConstructedType.GetInterfaces): Override this.
13477
13478 2003-11-14  Martin Baulig  <martin@ximian.com>
13479
13480         * interface.cs (Interface.DefineType): Define all type parameters
13481         before adding the interfaces we inherit.
13482
13483 2003-11-11  Martin Baulig  <martin@ximian.com>
13484
13485         * generic.cs (ConstructedType.ResolveType): Always call
13486         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
13487
13488 2003-11-10  Martin Baulig  <martin@ximian.com>
13489
13490         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
13491         (TypeManager.InitCoreTypes): Initialize them here, but instead of
13492         calling `ResolveType()' on them, directly assign their `Type'.
13493
13494 2003-11-08  Martin Baulig  <martin@ximian.com>
13495
13496         * generic.cs (ConstructedType): Override `IsClass' etc.
13497
13498 2003-11-08  Martin Baulig  <martin@ximian.com>
13499
13500         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
13501         return value and the `out parent' parameter.
13502         (TypeContainer.DefineType): Moved the CS0644 check into
13503         GetClassBases().  Don't pass the interface types to the
13504         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
13505         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
13506
13507         * ecore.cs (TypeExpr.IsAttribute): New property.
13508         (TypeExpr.GetInterfaces): New method.
13509
13510         * interface.cs (Interface.GetInterfaceTypeByName): Return a
13511         TypeExpr instead of a Type.
13512         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
13513         (Interface.DefineType): Don't pass the interface types to the
13514         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
13515         them later and then call `TypeBulider.AddInterfaceImplementation()'.
13516
13517         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
13518         instead of a `Type[]'.
13519         (TypeManager.RegisterBuilder): Likewise.
13520         (TypeManager.AddUserInterface): Likewise.
13521         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
13522         `Type[]' and also return a `TypeExpr[]'.
13523         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
13524
13525 2003-11-08  Martin Baulig  <martin@ximian.com>
13526
13527         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
13528         Expression.     
13529
13530 2003-11-08  Martin Baulig  <martin@ximian.com>
13531
13532         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
13533         TypeManager.ResolveExpressionTypes().
13534
13535         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
13536         instead of an Expression.
13537         (TypeExpr): This is now an abstract base class for `TypeExpression'.
13538         (TypeExpression): New public class; formerly known as `TypeExpr'.
13539
13540         * expression.cs (ComposedCast): Derive from TypeExpr.
13541
13542         * typemanager.cs (TypeManager.system_*_expr): These are now
13543         TypExpr's instead of Expression's.
13544         (TypeManager.ResolveExpressionTypes): New public static function;
13545         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
13546         of them.        
13547
13548 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
13549
13550         * expression.cs (New.DoResolve): Do not dereference value that
13551         might be a null return.
13552
13553         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
13554         sure that the constant value has the right type.  Fixes an
13555         unreported bug, similar to 50425.
13556
13557         * const.cs (Const.LookupConstantValue): Call
13558         ImplicitStandardConversionExists before doing a conversion to
13559         avoid havng the TypeManager.ChangeType do conversions.
13560
13561         Reduced the number of casts used
13562
13563         (Const.ChangeType): New routine to enable reuse of the constant
13564         type changing code from statement.
13565
13566         * typemanager.cs (ChangeType): Move common initialization to
13567         static global variables.
13568
13569         Fixes #50425.
13570
13571         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
13572         every value type to go through, even if it was void.  Fix that. 
13573
13574         * cs-tokenizer.cs: Use is_identifier_start_character on the start
13575         character of the define, and the is_identifier_part_character for
13576         the rest of the string.
13577
13578 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
13579
13580         * expression.cs (UnaryMutator.EmitCode): When I updated
13581         LocalVariableReference.DoResolve, I overdid it, and dropped an
13582         optimization done on local variable references.
13583
13584 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
13585
13586         * ecore.cs: Convert the return from Ldlen into an int.
13587
13588 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
13589
13590         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
13591         the accessibility, this is a special case for toplevel non-public
13592         classes (internal for instance).
13593
13594 2003-10-20  Nick Drochak <ndrochak@gol.com>
13595
13596         * ecore.cs: Fix typo and build.  Needed another right paren.
13597
13598 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
13599
13600         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
13601         `internal' case regular and protected, but not allowing protected
13602         to be evaluated later.  Bug 49840
13603
13604 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
13605
13606         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
13607         to kb.Nlast, and not the kb.nFirst to isolate the switch
13608         statement.
13609
13610         Extract the underlying type, so enumerations of long/ulong are
13611         treated like long/ulong.
13612
13613 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
13614
13615         * expression.cs (New): Overload the meaning of RequestedType to
13616         track the possible creation of the NewDelegate type, since
13617         DoResolve is invoked more than once for new constructors on field
13618         initialization.
13619
13620         See bugs: #48800 and #37014
13621
13622         * cs-parser.jay (declare_local_constants): Take an arraylist
13623         instead of a single constant.
13624
13625         (local_constant_declaration): It should take a
13626         constant_declarators, not a constant_declarator.  Fixes 49487
13627
13628         * convert.cs: Fix error report.
13629
13630 2003-10-13 Jackson Harper <jackson@ximian.com>
13631
13632         * typemanager.cs (TypeToCoreType): Add float and double this fixes
13633         bug #49611
13634         
13635 2003-11-03  Martin Baulig  <martin@ximian.com>
13636
13637         * expression.cs (ArrayAccess.GetStoreOpcode): Added
13638         `out bool has_type_arg'; if set, we need to pass the type to
13639         ig.Emit().
13640         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
13641         Stelem_Any/Ldelem_Any for generic parameters.   
13642
13643 2003-11-02  Martin Baulig  <martin@ximian.com>
13644
13645         * expression.cs (Invocation.EmitCall): Use
13646         `TypeManager.IsValueType()' to check whether it's a value type.
13647         Don't set `struct_call' when calling a method on a type parameter.
13648
13649 2003-11-02  Martin Baulig  <martin@ximian.com>
13650
13651         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
13652         and removed the TypeBuilder argument.
13653
13654         * typemanager.cs (TypeManager.IsValueType): Return
13655         `t.IsGenericParameter || t.IsValueType'.
13656
13657 2003-10-25  Martin Baulig  <martin@ximian.com>
13658
13659         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
13660         call ConstructedType.Resolve() on it.
13661
13662         * generic.cs (ConstructedType.Resolve): Set `type' on success.
13663
13664 2003-10-25  Martin Baulig  <martin@ximian.com>
13665
13666         * class.cs (TypeContainer.GetClassBases): Changed
13667         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
13668         CS8214 reporting here.
13669         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
13670         instead of a `Type' for our parent.  In case of a recursive
13671         declaration (see tests/gen-23.cs for an example), our parent is a
13672         ConstructedType and it doesn't have its type set.  So, first
13673         create our own TypeBuilder, then call constructed.Resolve() to get
13674         the parent's type and finally TypeBuilder.SetParent() it.
13675
13676         * ecore.cs (TypeExpr.Name): New public virtual property.
13677
13678         * generic.cs
13679         (ConstructedType): We're now a TypeExpr and not just an Expression.
13680         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
13681         arguments here; this is done later.
13682         (ConstructedType.Resolve): New public method to resolve the type
13683         arguments and bind them.
13684
13685 2003-10-21  Martin Baulig  <martin@ximian.com>
13686
13687         * convert.cs: Use `TypeManager.IsValueType' instead of
13688         'type.IsValueType' everywhere.
13689
13690         * typemanager.cs (TypeManager.IsValueType): Return true for type
13691         parameters.  The reason for this is that we need to box a type
13692         parameter when converting it to a reference type.
13693
13694         * cs-parser.jay: Added support for default value expressions.
13695
13696         * generics.cs (DefaultValueExpression): New public class.       
13697
13698 2003-10-17  Martin Baulig  <martin@ximian.com>
13699
13700         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
13701         TypeContainer so we can also use this for Interfaces.
13702         (TypeParameter.Resolve): Likewise.
13703
13704         * interface.cs (Interface.DefineType): Added support for generic
13705         interfaces.
13706
13707         * cs-parser.jay: Added support for generic structs and interfaces.
13708
13709 2003-10-17  Martin Baulig  <martin@ximian.com>
13710
13711         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
13712         call generic methods :-)
13713
13714 2003-10-16  Martin Baulig  <martin@ximian.com>
13715
13716         * cs-parser.jay (namespace_or_type_name): Only create a
13717         GenericMemberAccess if we actually have type arguments.
13718
13719 2003-10-13  Martin Baulig  <martin@ximian.com>
13720
13721         * class.cs (Method.Define): If we're a generic method, call
13722         TypeBuilder.DefineGenericMethod () before resolving
13723         the parameters.
13724         (MethodData): Added .ctor which takes an additional MethodBuilder
13725         argument; this is used for generic methods.
13726         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
13727         we already have a MethodBuilder.
13728
13729 2003-10-10  Martin Baulig  <martin@ximian.com>
13730
13731         * class.cs (Method): Added .ctor which takes a `GenericMethod'
13732         instead of a `DeclSpace'.  This is used for generic methods.
13733
13734         * cs-parser.jay (method_header): Added support for generic
13735         methods; create a `GenericMethod' instance and pass it to the
13736         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
13737         parameters and locals.
13738
13739         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
13740         since we already have the location.  Check whether we're a generic
13741         type declaration or a generic method and create the correct type
13742         parameter.
13743
13744         * generic.cs (TypeParameter.DefineMethod): New public method.
13745         (GenericMethod): New public class; derives from DeclSpace and is
13746         used for generic methods.       
13747
13748 2003-10-09  Martin Baulig  <martin@ximian.com>
13749
13750         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
13751         to the .ctor.
13752         (MethodCore.DoDefineParameters): Removed the TypeContainer
13753         argument; use the DeclSpace which was passed to the .ctor instead.
13754         (MethodCore.CheckParameter): Take a DeclSpace instead of a
13755         TypeContainer; we only need a DeclSpace here.
13756
13757 2003-10-09  Martin Baulig  <martin@ximian.com>
13758
13759         * class.cs (MethodData): Added additional `DeclSpace ds' argument
13760         to the .ctor.
13761         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
13762         EmitContext's .ctor.    
13763
13764 2003-10-09  Martin Baulig  <martin@ximian.com>
13765
13766         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
13767         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
13768         AsAccessible(), moved them as well.
13769
13770         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
13771
13772 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
13773
13774         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
13775         generation for >=, as spotted by Paolo, bug 48679.  
13776         Patch from David Waite.
13777
13778         * cs-tokenizer.cs: Add handling for #pragma.
13779
13780         * cs-parser.jay: Allow for both yield and yield return in the
13781         syntax.  The anti-cobolization of C# fight will go on!
13782
13783         * class.cs (TypeBuilder.DefineType): Catch error condition here
13784         (Parent.DefineType erroring out and returning null).
13785
13786         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
13787         coping with enumerations variables, we were mistakenly processing
13788         them as a regular value type instead of built-in types.  Fixes the
13789         bug #48063
13790
13791         * typemanager.cs (IsBuiltinOrEnum): New method.
13792
13793 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
13794
13795         * cs-parser.jay: Upgrade: yield now needs the return clause.
13796
13797 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
13798
13799         * cs-parser.jay : Renamed yyName to yyNames related to jay.
13800
13801 2003-09-29  Martin Baulig  <martin@ximian.com>
13802
13803         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
13804         inflated generic methods.
13805
13806         * generics.cs (ConstructedType): Distinguish between open and
13807         closed constructed types; correctly resolve the arguments.
13808
13809 2003-09-22  Martin Baulig  <martin@ximian.com>
13810
13811         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
13812         all type arguments meet their constraints.
13813
13814 2003-09-19  Martin Baulig  <martin@ximian.com>
13815
13816         * decl.cs (MemberCache.SetupCacheForInterface): Take a
13817         `MemberCache parent' argument.  Normally, an interface doesn't
13818         have a parent type except System.Object, but we use this in gmcs
13819         for generic type parameters.
13820
13821 2003-09-18  Martin Baulig  <martin@ximian.com>
13822
13823         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
13824         on `type.IsInterface'; don't check whether the type has a parent
13825         to determine whether it's an interface.
13826
13827 2003-09-17  Martin Baulig  <martin@ximian.com>
13828
13829         * generic.cs (ConstructedType.ToString): Always use `name' as the
13830         type name.
13831
13832 2003-09-15  Martin Baulig  <martin@ximian.com>
13833
13834         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
13835
13836         * generic.cs (Constraints.Resolve): New public method; this is
13837         called to resolve the constraint types and to check whether all
13838         the constraints are correct.
13839         (Constraints.Types): New public property.
13840         (TypeParameter.Resolve): New public method; resolves all the
13841         type's constraints.
13842
13843         * class.cs (TypeContainer.DefineType): Call
13844         TypeParameter.Resolve() before actually defining the type.
13845
13846 2003-09-15  Martin Baulig  <martin@ximian.com>
13847
13848         * class.cs (TypeContainer.DefineType): Added an error flag to
13849         avoid reporting duplicate CS0146's ("class definition is
13850         circular.").
13851
13852         * driver.cs (Driver.MainDriver): Abort if
13853         RootContext.ResolveTree() reported any errors.
13854
13855 2003-09-07  Martin Baulig  <martin@ximian.com>
13856
13857         * report.cs (Error, Warning): Added overloaded versions which take
13858         a `params object[] args' and call String.Format().
13859
13860 2003-09-07  Martin Baulig  <martin@ximian.com>
13861
13862         * decl.cs (DeclSpace..ctor): Don't call
13863         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
13864         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
13865         (DeclSpace.RecordDecl): New method.
13866
13867         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
13868
13869 2003-09-02  Ravi Pratap  <ravi@ximian.com>
13870
13871         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
13872         value attributes to be applied to ParameterBuilders.
13873
13874         * class.cs (MethodCore.LabelParameters): Make static and more
13875         generic so that it can be used from other places - like interface
13876         methods, for instance.
13877
13878         * interface.cs (Interface.Emit): Call LabelParameters before
13879         emitting attributes on the InterfaceMethod.
13880
13881 2003-09-07  Martin Baulig  <martin@ximian.com>
13882
13883         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
13884         if the number of type parameters doesn't match.
13885
13886 2003-09-04  Martin Baulig  <martin@ximian.com>
13887
13888         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
13889         for arrays of generic type params (ie. `!0[]').
13890
13891 2003-09-04  Martin Baulig  <martin@ximian.com>
13892
13893         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
13894         for the moment.
13895
13896 2003-09-04  Martin Baulig  <martin@ximian.com>
13897
13898         * decl.cs (DeclSpace.LookupGeneric): New method.
13899         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
13900         moment.
13901
13902         * generic.cs (TypeParameterExpr): Take a TypeParameter as
13903         argument, not just a string.
13904         (TypeParameter.Define): New public method; this is called to
13905         actually define the generic parameter; after this, you can use the
13906         new `Type' property to get the type.
13907
13908 2003-09-04  Martin Baulig  <martin@ximian.com>
13909
13910         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
13911         is now an ArrayList; initialize the result of the `TypeParameters'
13912         property here.
13913         (DeclSpace.GetGenericData): Removed.
13914         (DeclSpace.LookupGeneric): Temporarily removed; we need to
13915         implement this in a different way.
13916         (DeclSpace.GetTypeParameters): Removed; there's now a
13917         `TypeParameters' property.
13918         (DeclSpace.TypeParameters): New public property.
13919
13920         * generic.cs (Constraints): Make this class public.
13921         (TypeParameter): New public class.
13922
13923 2003-09-04  Martin Baulig  <martin@ximian.com>
13924
13925         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
13926         generic parameters.
13927
13928         * class.cs (TypeContainer.DefineType): Call
13929         TypeBuilder.DefineGenericParameter () on all generic parameters if
13930         this is a generic type.
13931
13932 2003-08-28  Martin Baulig  <martin@ximian.com>
13933
13934         * sample-stack.il: Compile this with ilasm: "ilasm /dll
13935         sample-stack.il".
13936
13937         * sample-hello.cs: Compile this with gmcs: "gmcs
13938         /r:sample-stack.dll sample-hello.cs".
13939
13940 2003-08-28  Martin Baulig  <martin@ximian.com>
13941
13942         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
13943         the parameters to the generic type.
13944
13945 2003-08-28  Martin Baulig  <martin@ximian.com>
13946
13947         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
13948
13949 2003-08-28  Martin Baulig  <martin@ximian.com>
13950
13951         * cs-parser.jay (opt_type_argument_list): Use
13952         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
13953         (primary_expression): Replace `qualified_identifier' with `type_name'.
13954         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
13955
13956         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
13957         parser to check whether it is syntactically a type parameter list;
13958         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
13959         this case.
13960
13961 2003-08-26  Martin Baulig  <martin@ximian.com>
13962
13963         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
13964         resolving aliases; fixes #47927.
13965
13966 2003-08-26  Martin Baulig  <martin@ximian.com>
13967
13968         * statement.cs (Using.DoResolve): This is internally emitting a
13969         try/finally clause, so we need to set ec.NeedExplicitReturn if we
13970         do not always return.  Fixes #47681.
13971
13972 2003-08-26  Martin Baulig  <martin@ximian.com>
13973
13974         * decl.cs (MemberCore): Moved WarningNotHiding(),
13975         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
13976         into MemberBase.
13977         (AdditionResult): Make this nested in DeclSpace.
13978         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
13979         argument; call NamespaceEntry.Define() unless we're nested in a
13980         class or struct.
13981
13982         * namespace.cs (Namespace.DefineName): New public function.  This
13983         is called from DeclSpace's .ctor to add 
13984         (Namespace.Lookup): Include DeclSpaces in the lookup.
13985
13986         * class.cs (Operator): Derive from MemberBase, not MemberCore.
13987
13988         * const.cs (Const): Derive from MemberBase, not MemberCore.     
13989
13990 2003-08-25  Martin Baulig  <martin@ximian.com>
13991
13992         * convert.cs (Convert.ExplicitReferenceConversion): When
13993         converting from an interface type to a class, unbox if the target
13994         type is a struct type.  Fixes #47822.
13995
13996 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13997
13998         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
13999         #47854.
14000
14001 2003-08-22  Martin Baulig  <martin@ximian.com>
14002
14003         * class.cs (TypeManager.DefineType): When defining a nested type,
14004         call DefineType() on our parent; fixes #47801.
14005
14006 2003-08-22  Martin Baulig  <martin@ximian.com>
14007
14008         * class.cs (MethodData.Define): While checking if a method is an
14009         interface implementation, improve the test a bit more to fix #47654.
14010
14011 2003-08-22  Martin Baulig  <martin@ximian.com>
14012
14013         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14014         correctly; fixes #47722.
14015
14016 2003-08-22  Martin Baulig  <martin@ximian.com>
14017
14018         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14019         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14020
14021         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14022
14023 2003-08-22  Martin Baulig  <martin@ximian.com>
14024
14025         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14026         can only be assigned in static constructors.  Fixes #47161.
14027
14028 2003-08-22  Martin Baulig  <martin@ximian.com>
14029
14030         Rewrote and improved the flow analysis code.
14031
14032         * flowbranching.cs (FlowBranching): Make this class abstract.
14033         (FlowBranching.CreateBranching): New static function to create a
14034         new flow branching.
14035         (FlowBranchingBlock, FlowBranchingException): New classes.
14036         (FlowBranching.UsageVector.Type): New public readonly field.
14037         (FlowBranching.UsageVector.Breaks): Removed the setter.
14038         (FlowBranching.UsageVector.Returns): Removed the setter.
14039         (FlowBranching.UsageVector): Added Break(), Return(),
14040         NeverReachable() and Throw() methods to modify the reachability.
14041         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14042         done by FlowBranching.Merge().
14043         (FlowBranching.UsageVector.MergeChild): New method; merges the
14044         merge result into the current vector.
14045         (FlowBranching.Merge): New abstract method to merge a branching.
14046
14047 2003-08-12  Martin Baulig  <martin@ximian.com>
14048
14049         * expression.cs (Indirection.CacheTemporaries): Create the
14050         LocalTemporary with the pointer type, not its element type.
14051
14052 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14053
14054         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14055         token was a keyword or not.
14056
14057         Add `error' options where an IDENTIFIER was expected;  Provide
14058         CheckToken and CheckIdentifierToken convenience error reporting
14059         functions. 
14060
14061         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14062
14063         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14064         NameSpaceEntry NameSpaceEntry.
14065
14066         (LookupInterfaceOrClass): Avoid creating a full qualified name
14067         from namespace and name: avoid doing lookups when we know the
14068         namespace is non-existant.   Use new Tree.LookupByNamespace which
14069         looks up DeclSpaces based on their namespace, name pair.
14070
14071         * driver.cs: Provide a new `parser verbose' to display the
14072         exception thrown during parsing.  This is turned off by default
14073         now, so the output of a failure from mcs is more graceful.
14074
14075         * namespace.cs: Track all the namespaces defined in a hashtable
14076         for quick lookup.
14077
14078         (IsNamespace): New method
14079
14080 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14081
14082         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14083         we know that we need to concatenate (full typename can never be
14084         null). 
14085
14086         * class.cs: ditto.
14087
14088         * statement.cs: Use a bitfield;  Do not initialize to null things
14089         which are done by the constructor by default.
14090
14091         * cs-parser.jay: bug fix, parameter was 4, not 3.
14092
14093         * expression.cs: Just use the property;
14094
14095         * statement.cs: No need for GetVariableInfo method.
14096
14097 2003-08-08  Martin Baulig  <martin@ximian.com>
14098
14099         * flowanalysis.cs (FlowReturns): This is now nested in the
14100         `FlowBranching' class.
14101         (MyBitVector): Moved this here from statement.cs.
14102         (FlowBranching.SiblingType): New enum type.
14103         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14104
14105 2003-08-07  Martin Baulig  <martin@ximian.com>
14106
14107         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14108         `FlowBranching' class and called `BranchingType'.
14109
14110 2003-08-07  Martin Baulig  <martin@ximian.com>
14111
14112         * flowanalysis.cs: Moved all the control flow analysis code into
14113         its own file.
14114
14115 2003-08-07  Martin Baulig  <martin@ximian.com>
14116
14117         * assign.cs (Assign.DoResolve): `target' must either be an
14118         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14119         #37319.
14120
14121 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14122
14123         * expression.cs (BinaryMethod): This kind of expression is created by the
14124         Binary class if it determines that the operator has to be handled
14125         by a method.
14126
14127         (BinaryDelegate): This kind of expression is created if we are
14128         dealing with a + or - operator on delegates.
14129
14130         (Binary): remove method, argumetns, and DelegateOperator: when
14131         dealing with methods, 
14132
14133         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14134
14135         * statement.cs (Block): use bitfields for the three extra booleans
14136         we had in use.   Remove unused topblock parameter.
14137
14138         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14139
14140         * assign.cs: Drop extra unneeded tests.
14141
14142 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14143
14144         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14145
14146         * statement.cs (Foreach): Use VariableStorage instead of
14147         LocalBuilders.   
14148
14149         * codegen.cs (VariableStorage): New class used by clients that
14150         require a variable stored: locals or fields for variables that
14151         need to live across yield.
14152
14153         Maybe provide a convenience api for EmitThis+EmitLoad?
14154
14155         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14156         these bad boys.
14157
14158 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14159
14160         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14161         RemapParameterLValue): New methods that are used to turn a
14162         precomputed FieldInfo into an expression like this:
14163
14164                 instance.FieldInfo
14165
14166         The idea is to use this instead of making LocalVariableReference
14167         have more than one meaning.
14168
14169         * cs-parser.jay: Add error production to BASE.
14170
14171         * ecore.cs: Deal with TypeManager.GetField returning null, which
14172         is now a valid return value.
14173
14174         (FieldExprNoAddress): New expression for Fields whose address can
14175         not be taken.
14176
14177         * expression.cs (LocalVariableReference): During the resolve
14178         phases, create new expressions if we are in a remapping context.
14179         Remove code that dealt with remapping here.
14180
14181         (ParameterReference): same.
14182
14183         (ProxyInstance): New expression, like the `This' expression, but
14184         it is born fully resolved.  We know what we are doing, so remove
14185         the errors that are targeted to user-provided uses of `this'.
14186
14187         * statement.cs (Foreach): our variable is now stored as an
14188         Expression;  During resolution, follow the protocol, dont just
14189         assume it will return this.
14190
14191 2003-08-06  Martin Baulig  <martin@ximian.com>
14192
14193         * support.cs (SeekableStreamReader.cs): New public class.
14194
14195         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14196         SeekableStreamReader instead of the normal StreamReader.
14197
14198 2003-08-04  Martin Baulig  <martin@ximian.com>
14199
14200         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14201         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14202         deambiguate casts and delegate invocations.
14203         (parenthesized_expression): Use the new tokens to ensure this is
14204         not a cast of method invocation.
14205
14206         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14207         when reading a `)' and Deambiguate_CloseParens () was previously
14208         called.
14209
14210         * expression.cs (ParenthesizedExpression): New class.  This is
14211         just used for the CS0075 test.
14212         (Binary.DoResolve): Check for CS0075.   
14213
14214 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14215
14216         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14217         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14218         reference comparison.
14219
14220         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14221         examine the ReturnType for equality - this is necessary in the
14222         cases of implicit and explicit operators whose signature also
14223         includes the return type.
14224
14225 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14226
14227         * namespace.cs: Cache the result of the namespace computation,
14228         instead of computing it every time.
14229
14230 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14231
14232         * decl.cs: Use a global arraylist that we reuse over invocations
14233         to avoid excesive memory consumption.  Reduces memory usage on an
14234         mcs compile by one meg (45 average).
14235
14236         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14237         private, work around that.
14238
14239 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14240
14241         * literal.cs (IntLiteral): Define Zero and One static literals. 
14242
14243         * cs-parser.jay (integer_literal): use static literals to reduce
14244         memory usage for the most used literals (0, 1 and -1).  211kb
14245         reduced in memory usage.
14246
14247         Replace all calls to `new ArrayList' with `new
14248         ArrayList(4)' which is a good average number for most allocations,
14249         and also requires only 16 bytes of memory for its buffer by
14250         default. 
14251
14252         This reduced MCS memory usage in seven megabytes for the RSS after
14253         bootstrapping.
14254
14255 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14256
14257         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14258         handle params methods the correct way by forming only one
14259         applicable set with params and normal methods in them. Earlier we
14260         were looking at params methods only if we found no normal methods
14261         which was not the correct thing to do.
14262
14263         (Invocation.BetterFunction): Take separate arguments indicating
14264         when candidate and the best method are params methods in their
14265         expanded form.
14266
14267         This fixes bugs #43367 and #46199.
14268
14269         * attribute.cs: Documentation updates.
14270
14271         (CheckAttribute): Rename to CheckAttributeTarget.
14272         (GetValidPlaces): Rename to GetValidTargets.
14273
14274         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14275         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14276
14277         Fixes bug #44468.
14278
14279 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14280
14281         * codegen.cs: Compute IsGeneric correctly.
14282
14283         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14284         resolution. 
14285
14286         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14287         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14288         regressions, and I was chasing more bugs than I required.
14289
14290         * interface.cs: Use expressions for base type names (like classes
14291         and structs have been doing for a while now), and resolve that.
14292         This patch should probably go into head as well.
14293
14294         This makes it one less user of FindType.
14295
14296 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14297
14298         This compiler can not self host currently.  Need to fix that.
14299         
14300         * Makefile: compile to `gmcs.exe'
14301
14302         * driver.cs: Turn on v2 by default on gmcs.
14303
14304         * generic.cs (ConstructedType): Does no longer take a container
14305         type argument;  That will be taken care of later.
14306
14307         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14308         Use SimpleName to resolve for now, so we can continue the work on
14309         the parser, until we get Type.GetType that understands generics.
14310
14311         (ConstructedType.ToString): Implement
14312
14313         (TypeArguments.Resolve): Resolve the child expressions as types. 
14314         
14315         * cs-parser.jay: Rename interface_constraints to
14316         type_parameter_constraints
14317
14318         (namespace_or_type_name): Only use constructed types for the basic
14319         construction, we will deal with identifier<...> later.
14320
14321         (type/type_name): No longer call DecomposeQI, as
14322         namespace_or_type_name is always decoded now.
14323         
14324 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14325
14326         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14327         closely: we eliminate methods in base types when we have an
14328         applicable method in a top-level type.
14329
14330         Please see section 14.5.5.1 for an exact description of what goes
14331         on. 
14332
14333         This fixes bug #45127 and a host of other related to corlib compilation.
14334
14335         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14336         array is the method corresponding to the top-level type (this is
14337         because of the changes made to icall.c) so we change this
14338         accordingly.
14339
14340         (MethodGroupExpr.Name): This too.
14341
14342         * typemanager.cs (GetElementType): New method which does the right
14343         thing when compiling corlib. 
14344
14345         * everywhere: Make use of the above in the relevant places.
14346
14347 2003-07-22  Martin Baulig  <martin@ximian.com>
14348
14349         * cs-parser.jay (invocation_expression): Moved
14350         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14351         `cast_expression', but create a InvocationOrCast which later
14352         resolves to either an Invocation or a Cast.
14353
14354         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14355         method; call this before EmitStatement() to make sure that this
14356         expression can be used as a statement.
14357
14358         * expression.cs (InvocationOrCast): New class; resolves to either
14359         an Invocation or a Cast.
14360
14361         * statement.cs (StatementExpression): Call ResolveStatement() on
14362         the ExpressionStatement before emitting it.
14363
14364 2003-07-21  Martin Baulig  <martin@ximian.com>
14365
14366         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14367         `ref' and `out' attributes match; fixes #46220.
14368         (MemberAccess.ResolveMemberAccess): You can't reference a type
14369         through an expression; fixes #33180.
14370         (Indexers.GetIndexersForType): Don't return the indexers from
14371         interfaces the class implements; fixes #46502.
14372
14373 2003-07-21  Martin Baulig  <martin@ximian.com>
14374
14375         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14376         CS0661 checks; fixes bug #30442.
14377
14378 2003-07-21  Martin Baulig  <martin@ximian.com>
14379
14380         * decl.cs (AdditionResult): Added `Error'.
14381
14382         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14383
14384         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14385         cs0031.cs actually work.
14386
14387  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14388  
14389         * cs-parser.jay (namespace_name): do not use
14390         namespace_or_type_name, use qualified_identifier, because
14391         namespace_or_type_name will soon return a composed expression
14392         instead of a string.
14393  
14394         (namespace_or_type_name): Instead of returning a string, now this
14395         production returns an expression.
14396  
14397         * codegen.cs (EmitContext): Setup IsGeneric property based on
14398         whether our DeclSpace is generic, our the method is generic.
14399  
14400         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14401         the method is generic.
14402  
14403         * cs-parser.jay (type_arguments, opt_type_argument_list,
14404         type_parameters, type_parameter_list, opt_type_parameter_list,
14405         type_parameter,, opt_type_parameter_constraints_clauses,
14406         type_parameter_constraints_clauses,
14407         type_parameter_constraint_clause, type_parameter_constraint,
14408         interface_constraints): Add new production
14409  
14410         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14411         DeclSpace is generic or not.
14412  
14413         (DeclSpace.SetParameterInfo): New routine, used to set the
14414         parameter info for a type.
14415  
14416         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14417         returns a GenericTypeExpr
14418  
14419         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14420         generic, lookup the generic argument.
14421  
14422         * attribute.cs: Do not allow TypeParameterExpressions in
14423         Attributes.
14424  
14425         * class.cs: Do not allow the Main method to be defined in a
14426         Generic container.
14427  
14428         * expression.cs (SizeOf): Do not allow generic types to be used as
14429         arguments to sizeof.
14430  
14431         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14432         it: whether a type is generic or not.  Only works for types we are
14433         currently building for now.
14434         
14435 2003-07-20  Martin Baulig  <martin@ximian.com>
14436
14437         * namespace.cs: Fixed that bug which caused a crash when compiling
14438         the debugger's GUI.
14439
14440 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14441
14442         * typemanager.cs (LookupTypeReflection): Never expose types which
14443         are NotPublic, NestedPrivate, NestedAssembly, or
14444         NestedFamANDAssem.  We used to return these, and later do a check
14445         that would report a meaningful error, but the problem is that we
14446         would not get the real match, if there was a name override.
14447
14448 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14449
14450         * namespace.cs (Namespace, Name): Do not compute the namespace
14451         name dynamically, compute it in the constructor.  This reduced
14452         memory usage by 1697 KB.
14453
14454         * driver.cs: Use --pause to pause at the end.
14455
14456 2003-07-17  Peter Williams  <peter@newton.cx>
14457
14458         * Makefile: Change the name of the test target so that it doesn't
14459         conflict with the recursive test target.
14460
14461 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14462
14463         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14464         AddressOf): Do not use EmitThis, that was wrong, use the actual
14465         this pointer.
14466
14467 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
14468
14469         * class.cs (MethodData.Define): While checking if a method is an
14470         interface implementation, improve the test: If we are not public
14471         (use new test here: use the computed MethodAttributes directly,
14472         instead of the parsed modifier flags) check if the `implementing'
14473         method comes from an interface or not.
14474
14475         * pending.cs (VerifyPendingMethods): Slightly better error
14476         message.
14477
14478         * makefile: add test target that does the mcs bootstrap.
14479
14480 2003-07-16  Ravi Pratap  <ravi@ximian.com>
14481
14482         * interface.cs (Define): Do nothing here since there are no
14483         members to populate etc. Move the attribute emission out of here
14484         since this was just totally the wrong place to put it. Attribute
14485         application happens during the 'Emit' phase, not in the 'Define'
14486         phase.
14487
14488         (Emit): Add this method and move the attribute emission here
14489
14490         * rootcontext.cs (EmitCode): Call the Emit method on interface
14491         types too.
14492
14493 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14494
14495         * expression.cs (OverloadResolve): Report error only if Location
14496         is not 'Null' which means that there was a probe going on.
14497
14498 2003-07-14  Martin Baulig  <martin@ximian.com>
14499
14500         * expression.cs (ConditionalLogicalOperator): New public class to
14501         implement user defined conditional logical operators.
14502         This is section 14.11.2 in the spec and bug #40505.
14503
14504 2003-07-14  Martin Baulig  <martin@ximian.com>
14505
14506         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
14507
14508 2003-07-14  Martin Baulig  <martin@ximian.com>
14509
14510         * codegen.cs (EmitContext.InFixedInitializer): New public field.
14511
14512         * ecore.cs (IVariable.VerifyFixed): New interface method.
14513
14514         * expression.cs (Unary.ResolveOperator): When resolving the `&'
14515         operator, check whether the variable is actually fixed.  Fixes bug
14516         #36055.  Set a variable definitely assigned when taking its
14517         address as required by the spec.
14518
14519         * statement.cs (LocalInfo.IsFixed): New field.
14520         (LocalInfo.MakePinned): Set `IsFixed' to true.
14521
14522 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14523
14524         * attribute.cs (Attribute.Resolve): While doing a Member lookup
14525         for .ctors, ensure that we only ask for members declared in the
14526         attribute type (BindingFlags.DeclaredOnly).
14527
14528         Fixes bug #43632.
14529
14530         * expression.cs (Error_WrongNumArguments): Report error 1501
14531         correctly the way CSC does.
14532
14533 2003-07-13  Martin Baulig  <martin@ximian.com>
14534
14535         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
14536         lookup on the fully qualified name, to make things like "X.X" work
14537         where "X.X" is a fully qualified type name, but we also have a
14538         namespace "X" in the using list.  Fixes #41975.
14539
14540 2003-07-13  Martin Baulig  <martin@ximian.com>
14541
14542         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
14543         function. If we're a CompoundAssign, we need to create an embedded
14544         CompoundAssign, not an embedded Assign.
14545         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
14546         Fixes #45854.
14547
14548 2003-07-13  Martin Baulig  <martin@ximian.com>
14549
14550         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
14551         work to fix bug #46088.
14552
14553 2003-07-13  Ravi Pratap <ravi@ximian.com>
14554
14555         * class.cs (Operator.Emit): Do not emit attributes here - it is
14556         taken care of by the Method class that we delegate too. This takes
14557         care of bug #45876.
14558
14559 2003-07-10  Martin Baulig  <martin@ximian.com>
14560
14561         * expression.cs (TypeOfVoid): New class.
14562         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
14563
14564 2003-07-10  Martin Baulig  <martin@ximian.com>
14565
14566         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
14567         bug #35957.
14568
14569 2003-07-10  Martin Baulig  <martin@ximian.com>
14570
14571         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
14572         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
14573
14574         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
14575
14576         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
14577
14578 2003-07-10  Martin Baulig  <martin@ximian.com>
14579
14580         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
14581         of decimal.  Fixes #42850.
14582
14583         NOTE: I also fixed the created byte blob, but this doesn't work on
14584         the MS runtime and csc never produces any byte blobs for decimal
14585         arrays.
14586
14587 2003-07-10  Martin Baulig  <martin@ximian.com>
14588
14589         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
14590         structs; fixes #32068.
14591         (Block.AddChildVariableNames): Fixed #44302.
14592
14593 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14594
14595         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
14596
14597 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14598
14599         * attribute.cs: And this test is onger needed.
14600
14601 2003-07-08  Martin Baulig  <martin@ximian.com>
14602
14603         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
14604         inaccessible types.  Fixes #36313.
14605
14606         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
14607
14608         * namespace.cs (NamespaceEntry): Create implicit entries for all
14609         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
14610         implicit entries for N1.N2 and N1.
14611
14612 2003-07-08  Martin Baulig  <martin@ximian.com>
14613
14614         Rewrote the handling of namespaces to fix a lot of the issues
14615         wrt. `using' aliases etc.
14616
14617         * namespace.cs (Namespace): Splitted this class into a
14618         per-assembly `Namespace' and a per-file `NamespaceEntry'.
14619
14620         * typemanager.cs (TypeManager.IsNamespace): Removed.
14621         (TypeManager.ComputeNamespaces): Only compute namespaces from
14622         loaded assemblies here, not the namespaces from the assembly we're
14623         currently compiling.
14624
14625 2003-07-08  Martin Baulig  <martin@ximian.com>
14626
14627         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
14628
14629 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14630
14631         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
14632         already fixed it.  
14633
14634         I thought about the memory savings here, but LookupTypeReflection
14635         is used under already very constrained scenarios.  Compiling
14636         corlib or mcs only exposes one hit, so it would not really reduce
14637         any memory consumption.
14638
14639 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14640
14641         * typemanager.cs: fixes bug #45889 by only adding public types from
14642         other assemblies to the list of known types.
14643
14644 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14645
14646         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
14647         on the type we resolved.
14648
14649 2003-07-05  Martin Baulig  <martin@ximian.com>
14650
14651         * pending.cs (PendingImplementation.ParentImplements): Don't
14652         create the proxy if the parent is abstract.
14653
14654         * class.cs (TypeContainer.DefineIndexers): Process explicit
14655         interface implementations first.  Fixes #37714.
14656
14657 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
14658
14659         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
14660         defined recursively;  but since we modify the input parameters
14661         (left is set to `this' temporarily), we reset this value if the
14662         left_is_explicit is false, which gives the original semantics to
14663         the code.  
14664
14665         * literal.cs (NullPointer): new class used to represent a null
14666         literal in a pointer context.
14667
14668         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
14669         type is a pointer, use a NullPointer object instead of a
14670         NullLiteral.   Closes 43687
14671
14672         (ExplicitConversion): Convert pointer values using
14673         the conv opcode to the proper type.
14674
14675         * ecore.cs (New): change ValueTypeVariable property into a method,
14676         that returns whether the valuetype is suitable for being used.
14677
14678         * expression.cs (Binary.DoNumericPromotions): Only return if we
14679         the int constant was a valid uint, and we can return both left and
14680         right as uints.  If not, we continue processing, to trigger the
14681         type conversion.  This fixes 39018.
14682
14683         * statement.cs (Block.EmitMeta): During constant resolution, set
14684         the CurrentBlock property on the emitcontext, so that we resolve
14685         constants propertly.
14686
14687 2003-07-02  Martin Baulig  <martin@ximian.com>
14688
14689         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
14690         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
14691
14692         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
14693         than emitting it here.
14694
14695         * statement.cs: Fixed some more flow analysis bugs.
14696
14697 2003-07-02  Martin Baulig  <martin@ximian.com>
14698
14699         * class.cs (MethodData.Define): When implementing interface
14700         methods, set Final unless we're Virtual.
14701
14702         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
14703         check work for interface methods.
14704
14705 2003-07-01  Martin Baulig  <martin@ximian.com>
14706
14707         * ecore.cs (EmitContext.This): Replaced this property with a
14708         GetThis() method which takes a Location argument.  This ensures
14709         that we get the correct error location for a CS0188.
14710
14711 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
14712
14713         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
14714         ImplicitStandardConversion.
14715
14716         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
14717
14718 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
14719
14720         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
14721         optimization.
14722
14723 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
14724
14725         * class.cs (Constructor.Define): Turn off initlocals for unsafe
14726         constructors.
14727
14728         (MethodData.Define): Turn off initlocals for unsafe methods.
14729
14730 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
14731
14732         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
14733         complete;  Fixes #37521.
14734
14735         * delegate.cs: Use Modifiers.TypeAttr to compute the
14736         TypeAttributes, instead of rolling our own.  This makes the flags
14737         correct for the delegates.
14738
14739 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
14740
14741         * class.cs (Constructor.Define): Set the private flag for static
14742         constructors as well.
14743
14744         * cs-parser.jay (statement_expression): Set the return value to
14745         null, to avoid a crash when we catch an error.
14746
14747 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
14748
14749         * cs-parser.jay: Applied patch from Jackson that adds support for
14750         extern and unsafe modifiers to destructor declarations.
14751
14752         * expression.cs: Report error 21 if the user is trying to index a
14753         System.Array.
14754
14755         * driver.cs: Add an error message, suggested by the bug report.
14756
14757         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
14758         if we do not have a ": this ()" constructor initializer.  Fixes 45149
14759
14760 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
14761
14762         * namespace.cs: Add some information to reduce FAQs.
14763
14764 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
14765
14766         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
14767         underlying enumeration types.  Fixes #43915.
14768
14769         * expression.cs: Treat ushort/short as legal values to be used in
14770         bitwise operations.
14771
14772 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
14773
14774         * delegate.cs: transfer custom attributes for paramenters from
14775         the delegate declaration to Invoke and BeginInvoke.
14776
14777 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
14778
14779         * attribute.cs: handle custom marshalers and emit marshal info
14780         for fields, too.
14781
14782 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
14783
14784         * makefile.gnu: Added anonymous.cs to the compiler sources.
14785
14786 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
14787
14788         * iterators.cs: Change the name of the proxy class to include two
14789         underscores.
14790
14791         * cs-parser.jay: Update grammar to include anonymous methods.
14792
14793         * anonymous.cs: new file.
14794
14795 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
14796
14797         * class.cs (Field.Define): Add missing test for pointers and
14798         safety. 
14799
14800 2003-05-27  Ravi Pratap  <ravi@ximian.com>
14801
14802         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
14803         we use the stobj opcode.
14804
14805         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
14806         since it wasn't the correct fix. 
14807
14808         It still is puzzling that we are required to use stobj for IntPtr
14809         which seems to be a ValueType.
14810
14811 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
14812
14813         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
14814         during regular simple name resolution.   Now, the trick is that
14815         instead of returning for processing the simplename, we do a
14816         TypeManager.LookupType (ie, a rooted lookup as opposed to a
14817         contextual lookup type).   If a match is found, return that, if
14818         not, return for further composition.
14819
14820         This fixes long-standing 30485.
14821
14822         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14823         using the address to initialize an object, do an Stobj instead of
14824         using the regular Stelem.
14825
14826         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
14827         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
14828         Because if we are a BaseIndexerAccess that value will be true.
14829         Fixes 43643.
14830
14831         * statement.cs (GotoCase.Resolve): Return after reporting an
14832         error, do not attempt to continue. 
14833
14834         * expression.cs (PointerArithmetic.Emit): If our operand is a
14835         long, convert our constants to match the operand before
14836         multiplying.  Convert to I type before adding.   Fixes 43670.
14837
14838 2003-05-14  Ravi Pratap  <ravi@ximian.com>
14839
14840         * enum.cs (ImplicitConversionExists) : Rename to
14841         ImplicitEnumConversionExists to remove ambiguity. 
14842
14843         * ecore.cs (NullCast): New type of cast expression class which
14844         basically is very similar to EmptyCast with the difference being
14845         it still is a constant since it is used only to cast a null to
14846         something else
14847         (eg. (string) null)
14848
14849         * convert.cs (ImplicitReferenceConversion): When casting a null
14850         literal, we return a NullCast.
14851
14852         * literal.cs (NullLiteralTyped): Remove - I don't see why this
14853         should be around anymore.
14854
14855         The renaming (reported was slightly wrong). Corrections:
14856
14857         ConvertImplicitStandard -> ImplicitConversionStandard
14858         ConvertExplicitStandard -> ExplicitConversionStandard
14859
14860         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
14861         before passing them in !
14862
14863         * convert.cs (ImplicitConversionStandard): When comparing for
14864         equal expr and target types, ensure that expr is not a
14865         NullLiteral.
14866
14867         In general, we must not be checking (expr_type ==
14868         target_type) in the top level conversion methods
14869         (ImplicitConversion, ExplicitConversion etc). This checking is
14870         done in the methods that they delegate to.
14871
14872 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
14873
14874         * convert.cs: Move Error_CannotConvertType,
14875         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
14876         ImplicitNumericConversion, ImplicitConversionExists,
14877         ImplicitUserConversionExists, StandardConversionExists,
14878         FindMostEncompassedType, FindMostSpecificSource,
14879         FindMostSpecificTarget, ImplicitUserConversion,
14880         ExplicitUserConversion, GetConversionOperators,
14881         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
14882         TryImplicitIntConversion, Error_CannotConvertImplicit,
14883         ConvertImplicitRequired, ConvertNumericExplicit,
14884         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
14885         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
14886         its own file.
14887
14888         Perform the following renames:
14889
14890         StandardConversionExists -> ImplicitStandardConversionExists
14891         ConvertImplicit -> ImplicitConversion
14892         ConvertImplicitStandard -> ImplicitStandardConversion
14893         TryImplicitIntConversion -> ImplicitIntConversion
14894         ConvertImplicitRequired -> ImplicitConversionRequired
14895         ConvertNumericExplicit -> ExplicitNumericConversion
14896         ConvertReferenceExplicit -> ExplicitReferenceConversion
14897         ConvertExplicit -> ExplicitConversion
14898         ConvertExplicitStandard -> ExplicitStandardConversion
14899
14900 2003-05-19  Martin Baulig  <martin@ximian.com>
14901
14902         * statement.cs (TypeInfo.StructInfo): Made this type protected.
14903         (TypeInfo): Added support for structs having structs as fields.
14904
14905         * ecore.cs (FieldExpr): Implement IVariable.
14906         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
14907         VariableInfo for the field.
14908
14909 2003-05-18  Martin Baulig  <martin@ximian.com>
14910
14911         * expression.cs (This.DoResolve): Report a CS0027 if we're
14912         emitting a field initializer.
14913
14914 2003-05-18  Martin Baulig  <martin@ximian.com>
14915
14916         * expression.cs (This.ResolveBase): New public function.
14917         (This.DoResolve): Check for CS0188.
14918
14919         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
14920         This.Resolve().
14921
14922         * ecore.cs (MethodGroupExpr.DoResolve): Set the
14923         `instance_expression' to null if we don't have any non-static
14924         methods.
14925
14926 2003-05-18  Martin Baulig  <martin@ximian.com>
14927
14928         Reworked the way how local variables and parameters are handled by
14929         the flow analysis code.
14930
14931         * statement.cs (TypeInfo, VariableMap): New public classes.
14932         (VariableInfo): New public class.  This is now responsible for
14933         checking whether a variable has been assigned.  It is used for
14934         parameters and local variables.
14935         (Block.EmitMeta): Take the InternalParameters as argument; compute
14936         the layout of the flow vectors here.
14937         (Block.LocalMap, Block.ParameterMap): New public properties.
14938         (FlowBranching): The .ctor doesn't get the InternalParameters
14939         anymore since Block.EmitMeta() now computes the layout of the flow
14940         vector.
14941         (MyStructInfo): This class is now known as `StructInfo' and nested
14942         in `TypeInfo'; we don't access this directly anymore.
14943
14944         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
14945         property and removed IsAssigned(), IsFieldAssigned(),
14946         SetAssigned() and SetFieldAssigned(); we now call them on the
14947         VariableInfo so we don't need to duplicate this code everywhere.
14948
14949         * expression.cs (ParameterReference): Added `Block block' argument
14950         to the .ctor.
14951         (LocalVariableReference, ParameterReference, This): The new
14952         VariableInfo class is now responsible for all the definite
14953         assignment stuff.
14954
14955         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
14956         IsParameterAssigned, SetParameterAssigned): Removed.
14957
14958 2003-05-18  Martin Baulig  <martin@ximian.com>
14959
14960         * typemanager.cs (InitCoreTypes): Try calling
14961         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
14962         the 3-args-version.  Corlib now also needs our `void_type'.
14963         (GetMethod): Added overloaded version which takes an optional
14964         `bool report_errors' to allow lookups of optional methods.
14965
14966 2003-05-12  Martin Baulig  <martin@ximian.com>
14967
14968         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
14969         only used for locals and not for parameters.
14970
14971 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
14972
14973         * support.cs (InternalParameters.ParameterType): Return the
14974         ExternalType of the parameter.
14975
14976         * parameter.cs (Parameter.ExternalType): drop the two arguments,
14977         they were unused.
14978
14979 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
14980
14981         * class.cs (MethodData.Define): Do not set the `newslot' on
14982         interface members, if they are also flagged as "override".
14983
14984         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
14985         better code for ++i and i++.  This only works for static fields
14986         and local variables.
14987
14988         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
14989         want to pull the DeclSpace out of the builder_to_declspace instead
14990         of the TypeBuilder (like in TypeContainer.FindMembers).
14991
14992         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
14993         instead of LookupTypeContainer.  Fixes the crash on .NET for
14994         looking up interface members.
14995
14996         * const.cs: Create our own emit context during the Definition
14997         stage, so that constants are evaluated in the proper context, when
14998         a recursive definition happens.
14999
15000 2003-05-11  Martin Baulig  <martin@ximian.com>
15001
15002         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15003         new block for a switch section.
15004         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15005         the adding/lookup in the switch block.  Fixes #39828.
15006
15007 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15008
15009         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15010         functionality: I needed to convert the data after I had performed
15011         the add/sub operation into the operands type size.
15012
15013         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15014         pass the type for the box operation, otherwise the resulting
15015         object would have been of type object.
15016
15017         (BoxedCast): Add constructor to specify the type to box as.
15018
15019 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15020
15021         * iterators.cs: I was reusing the `count' variable inadvertently,
15022         take steps to not allow this to happen.
15023
15024 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15025
15026         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15027         by creating an array at the point where the params starts and
15028         putting all those arguments there, then adjusting the size of the
15029         array.
15030
15031 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15032
15033         * expression.cs (New.AddressOf): Implement interface
15034         IMemoryLocation.  This is used when the `new' operator is used in
15035         the context of an invocation to a method on a value type.
15036
15037         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15038         example. 
15039
15040         * namespace.cs: Also check the using aliases here.
15041
15042         * driver.cs: Move the test for using validity after the types have
15043         been entered, so we do a single pass that also includes the using
15044         aliases. 
15045
15046         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15047         in the regular case.   CreateSiblingForFinally is doing extra
15048         error checking.
15049
15050         * attribute.cs (GetAttributeArgumentExpression): Store the result
15051         on an out value, and use the return value to indicate failure
15052         instead of using null (which is a valid return for Constant.GetValue).
15053
15054         * statement.cs: Perform the analysis flow for the increment
15055         portion after the statement, because this will be the real flow of
15056         execution.  Fixes #42385
15057
15058         * codegen.cs (EmitContext.EmitArgument,
15059         EmitContext.EmitStoreArgument): New helper functions when the
15060         RemapToProxy flag is set.
15061
15062         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15063         function.
15064
15065         Add support for remapping parameters. 
15066
15067         * iterators.cs: Propagate parameter values;  Store parameter
15068         values in the proxy classes.
15069
15070 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15071
15072         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15073         need a proxy reference;  I do not know what I was thinking
15074
15075         * cs-parser.jay (constructor_initializer): catch another error,
15076         and display nice message.
15077
15078         (field_declaration): catch void field declaration
15079         to flag a better error. 
15080
15081         * class.cs (MemberBase.CheckBase): Report an error instead of a
15082         warning if a new protected member is declared in a struct. 
15083         (Field.Define): catch the error of readonly/volatile.
15084
15085         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15086
15087         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15088         volatile variable is taken
15089
15090 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15091
15092         * statement.cs (Fixed.Resolve): Report an error if we are not in
15093         an unsafe context.
15094
15095 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15096
15097         * typemanager.cs: reuse the code that handles type clashes for
15098         delegates and enumerations.
15099
15100         * class.cs (Report28): Always report.
15101
15102         * expression.cs (EncodeAsAttribute): Allow nulls here.
15103
15104 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15105
15106         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15107         the functionality for testing whether an expression is valid for
15108         an attribute here.  Also handle the case of arrays of elements
15109         being stored. 
15110
15111         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15112         encoding a linear array into an array of objects that are suitable
15113         to be passed to an CustomAttributeBuilder.
15114
15115         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15116
15117         * ecore.cs: (FieldExpr): Handle field remapping here.
15118
15119         * iteratators.cs: Pass the instance variable (if the method is an
15120         instance method) to the constructors, so we can access the field
15121         variables on the class.
15122
15123         TODO: Test this with structs.  I think the THIS variable on
15124         structs might have to be a pointer, and not a refenrece
15125
15126 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15127
15128         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15129         local variables to fields in a proxy class.
15130
15131         * iterators.cs (PopulateProxy): Rename our internal fields to
15132         <XXX>.  
15133         Create a <THIS> field if we are an instance method, so we can
15134         reference our parent container variables.
15135         (MapVariable): Called back from the EmitContext code to enter a
15136         new variable to field mapping into the proxy class (we just create
15137         a FieldBuilder).
15138
15139         * expression.cs
15140         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15141         for using the remapped locals to fields.
15142
15143         I placed the code here, because that gives the same semantics to
15144         local variables, and only changes the Emit code.
15145
15146         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15147         statements inside iterators.
15148         (VariableInfo): Add a FieldBuilder for the cases when we are
15149         remapping local variables to fields in a proxy class
15150
15151         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15152         current_block != null.
15153
15154         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15155         not cope with strings, as it has been moved to the
15156         TableSwitchEmit.  Fixed bug in switch generation.
15157
15158         * expression.cs (New.DoResolve): Provide more context for the user
15159         when reporting an error.
15160
15161         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15162         pointers. 
15163
15164         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15165         check the permissions for it.  Note than in a type-resolution
15166         context the check was already present in DeclSpace.ResolveType,
15167         but was missing from the MemberAccess.
15168
15169         (ArrayCreation.CheckIndices): warn if the user has
15170         more nested levels of expressions, but there are no more
15171         dimensions specified.  Avoids crash on bug 41906.
15172
15173 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15174
15175         * statement.cs (Block): replace Implicit bool, for a generic
15176         flags.   
15177         New flag: `Unchecked'.  This is used during the EmitMeta phase
15178         (which is out-of-line with the regular Resolve/Emit process for a
15179         statement, as this is done ahead of time, but still gets a chance
15180         to call constant resolve).
15181
15182         (Block.Flags): new enum for adding a new flag.
15183
15184         (Block.EmitMeta): track the state of unchecked.
15185
15186         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15187         to enable constant resolution to work there as well.
15188
15189 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15190
15191         * typemanager.cs (ienumerable_type): Also look up
15192         System.Collections.IEnumerable. 
15193
15194 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15195
15196         TODO: Test more than one conditional per method.
15197
15198         * class.cs (Indexer.Define): Report the location where the user is
15199         referencing the unsupported feature.
15200
15201         (MethodData): Overload the use of `conditionals' to
15202         minimize the creation of needless ArrayLists.   This saves roughly
15203         212kb on my machine.
15204
15205         (Method): Implement the new IIteratorContainer interface.
15206         (Method.SetYields): Implement the method by setting the ModFlags
15207         to contain METHOD_YIELDS.
15208
15209         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15210         which just got set to null.
15211
15212         * iterators.cs: New file.
15213
15214         (Yield, YieldBreak): New statements.
15215
15216         * statement.cs (Return.Resolve): Flag an error if we are used in
15217         an iterator method.
15218
15219         * codegen.cs (InIterator): New flag set if the code is being
15220         compiled in an iterator method.
15221
15222         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15223         internal modifier, and we just use it to avoid adding extra
15224         fields, as this is seldom used.  
15225
15226         * cs-parser.jay: Add yield_statement (yield and yield break).
15227
15228         * driver.cs: New flag -v2 to turn on version 2 features. 
15229
15230         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15231         hashtable when v2 is enabled.
15232
15233 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15234
15235         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15236         there is already a namespace defined with this name.
15237
15238         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15239         people upgraded their corlibs.
15240
15241         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15242         always use fully qualified types, no need to use the compiler
15243         front end.
15244
15245         (TypeManager.IsNamespace): Use binarysearch.
15246
15247         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15248         AddDelegate): I did not quite use the new IsValid API properly: I
15249         have to pass the short-name and the fullname.  I was passing only
15250         the basename instead of the fullname sometimes. 
15251
15252         (TypeContainer.DefineType): call NamespaceClash.
15253
15254         * interface.cs (Interface.DefineType): use NamespaceClash before
15255         defining the type.
15256
15257         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15258         defining the type.
15259
15260         * enum.cs: (Enum.DefineType): use NamespaceClash before
15261         defining the type.
15262
15263         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15264         speed increase.  First, use the negative_hits cache when we get a
15265         negative.  Second, add the type with its full original name
15266         instead of the new . and + encoded name (reflection uses + to
15267         separate type from a nested type).  Use LookupTypeReflection
15268         directly which bypasses the type->name hashtable (that we already
15269         know does not contain the type.
15270
15271         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15272         location/container type. 
15273
15274         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15275
15276 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15277
15278         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15279
15280         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15281         method is being referenced in the method group from a static
15282         context, and report error 120 if so.
15283
15284         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15285         Error118. 
15286
15287         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15288         is created, we create the A namespace).
15289
15290         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15291         Fixes #41591
15292
15293 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15294
15295         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15296         invocation to ModuleBuilder.GetType with the same values will
15297         return a new type instance, so we need to cache its return
15298         values. 
15299
15300         * expression.cs (Binary.ResolveOperator): Only allow the compare
15301         operators on enums if they are of the same type.
15302
15303         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15304         types of ValueType on their own case.  Before we were giving them
15305         the same treatment as objects.
15306
15307         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15308         fullname.  Short name is used to compare against container name.
15309         Fullname is used to check against defined namespace names.
15310
15311         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15312         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15313
15314         (Method.CheckBase): Call parent.
15315         (MemberBase.CheckBase): Check for protected members on sealed
15316         classes.
15317         (PropertyBase.CheckBase): Call parent.
15318         (Field.Define): Call parent.
15319
15320         * report.cs: Negative error codes are now mapped to 8000 - code,
15321         so that the display is render more nicely.
15322
15323         * typemanager.cs: Do not use try/catch, instead report a regular
15324         error. 
15325
15326         (GetPointerType, GetReferenceType): These methods provide
15327         mechanisms to obtain the T* and T& from a T.  We had the code
15328         previously scattered around the code base, and it also used
15329         TypeManager.LookupType that would go through plenty of caches.
15330         This one goes directly to the type source.
15331
15332         In some places we did the Type.GetType followed by
15333         ModuleBuilder.GetType, but not in others, so this unifies the
15334         processing as well.
15335
15336         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15337         statements now that we have namespace information.
15338
15339         * typemanager.cs (IsNamespace): New method, returns whether the
15340         string presented is a namespace or not.
15341
15342         (ComputeNamespaces): New public entry point, computes the list of
15343         available namespaces, using the GetNamespaces API call in Mono, or
15344         the slower version in MS.NET.   
15345
15346         Now before we start the semantic analysis phase, we have a
15347         complete list of namespaces including everything that the user has
15348         provided.
15349
15350         Deleted old code to cache namespaces in .nsc files.
15351
15352 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15353
15354         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15355         class/struct location definition Location for the implicit
15356         constructor location.
15357
15358         (Operator.Define): Use the location of the operator for the
15359         implicit Method definition.
15360
15361         (Constructor.Emit): use the constructor location for the implicit
15362         base initializer constructor.
15363
15364         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15365         and the Expression class now contains two new methods:
15366
15367         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15368         isolate type lookup from the rest of the resolution process.
15369
15370         Since we use Expressions to hold type definitions due to the way
15371         we parse the input we have historically overloaded Resolve to
15372         perform the Type lookups if a special flag is passed.  Now this is
15373         eliminated and two methods take their place. 
15374
15375         The differences in the two methods between xStep and xTerminal is
15376         that xStep is involved in our current lookup system that uses
15377         SimpleNames to compose a name, while xTerminal is used just to
15378         catch the case where the simplename lookup failed.
15379
15380 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15381
15382         * expression.cs (ResolveMemberAccess): Remove redundant code.
15383         TypeExpr expressions are always born fully resolved.
15384
15385         * interface.cs (PopulateMethod): Do not lookup the types twice.
15386         We were doing it once during SemanticAnalysis and once during
15387         PopulateMethod.
15388
15389         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15390         in local variable type definitions, were being returned as a
15391         SimpleName (we decomposed everything into a string), that is
15392         because primary_expression was being used instead of a type in the
15393         grammar (reduce/reduce conflicts).
15394
15395         The part that was wrong is that we converted the expression into a
15396         string (an oversimplification in one hand, compounded with primary
15397         expressions doing string concatenation).
15398
15399         So things like:
15400
15401         A.B.C [] x;
15402
15403         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15404         using clauses from working on this particular context.  And a type
15405         was being matched directly against "A.B.C[]".
15406
15407         We now use the correct approach, and allow for ComposedCast to be
15408         part of the unary expression.  So the "A.B.C []" become a composed
15409         cast of "A.B.C" (as a nested group of MemberAccess with a
15410         SimpleName at the end) plus the rank composition "[]". 
15411
15412         Also fixes 35567
15413
15414 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15415
15416         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15417         for the access level checking.
15418
15419         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15420         `TypeContainer container', because I kept getting confused when I
15421         was debugging this code.
15422
15423         * expression.cs (Indexers): Instead of tracking getters/setters,
15424         we now track them in parallel.  We create one arraylist less, but
15425         most importantly it is possible now for the LValue code to find a
15426         matching get for a set.
15427
15428         (IndexerAccess.DoResolveLValue): Update the code.
15429         GetIndexersForType has been modified already to extract all the
15430         indexers from a type.  The code assumed it did not.
15431
15432         Also make the code set the correct return type for the indexer.
15433         This was fixed a long time ago for properties, but was missing for
15434         indexers.  It used to be void_type.
15435
15436         (Binary.Emit): Test first for doubles instead of
15437         floats, as they are more common.
15438
15439         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15440         when dealing with floats and the <=, >= operators.  This fixes bug
15441         #39314 
15442
15443         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15444         to load the array value by emitting a load on the foreach variable
15445         type.  This was incorrect.  
15446
15447         We now emit the code to load an element using the the array
15448         variable type, and then we emit the conversion operator.
15449
15450         Fixed #40176
15451
15452 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15453
15454         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15455
15456 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15457
15458         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15459         test for protection before we test for signatures. 
15460
15461         (MethodSignature.ToString): implement.
15462
15463         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15464         to the case where we reduced into a LongConstant.
15465
15466         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15467         depend on whether the information is acurrate, because the
15468         Microsoft runtime will always claim that the array type is public,
15469         regardless of the real state.
15470
15471         If the type is a pointer, another problem happens: the type is
15472         reported as non-public in Microsoft.  
15473
15474         In both cases we have to call CheckAccessLevel recursively with
15475         the underlying type as the argument to be tested.
15476
15477 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
15478
15479         * assign.cs (Assign.Emit): If we are dealing with a compound
15480         assignment expression, we should use the code path that stores the
15481         intermediate result in a temporary value.  This fixes #40903.
15482
15483         *expression.cs (Indirection.ToString): Provide ToString method for
15484         debugging. 
15485
15486 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
15487
15488         * class.cs: Null out fields holding references to Block objects so
15489         they can be garbage collected.
15490
15491         * expression.cs (OverloadResolve): Remove unused local.
15492
15493 2003-04-07  Martin Baulig  <martin@ximian.com>
15494
15495         * codegen.cs (EmitContext.CurrentFile): New public field.
15496         (EmitContext.Mark): Use the CurrentFile to check whether the
15497         location is in the correct file.
15498         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
15499
15500 2003-04-07  Martin Baulig  <martin@ximian.com>
15501
15502         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
15503
15504         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
15505         location.  [FIXME: The location argument which gets passed to this
15506         method is sometimes wrong!]
15507
15508 2003-04-07  Nick Drochak <ndrochak@gol.com>
15509
15510         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
15511
15512 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
15513
15514         * expression.cs (Indirection.EmitAssign): We were using the
15515         temporary, but returning immediately instead of continuing the
15516         EmitAssing flow.
15517
15518 2003-04-06  Martin Baulig  <martin@ximian.com>
15519
15520         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
15521         if it's a nested child, but also deriving from the outer class.
15522         See test 190.cs.
15523
15524         * typemanager.cs (IsNestedChildOf): Make this work if it's a
15525         nested child, but also deriving from the outer class.  See
15526         test-190.cs.
15527         (FilterWithClosure): We may access private members of the outer
15528         class if we're a nested child and deriving from the outer class.
15529         (RealMemberLookup): Only set `closure_private_ok' if the
15530         `original_bf' contained BindingFlags.NonPublic.
15531
15532 2003-04-05  Martin Baulig  <martin@ximian.com>
15533
15534         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
15535         probe if its a type parameter, and if so, flag an error.
15536
15537         * decl.cs: Move here the SetParameterInfo code from class.cs.
15538         Handle IsGeneric here.
15539
15540         Handle a variety of errors in the parameter info definition.
15541
15542         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
15543         type parameters here.
15544
15545         * cs-parser.jay (class_declaration): report errors for parameters
15546         here as well.
15547
15548 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
15549
15550         * generic.cs: New file, contains support code for generics.
15551
15552         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
15553         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
15554
15555         Update parser for the above removals.
15556
15557         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
15558         now taken care of in the parser.
15559
15560 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
15561
15562         * class.cs (Event.Define): Do not allow abstract events to have
15563         initializers. 
15564
15565 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
15566
15567         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
15568         block in event declarations.
15569
15570         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
15571         value type, get its address.
15572
15573         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
15574         leaving a class on the stack instead of a boolean value (int
15575         0/1).  Change the code so we compare against null, and then the
15576         result against zero.
15577
15578         * class.cs (TypeContainer.GetClassBases): We were checking for the
15579         parent class being sealed too late.
15580
15581         * expression.cs (Binary.Emit): For <= and >= when dealing with
15582         floating point values, use cgt.un and clt.un instead of cgt and
15583         clt alone.
15584
15585 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
15586
15587         * statement.cs: Apply the same optimization as MS: skip the 
15588         GetEnumerator returning an IEnumerator, and use the one returning a 
15589         CharEnumerator instead. This allows us to avoid the try-finally block 
15590         and the boxing.
15591
15592 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
15593
15594         * cs-parser.jay: Attributes cannot be applied to
15595                          namespaces. Fixes #40473
15596
15597 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15598
15599         * class.cs:
15600         (Add*): check if the name is valid using the full name for constants,
15601         fields, properties and events.
15602
15603 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
15604
15605         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
15606         char constants to be part of the enumeration.
15607
15608         * expression.cs (Conditional.DoResolve): Add support for operator
15609         true. Implements the missing functionality from 14.12
15610
15611         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
15612         operator true/false as required by the spec.
15613
15614         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
15615         implicit conversion to boolean.
15616
15617         * statement.cs (Statement.ResolveBoolean): A boolean expression is
15618         also one where the type implements `operator true'. 
15619
15620         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
15621         get an expression that will invoke operator true based on an
15622         expression.  
15623
15624         (GetConversionOperators): Removed the hack that called op_True
15625         here.  
15626
15627         (Expression.ResolveBoolean): Move this from Statement.
15628
15629 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
15630
15631         * ecore.cs (FieldExpr): do not allow initialization of initonly
15632         fields on derived classes
15633
15634 2003-03-13  Martin Baulig  <martin@ximian.com>
15635
15636         * statement.cs (Block.Emit): Call ig.BeginScope() and
15637         ig.EndScope() when compiling with debugging info; call
15638         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
15639
15640 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
15641
15642         * expression.cs (Indexers): Do not construct immediately, allow
15643         for new members to be appended as we go.  Fixes 38143
15644
15645 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15646
15647         * expression.cs: save/restore context when resolving an unchecked
15648         expression.
15649
15650 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
15651
15652         * cfold.cs: Catch division by zero in modulus operator during
15653         constant folding.
15654
15655 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
15656
15657         * interface.cs (Interface.DefineMembers): Avoid defining members
15658         twice. 
15659
15660 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
15661
15662         * driver.cs: handle the +/- options for -noconfig
15663
15664         * statement.cs (Unckeched.Resolve): Also track the state of
15665         unchecked in the Resolve phase.
15666
15667 2003-02-27  Martin Baulig  <martin@ximian.com>
15668
15669         * ecore.cs (Expression.MemberLookup): Don't create a
15670         MethodGroupExpr for something which is not a method.  Fixes #38291.
15671
15672 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
15673
15674         * class.cs (MemberBase.CheckParameters): Also check that the type
15675         is unmanaged if it is a pointer.
15676
15677         * expression.cs (SizeOf.Resolve): Add location information.
15678
15679         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
15680         a managed type is declared.
15681
15682         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
15683         parameter modifiers as well.  Fixes bug 38606
15684
15685         * class.cs: Very sad.  Am backing out the speed up changes
15686         introduced by the ArrayList -> Array in the TypeContainer, as they
15687         were not actually that much faster, and introduced a bug (no error
15688         reports on duplicated methods).
15689
15690         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
15691         source first, this will guarantee that we have a valid expression
15692         before calling in lower levels functions that will require a
15693         resolved object.  Then use this original_source in the
15694         target.ResolveLValue instead of the original source that was
15695         passed to us.
15696
15697         Another change.  Use target.Resolve instead of LValueResolve.
15698         Although we are resolving for LValues, we will let the Assign code
15699         take care of that (it will be called again from Resolve).  This
15700         basically allows code like this:
15701
15702         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
15703         class Y { void A (X x) { x [0] += o; }
15704
15705         The problem was that the indexer was trying to resolve for
15706         set_Item (idx, object o) and never finding one.  The real set_Item
15707         was set_Item (idx, X).  By delaying the process we get the right
15708         semantics. 
15709
15710         Fixes bug 36505
15711
15712 2003-02-23  Martin Baulig  <martin@ximian.com>
15713
15714         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
15715         while calling DoEmit ().
15716
15717         * codegen.cs (EmitContext.Mark): Don't mark locations in other
15718         source files; if you use the #line directive inside a method, the
15719         compiler stops emitting line numbers for the debugger until it
15720         reaches the end of the method or another #line directive which
15721         restores the original file.
15722
15723 2003-02-23  Martin Baulig  <martin@ximian.com>
15724
15725         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
15726
15727 2003-02-23  Martin Baulig  <martin@ximian.com>
15728
15729         * statement.cs (Block.AddChildVariableNames): We need to call this
15730         recursively, not just for our immediate children.
15731
15732 2003-02-23  Martin Baulig  <martin@ximian.com>
15733
15734         * class.cs (Event.Define): Always make the field private, like csc does.
15735
15736         * typemanager.cs (TypeManager.RealMemberLookup): Make events
15737         actually work, fixes bug #37521.
15738
15739 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
15740
15741         * delegate.cs: When creating the various temporary "Parameters"
15742         classes, make sure that we call the ComputeAndDefineParameterTypes
15743         on those new parameters (just like we do with the formal ones), to
15744         allow them to be resolved in the context of the DeclSpace.
15745
15746         This fixes the bug that Dick observed in Bugzilla #38530.
15747
15748 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
15749
15750         * expression.cs (ResolveMemberAccess): When resolving a constant,
15751         do not attempt to pull a constant if the value was not able to
15752         generate a valid constant.
15753
15754         * const.cs (LookupConstantValue): Do not report more errors than required.
15755
15756 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15757
15758         * expression.cs: fixes bug #38328.
15759
15760 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
15761
15762         * class.cs: Changed all the various members that can be part of a
15763         class from being an ArrayList to be an Array of the right type.
15764         During the DefineType type_list, interface_list, delegate_list and
15765         enum_list are turned into types, interfaces, delegates and enums
15766         arrays.  
15767
15768         And during the member population, indexer_list, event_list,
15769         constant_list, field_list, instance_constructor_list, method_list,
15770         operator_list and property_list are turned into their real arrays.
15771
15772         Although we could probably perform this operation earlier, for
15773         good error reporting we need to keep the lists and remove the
15774         lists for longer than required.
15775
15776         This optimization was triggered by Paolo profiling the compiler
15777         speed on the output of `gen-sample-program.pl' perl script. 
15778
15779         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
15780         not crash in methods like MemberLookupFailed that use this field.  
15781
15782         This problem arises when the compiler fails to resolve a type
15783         during interface type definition for example.
15784
15785 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
15786
15787         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
15788         inherit from System.Object, so we have to stop at null, not only
15789         when reaching System.Object.
15790
15791 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
15792
15793         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
15794         DeclaredOnly because the parent indexer might have had a different
15795         name, but did not loop until the top of the hierarchy was reached.
15796
15797         The problem this one fixes is 35492: when a class implemented an
15798         indexer from an interface, we were getting the interface method
15799         (which was abstract) and we were flagging an error (can not invoke
15800         abstract method).
15801
15802         This also keeps bug 33089 functioning, and test-148 functioning.
15803
15804         * typemanager.cs (IsSpecialMethod): The correct way of figuring
15805         out if a method is special is to see if it is declared in a
15806         property or event, or whether it is one of the predefined operator
15807         names.   This should fix correctly #36804.
15808
15809 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
15810
15811         The goal here is to remove the dependency on EmptyCast.Peel ().
15812         Killing it completely.
15813
15814         The problem is that currently in a number of places where
15815         constants are expected, we have to "probe" for an EmptyCast, and
15816         Peel, which is not the correct thing to do, as this will be
15817         repetitive and will likely lead to errors. 
15818
15819         The idea is to remove any EmptyCasts that are used in casts that
15820         can be reduced to constants, so we only have to cope with
15821         constants. 
15822
15823         This bug hunt was triggered by Bug 37363 and the desire to remove
15824         the duplicate pattern where we were "peeling" emptycasts to check
15825         whether they were constants.  Now constants will always be
15826         constants.
15827
15828         * ecore.cs: Use an enumconstant here instead of wrapping with
15829         EmptyCast.  
15830
15831         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
15832         throwing me off.  By handling this we can get rid of a few hacks.
15833
15834         * statement.cs (Switch): Removed Peel() code.
15835
15836 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
15837
15838         * class.cs: Location information for error 508
15839
15840         * expression.cs (New.DoResolve): Add a guard against double
15841         resolution of an expression.  
15842
15843         The New DoResolve might be called twice when initializing field
15844         expressions (see EmitFieldInitializers, the call to
15845         GetInitializerExpression will perform a resolve on the expression,
15846         and later the assign will trigger another resolution
15847
15848         This leads to bugs (#37014)
15849
15850         * delegate.cs: The signature for EndInvoke should contain any ref
15851         or out parameters as well.  We were not doing this in the past. 
15852
15853         * class.cs (Field.Define): Do not overwrite the type definition
15854         inside the `volatile' group.  Turns out that volatile enumerations
15855         were changing the type here to perform a validity test, which
15856         broke conversions. 
15857
15858 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
15859
15860         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
15861         and structs, we do not want to load the instance variable
15862
15863         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
15864         enum_type has to be handled like an object reference (implicit
15865         conversions exists from this to object), but the regular IsClass
15866         and IsValueType tests will never return true for this one.
15867
15868         Also we use TypeManager.IsValueType instead of type.IsValueType,
15869         just for consistency with the rest of the code (this is only
15870         needed if we ever use the construct exposed by test-180.cs inside
15871         corlib, which we dont today).
15872
15873 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
15874
15875         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
15876         just InternalCall.
15877
15878 2003-02-09  Martin Baulig  <martin@ximian.com>
15879
15880         * namespace.cs (Namespace..ctor): Added SourceFile argument.
15881         (Namespace.DefineNamespaces): New static public method; this is
15882         called when we're compiling with debugging to add all namespaces
15883         to the symbol file.
15884
15885         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
15886         pass it to the Namespace's .ctor.
15887
15888         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
15889         and MethodBase arguments; pass the namespace ID to the symwriter;
15890         pass the MethodBase instead of the token to the symwriter.
15891         (SymbolWriter.DefineNamespace): New method to add a namespace to
15892         the symbol file.
15893
15894 2003-02-09  Martin Baulig  <martin@ximian.com>
15895
15896         * symbolwriter.cs: New file.  This is a wrapper around
15897         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
15898         methods here in near future.
15899
15900 2003-02-09  Martin Baulig  <martin@ximian.com>
15901
15902         * codegen.cs (EmitContext.Mark): Just pass the arguments to
15903         ILGenerator.MarkSequencePoint() which are actually used by the
15904         symbol writer.
15905
15906 2003-02-09  Martin Baulig  <martin@ximian.com>
15907
15908         * location.cs (SourceFile): New public sealed class.  This
15909         contains the name and an index which is used in the location's token.
15910         (Location): Reserve an appropriate number of bits in the token for
15911         the source file instead of walking over that list, this gives us a
15912         really huge performance improvement when compiling with debugging.
15913
15914         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
15915         `SourceFile' argument instead of a string.
15916         (Driver.ProcessFile): Add all the files via Location.AddFile(),
15917         but don't parse/tokenize here, we need to generate the list of all
15918         source files before we do that.
15919         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
15920         the files.
15921
15922         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
15923         instead of a string.
15924
15925         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
15926         of a string.
15927
15928 2003-02-09  Martin Baulig  <martin@ximian.com>
15929
15930         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
15931         filename on `#line default'.
15932
15933 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
15934
15935         * statement.cs: don't clear the pinned var when the fixed statement
15936         returns from the method (fixes bug#37752).
15937
15938 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
15939
15940         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
15941         to IsValueType.
15942
15943 2003-02-07  Martin Baulig  <martin@ximian.com>
15944
15945         * driver.cs: Removed the `--debug-args' command line argument.
15946
15947         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
15948         automatically by the AsssemblyBuilder.
15949         (CodeGen.InitializeSymbolWriter): We don't need to call any
15950         initialization function on the symbol writer anymore.  This method
15951         doesn't take any arguments.
15952
15953 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
15954
15955         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
15956         from referenced assemblies as well.
15957
15958 2003-02-02  Martin Baulig  <martin@ximian.com>
15959
15960         * class.cs (MethodData.Emit): Generate debugging info for external methods.
15961
15962 2003-02-02  Martin Baulig  <martin@ximian.com>
15963
15964         * class.cs (Constructor.Emit): Open the symbol writer before
15965         emitting the constructor initializer.
15966         (ConstructorInitializer.Emit): Call ec.Mark() to allow
15967         single-stepping through constructor initializers.
15968
15969 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
15970
15971         * class.cs: Handle error 549: do not allow virtual methods in
15972         sealed classes. 
15973
15974 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
15975
15976         * decl.cs: Check access levels when resolving types
15977
15978 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
15979
15980         * statement.cs: Add parameters and locals set in catch blocks that might 
15981         return to set vector
15982
15983 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
15984
15985         * class.cs (Operator): Set the SpecialName flags for operators.
15986
15987         * expression.cs (Invocation.DoResolve): Only block calls to
15988         accessors and operators on SpecialName methods.
15989
15990         (Cast.TryReduce): Handle conversions from char constants.
15991
15992
15993 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
15994
15995         * statement.cs: small memory and time optimization in FlowBranching.
15996
15997 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
15998
15999         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16000         problem that the last fix but in the other sid (Set).
16001
16002         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16003         access when there is no indexer in the hierarchy.
16004
16005 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16006
16007         * class.cs: Combine some if statements.
16008
16009 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16010
16011         * driver.cs: fixed bug #37187.
16012
16013 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16014
16015         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16016         any indexer, it's needed to build a list with all the indexers in the
16017         hierarchy (AllGetters), else we have problems. Fixes #35653.
16018
16019 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16020
16021         * class.cs (MethodData.Define): It is wrong for an interface
16022         implementation to be static in both cases: explicit and implicit.
16023         We were only handling this in one case.
16024
16025         Improve the if situation there to not have negations.
16026
16027         * class.cs (Field.Define): Turns out that we do not need to check
16028         the unsafe bit on field definition, only on usage.  Remove the test.
16029
16030 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16031
16032         * driver.cs: use assembly.Location instead of Codebase (the latest
16033         patch made mcs fail when using MS assemblies).
16034
16035 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16036
16037         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16038         get the path to *corlib.dll.
16039
16040 2003-01-21  Nick Drochak <ndrochak@gol.com>
16041
16042         * cs-tokenizer.cs:
16043         * pending.cs:
16044         * typemanager.cs: Remove compiler warnings
16045
16046 2003-01-20  Duncan Mak  <duncan@ximian.com>
16047
16048         * AssemblyInfo.cs: Bump the version number to 0.19.
16049
16050 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16051
16052         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16053
16054 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16055
16056         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16057
16058 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16059
16060         * cs-parser.jay: Small fix: we were not comparing the constructor
16061         name correctly.   Thanks to Zoltan for the initial pointer.
16062
16063 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16064
16065         * cs-tokenizer.cs: Set file name when specified with #line
16066
16067 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16068
16069         * cs-parser.jay: Only perform the constructor checks here if we
16070         are named like the class;  This will help provider a better
16071         error.  The constructor path is taken when a type definition is
16072         not found, but most likely the user forgot to add the type, so
16073         report that rather than the constructor error.
16074
16075 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16076
16077         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16078         allocations.
16079
16080 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16081
16082         * cs-parser.jay: Add cleanup call.
16083
16084 2003-01-13  Duncan Mak  <duncan@ximian.com>
16085
16086         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16087         consistent with other methods.
16088
16089 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16090
16091         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16092
16093 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16094
16095         * attribute.cs: only set GuidAttr to true when we have a
16096         GuidAttribute.
16097
16098 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16099
16100         * ecore.cs:
16101         * expression.cs:
16102         * typemanager.cs: fixes to allow mcs compile corlib with the new
16103         Type.IsSubclassOf fix.
16104
16105 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16106
16107         * expression.cs (LocalVariableReference.DoResolve): Classify a
16108         constant as a value, not as a variable.   Also, set the type for
16109         the variable.
16110
16111         * cs-parser.jay (fixed_statement): take a type instead of a
16112         pointer_type, so we can produce a better error message later.
16113
16114         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16115         as an error.  
16116
16117         (For.DoEmit): Make inifinite loops have a
16118         non-conditional branch back.
16119
16120         (Fixed.DoEmit): First populate the pinned variables, then emit the
16121         statement, then clear the variables.  Before I was emitting the
16122         code once for each fixed piece.
16123
16124
16125 2003-01-08  Martin Baulig  <martin@ximian.com>
16126
16127         * statement.cs (FlowBranching.MergeChild): A break in a
16128         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16129
16130 2003-01-08  Martin Baulig  <martin@ximian.com>
16131
16132         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16133         lives in the same number space than `param_map'.  Fixes #36154.
16134
16135 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16136
16137         * cs-parser.jay (constructor_declaration): Set the
16138         Constructor.ModFlags before probing for it.  This makes the
16139         compiler report 514, 515 and 132 (the code was there, but got
16140         broken). 
16141
16142         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16143         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16144         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16145
16146 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16147
16148         * enum.cs: create the enum static fields using the enum type.
16149
16150 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16151
16152         * class.cs: don't try to create the ParamBuilder for the return
16153         type if it's not needed (and handle it breaking for the ms runtime
16154         anyway).
16155
16156 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16157
16158         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16159
16160 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16161
16162         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16163         the command.   This showed up while compiling the JANET source
16164         code, which used \r as its only newline separator.
16165
16166 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16167
16168         * class.cs (Method.Define): If we are an operator (because it
16169         reuses our code), then set the SpecialName and HideBySig.  #36128
16170
16171 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16172
16173         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16174         exception, report error 120 `object reference required'.
16175
16176         * driver.cs: Add --pause option, used during to measure the size
16177         of the process as it goes with --timestamp.
16178
16179         * expression.cs (Invocation.DoResolve): Do not allow methods with
16180         SpecialName to be invoked.
16181
16182 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16183
16184         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16185         number before adding it.
16186
16187 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16188
16189         * ecore.cs (StandardImplicitConversion): When in an unsafe
16190         context, we allow conversion between void * to any other pointer
16191         type. This fixes bug #35973.
16192
16193 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16194
16195         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16196         is not thrown when extensionless outputs are used 
16197
16198 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16199
16200         * rootcontext.cs: fixed compilation of corlib.
16201
16202 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16203
16204         * attribute.cs (Attributes.Contains): Add new method.
16205
16206         * class.cs (MethodCore.LabelParameters): if the parameter is an
16207         `out' parameter, check that no attribute `[In]' has been passed.
16208
16209         * enum.cs: Handle the `value__' name in an enumeration.
16210
16211 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16212
16213         * decl.cs: Added special case to allow overrides on "protected
16214         internal" methods
16215
16216 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16217
16218         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16219         since it makes much more sense.
16220
16221         (Attributes.ctor): Don't require a Location parameter.
16222
16223         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16224
16225         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16226         since we already have that information per attribute.
16227
16228         * everywhere : make appropriate changes.
16229
16230         * class.cs (LabelParameters): Write the code which actually
16231         applies attributes to the return type. We can't do this on the MS
16232         .NET runtime so we flag a warning in the case an exception is
16233         thrown.
16234
16235 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16236
16237         * const.cs: Handle implicit null conversions here too.
16238
16239 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16240
16241         * class.cs (MethodCore.LabelParameters): Remove the extra
16242         Type [] parameter since it is completely unnecessary. Instead
16243         pass in the method's attributes so that we can extract
16244         the "return" attribute.
16245
16246 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16247
16248         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16249         of ignoring it and letting the compile continue.
16250
16251         * typemanager.cs (ChangeType): use an extra argument to return an
16252         error condition instead of throwing an exception.
16253
16254 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16255
16256         * expression.cs (Unary.TryReduce): mimic the code for the regular
16257         code path.  Perform an implicit cast in the cases where we can
16258         implicitly convert to one of the integral types, and then reduce
16259         based on that constant.   This fixes bug #35483.
16260
16261 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16262
16263         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16264
16265 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16266
16267         * namespace.cs: fixed bug #35489.
16268
16269 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16270
16271         * class.cs: Remove some dead code.
16272
16273         * cs-parser.jay: Estimate the number of methods needed
16274         (RootContext.MethodCount);
16275
16276         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16277         numbers instead of StringBuilders.
16278
16279         * support.cs (PtrHashtable): Add constructor with initial size;
16280         We can now reduce reallocations of the method table.
16281
16282 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16283
16284         * attribute.cs (ApplyAttributes): Keep track of the emitted
16285         attributes on a per-target basis. This fixes bug #35413.
16286
16287 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16288
16289         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16290         default to the Windows 1252 encoding.
16291
16292         (UnixParseOption): Support version, thanks to Alp for the missing
16293         pointer. 
16294
16295         * AssemblyInfo.cs: Add nice assembly information.
16296
16297         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16298         (bug 35169).
16299
16300         * cs-parser.jay: Allow a trailing comma before the close bracked
16301         in the attribute_section production.
16302
16303         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16304         address of the instance was being taken, I will take this out,
16305         because we take the address of the object immediately here.
16306
16307 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16308
16309         * typemanager.cs (AreMultipleAllowed): Take care of the most
16310         obvious case where attribute type is not in the current assembly -
16311         stupid me ;-)
16312
16313 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16314
16315         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16316         definitions, instead of doing that afterwards.  
16317
16318         Also we use a nice little hack, depending on the constructor, we
16319         know if we are a "composed" name or a simple name.  Hence, we
16320         avoid the IndexOf test, and we avoid 
16321
16322         * codegen.cs: Add code to assist in a bug reporter to track down
16323         the source of a compiler crash. 
16324
16325 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16326
16327         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16328         types have been emitted for a given element and flag an error
16329         if something which does not have AllowMultiple set is used more
16330         than once.
16331
16332         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16333         attribute types and their corresponding AllowMultiple properties
16334
16335         (AreMultipleAllowed): Check the property for a given type.
16336
16337         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16338         property in the case we have a TypeContainer.
16339
16340         (Attributes.AddAttribute): Detect duplicates and just skip on
16341         adding them. This trivial fix catches a pretty gross error in our
16342         attribute emission - global attributes were being emitted twice!
16343
16344         Bugzilla bug #33187 is now fixed.
16345
16346 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16347
16348         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16349         instead of pp_and).
16350
16351         * expression.cs (Binary.ResolveOperator): I can only use the
16352         Concat (string, string, string) and Concat (string, string,
16353         string, string) if the child is actually a concatenation of
16354         strings. 
16355
16356 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16357
16358         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16359         context where we need a 2-character lookahead.
16360
16361         * pending.cs (PendingImplementation): Rework so we can keep track
16362         of interface types all the time, and flag those which were
16363         implemented by parents as optional.
16364
16365 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16366
16367         * expression.cs (Binary.ResolveOperator): Use
16368         String.Concat(string,string,string) or
16369         String.Concat(string,string,string,string) when possible. 
16370
16371         * typemanager: More helper methods.
16372
16373
16374 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16375
16376         * pending.cs: remove the bogus return from GetMissingInterfaces()
16377         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16378
16379 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16380
16381         * namespace.cs: avoid duplicated 'using xxx' being added to
16382         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16383         when we get more than one 'using' statement for the same namespace.
16384         Report a CS0105 warning for it.
16385
16386 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16387
16388         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16389         of calling getChar/putback, uses internal knowledge of it.    
16390
16391         (xtoken): Reorder tokenizer so most common patterns are checked
16392         first.  This reduces the compilation time in another 5% (from 8.11s
16393         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16394
16395         The parsing time is 22% of the compilation in mcs, and from that
16396         64% is spent on the tokenization process.  
16397
16398         I tried using a binary search for keywords, but this is slower
16399         than the hashtable.  Another option would be to do a couple of
16400         things:
16401
16402                 * Not use a StringBuilder, instead use an array of chars,
16403                   with a set value.  Notice that this way we could catch
16404                   the 645 error without having to do it *afterwards*.
16405
16406                 * We could write a hand-parser to avoid the hashtable
16407                   compares altogether.
16408
16409         The identifier consumption process takes 37% of the tokenization
16410         time.  Another 15% is spent on is_number.  56% of the time spent
16411         on is_number is spent on Int64.Parse:
16412
16413                 * We could probably choose based on the string length to
16414                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16415                   computations. 
16416
16417         Another 3% is spend on wrapping `xtoken' in the `token' function.
16418
16419         Handle 0xa0 as whitespace (#34752)
16420
16421 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16422
16423         * typemanager.cs (IsCLRType): New routine to tell whether a type
16424         is one of the builtin types.  
16425
16426         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16427         typecode in more places instead of doing pointer comparissions.
16428         We could leverage some knowledge about the way the typecodes are
16429         laid out.
16430
16431         New code to cache namespaces in assemblies, it is currently not
16432         invoked, to be used soon.
16433
16434         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16435
16436         * expression.cs (Binary.ResolveOperator): specially handle
16437         strings, and do not perform user-defined operator overloading for
16438         built-in types.
16439
16440 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16441
16442         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16443         internalcall as it is a pretty simple operation;  Avoid whenever
16444         possible to call Char.IsLetter.
16445
16446         (consume_identifier): Cut by half the number of
16447         hashtable calls by merging the is_keyword and GetKeyword behavior.
16448
16449         Do not short-circuit, because if we do, we
16450         report errors (ie, #if false && true would produce an invalid
16451         directive error);
16452
16453
16454 2002-11-24  Martin Baulig  <martin@ximian.com>
16455
16456         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16457         check constant ranges and report a CS0221.  Fixes #33186.
16458
16459 2002-11-24  Martin Baulig  <martin@ximian.com>
16460
16461         * cs-parser.jay: Make this work for uninitialized variable
16462         declarations in the `for' initializer.  Fixes #32416.
16463
16464 2002-11-24  Martin Baulig  <martin@ximian.com>
16465
16466         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16467         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
16468
16469 2002-11-24  Martin Baulig  <martin@ximian.com>
16470
16471         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
16472         argument; if true, we also check for user-defined conversions.
16473         This is only needed if both arguments are of a user-defined type.
16474         Fixes #30443, added test-175.cs.
16475         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
16476
16477         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
16478
16479 2002-11-24  Martin Baulig  <martin@ximian.com>
16480
16481         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
16482         function to get the store opcode.
16483         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
16484         only emit the Ldelema if the store opcode is Stobj.  You must run
16485         both test-34 and test-167 to test this.  Fixes #34529.
16486
16487 2002-11-23  Martin Baulig  <martin@ximian.com>
16488
16489         * ecore.cs (Expression.MemberLookup): Added additional
16490         `qualifier_type' argument which is used when we're being called
16491         from MemberAccess.DoResolve() and null if we're called from a
16492         SimpleName lookup.
16493         (Expression.MemberLookupFailed): New method to report errors; this
16494         does the CS1540 check and reports the correct error message.
16495
16496         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
16497         argument for the CS1540 check and redone the way how we're dealing
16498         with private members.  See the comment in the source code for details.
16499         (FilterWithClosure): Reverted this back to revision 1.197; renamed
16500         `closure_start_type' to `closure_qualifier_type' and check whether
16501         it's not null.  It was not this filter being broken, it was just
16502         being called with the wrong arguments.
16503
16504         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
16505         and pass it the correct `qualifier_type'; this also does the error
16506         handling for us.
16507
16508 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
16509
16510         * expression.cs (Invocation.EmitParams): If the we are dealing
16511         with a non-built-in value type, load its address as well.
16512
16513         (ArrayCreation): Use a a pretty constant instead
16514         of the hardcoded value 2.   Use 6 instead of 2 for the number of
16515         static initializers.  
16516
16517         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
16518         because they are not really value types, just glorified integers. 
16519
16520         * driver.cs: Do not append .exe, the CSC compiler does not do it.
16521
16522         * ecore.cs: Remove redundant code for enumerations, make them use
16523         the same code path as everything else, fixes the casting issue
16524         with enumerations in Windows.Forms.
16525
16526         * attribute.cs: Do only cast to string if it is a string, the
16527         validation happens later.
16528
16529         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
16530         people upgrade their corlibs.
16531
16532         * ecore.cs: Oops, enumerations were not following the entire code path
16533
16534 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
16535
16536         * typemanager.cs (FilterWithClosure): Commented out the test for
16537         1540 in typemanager.cs, as it has problems when accessing
16538         protected methods from a parent class (see test-174.cs). 
16539
16540         * attribute.cs (Attribute.ValidateGuid): new method.
16541         (Attribute.Resolve): Use above.
16542
16543 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
16544
16545         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
16546
16547         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
16548         handling for enumerations, as we only needed the TypeContainer
16549         functionality to begin with (this is required for the fix below to
16550         work for enums that reference constants in a container class for
16551         example). 
16552
16553         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
16554
16555         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
16556         a valid TypeBuilder to perform lookups on.o
16557
16558         * class.cs (InheritableMemberSignatureCompare): Use true in the
16559         call to GetGetMethod and GetSetMethod, because we are comparing
16560         the signature, and we need to get the methods *even* if they are
16561         private. 
16562
16563         (PropertyBase.CheckBase): ditto.
16564
16565         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
16566         GotoCase.Resolve): Use Peel on EmpytCasts.
16567
16568         * ecore.cs (EmptyCast): drop child, add Peel method.
16569
16570 2002-11-17  Martin Baulig  <martin@ximian.com>
16571
16572         * ecore.cs (EmptyCast.Child): New public property.
16573
16574         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
16575         label resolved to an EmptyCast.  Fixes #34162.
16576         (GotoCase.Resolve): Likewise.
16577         (Block.EmitMeta): Likewise.
16578
16579 2002-11-17  Martin Baulig  <martin@ximian.com>
16580
16581         * expression.cs (Invocation.BetterConversion): Prefer int over
16582         uint; short over ushort; long over ulong for integer literals.
16583         Use ImplicitConversionExists instead of StandardConversionExists
16584         since we also need to check for user-defined implicit conversions.
16585         Fixes #34165.  Added test-173.cs.
16586
16587 2002-11-16  Martin Baulig  <martin@ximian.com>
16588
16589         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
16590         with the `true' and `false' literals.  Fixes #33151.
16591
16592 2002-11-16  Martin Baulig  <martin@ximian.com>
16593
16594         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
16595         October 22nd; don't do the cs1540 check for static members.
16596
16597         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
16598         now using our own filter here and doing the cs1540 check again.
16599
16600 2002-11-16  Martin Baulig  <martin@ximian.com>
16601
16602         * support.cs (InternalParameters): Don't crash if we don't have
16603         any fixed parameters.  Fixes #33532.
16604
16605 2002-11-16  Martin Baulig  <martin@ximian.com>
16606
16607         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
16608         when looking up static methods to make this work on Windows.
16609         Fixes #33773.
16610
16611 2002-11-16  Martin Baulig  <martin@ximian.com>
16612
16613         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
16614         a setter rather than using PropertyInfo.CanWrite.
16615
16616 2002-11-15  Nick Drochak  <ndrochak@gol.com>
16617
16618         * class.cs: Allow acces to block member by subclasses. Fixes build
16619         breaker.
16620
16621 2002-11-14  Martin Baulig  <martin@ximian.com>
16622
16623         * class.cs (Constructor.Emit): Added the extern/block check.
16624         Fixes bug #33678.
16625
16626 2002-11-14  Martin Baulig  <martin@ximian.com>
16627
16628         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
16629         iteration while looking for indexers, this is needed because the
16630         indexer may have a different name in our base classes.  Fixed the
16631         error reporting (no indexers at all, not get accessor, no
16632         overloaded match).  Fixes bug #33089.
16633         (IndexerAccess.DoResolveLValue): Likewise.
16634
16635 2002-11-14  Martin Baulig  <martin@ximian.com>
16636
16637         * class.cs (PropertyBase.CheckBase): Make this work for multiple
16638         indexers.  Fixes the first part of bug #33089.
16639         (MethodSignature.InheritableMemberSignatureCompare): Added support
16640         for properties.
16641
16642 2002-11-13  Ravi Pratap  <ravi@ximian.com>
16643
16644         * attribute.cs (Attribute.Resolve): Catch the
16645         NullReferenceException and report it since it isn't supposed to
16646         happen. 
16647
16648 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
16649
16650         * expression.cs (Binary.EmitBranchable): Also handle the cases for
16651         LogicalOr and LogicalAnd that can benefit from recursively
16652         handling EmitBranchable.  The code now should be nice for Paolo.
16653
16654 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
16655
16656         * typemanager.cs (LookupType): Added a negative-hit hashtable for
16657         the Type lookups, as we perform quite a number of lookups on
16658         non-Types.  This can be removed once we can deterministically tell
16659         whether we have a type or a namespace in advance.
16660
16661         But this might require special hacks from our corlib.
16662
16663         * TODO: updated.
16664
16665         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
16666         and double which avoids a conversion from an integer to a double.
16667
16668         * expression.cs: tiny optimization, avoid calling IsConstant,
16669         because it effectively performs the lookup twice.
16670
16671 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
16672
16673         But a bogus return here to keep the semantics of the old code
16674         until the Mono runtime is fixed.
16675
16676         * pending.cs (GetMissingInterfaces): New method used to remove all
16677         the interfaces that are already implemented by our parent
16678         classes from the list of pending methods. 
16679
16680         * interface.cs: Add checks for calls after ResolveTypeExpr.
16681
16682 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
16683
16684         * class.cs (Class.Emit): Report warning 67: event not used if the
16685         warning level is beyond 3.
16686
16687         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
16688         being a NullLiteral.
16689
16690         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
16691         specifiers. 
16692
16693         * class.cs (TypeContainer.GetClassBases): Cover a missing code
16694         path that might fail if a type can not be resolved.
16695
16696         * expression.cs (Binary.Emit): Emit unsigned versions of the
16697         operators. 
16698
16699         * driver.cs: use error 5.
16700
16701 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
16702
16703         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
16704
16705 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
16706
16707         * cs-parser.jay (switch_section): A beautiful patch from Martin
16708         Baulig that fixed 33094.
16709
16710 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
16711
16712         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
16713         Check whether the base is abstract and report an error if so.
16714
16715         * expression.cs (IndexerAccess.DoResolveLValue,
16716         IndexerAccess.DoResolve): ditto. 
16717
16718         (Invocation.DoResolve): ditto.
16719
16720         (Invocation.FullMethodDesc): Improve the report string.
16721
16722         * statement.cs (Block): Eliminate IsVariableDefined as it is
16723         basically just a wrapper for GetVariableInfo.
16724
16725         * ecore.cs (SimpleName): Use new 
16726
16727         * support.cs (ReflectionParamter.ParameterType): We unwrap the
16728         type, as we return the actual parameter ref/unref state on a
16729         different call.
16730
16731 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
16732
16733         * support.cs: Return proper flags REF/OUT fixing the previous
16734         commit.  
16735
16736         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
16737         not used to mean `ref' but `ref or out' in ParameterReference
16738
16739         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
16740         full type signature instead of calling TypeManger.CSharpName
16741         ourselves. 
16742
16743         * support.cs (InternalParameters.ParameterDesc): Do not compare
16744         directly to the modflags, because REF/OUT will actually be bitsets
16745         if set. 
16746
16747         * delegate.cs (VerifyMethod): Check also the modifiers.
16748
16749         * cs-tokenizer.cs: Fix bug where floating point values with an
16750         exponent where a sign was missing was ignored.
16751
16752         * driver.cs: Allow multiple assemblies to be specified in a single
16753         /r: argument
16754
16755 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
16756
16757         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
16758         because identifiers after a parenthesis would end up in this kind
16759         of production, and we needed to desamiguate it for having casts
16760         like:
16761
16762                 (UserDefinedType *) xxx
16763
16764 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
16765
16766         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
16767         we should set on the Bindingflags.NonPublic, but not turn on
16768         private_ok.  private_ok controls whether a Private member is
16769         returned (this is chekced on the filter routine), while the
16770         BindingFlags.NonPublic just controls whether private/protected
16771         will be allowed.   This fixes the problem part of the problem of
16772         private properties being allowed to be used in derived classes.
16773
16774         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
16775         so we can call the children DoResolveLValue method (this will
16776         properly signal errors on lvalue assignments to base properties)
16777
16778         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
16779         getter are null, and we have a property info, we know that this
16780         happened because the lookup failed, so we report an error 122 for
16781         protection level violation.
16782
16783         We also silently return if setter and getter are null in the
16784         resolve functions, this condition only happens if we have flagged
16785         the error before.  This is the other half of the problem. 
16786
16787         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
16788         not have accessibility information, that is why we were returning
16789         true in the filter function in typemanager.cs.
16790
16791         To properly report 122 (property is inaccessible because of its
16792         protection level) correctly, we report this error in ResolveAccess
16793         by failing if both the setter and the getter are lacking (ie, the
16794         lookup failed). 
16795
16796         DoResolve and DoLResolve have been modified to check for both
16797         setter/getter being null and returning silently, the reason being
16798         that I did not want to put the knowledge about this error in upper
16799         layers, like:
16800
16801         int old = Report.Errors;
16802         x = new PropertyExpr (...);
16803         if (old != Report.Errors)
16804                 return null;
16805         else
16806                 return x;
16807
16808         So the property expr is returned, but it is invalid, so the error
16809         will be flagged during the resolve process. 
16810
16811         * class.cs: Remove InheritablePropertySignatureCompare from the
16812         class, as we no longer depend on the property signature to compute
16813         whether it is possible to implement a method or not.
16814
16815         The reason is that calling PropertyInfo.GetGetMethod will return
16816         null (in .NET, in Mono it works, and we should change this), in
16817         cases where the Get Method does not exist in that particular
16818         class.
16819
16820         So this code:
16821
16822         class X { public virtual int A { get { return 1; } } }
16823         class Y : X { }
16824         class Z : Y { public override int A { get { return 2; } } }
16825
16826         Would fail in Z because the parent (Y) would not have the property
16827         defined.  So we avoid this completely now (because the alternative
16828         fix was ugly and slow), and we now depend exclusively on the
16829         method names.
16830
16831         (PropertyBase.CheckBase): Use a method-base mechanism to find our
16832         reference method, instead of using the property.
16833
16834         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
16835         routines are gone now.
16836
16837         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
16838         names, they were incorrectly named.
16839
16840         * cs-tokenizer.cs: Return are more gentle token on failure. 
16841
16842         * pending.cs (PendingImplementation.InterfaceMethod): This routine
16843         had an out-of-sync index variable, which caused it to remove from
16844         the list of pending methods the wrong method sometimes.
16845
16846 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
16847
16848         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
16849         CanWrite, because those refer to this particular instance of the
16850         property, and do not take into account the fact that we can
16851         override single members of a property.
16852
16853         Constructor requires an EmitContext.  The resolution process does
16854         not happen here, but we need to compute the accessors before,
16855         because the resolution does not always happen for properties.
16856
16857         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
16858         subclass, before we did not update this flag, but we did update
16859         bindingflags. 
16860
16861         (GetAccessors): Drop this routine, as it did not work in the
16862         presence of partially overwritten set/get methods. 
16863
16864         Notice that this broke the cs1540 detection, but that will require
16865         more thinking. 
16866
16867 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16868
16869         * class.cs:
16870         * codegen.cs:
16871         * driver.cs: issue a warning instead of an error if we don't support
16872         debugging for the platform. Also ignore a couple of errors that may
16873         arise when trying to write the symbols. Undo my previous patch.
16874
16875 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16876
16877         * driver.cs: ignore /debug switch except for Unix platforms.
16878
16879 2002-10-23  Nick Drochak  <ndrochak@gol.com>
16880
16881         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
16882
16883 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
16884
16885         * driver.cs: Do not make mcs-debug conditional, so we do not break
16886         builds that use it.
16887
16888         * statement.cs (UsageVector.MergeChildren): I would like Martin to
16889         review this patch.  But basically after all the children variables
16890         have been merged, the value of "Breaks" was not being set to
16891         new_breaks for Switch blocks.  I think that it should be set after
16892         it has executed.  Currently I set this to the value of new_breaks,
16893         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
16894         conservative, but I do not understand this code very well.
16895
16896         I did not break anything in the build, so that is good ;-)
16897
16898         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
16899
16900 2002-10-20  Mark Crichton  <crichton@gimp.org>
16901
16902         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
16903
16904 2002-10-20  Nick Drochak  <ndrochak@gol.com>
16905
16906         * cfold.cs: Fixed compile blocker.
16907
16908 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
16909
16910         * driver.cs: I was chekcing the key, not the file.
16911
16912 2002-10-19  Ravi Pratap  <ravi@ximian.com>
16913
16914         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
16915         message that we were generating - we just need to silently return
16916         a null.
16917
16918 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
16919
16920         * class.cs (Event.Define): Change my previous commit, as this
16921         breaks the debugger.  This is a temporary hack, as it seems like
16922         the compiler is generating events incorrectly to begin with.
16923
16924         * expression.cs (Binary.ResolveOperator): Added support for 
16925         "U operator - (E x, E y)"
16926
16927         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
16928         y)".
16929
16930         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
16931         init-only variables, but this path did not take into account that
16932         there might be also instance readonly variables.  Correct this
16933         problem. 
16934
16935         This fixes bug 32253
16936
16937         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
16938         delegates as well.
16939
16940         * driver.cs: Change the extension for modules to `netmodule'
16941
16942         * cs-parser.jay: Improved slightly the location tracking for
16943         the debugger symbols.
16944
16945         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
16946         modifiers that were specified instead of the hardcoded value
16947         (FamAndAssem).  This was basically ignoring the static modifier,
16948         and others.  Fixes 32429.
16949
16950         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
16951         fixed a bug in the process (32476)
16952
16953         * expression.cs (ArrayAccess.EmitAssign): Patch from
16954         hwang_rob@yahoo.ca that fixes bug 31834.3
16955
16956 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
16957
16958         * driver.cs: Make the module extension .netmodule.
16959
16960 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
16961
16962         * driver.cs: Report an error if the resource file is not found
16963         instead of crashing.
16964
16965         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
16966         false, like Emit does.
16967
16968 2002-10-16  Nick Drochak  <ndrochak@gol.com>
16969
16970         * typemanager.cs: Remove unused private member.  Also reported mcs
16971         bug to report this as a warning like csc.
16972
16973 2002-10-15  Martin Baulig  <martin@gnome.org>
16974
16975         * statement.cs (Statement.Emit): Made this a virtual method; emits
16976         the line number info and calls DoEmit().
16977         (Statement.DoEmit): New protected abstract method, formerly knows
16978         as Statement.Emit().
16979
16980         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
16981
16982 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
16983
16984         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
16985         have fixed a remaining problem: not every AddXXXX was adding a
16986         fully qualified name.  
16987
16988         Now everyone registers a fully qualified name in the DeclSpace as
16989         being defined instead of the partial name.  
16990
16991         Downsides: we are slower than we need to be due to the excess
16992         copies and the names being registered this way.  
16993
16994         The reason for this is that we currently depend (on the corlib
16995         bootstrap for instance) that types are fully qualified, because
16996         we dump all the types in the namespace, and we should really have
16997         types inserted into the proper namespace, so we can only store the
16998         basenames in the defined_names array.
16999
17000 2002-10-10  Martin Baulig  <martin@gnome.org>
17001
17002         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17003         from bug #31834, see the bug report for a testcase which is
17004         miscompiled.
17005
17006 2002-10-10  Martin Baulig  <martin@gnome.org>
17007
17008         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17009         flow analysis code for this.
17010
17011         * statement.cs (Do, While, For): Tell the flow analysis code about
17012         infinite loops.
17013         (FlowBranching.UsageVector): Added support for infinite loops.
17014         (Block.Resolve): Moved the dead code elimination here and use flow
17015         analysis to do it.
17016
17017 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17018
17019         * class.cs (Field.Define): Catch cycles on struct type
17020         definitions. 
17021
17022         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17023         fields if the fields are static.  We only need to check instance
17024         fields. 
17025
17026         * expression.cs (As.DoResolve): Test for reference type.
17027
17028         * statement.cs (Using.ResolveExpression): Use
17029         ConvertImplicitRequired, not ConvertImplicit which reports an
17030         error on failture
17031         (Using.ResolveLocalVariableDecls): ditto.
17032
17033         * expression.cs (Binary.ResolveOperator): Report errors in a few
17034         places where we had to.
17035
17036         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17037
17038 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17039
17040         * expression.cs: Use StoreFromPtr instead of extracting the type
17041         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17042
17043         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17044         an enumeration value to a System.Enum, but System.Enum is not a
17045         value type, but an class type, so we need to box.
17046
17047         (Expression.ConvertExplicit): One codepath could return
17048         errors but not flag them.  Fix this.  Fixes #31853
17049
17050         * parameter.cs (Resolve): Do not allow void as a parameter type.
17051
17052 2002-10-06  Martin Baulig  <martin@gnome.org>
17053
17054         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17055         if it's a class type and not a struct.  Fixes #31815.
17056
17057 2002-10-06  Martin Baulig  <martin@gnome.org>
17058
17059         * statement.cs: Reworked the flow analysis code a bit to make it
17060         usable for dead code elimination.
17061
17062 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17063
17064         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17065
17066 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17067
17068         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17069         to fix the test 165, will investigate deeper.
17070
17071 2002-10-04  Martin Baulig  <martin@gnome.org>
17072
17073         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17074         finally blocks actually work.
17075         (Try.Resolve): We don't need to create a sibling for `finally' if
17076         there is no finally block.
17077
17078 2002-10-04  Martin Baulig  <martin@gnome.org>
17079
17080         * class.cs (Constructor.Define): The default accessibility for a
17081         non-default constructor is private, not public.
17082
17083 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17084
17085         * class.cs (Constructor): Make AllowedModifiers public, add
17086         EXTERN.
17087
17088         * cs-parser.jay: Perform the modifiers test here, as the
17089         constructor for the Constructor class usually receives a zero
17090         because of the way we create it (first we create, later we
17091         customize, and we were never checking the modifiers).
17092
17093         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17094         is a version of LookupTypeReflection that includes the type-name
17095         cache.  This can be used as a fast path for functions that know
17096         the fully qualified name and are only calling into *.GetType() to
17097         obtain a composed type.
17098
17099         This is also used by TypeManager.LookupType during its type
17100         composition.
17101
17102         (LookupType): We now also track the real type name, as sometimes
17103         we can get a quey for the real type name from things like
17104         ComposedCast.  This fixes bug 31422.
17105
17106         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17107         complete type fullname, it does not have to go through the type
17108         resolution system to obtain the composed version of the type (for
17109         obtaining arrays or pointers).
17110
17111         (Conditional.Emit): Use the EmitBoolExpression to
17112         generate nicer code, as requested by Paolo.
17113
17114         (ArrayCreation.CheckIndices): Use the patch from
17115         hwang_rob@yahoo.ca to validate the array initializers. 
17116
17117 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17118
17119         * class.cs (ConstructorInitializer.Emit): simplify code by using
17120         Invocation.EmitCall, and at the same time, fix the bugs in calling
17121         parent constructors that took variable arguments. 
17122
17123         * ecore.cs (Expression.ConvertNumericExplicit,
17124         Expression.ImplicitNumericConversion): Remove the code that
17125         manually wrapped decimal (InternalTypeConstructor call is now gone
17126         as well).
17127
17128         * expression.cs (Cast.TryReduce): Also handle decimal types when
17129         trying to perform a constant fold on the type.
17130
17131         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17132
17133         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17134         that only turned off an error report, and did nothing else. 
17135
17136 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17137
17138         * driver.cs: Handle and ignore /fullpaths
17139
17140 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17141
17142         * expression.cs (Binary.ResolveOperator): Catch the case where
17143         DoNumericPromotions returns true, 
17144
17145         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17146
17147 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17148
17149         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17150         report error 70.
17151
17152 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17153
17154         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17155         conversion exists, but it is also required that the conversion be
17156         performed.  This manifested in "(Type64Enum) 2".  
17157
17158         * class.cs (TypeManager.AddMethod): The fix is not to change
17159         AddEnum, because that one was using a fully qualified name (every
17160         DeclSpace derivative does), but to change the AddMethod routine
17161         that was using an un-namespaced name.  This now correctly reports
17162         the duplicated name.
17163
17164         Revert patch until I can properly fix it.  The issue
17165         is that we have a shared Type space across all namespaces
17166         currently, which is wrong.
17167
17168         Options include making the Namespace a DeclSpace, and merge
17169         current_namespace/current_container in the parser.
17170
17171 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17172
17173         * cs-parser.jay: Improve error reporting when we get a different
17174         kind of expression in local_variable_type and
17175         local_variable_pointer_type. 
17176
17177         Propagate this to avoid missleading errors being reported.
17178
17179         * ecore.cs (ImplicitReferenceConversion): treat
17180         TypeManager.value_type as a target just like object_type.   As
17181         code like this:
17182
17183         ValueType v = 1;
17184
17185         Is valid, and needs to result in the int 1 being boxed before it
17186         is assigned to the value type v.
17187
17188         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17189         to validate the enumeration name.
17190
17191         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17192         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17193         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17194
17195         * ecore.cs (TryImplicitIntConversion): When doing an
17196         implicit-enumeration-conversion, check if the type is 64-bits and
17197         perform a conversion before passing to EnumConstant.
17198
17199 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17200
17201         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17202         report ambiguous type references.  Unlike the MS version, we
17203         report what the ambiguity is.   Innovation at work ;-)
17204
17205         (DeclSpace.FindType): Require a location argument to
17206         display when we display an ambiguous error.
17207
17208         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17209
17210         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17211
17212         * expression.cs (EmitDynamicInitializers): Apply patch from
17213         hwang_rob@yahoo.ca that fixes the order in which we emit our
17214         initializers. 
17215
17216 2002-09-21  Martin Baulig  <martin@gnome.org>
17217
17218         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17219         delegate takes no arguments.
17220
17221 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17222
17223         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17224         from integers.
17225
17226         * expression.cs: Extract the underlying type.
17227
17228         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17229
17230         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17231
17232 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17233
17234         * class.cs (TypeContainer.DefineType): We can not use the nice
17235         PackingSize with the size set to 1 DefineType method, because it
17236         will not allow us to define the interfaces that the struct
17237         implements.
17238
17239         This completes the fixing of bug 27287
17240
17241         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17242         means also structs.  This fixes part of the problem. 
17243         (Expresion.ImplicitReferenceConversionExists): ditto.
17244
17245         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17246         error if there were no errors reported during the type lookup
17247         process, to avoid duplicates or redundant errors.  Without this
17248         you would get an ambiguous errors plus a type not found.  We have
17249         beaten the user enough with the first error.  
17250
17251         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17252         reference. 
17253
17254         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17255         during the resolution process, stop the lookup, this avoids
17256         repeated error reports (same error twice).
17257
17258         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17259
17260         * typemanager.cs (LookupType): Redo the type lookup code to match
17261         the needs of System.Reflection.  
17262
17263         The issue is that System.Reflection requires references to nested
17264         types to begin with a "+" sign instead of a dot.  So toplevel
17265         types look like: "NameSpace.TopLevelClass", and nested ones look
17266         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17267         levels. 
17268
17269 2002-09-19  Martin Baulig  <martin@gnome.org>
17270
17271         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17272         says that a method always returns or always throws an exception,
17273         don't report the CS0161.
17274
17275         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17276         set `Returns = new_returns'.
17277
17278 2002-09-19  Martin Baulig  <martin@gnome.org>
17279
17280         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17281         to an enum constant, check for a CS0176.
17282
17283 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17284
17285         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17286         for operators that must be in pairs and report errors.
17287
17288         * ecore.cs (SimpleName.DoResolveType): During the initial type
17289         resolution process, when we define types recursively, we must
17290         check first for types in our current scope before we perform
17291         lookups in the enclosing scopes.
17292
17293         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17294
17295         (Invocation.VerifyArgumentsCompat): Call
17296         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17297         I thought we were supposed to always call this, but there are a
17298         few places in the code where we dont do it.
17299
17300 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17301
17302         * driver.cs: Add support in -linkres and -resource to specify the
17303         name of the identifier.
17304
17305 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17306
17307         * ecore.cs (StandardConversionExists): Sync with the conversion
17308         code: allow anything-* to void* conversions.
17309
17310         (FindMostSpecificSource): Use an Expression argument
17311         instead of a Type, because we might be handed over a Literal which
17312         gets a few more implicit conversions that plain types do not.  So
17313         this information was being lost.
17314
17315         Also, we drop the temporary type-holder expression when not
17316         required.
17317
17318 2002-09-17  Martin Baulig  <martin@gnome.org>
17319
17320         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17321         this is an explicit interface implementation.
17322
17323 2002-09-17  Martin Baulig  <martin@gnome.org>
17324
17325         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17326         different `IndexerName' attributes.
17327
17328         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17329         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17330         virtual CommonResolve().
17331
17332 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17333
17334         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17335         and convert that to the UnderlyingType.
17336
17337         * statement.cs (Foreach.Resolve): Indexers are just like variables
17338         or PropertyAccesses.
17339
17340         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17341         inside quoted strings, we were not doing this before.
17342
17343 2002-09-16  Martin Baulig  <martin@gnome.org>
17344
17345         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17346         resolve it.  This is needed for the definite assignment check of the
17347         instance expression, fixes bug #29846.
17348         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17349
17350 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17351
17352         * parameter.cs: Fix compile error.  Cannot reference static member
17353         from an instance object.  Is this an mcs bug?
17354
17355 2002-09-14  Martin Baulig  <martin@gnome.org>
17356
17357         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17358         multiple times.  Fixes bug #30295, added test-166.cs.
17359
17360 2002-09-14  Martin Baulig  <martin@gnome.org>
17361
17362         * statement.cs (Block.Emit): Don't emit unreachable code.
17363         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17364         `break' statements.
17365         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17366
17367 2002-09-14  Martin Baulig  <martin@gnome.org>
17368
17369         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17370         is set.
17371
17372 2002-09-14  Martin Baulig  <martin@gnome.org>
17373
17374         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17375         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17376         be false on the ms runtime.
17377
17378 2002-09-13  Martin Baulig  <martin@gnome.org>
17379
17380         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17381         the CS0038 error message.
17382
17383 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17384
17385         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17386         constant inside, return it.
17387
17388 2002-09-12  Martin Baulig  <martin@gnome.org>
17389
17390         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17391         implicit conversion can be done between enum types.
17392
17393         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17394         check whether an implicit conversion to the current enum's UnderlyingType
17395         exists and report an error if not.
17396
17397         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17398         without debugging support.
17399
17400         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17401         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17402
17403 2002-09-12  Martin Baulig  <martin@gnome.org>
17404
17405         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17406
17407         * ecore.cs (IMemberExpr.DeclaringType): New property.
17408         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17409         nonstatic member of an outer type (CS0038).
17410
17411 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17412
17413         * driver.cs: Activate the using-error detector at warning level
17414         4 (at least for MS-compatible APIs).
17415
17416         * namespace.cs (VerifyUsing): Small buglett fix.
17417
17418         * pending.cs (PendingImplementation): pass the container pointer. 
17419
17420         * interface.cs (GetMethods): Allow for recursive definition.  Long
17421         term, I would like to move every type to support recursive
17422         definitions, not the current ordering mechanism that we have right
17423         now.
17424
17425         The situation is this: Attributes are handled before interfaces,
17426         so we can apply attributes to interfaces.  But some attributes
17427         implement interfaces, we will now handle the simple cases
17428         (recursive definitions will just get an error).  
17429
17430         * parameter.cs: Only invalidate types at the end if we fail to
17431         lookup all types.  
17432
17433 2002-09-09  Martin Baulig  <martin@gnome.org>
17434
17435         * ecore.cs (PropertyExpr.Emit): Also check for
17436         TypeManager.system_int_array_get_length so this'll also work when
17437         compiling corlib.  Fixes #30003.
17438
17439 2002-09-09  Martin Baulig  <martin@gnome.org>
17440
17441         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17442         and throw an exception if we can't get the type's size.  Fixed #30040,
17443         added test-165.cs.
17444
17445 2002-09-09  Martin Baulig  <martin@gnome.org>
17446
17447         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17448
17449         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17450         context.  Fixes bug #30027.
17451
17452         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17453         virtual functions.  Fixes bug #30043, added test-164.cs.
17454
17455 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17456
17457         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17458
17459 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17460
17461         * driver.cs: Use an object to get the windows codepage since it's not a
17462         static property.
17463
17464 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17465
17466         * statement.cs (For.Emit): for infinite loops (test == null)
17467         return whether there is a break inside, not always "true".
17468
17469         * namespace.cs (UsingEntry): New struct to hold the name of the
17470         using definition, the location where it is defined, and whether it
17471         has been used in a successful type lookup.
17472
17473         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
17474         strings.
17475
17476         * decl.cs: ditto.
17477
17478 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17479
17480         * attribute.cs : Fix incorrect code which relied on catching
17481         a NullReferenceException to detect a null being passed in
17482         where an object was expected.
17483
17484 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
17485
17486         * statement.cs (Try): flag the catch variable as assigned
17487
17488         * expression.cs (Cast): Simplified by using ResolveType instead of
17489         manually resolving.
17490
17491         * statement.cs (Catch): Fix bug by using ResolveType.
17492
17493 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17494
17495         * expression.cs (BetterConversion): Special case for when we have
17496         a NullLiteral as the argument and we have to choose between string
17497         and object types - we choose string the way csc does.
17498
17499         * attribute.cs (Attribute.Resolve): Catch the
17500         NullReferenceException and report error #182 since the Mono
17501         runtime no more has the bug and having this exception raised means
17502         we tried to select a constructor which takes an object and is
17503         passed a null.
17504
17505 2002-09-05  Ravi Pratap  <ravi@ximian.com>
17506
17507         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
17508         message (1502, 1503) when we can't locate a method after overload
17509         resolution. This is much more informative and closes the bug
17510         Miguel reported.
17511
17512         * interface.cs (PopulateMethod): Return if there are no argument
17513         types. Fixes a NullReferenceException bug.
17514
17515         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
17516         expressions too. Previously we were checking only in one place for
17517         positional arguments leaving out named arguments.
17518
17519         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
17520         type to the enum type is not allowed. Remove code corresponding to
17521         that.
17522
17523         (ConvertNumericExplicit): Allow explicit conversions from
17524         the underlying type to enum type. This precisely follows the spec
17525         and closes a bug filed by Gonzalo.
17526
17527 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17528
17529         * compiler.csproj:
17530         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
17531
17532 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
17533
17534         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
17535         it was important that we stored the right value after the
17536         reduction in `converted'.
17537
17538 2002-09-04  Martin Baulig  <martin@gnome.org>
17539
17540         * location.cs (Location.SymbolDocument): Use full pathnames for the
17541         source files.
17542
17543 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
17544
17545         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
17546         of the expression resolve mechanism, because that will catch the
17547         SimpleName error failures.
17548
17549         (Conditional): If we can not resolve the
17550         expression, return, do not crash.
17551
17552 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17553
17554         * cs-tokenizer.cs:
17555         (location): display token name instead of its number.
17556
17557 2002-08-28  Martin Baulig  <martin@gnome.org>
17558
17559         * expression.cs (Binary.ResolveOperator): Don't silently return
17560         but return an error if an operator cannot be applied between two
17561         enum types.
17562
17563 2002-08-28  Martin Baulig  <martin@gnome.org>
17564
17565         * class.cs (Constructor.Define): Set the permission attributes
17566         correctly instead of making all constructors public.
17567
17568 2002-08-28  Martin Baulig  <martin@gnome.org>
17569
17570         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
17571         for private members before reporting a CS0103; if we find anything,
17572         it's a CS0122.
17573
17574 2002-08-28  Martin Baulig  <martin@gnome.org>
17575
17576         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
17577         to check whether `closure_start_type == closure_invocation_type',
17578         we also need to check whether `m.DeclaringType == closure_invocation_type'
17579         before bypassing the permission checks.  We might be accessing
17580         protected/private members from the base class.
17581         (TypeManager.RealMemberLookup): Only set private_ok if private
17582         members were requested via BindingFlags.NonPublic.
17583
17584         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
17585
17586         * expression.cs (MemberAccess.ResolveMemberAccess): Set
17587         MethodGroupExpr.IsExplicitImpl if appropriate.
17588         (Invocation.DoResolve): Don't report the CS0120 for explicit
17589         interface implementations.
17590
17591 2002-08-27  Martin Baulig  <martin@gnome.org>
17592
17593         * expression.cs (Invocation.DoResolve): If this is a static
17594         method and we don't have an InstanceExpression, we must report
17595         a CS0120.
17596
17597 2002-08-25  Martin Baulig  <martin@gnome.org>
17598
17599         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
17600         `==' between a valuetype and an object.
17601
17602 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
17603
17604         * ecore.cs (TypeExpr): Provide a ToString method.
17605
17606 2002-08-24  Martin Baulig  <martin@gnome.org>
17607
17608         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
17609         now called proggie.dbg and it's a binary file.
17610
17611 2002-08-23  Martin Baulig  <martin@gnome.org>
17612
17613         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
17614
17615 2002-08-23  Martin Baulig  <martin@gnome.org>
17616
17617         * struct.cs (MyStructInfo.ctor): Make this work with empty
17618         structs; it's not allowed to use foreach() on null.
17619
17620 2002-08-23  Martin Baulig  <martin@gnome.org>
17621
17622         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
17623         writer the full pathname of the generated assembly.
17624
17625 2002-08-23  Martin Baulig  <martin@gnome.org>
17626
17627         * statements.cs (FlowBranching.UsageVector.MergeChildren):
17628         A `finally' block never returns or breaks; improved handling of
17629         unreachable code.
17630
17631 2002-08-23  Martin Baulig  <martin@gnome.org>
17632
17633         * statement.cs (Throw.Resolve): Allow `throw null'.
17634
17635 2002-08-23  Martin Baulig  <martin@gnome.org>
17636
17637         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
17638         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
17639         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
17640         MemberLookup would return a wrong event if this is an explicit
17641         interface implementation and the class has an event with the same
17642         name.
17643
17644 2002-08-23  Martin Baulig  <martin@gnome.org>
17645
17646         * statement.cs (Block.AddChildVariableNames): New public method.
17647         (Block.AddChildVariableName): Likewise.
17648         (Block.IsVariableNameUsedInChildBlock): Likewise.
17649         (Block.AddVariable): Check whether a variable name has already
17650         been used in a child block.
17651
17652         * cs-parser.jay (declare_local_variables): Mark all variable names
17653         from the current block as being used in a child block in the
17654         implicit block.
17655
17656 2002-08-23  Martin Baulig  <martin@gnome.org>
17657
17658         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
17659         find the symbol writer.
17660
17661         * driver.cs: csc also allows the arguments to /define being
17662         separated by commas, not only by semicolons.
17663
17664 2002-08-23  Martin Baulig  <martin@gnome.org>
17665
17666         * interface.cs (Interface.GetMembers): Added static check for events.
17667
17668 2002-08-15  Martin Baulig  <martin@gnome.org>
17669
17670         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
17671         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
17672
17673         * ecore.cs (Expression.MemberLookup): Added documentation and explained
17674         why the MethodData.EmitDestructor() change was necessary.
17675
17676 2002-08-20  Martin Baulig  <martin@gnome.org>
17677
17678         * class.cs (TypeContainer.FindMembers): Added static check for events.
17679
17680         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
17681
17682         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
17683         use Type.GetEvents(), not Type.FindMembers().
17684
17685 2002-08-20  Martin Baulig  <martin@gnome.org>
17686
17687         * decl.cs (MemberCache): Added a special method cache which will
17688         be used for method-only searched.  This ensures that a method
17689         search will return a MethodInfo with the correct ReflectedType for
17690         inherited methods.      
17691
17692 2002-08-20  Martin Baulig  <martin@gnome.org>
17693
17694         * decl.cs (DeclSpace.FindMembers): Made this public.
17695
17696 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17697
17698         * delegate.cs: fixed build on windows.
17699         [FIXME:  Filed as bug #29150: MCS must report these errors.]
17700
17701 2002-08-19  Ravi Pratap  <ravi@ximian.com>
17702
17703         * ecore.cs (StandardConversionExists): Return a false
17704         if we are trying to convert the void type to anything else
17705         since that is not allowed.
17706
17707         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
17708         we flag error 70 in the event an event is trying to be accessed
17709         directly from outside the declaring type.
17710
17711 2002-08-20  Martin Baulig  <martin@gnome.org>
17712
17713         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
17714         MemberCache from typemanager.cs to decl.cs.
17715
17716 2002-08-19  Martin Baulig  <martin@gnome.org>
17717
17718         * class.cs (TypeContainer): Implement IMemberContainer.
17719         (TypeContainer.DefineMembers): Create the MemberCache.
17720         (TypeContainer.FindMembers): Do better BindingFlags checking; only
17721         return public members if BindingFlags.Public was given, check
17722         whether members are static.
17723
17724 2002-08-16  Martin Baulig  <martin@gnome.org>
17725
17726         * decl.cs (DeclSpace.Define): Splitted this in Define and
17727         DefineMembers.  DefineMembers is called first and initializes the
17728         MemberCache.
17729
17730         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
17731         DefineMembers() on all our DeclSpaces.
17732
17733         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
17734         but call DefineMembers() on all nested interfaces.  We call their
17735         Define() in our new Define() function.
17736
17737         * interface.cs (Interface): Implement IMemberContainer.
17738         (Interface.Define): Moved all code except the attribute stuf to
17739         DefineMembers().
17740         (Interface.DefineMembers): Initialize the member cache.
17741
17742         * typemanager.cs (IMemberFinder): Removed this interface, we don't
17743         need this anymore since we can use MemberCache.FindMembers directly.
17744
17745 2002-08-19  Martin Baulig  <martin@gnome.org>
17746
17747         * typemanager.cs (MemberCache): When creating the cache for an
17748         interface type, add all inherited members.
17749         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
17750         to `out bool used_cache' and documented it.
17751         (TypeManager.MemberLookup): If we already used the cache in the first
17752         iteration, we don't need to do the interfaces check.
17753
17754 2002-08-19  Martin Baulig  <martin@gnome.org>
17755
17756         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
17757         here from IMemberFinder and don't implement this interface anymore.
17758         (DeclSpace.MemberCache): Moved here from IMemberFinder.
17759
17760         * typemanager.cs (IMemberFinder): This interface is now only used by
17761         classes which actually support the member cache.
17762         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
17763         since we only put DeclSpaces into this Hashtable.
17764         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
17765         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
17766
17767 2002-08-16  Martin Baulig  <martin@gnome.org>
17768
17769         * typemanager.cs (ICachingMemberFinder): Removed.
17770         (IMemberFinder.MemberCache): New property.
17771         (TypeManager.FindMembers): Merged this with RealFindMembers().
17772         This function will never be called from TypeManager.MemberLookup()
17773         so we can't use the cache here, just the IMemberFinder.
17774         (TypeManager.MemberLookup_FindMembers): Check whether the
17775         IMemberFinder has a MemberCache and call the cache's FindMembers
17776         function.
17777         (MemberCache): Rewrote larger parts of this yet another time and
17778         cleaned it up a bit.
17779
17780 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
17781
17782         * driver.cs (LoadArgs): Support quoting.
17783
17784         (Usage): Show the CSC-like command line arguments.
17785
17786         Improved a few error messages.
17787
17788 2002-08-15  Martin Baulig  <martin@gnome.org>
17789
17790         * typemanager.cs (IMemberContainer.Type): New property.
17791         (IMemberContainer.IsInterface): New property.
17792
17793         The following changes are conditional to BROKEN_RUNTIME, which is
17794         defined at the top of the file.
17795
17796         * typemanager.cs (MemberCache.MemberCache): Don't add the base
17797         class'es members, but add all members from TypeHandle.ObjectType
17798         if we're an interface.
17799         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
17800         is the current type.
17801         (MemberCache.CacheEntry.Container): Removed this field.
17802         (TypeHandle.GetMembers): Include inherited members.
17803
17804 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17805
17806         * typemanager.cs: fixed compilation and added a comment on a field that
17807         is never used.
17808
17809 2002-08-15  Martin Baulig  <martin@gnome.org>
17810
17811         * class.cs (ConstructorInitializer.Resolve): In the
17812         Expression.MemberLookup call, use the queried_type as
17813         invocation_type.
17814
17815         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
17816         declared' attribute, it's always true.
17817         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
17818         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
17819         temporary wrapper for FindMembers which tells MemberLookup whether
17820         members from the base classes are included in the return value.
17821         This will go away soon.
17822         (TypeManager.MemberLookup): Use this temporary hack here; once the
17823         new MemberCache is completed, we don't need to do the DeclaredOnly
17824         looping here anymore since the MemberCache will take care of this.
17825         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
17826         (MemberCache): When creating the MemberCache for a class, get
17827         members from the current class and all its base classes.
17828         (MemberCache.CacheEntry.Container): New field.  This is a
17829         temporary hack until the Mono runtime is fixed to distinguish
17830         between ReflectedType and DeclaringType.  It allows us to use MCS
17831         with both the MS runtime and the unfixed Mono runtime without
17832         problems and without accecting performance.
17833         (MemberCache.SearchMembers): The DeclaredOnly looping from
17834         TypeManager.MemberLookup is now done here.      
17835
17836 2002-08-14  Martin Baulig  <martin@gnome.org>
17837
17838         * statement.cs (MyStructInfo.MyStructInfo): Don't call
17839         Type.GetFields on dynamic types but get the fields from the
17840         corresponding TypeContainer.
17841         (MyStructInfo.GetStructInfo): Added check for enum types.
17842
17843         * typemanager.cs (MemberList.IsSynchronized): Implemented.
17844         (MemberList.SyncRoot): Implemented.
17845         (TypeManager.FilterWithClosure): No need to check permissions if
17846         closure_start_type == closure_invocation_type, don't crash if
17847         closure_invocation_type is null.
17848
17849 2002-08-13  Martin Baulig  <martin@gnome.org>
17850
17851         Rewrote TypeContainer.FindMembers to use a member cache.  This
17852         gives us a speed increase of about 35% for the self-hosting MCS
17853         build and of about 15-20% for the class libs (both on GNU/Linux).
17854
17855         * report.cs (Timer): New class to get enhanced profiling.  This
17856         whole class is "TIMER" conditional since it remarkably slows down
17857         compilation speed.
17858
17859         * class.cs (MemberList): New class.  This is an IList wrapper
17860         which we're now using instead of passing MemberInfo[]'s around to
17861         avoid copying this array unnecessarily.
17862         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
17863         (ICachingMemberFinder, IMemberContainer): New interface.
17864         (TypeManager.FilterWithClosure): If `criteria' is null, the name
17865         has already been checked, otherwise use it for the name comparision.
17866         (TypeManager.FindMembers): Renamed to RealMemberFinder and
17867         provided wrapper which tries to use ICachingMemberFinder.FindMembers
17868         if possible.  Returns a MemberList, not a MemberInfo [].
17869         (TypeHandle): New class, implements IMemberContainer.  We create
17870         one instance of this class per type, it contains a MemberCache
17871         which is used to do the member lookups.
17872         (MemberCache): New class.  Each instance of this class contains
17873         all members of a type and a name-based hash table.
17874         (MemberCache.FindMembers): This is our new member lookup
17875         function.  First, it looks up all members of the requested name in
17876         the hash table.  Then, it walks this list and sorts out all
17877         applicable members and returns them.
17878
17879 2002-08-13  Martin Baulig  <martin@gnome.org>
17880
17881         In addition to a nice code cleanup, this gives us a performance
17882         increase of about 1.4% on GNU/Linux - not much, but it's already
17883         half a second for the self-hosting MCS compilation.
17884
17885         * typemanager.cs (IMemberFinder): New interface.  It is used by
17886         TypeManager.FindMembers to call FindMembers on a TypeContainer,
17887         Enum, Delegate or Interface.
17888         (TypeManager.finder_to_member_finder): New PtrHashtable.
17889         (TypeManager.finder_to_container): Removed.
17890         (TypeManager.finder_to_delegate): Removed.
17891         (TypeManager.finder_to_interface): Removed.
17892         (TypeManager.finder_to_enum): Removed.
17893
17894         * interface.cs (Interface): Implement IMemberFinder.
17895
17896         * delegate.cs (Delegate): Implement IMemberFinder.
17897
17898         * enum.cs (Enum): Implement IMemberFinder.
17899
17900         * class.cs (TypeContainer): Implement IMemberFinder.
17901
17902 2002-08-12  Martin Baulig  <martin@gnome.org>
17903
17904         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
17905
17906 2002-08-12  Martin Baulig  <martin@gnome.org>
17907
17908         * ecore.cs (ITypeExpression): New interface for expressions which
17909         resolve to a type.
17910         (TypeExpression): Renamed to TypeLookupExpression.
17911         (Expression.DoResolve): If we're doing a types-only lookup, the
17912         expression must implement the ITypeExpression interface and we
17913         call DoResolveType() on it.
17914         (SimpleName): Implement the new ITypeExpression interface.
17915         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
17916         hack, the situation that we're only looking up types can't happen
17917         anymore when this method is called.  Moved the type lookup code to
17918         DoResolveType() and call it.
17919         (SimpleName.DoResolveType): This ITypeExpression interface method
17920         is now doing the types-only lookup.
17921         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
17922         (ResolveFlags): Added MaskExprClass.
17923
17924         * expression.cs (MemberAccess): Implement the ITypeExpression
17925         interface.
17926         (MemberAccess.DoResolve): Added support for a types-only lookup
17927         when we're called via ITypeExpression.DoResolveType().
17928         (ComposedCast): Implement the ITypeExpression interface.
17929
17930         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
17931         Expression.Resolve() with ResolveFlags.Type instead.
17932
17933 2002-08-12  Martin Baulig  <martin@gnome.org>
17934
17935         * interface.cs (Interface.Define): Apply attributes.
17936
17937         * attribute.cs (Attribute.ApplyAttributes): Added support for
17938         interface attributes.
17939
17940 2002-08-11  Martin Baulig  <martin@gnome.org>
17941
17942         * statement.cs (Block.Emit): Only check the "this" variable if we
17943         do not always throw an exception.
17944
17945         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
17946         whether the property has a set accessor.
17947
17948 2002-08-11  Martin Baulig  <martin@gnome.org>
17949
17950         Added control flow analysis support for structs.
17951
17952         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
17953         with control flow analysis turned off.
17954         (IVariable): New interface.
17955         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
17956         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
17957         (FieldExpr.DoResolve): Resolve the instance expression with flow
17958         analysis turned off and do the definite assignment check after the
17959         resolving when we know what the expression will resolve to.
17960
17961         * expression.cs (LocalVariableReference, ParameterReference):
17962         Implement the new IVariable interface, only call the flow analysis
17963         code if ec.DoFlowAnalysis is true.
17964         (This): Added constructor which takes a Block argument.  Implement
17965         the new IVariable interface.
17966         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
17967         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
17968         This does the definite assignment checks for struct members.
17969
17970         * class.cs (Constructor.Emit): If this is a non-static `struct'
17971         constructor which doesn't have any initializer, call
17972         Block.AddThisVariable() to tell the flow analysis code that all
17973         struct elements must be initialized before control returns from
17974         the constructor.
17975
17976         * statement.cs (MyStructInfo): New public class.
17977         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
17978         argument to this indexer.  If non-zero, check an individual struct
17979         member, not the whole struct.
17980         (FlowBranching.CheckOutParameters): Check struct members.
17981         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
17982         overloaded versions of these methods which take an additional
17983         `int field_idx' argument to check struct members.
17984         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
17985         overloaded versions of these methods which take an additional
17986         `string field_name' argument to check struct member.s
17987         (VariableInfo): Implement the IVariable interface.
17988         (VariableInfo.StructInfo): New public property.  Returns the
17989         MyStructInfo instance of the variable if it's a struct or null.
17990         (Block.AddThisVariable): New public method.  This is called from
17991         Constructor.Emit() for non-static `struct' constructor which do
17992         not have any initializer.  It creates a special variable for the
17993         "this" instance variable which will be checked by the flow
17994         analysis code to ensure that all of the struct's fields are
17995         initialized before control returns from the constructor.
17996         (UsageVector): Added support for struct members.  If a
17997         variable/parameter is a struct with N members, we reserve a slot
17998         in the usage vector for each member.  A struct is considered fully
17999         initialized if either the struct itself (slot 0) or all its
18000         members are initialized.
18001
18002 2002-08-08  Martin Baulig  <martin@gnome.org>
18003
18004         * driver.cs (Driver.MainDriver): Only report an error CS5001
18005         if there were no compilation errors.
18006
18007         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18008         `UnsafeContext' property to determine whether the parent is in
18009         unsafe context rather than checking the parent's ModFlags:
18010         classes nested in an unsafe class are unsafe as well.
18011
18012 2002-08-08  Martin Baulig  <martin@gnome.org>
18013
18014         * statement.cs (UsageVector.MergeChildren): Distinguish between
18015         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18016         we return.  Added test17() and test18() to test-154.cs.
18017
18018 2002-08-08  Martin Baulig  <martin@gnome.org>
18019
18020         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18021         Family access, make sure the invoking type isn't a subclass of the
18022         queried type (that'd be a CS1540).
18023
18024         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18025         this method which takes an additional `Type invocation_type'.
18026
18027         * expression.cs (BaseAccess.DoResolve): Use the base type as
18028         invocation and query type.
18029         (MemberAccess.DoResolve): If the lookup failed and we're about to
18030         report a CS0122, try a lookup with the ec.ContainerType - if this
18031         succeeds, we must report a CS1540.
18032
18033 2002-08-08  Martin Baulig  <martin@gnome.org>
18034
18035         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18036         (MethodGroupExpr): Implement the IMemberExpr interface.
18037
18038         * expression (MemberAccess.ResolveMemberAccess): No need to have
18039         any special code for MethodGroupExprs anymore, they're now
18040         IMemberExprs.   
18041
18042 2002-08-08  Martin Baulig  <martin@gnome.org>
18043
18044         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18045         Family, FamANDAssem and FamORAssem permissions.
18046         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18047
18048 2002-08-08  Martin Baulig  <martin@gnome.org>
18049
18050         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18051         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18052         or loop block.
18053
18054 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18055
18056         * driver.cs: implemented /resource option to embed managed resources.
18057
18058 2002-08-07  Martin Baulig  <martin@gnome.org>
18059
18060         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18061         (FieldBase.HasFieldInitializer): New public property.
18062         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18063         returns the field initializer and makes sure it is only resolved once.
18064         (TypeContainer.EmitFieldInitializers): Call
18065         FieldBase.GetInitializerExpression to get the initializer, this ensures
18066         that it isn't resolved multiple times.
18067
18068         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18069         the resolving process (SimpleName/MemberLookup) that we're currently
18070         emitting a field initializer (which must not access any instance members,
18071         this is an error CS0236).
18072
18073         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18074         argument, if the `IsFieldInitializer' flag is set, we must report and
18075         error CS0236 and not an error CS0120.   
18076
18077 2002-08-07  Martin Baulig  <martin@gnome.org>
18078
18079         * ecore.cs (IMemberExpr): New public interface.
18080         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18081         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18082         if the expression is an IMemberExpr.
18083
18084         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18085         to be null, implicitly default to `this' if we're non-static in
18086         this case.  Simplified the code a lot by using the new IMemberExpr
18087         interface.  Also fixed bug #28176 here.
18088
18089 2002-08-06  Martin Baulig  <martin@gnome.org>
18090
18091         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18092         ParameterReferences during semantic analysis so that we can do a
18093         type-only search when resolving Cast, TypeOf and SizeOf.
18094         (block): Pass the `current_local_parameters' to the Block's
18095         constructor.
18096
18097         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18098         argument to the constructor.
18099         (ConstructorInitializer.Resolve): Create a temporary implicit
18100         block with the parameters.
18101
18102         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18103         references here if we aren't doing a type-only search.
18104
18105         * statement.cs (Block): Added constructor which takes a
18106         `Parameters parameters' argument.
18107         (Block.Parameters): New public property.
18108
18109         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18110         to `Parameters' and made it public readonly.
18111
18112 2002-08-06  Martin Baulig  <martin@gnome.org>
18113
18114         * ecore.cs (Expression.Warning): Made this public as well.
18115
18116         * report.cs (Report.Debug): Print the contents of collections.
18117
18118 2002-08-06  Martin Baulig  <martin@gnome.org>
18119
18120         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18121         used to tell Resolve() which kinds of expressions it may return.
18122         (Expression.Resolve): Added overloaded version of this method which
18123         takes a `ResolveFlags flags' argument.  This can be used to tell
18124         Resolve() which kinds of expressions it may return.  Reports a
18125         CS0118 on error.
18126         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18127         ResolveFlags.SimpleName.
18128         (Expression.Error118): Added overloaded version of this method which
18129         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18130         which kinds of expressions are allowed.
18131
18132         * expression.cs (Argument.ResolveMethodGroup): New public method.
18133         Resolves an argument, but allows a MethodGroup to be returned.
18134         This is used when invoking a delegate.
18135
18136         * TODO: Updated a bit.
18137
18138 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18139
18140         Fixed compilation with csc.
18141
18142         * ecore.cs: Expression.Error made public. Is this correct? Should
18143         Warning be made public too?
18144
18145         * expression.cs: use ea.Location instead of ea.loc.
18146         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18147
18148 2002-08-06  Martin Baulig  <martin@gnome.org>
18149
18150         * ecore.cs (Expression.loc): Moved the location here instead of
18151         duplicating it in all derived classes.
18152         (Expression.Location): New public property.
18153         (Expression.Error, Expression.Warning): Made them non-static and
18154         removed the location argument.
18155         (Expression.Warning): Added overloaded version which takes an
18156         `int level' argument.
18157         (Expression.Error118): Make this non-static and removed the
18158         expression and location arguments.
18159         (TypeExpr): Added location argument to the constructor.
18160
18161         * expression.cs (StaticCallExpr): Added location argument to
18162         the constructor.
18163         (Indirection, PointerArithmetic): Likewise.
18164         (CheckedExpr, UnCheckedExpr): Likewise.
18165         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18166         (StringPtr): Likewise.
18167
18168
18169 2002-08-05  Martin Baulig  <martin@gnome.org>
18170
18171         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18172
18173         * assign.cs (Assign.DoResolve): Check whether the source
18174         expression is a value or variable.
18175
18176         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18177         while resolving the corresponding blocks.
18178
18179         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18180         an error, don't silently return null.
18181
18182         * statement.cs (Block.AddVariable): Do the error reporting here
18183         and distinguish between CS0128 and CS0136.
18184         (Block.DoResolve): Report all unused labels (warning CS0164).
18185         (LabeledStatement): Pass the location to the constructor.
18186         (LabeledStatement.HasBeenReferenced): New property.
18187         (LabeledStatement.Resolve): Set it to true here.
18188
18189         * statement.cs (Return.Emit): Return success even after reporting
18190         a type mismatch error (CS0126 or CS0127), this is what csc does and
18191         it avoids confusing the users with any consecutive errors.
18192
18193 2002-08-05  Martin Baulig  <martin@gnome.org>
18194
18195         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18196
18197         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18198
18199         * expression.cs (MemberAccess.DoResolve): Silently return if an
18200         error has already been reported.
18201
18202         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18203         error has already been reported.
18204
18205 2002-08-05  Martin Baulig  <martin@gnome.org>
18206
18207         * statement.cs (UsageVector): Only initialize the `parameters'
18208         vector if we actually have any "out" parameters.
18209
18210 2002-08-05  Martin Baulig  <martin@gnome.org>
18211
18212         * expression.cs (Binary.ResolveOperator): When combining delegates,
18213         they must have the same type.
18214
18215 2002-08-05  Martin Baulig  <martin@gnome.org>
18216
18217         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18218         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18219         work with the ms runtime and we also don't need it: if we're a
18220         PropertyBuilder and not in the `indexer_arguments' hash, then we
18221         are a property and not an indexer.
18222
18223         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18224         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18225         since the latter one doesn't work with the ms runtime.
18226
18227 2002-08-03  Martin Baulig  <martin@gnome.org>
18228
18229         Fixed bugs #27998 and #22735.
18230
18231         * class.cs (Method.IsOperator): New public field.
18232         (Method.CheckBase): Report CS0111 if there's already a method
18233         with the same parameters in the current class.  Report CS0508 when
18234         attempting to change the return type of an inherited method.
18235         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18236         and it's not marked abstract or extern.
18237         (PropertyBase): New abstract base class for Property and Indexer.
18238         (PropertyBase.CheckBase): Moved here from Property and made it work
18239         for indexers.
18240         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18241         the same so we can reuse it there.
18242         (Property, Indexer): Derive from PropertyBase.
18243         (MethodSignature.inheritable_property_signature_filter): New delegate
18244         to find properties and indexers.
18245
18246         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18247         argument and improved error reporting.
18248
18249         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18250         EmptyReadOnlyParameters and made it a property.
18251
18252         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18253         version of this method which takes a `PropertyInfo indexer'.
18254         (TypeManager.RegisterIndexer): New method.
18255
18256         * class.cs: Added myself as author of this file :-)
18257
18258 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18259
18260         * class.cs: fixed compilation on windoze.
18261
18262 2002-08-03  Martin Baulig  <martin@gnome.org>
18263
18264         * interface.cs (Interface.GetInterfaceBases): Check whether all
18265         base interfaces are at least as accessible than the current one.
18266
18267         * class.cs (TypeContainer.GetClassBases): Check whether base types
18268         are at least as accessible than the current type.
18269         (TypeContainer.AsAccessible): Implemented and made non-static.
18270         (MemberBase.CheckParameters): Report errors if the accessibility
18271         checks fail.
18272
18273         * delegate.cs (Delegate.Delegate): The default visibility is
18274         internal for top-level types and private for nested types.
18275         (Delegate.Define): Report errors if the accessibility checks fail.
18276
18277         * enum.cs (Enum.Enum): The default visibility is internal for
18278         top-level types and private for nested types.
18279         (Enum.DefineType): Compute the correct visibility.
18280
18281         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18282         function which takes a `bool is_toplevel' instead of a TypeContainer.
18283
18284         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18285         builtin type.
18286
18287 2002-08-02  Martin Baulig  <martin@gnome.org>
18288
18289         * expression.cs (LocalVariableReferenc): Added constructor which
18290         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18291         (LocalVariableReference.IsReadOnly): New property.
18292         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18293         variable is readonly, use our own readonly flag to do this; you can
18294         use the new constructor to get a writable reference to a read-only
18295         variable.
18296
18297         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18298         reference to the local variable.
18299
18300 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18301
18302         * rootcontext.cs (ResolveCore): Also include System.Exception
18303
18304         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18305         we reach an EmptyStatement.
18306
18307         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18308         is also fine.
18309
18310         * expression.cs (Binary.ResolveOperator): Check error result in
18311         two places.
18312
18313         use brtrue/brfalse directly and avoid compares to null.
18314
18315 2002-08-02  Martin Baulig  <martin@gnome.org>
18316
18317         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18318         Fixes bug #28407, added test-155.cs.
18319
18320 2002-08-01  Martin Baulig  <martin@gnome.org>
18321
18322         * class.cs (Event.EmitDefaultMethod): Make this work with static
18323         events.  Fixes #28311, added verify-3.cs.
18324
18325 2002-08-01  Martin Baulig  <martin@gnome.org>
18326
18327         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18328         `is_disposable' fields.
18329         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18330         `hm.is_disposable' if we're using the collection pattern.
18331         (Foreach.EmitCollectionForeach): Use the correct type for the
18332         enumerator's local variable, only emit the try/finally block if
18333         necessary (fixes #27713).
18334
18335 2002-08-01  Martin Baulig  <martin@gnome.org>
18336
18337         * ecore.cs (Expression.report118): Renamed to Error118 and made
18338         it public static.
18339
18340         * statement.cs (Throw.Resolve): Check whether the expression is of
18341         the correct type (CS0118) and whether the type derives from
18342         System.Exception (CS0155).
18343         (Catch.Resolve): New method.  Do the type lookup here and check
18344         whether it derives from System.Exception (CS0155).
18345         (Catch.CatchType, Catch.IsGeneral): New public properties.
18346
18347         * typemanager.cs (TypeManager.exception_type): Added.
18348
18349 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18350
18351         * driver.cs: Updated About function.
18352
18353 2002-07-31  Martin Baulig  <martin@gnome.org>
18354
18355         Implemented Control Flow Analysis.
18356
18357         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18358         (EmitContext.CurrentBranching): Added.
18359         (EmitContext.StartFlowBranching): Added.
18360         (EmitContext.EndFlowBranching): Added.
18361         (EmitContext.KillFlowBranching): Added.
18362         (EmitContext.IsVariableAssigned): Added.
18363         (EmitContext.SetVariableAssigned): Added.
18364         (EmitContext.IsParameterAssigned): Added.
18365         (EmitContext.SetParameterAssigned): Added.
18366         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18367         Added control flow analysis stuff here.
18368
18369         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18370         resolve the expression as lvalue.
18371         (LocalVariableReference.DoResolve): Check whether the variable has
18372         already been assigned.
18373         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18374         the parameter as assigned here.
18375         (ParameterReference.DoResolve): Check whether the parameter has already
18376         been assigned.
18377         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18378         expression as lvalue.
18379
18380         * statement.cs (FlowBranching): New class for the flow analysis code.
18381         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18382         (LabeledStatement.IsDefined): New public property.
18383         (LabeledStatement.AddUsageVector): New public method to tell flow
18384         analyis that the label may be reached via a forward jump.
18385         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18386         flow analysis.
18387         (VariableInfo.Number): New public field.  This is used by flow analysis
18388         to number all locals of a block.
18389         (Block.CountVariables): New public property.  This is the number of
18390         local variables in this block (including the locals from all parent
18391         blocks).
18392         (Block.EmitMeta): Number all the variables.
18393
18394         * statement.cs: Added flow analysis support to all classes.
18395
18396 2002-07-31  Martin Baulig  <martin@gnome.org>
18397
18398         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18399         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18400         then use this argument.
18401
18402         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18403
18404         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18405         use this to specify /define options.
18406
18407 2002-07-29  Martin Baulig  <martin@gnome.org>
18408
18409         * statement.cs (Fixed): Moved all code that does variable lookups
18410         and resolvings from Emit to Resolve.
18411
18412         * statement.cs (For): Moved all code that does variable lookups
18413         and resolvings from Emit to Resolve.
18414
18415         * statement.cs (Using): Moved all code that does variable lookups
18416         and resolvings from Emit to Resolve.
18417
18418 2002-07-29  Martin Baulig  <martin@gnome.org>
18419
18420         * attribute.cs (Attribute.Resolve): Explicitly catch a
18421         System.NullReferenceException when creating the
18422         CustromAttributeBuilder and report a different warning message.
18423
18424 2002-07-29  Martin Baulig  <martin@gnome.org>
18425
18426         * support.cs (ParameterData.ParameterName): Added method to
18427         get the name of a parameter.
18428
18429         * typemanager.cs (TypeManager.IsValueType): New public method.
18430
18431 2002-07-29  Martin Baulig  <martin@gnome.org>
18432
18433         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18434         is a flag which specifies that it's either ref or out.
18435         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18436         the out parameter to `out Parameter.Modifier mod', also set the
18437         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18438
18439         * support.cs (InternalParameters.ParameterModifier): Distinguish
18440         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18441         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18442
18443         * expression.cs (Argument.GetParameterModifier): Distinguish
18444         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18445         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18446
18447 2002-07-29  Martin Baulig  <martin@gnome.org>
18448
18449         * expression.cs (ParameterReference.ParameterReference): Added
18450         `Location loc' argument to the constructor.
18451
18452         * cs-parser.jay: Pass location to ParameterReference.
18453
18454 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18455
18456         * statement.cs (Try): Initialize the location.
18457
18458         * cs-parser.jay: pass location to Try.
18459
18460         * expression.cs (Unary.Reduce): Change the prototype to return
18461         whether a constant fold could be performed or not.  The result is
18462         returned in an out parameters.  In the case of Indirection and
18463         AddressOf, we want to perform the full tests.
18464
18465 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18466
18467         * statement.cs (Statement.Emit): Flag dead code.
18468
18469 2002-07-27  Andrew Birkett  <andy@nobugs.org>
18470
18471         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
18472
18473 2002-07-27  Martin Baulig  <martin@gnome.org>
18474
18475         * class.cs (MethodData.Define): Put back call to
18476         TypeManager.AddMethod(), accidentally commented this out.
18477
18478         * report.cs (Debug): New public method to print debugging information,
18479         this is `[Conditional ("DEBUG")]'.
18480
18481 2002-07-26  Martin Baulig  <martin@gnome.org>
18482
18483         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
18484         (switch_statement): Push the current_block to the switch_stack and
18485         pop it again when we're done with the switch.
18486         (switch_section): The new block is a child of the current_block.
18487         Fixes bug #24007, added test-152.cs.
18488
18489 2002-07-27  Martin Baulig  <martin@gnome.org>
18490
18491         * expression.cs (Invocation.EmitArguments): When calling a varargs
18492         function with only its fixed arguments, we need to pass an empty
18493         array.
18494
18495 2002-07-27  Martin Baulig  <martin@gnome.org>
18496
18497         Mono 0.13 has been released.
18498
18499 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
18500
18501         * driver.cs: Rename --resource to --linkres, because that is what
18502         we do currently, we dont support --resource yet.
18503
18504         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
18505
18506 2002-07-25  Martin Baulig  <martin@gnome.org>
18507
18508         * class.cs (MethodData): New public class.  This is a `method builder'
18509         class for a method or one accessor of a Property/Indexer/Event.
18510         (MethodData.GetMethodFlags): Moved here from MemberBase.
18511         (MethodData.ApplyAttributes): Likewise.
18512         (MethodData.ApplyObsoleteAttribute): Likewise.
18513         (MethodData.ApplyConditionalAttribute): Likewise.
18514         (MethodData.ApplyDllImportAttribute): Likewise.
18515         (MethodData.CheckAbstractAndExternal): Likewise.
18516         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
18517         (MethodData.Emit): Formerly known as Method.Emit().
18518         (MemberBase): Moved everything which was specific to a single
18519         accessor/method to MethodData.
18520         (Method): Create a new MethodData and call Define() and Emit() on it.
18521         (Property, Indexer, Event): Create a new MethodData objects for each
18522         accessor and call Define() and Emit() on them.
18523
18524 2002-07-25  Martin Baulig  <martin@gnome.org>
18525
18526         Made MethodCore derive from MemberBase to reuse the code from there.
18527         MemberBase now also checks for attributes.
18528
18529         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
18530         (MemberBase.GetMethodFlags): Moved here from class Method and marked
18531         as virtual.
18532         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
18533         `CallingConventions cc' and `Attributes opt_attrs' arguments.
18534         (MemberBase.ApplyAttributes): New virtual method; applies the
18535         attributes to a method or accessor.
18536         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
18537         (MemberBase.ApplyConditionalAttribute): Likewise.
18538         (MemberBase.ApplyDllImportAttribute): Likewise.
18539         (MemberBase.CheckAbstractAndExternal): Likewise.
18540         (MethodCore.ParameterTypes): This is now a property instead of a
18541         method, it's initialized from DoDefineParameters().
18542         (MethodCore.ParameterInfo): Removed the set accessor.
18543         (MethodCore.DoDefineParameters): New protected virtual method to
18544         initialize ParameterTypes and ParameterInfo.
18545         (Method.GetReturnType): We can now simply return the MemberType.
18546         (Method.GetMethodFlags): Override the MemberBase version and add
18547         the conditional flags.
18548         (Method.CheckBase): Moved some code from Define() here, call
18549         DoDefineParameters() here.
18550         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
18551         here to avoid some larger code duplication.
18552         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
18553         ensure that abstract and external accessors don't declare a body.
18554
18555         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
18556         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
18557         lookup in the attribute's parent classes, so we need to abort as soon
18558         as we found the first match.
18559         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
18560         the attribute has no arguments.
18561
18562         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
18563         of a Method.
18564
18565 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18566
18567         * cs-parser.jay: reverted previous patch.
18568
18569 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18570
18571         * cs-parser.jay: fixed bug #22119.
18572
18573 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18574
18575         * attribute.cs: fixed compilation. The error was:
18576         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
18577         be assigned to before control leaves the current method."
18578         [FIXME:  Filed as bug #28186: MCS must report this error.]
18579
18580 2002-07-25  Martin Baulig  <martin@gnome.org>
18581
18582         * attribute.cs (Attribute.Conditional_GetConditionName): New static
18583         method to pull the condition name ouf of a Conditional attribute.
18584         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
18585         the obsolete message and error flag out of an Obsolete attribute.
18586
18587         * class.cs (Method.GetMethodFlags): New public method to get the
18588         TypeManager.MethodFlags for this method.
18589         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
18590         private methods.
18591         (Method.Define): Get and apply the Obsolete and Conditional attributes;
18592         if we're overriding a virtual function, set the new private variable
18593         `parent_method'; call the new TypeManager.AddMethod().
18594
18595         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
18596         the MethodBuilder and the Method in a PtrHashtable.
18597         (TypeManager.builder_to_method): Added for this purpose.
18598         (TypeManager.MethodFlags): Added IsObsoleteError.
18599         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
18600         Obsolete and Conditional arguments in MethodBuilders.  If we discover
18601         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
18602         the message from the attribute.
18603
18604 2002-07-24  Martin Baulig  <martin@gnome.org>
18605
18606         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
18607         preprocessor directives, ensure that the argument to #define/#undef is
18608         exactly one identifier and that it's actually an identifier.
18609
18610         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
18611         did not work ....
18612
18613 2002-07-24  Martin Baulig  <martin@gnome.org>
18614
18615         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
18616         initialize it to TypeManager.object_type in the constructor.
18617         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
18618         of the `hm.get_current' method if we're using the collection pattern.
18619         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
18620         for the explicit conversion to make it work when we're using the collection
18621         pattern and the `Current' property has a different return type than `object'.
18622         Fixes #27713.
18623
18624 2002-07-24  Martin Baulig  <martin@gnome.org>
18625
18626         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
18627         does not match, but don't report any errors.  This method is called in
18628         order for all methods in a MethodGroupExpr until a matching method is
18629         found, so we don't want to bail out if the first method doesn't match.
18630         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
18631         matches, report the 123.  Fixes #28070.
18632
18633 2002-07-24  Martin Baulig  <martin@gnome.org>
18634
18635         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
18636         TypeManager.TypeToCoreType() to the top of the method so the
18637         following equality checks will work.  Fixes #28107.
18638
18639 2002-07-24  Martin Baulig  <martin@gnome.org>
18640
18641         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
18642         operand is of type uint, and the other operand is of type sbyte,
18643         short or int, the operands are converted to type long." -
18644         Actually do what this comment already told us.  Fixes bug #28106,
18645         added test-150.cs.
18646
18647 2002-07-24  Martin Baulig  <martin@gnome.org>
18648
18649         * class.cs (MethodBase): New abstract class.  This is now a base
18650         class for Property, Indexer and Event to avoid some code duplication
18651         in their Define() and DefineMethods() methods.
18652         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
18653         generic methods for Define() and DefineMethods().
18654         (FieldBase): Derive from MemberBase, not MemberCore.
18655         (Property): Derive from MemberBase, not MemberCore.
18656         (Property.DefineMethod): Moved all the code from this method to the
18657         new MethodBase.DefineAccessor(), just call it with appropriate
18658         argumetnts.
18659         (Property.Define): Call the new Property.DoDefine(), this does some
18660         sanity checks and we don't need to duplicate the code everywhere.
18661         (Event): Derive from MemberBase, not MemberCore.
18662         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
18663         accessors, this will also make them work with interface events.
18664         (Indexer): Derive from MemberBase, not MemberCore.
18665         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
18666         (Indexer.Define): Use the new MethodBase functions.
18667
18668         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
18669         argument to the constructor.
18670         (Interface.FindMembers): Added support for interface events.
18671         (Interface.PopluateEvent): Implemented.
18672
18673         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
18674
18675 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
18676
18677         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
18678         but this is required to check for a method name being the same as
18679         the containing class.  
18680
18681         Handle this now.
18682
18683 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18684
18685         * interface.cs: initialize variable.
18686
18687 2002-07-23  Martin Baulig  <martin@gnome.org>
18688
18689         Implemented the IndexerName attribute in interfaces.
18690
18691         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
18692         name if this is an explicit interface implementation.
18693         (Indexer.InterfaceIndexerName): New public variable.  If we're
18694         implementing an interface indexer, this is the IndexerName in that
18695         interface.  Otherwise, it's the IndexerName.
18696         (Indexer.DefineMethod): If we're implementing interface indexer,
18697         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
18698         and Pending.ImplementIndexer methods.
18699         (Indexer.Define): Also define the PropertyBuilder if we're
18700         implementing an interface indexer and this is neither an explicit
18701         interface implementation nor do the IndexerName match the one in
18702         the interface.
18703
18704         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
18705         If a method is defined here, then we always need to create a proxy
18706         for it.  This is used when implementing interface indexers.
18707         (Pending.IsInterfaceIndexer): New public method.
18708         (Pending.ImplementIndexer): New public method.
18709         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
18710         This is used when implementing interface indexers to define a proxy
18711         if necessary.
18712         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
18713         define a proxy if necessary.
18714
18715         * interface.cs (Interface.IndexerName): New public variable.
18716         (Interface.PopulateIndexer): Set the IndexerName.
18717         (Interface.DefineIndexers): New private method.  Populate all the
18718         indexers and make sure their IndexerNames match.
18719
18720         * typemanager.cs (IndexerPropertyName): Added support for interface
18721         indexers.
18722
18723 2002-07-22  Martin Baulig  <martin@gnome.org>
18724
18725         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
18726         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
18727         ret if HasReturnLabel.
18728         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
18729         variables.
18730
18731         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
18732         and set the ec.LoopBeginTryCatchLevel.
18733         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
18734         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
18735         the current ec.TryCatchLevel, the branch goes out of an exception
18736         block.  In this case, we need to use Leave and not Br.
18737
18738 2002-07-22  Martin Baulig  <martin@gnome.org>
18739
18740         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
18741         block unless the block does not always return or it is contained in
18742         another try { ... } catch { ... } block.  Fixes bug #26506.
18743         Added verify-1.cs to the test suite.
18744
18745 2002-07-22  Martin Baulig  <martin@gnome.org>
18746
18747         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
18748         then we do not always return.  Fixes bug #24985.
18749
18750 2002-07-22  Martin Baulig  <martin@gnome.org>
18751
18752         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
18753         lookup on a per-class level; ie. walk up the class hierarchy until we
18754         found at least one applicable method, then choose the best among them.
18755         Fixes bug #24463 and test-29.cs.
18756
18757 2002-07-22  Martin Baulig  <martin@gnome.org>
18758
18759         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
18760         return types of the methods.  The return type is not part of the
18761         signature and we must not check it to make the `new' modifier work.
18762         Fixes bug #27999, also added test-147.cs.
18763         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
18764
18765         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
18766         on the method's return type.
18767
18768 2002-07-21  Martin Baulig  <martin@gnome.org>
18769
18770         * assign.cs: Make this work if the rightmost source is a constant and
18771         we need to do an implicit type conversion.  Also adding a few more tests
18772         to test-38.cs which should have caught this.
18773
18774         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
18775         target in the makefile for this.  The makefile.gnu is primarily intended
18776         for end-users who don't want to debug the compiler.
18777
18778 2002-07-21  Martin Baulig  <martin@gnome.org>
18779
18780         * assign.cs: Improved the Assign class so it can now handle embedded
18781         assignments (X = Y = Z = something).  As a side-effect this'll now also
18782         consume less local variables.  test-38.cs now passes with MCS, added
18783         a few new test cases to that test.
18784
18785 2002-07-20  Martin Baulig  <martin@gnome.org>
18786
18787         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
18788         instructions.  Fixes bug #27977, also added test-146.cs.
18789
18790 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18791
18792         * cs-tokenizer.cs: fixed getHex ().
18793
18794 2002-07-19  Martin Baulig  <martin@gnome.org>
18795
18796         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
18797         not Type.GetType() to lookup the array type.  This is needed when
18798         we're constructing an array of a user-defined type.
18799         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
18800         single-dimensional arrays, but also for single-dimensial arrays of
18801         type decimal.
18802
18803 2002-07-19  Martin Baulig  <martin@gnome.org>
18804
18805         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
18806         this function is called, it's not allowed to share LocalBuilders
18807         among ILGenerators.
18808
18809 2002-07-19  Martin Baulig  <martin@gnome.org>
18810
18811         * expression.cs (Argument.Resolve): Report an error 118 when trying
18812         to pass a type as argument.
18813
18814 2002-07-18  Martin Baulig  <martin@gnome.org>
18815
18816         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
18817         Conv_R_Un for the signed `long' type.
18818
18819 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
18820
18821         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
18822         `expr' for the temporary result, as that will fail if we do
18823         multiple resolves on the same expression.
18824
18825 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
18826
18827         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
18828         ec.TypeContainer for looking up aliases. 
18829
18830         * class.cs (TypeContainer): Remove LookupAlias from here.
18831
18832         * decl.cs (DeclSpace); Move here.
18833
18834 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
18835
18836         * class.cs (FindMembers): Only call filter if the constructor
18837         bulider is not null.
18838
18839         Also handle delegates in `NestedTypes' now.  Now we will perform
18840         type lookups using the standard resolution process.  This also
18841         fixes a bug.
18842
18843         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
18844         This uses Expressions (the limited kind that can be parsed by the
18845         tree) instead of strings.
18846
18847         * expression.cs (ComposedCast.ToString): Implement, used to flag
18848         errors since now we have to render expressions.
18849
18850         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
18851         FormArrayType. 
18852
18853         * ecore.cs (SimpleName.ToString): ditto.
18854
18855         * cs-parser.jay: Instead of using strings to assemble types, use
18856         Expressions to assemble the type (using SimpleName, ComposedCast,
18857         MemberAccess).  This should fix the type lookups in declarations,
18858         because we were using a different code path for this.
18859
18860         * statement.cs (Block.Resolve): Continue processing statements
18861         even when there is an error.
18862
18863 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
18864
18865         * class.cs (Event.Define): Also remove the `remove' method from
18866         the list of pending items.
18867
18868         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
18869         generate more compact code. 
18870
18871 2002-07-17  Martin Baulig  <martin@gnome.org>
18872
18873         * const.cs (Const.LookupConstantValue): Add support for constant
18874         `unchecked' and `checked' expressions.
18875         Also adding test case test-140.cs for this.
18876
18877 2002-07-17  Martin Baulig  <martin@gnome.org>
18878
18879         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
18880         check whether mi.ReturnType implements the IEnumerator interface; the
18881         `==' and the IsAssignableFrom() will fail in this situation.
18882
18883 2002-07-16  Ravi Pratap  <ravi@ximian.com>
18884
18885         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
18886         here too.
18887
18888 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18889
18890         * expression.cs: fixed bug #27811.
18891
18892 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
18893
18894         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
18895         Molaro: when we are a ref, the value already contains a pointer
18896         value, do not take the address of it.
18897
18898 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
18899         * removed mb-parser.jay and mb-tokenizer.cs
18900
18901 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
18902
18903         * expression.cs: check against the building corlib void type.
18904
18905 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
18906
18907         * ecore.cs: fix for valuetype static readonly fields: when 
18908         initializing them, we need their address, not the address of a copy.
18909
18910 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
18911
18912         * typemanager.cs: register also enum_type in corlib.
18913
18914 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
18915
18916         * class.cs: allow calling this (but not base) initializers in structs.
18917
18918 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
18919
18920         * ecore.cs: make sure we compare against the building base types
18921         in GetTypeSize ().
18922
18923 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
18924
18925         * typemanager.cs: fix TypeToCoreType() to handle void and object
18926         (corlib gets no more typerefs after this change).
18927
18928 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
18929
18930         * expression.cs (ArrayCreation.EmitArrayArguments): use
18931         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
18932
18933         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
18934         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
18935         array indexes, the runtime actually forbids them.
18936
18937         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
18938         for array arguments here.
18939
18940         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
18941         instead of the default for ValueTypes.
18942
18943         (New.DoEmit): Use IsValueType instead of
18944         IsSubclassOf (value_type)
18945         (New.DoResolve): ditto.
18946         (Invocation.EmitCall): ditto.
18947
18948         * assign.cs (Assign): ditto.
18949
18950         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
18951         Statements *are* currently doing part of their resolution during
18952         Emit.  
18953
18954         Expressions do always resolve during resolve, but statements are
18955         only required to propagate resolution to their children.
18956
18957 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
18958
18959         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
18960
18961         (LoadAssembly): Do not add the dll if it is already specified
18962
18963         (MainDriver): Add the System directory to the link path at the end,
18964         after all the other -L arguments. 
18965
18966         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
18967         wrong opcode for loading bytes and bools (ldelem.i1 instead of
18968         ldelem.u1) and using the opposite for sbytes.
18969
18970         This fixes Digger, and we can finally run it.
18971
18972         * driver.cs (UnixParseOption): Move the option parsing here.  
18973         (CSCParseOption): Implement CSC-like parsing of options.
18974
18975         We now support both modes of operation, the old Unix way, and the
18976         new CSC-like way.  This should help those who wanted to make cross
18977         platform makefiles.
18978
18979         The only thing broken is that /r:, /reference: and /lib: are not
18980         implemented, because I want to make those have the same semantics
18981         as the CSC compiler has, and kill once and for all the confussion
18982         around this.   Will be doing this tomorrow.
18983
18984         * statement.cs (Unsafe.Resolve): The state is checked during
18985         resolve, not emit, so we have to set the flags for IsUnsfe here.
18986
18987 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
18988
18989         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
18990         not catch the Error_ObjectRefRequired in SimpleName (as it is
18991         possible to have a class/instance variable name that later gets
18992         deambiguated), we have to check this here.      
18993
18994 2002-07-10  Ravi Pratap  <ravi@ximian.com>
18995
18996         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
18997         make static and put into Expression.
18998
18999         (Event.Define): Register the private field of the event with the 
19000         TypeManager so that GetFieldFromEvent can get at it.
19001
19002         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19003         keep track of the private field associated with an event which
19004         has no accessors.
19005
19006         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19007         private field.
19008
19009         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19010
19011 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19012
19013         * expression.cs (Binary.EmitBranchable): this routine emits the
19014         Binary expression in a branchable context.  This basically means:
19015         we need to branch somewhere, not just get the value on the stack.
19016
19017         This works together with Statement.EmitBoolExpression.
19018
19019         * statement.cs (Statement.EmitBoolExpression): Use
19020         EmitBranchable. 
19021
19022 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19023
19024         * statement.cs (For): Reduce the number of jumps in loops.
19025
19026         (For): Implement loop inversion for the For statement.
19027
19028         (Break): We can be breaking out of a Try/Catch controlled section
19029         (foreach might have an implicit try/catch clause), so we need to
19030         use Leave instead of Br.
19031
19032         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19033         now).  If the instace expression supports IMemoryLocation, we use
19034         the AddressOf method from the IMemoryLocation to extract the
19035         address instead of emitting the instance.
19036
19037         This showed up with `This', as we were emitting the instance
19038         always (Emit) instead of the Address of This.  Particularly
19039         interesting when This is a value type, as we dont want the Emit
19040         effect (which was to load the object).
19041
19042 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19043
19044         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19045
19046         * statement.cs (Checked): Set the CheckedState during the resolve
19047         process too, as the ConvCast operations track the checked state on
19048         the resolve process, and not emit.
19049
19050         * cs-parser.jay (namespace_member_declaration): Flag that we have
19051         found a declaration when we do.  This is used to flag error 1529
19052
19053         * driver.cs: Report ok when we display the help only.
19054
19055 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19056
19057         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19058
19059 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19060
19061         * cs-tokenizer.cs (define): We also have to track locally the
19062         defines.  AllDefines is just used for the Conditional Attribute,
19063         but we also need the local defines for the current source code. 
19064
19065 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19066
19067         * statement.cs (While, For, Do): These loops can exit through a
19068         Break statement, use this information to tell whether the
19069         statement is the last piece of code.
19070
19071         (Break): Flag that we break.
19072
19073         * codegen.cs (EmitContexts): New `Breaks' state variable.
19074
19075 2002-07-03  Martin Baulig  <martin@gnome.org>
19076
19077         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19078         modifiers in method declarations in structs.  Otherwise, you won't
19079         be able to override things like Object.Equals().
19080
19081 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19082
19083         * class.cs (Method, Property, Indexer): Do not allow the public
19084         modifier to be used in explicit interface implementations.
19085
19086         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19087         override modifiers in method declarations in structs
19088
19089 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19090
19091         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19092         integer or real overflow, report an error
19093
19094 2002-07-02  Martin Baulig  <martin@gnome.org>
19095
19096         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19097         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19098         to tell the runtime about our newly created System.Object and
19099         System.ValueType types.
19100
19101 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19102
19103         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19104         struct instead of Ldarg/Starg.
19105
19106 2002-07-02  Martin Baulig  <martin@gnome.org>
19107
19108         * expression.cs (Indirection.Indirection): Call
19109         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19110
19111 2002-07-02  Martin Baulig  <martin@gnome.org>
19112
19113         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19114         ValueType, call TypeManager.TypeToCoreType() on it.
19115         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19116         the OpCodes.Newarr argument.
19117
19118 2002-07-02  Martin Baulig  <martin@gnome.org>
19119
19120         * expression.cs (Invocation.EmitCall): When compiling corlib,
19121         replace all calls to the system's System.Array type to calls to
19122         the newly created one.
19123
19124         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19125         System.Array methods.
19126         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19127         from the system's System.Array type which must be replaced.
19128
19129 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19130
19131         * typemanager.cs: load unverifiable_code_ctor so we can build
19132         corlib using the correct type. Avoid using GetTypeCode() with
19133         TypeBuilders.
19134         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19135         TypeManager.object_type to allow building corlib.
19136
19137 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19138
19139         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19140
19141 2002-07-01  Martin Baulig  <martin@gnome.org>
19142
19143         * class.cs: Make the last change actually work, we need to check
19144         whether `ifaces != null' to avoid a crash.
19145
19146 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19147
19148         * class.cs: when we build structs without fields that implement
19149         interfaces, we need to add the interfaces separately, since there is
19150         no API to both set the size and add the interfaces at type creation
19151         time.
19152
19153 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19154
19155         * expression.cs: the dimension arguments to the array constructors
19156         need to be converted if they are a long.
19157
19158 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19159
19160         * class.cs: don't emit ldarg.0 if there is no parent constructor
19161         (fixes showstopper for corlib).
19162
19163 2002-06-29  Martin Baulig  <martin@gnome.org>
19164
19165         MCS now compiles corlib on GNU/Linux :-)
19166
19167         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19168         ie. check for MethodImplOptions.InternalCall.
19169
19170         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19171         and TypeManager.attribute_type are null, so we must explicitly check
19172         whether parent is not null to find out whether it's an attribute type.
19173         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19174         and SetBuilder, not only if the property is neither abstract nor external.
19175         This is necessary to set the MethodImplOptions on the accessor methods.
19176         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19177         SetBuilder, see Property.Emit().
19178
19179         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19180         populate "System.Object", "System.ValueType" and "System.Attribute" since
19181         they've already been populated from BootCorlib_PopulateCoreTypes().
19182
19183 2002-06-29  Martin Baulig  <martin@gnome.org>
19184
19185         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19186         is the NullLiteral, we also need to make sure that target_type is not
19187         an enum type.   
19188
19189 2002-06-29  Martin Baulig  <martin@gnome.org>
19190
19191         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19192         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19193         before calling BootstrapCorlib_ResolveDelegate ().
19194
19195 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19196
19197         * statement.cs: fixed build-breaker. All tests passed ok.
19198
19199 2002-06-27  Martin Baulig  <martin@gnome.org>
19200
19201         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19202         for System.Decimal when compiling corlib.
19203
19204 2002-06-27  Martin Baulig  <martin@gnome.org>
19205
19206         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19207         switch blocks which contain nothing but a default clause.
19208
19209 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19210
19211        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19212
19213 2002-06-27  Martin Baulig  <martin@gnome.org>
19214
19215         * ecore.cs (PropertyExpr.PropertyExpr): Call
19216         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19217
19218         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19219         is already a TypeBuilder.
19220
19221 2002-06-27  Martin Baulig  <martin@gnome.org>
19222
19223         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19224         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19225         the "from an array-type to System.Array" case.  This makes it work
19226         when compiling corlib.
19227
19228 2002-06-27  Martin Baulig  <martin@gnome.org>
19229
19230         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19231         non-static PropertyExpr, set its InstanceExpression.  This makes
19232         the `ICollection.Count' property work in System/Array.cs.
19233
19234 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19235
19236         * driver.cs: Made error handling more consistent.  Errors now
19237         tracked by Report class, so many methods which used to return int
19238         now return void.  Main() now prints success/failure and 
19239         errors/warnings message.
19240
19241         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19242         the magic number return values (123 and 124).  Now, if the
19243         expected error occurs, the compiler exits with success (exit value
19244         0).  If the compilation completes without seeing that particular
19245         error, the compiler exits with failure (exit value 1).  The
19246         makefile in mcs/errors has been changed to handle the new behaviour.
19247
19248         * report.cs: Made 'expected error' number a property and renamed
19249         it from 'Probe' to 'ExpectedError'.
19250
19251         * genericparser.cs: Removed error handling support, since it is
19252         now all done by Report class.
19253
19254         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19255         class, so parse() no longer returns an int.
19256
19257         * namespace.cs: Use Report.Error instead of GenericParser.error
19258
19259 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19260
19261         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19262         TypeContainer.AddOperator): At the front of the list put the
19263         explicit implementations, so they get resolved/defined first. 
19264
19265 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19266
19267         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19268         interface type is implemented by this TypeContainer.  Used during
19269         explicit interface implementation.
19270
19271         (Property.Define, Indexer.Define, Method.Define): Validate that
19272         the given interface in the explicit implementation is one of the
19273         base classes for the containing type.
19274
19275         Also if we are explicitly implementing an interface, but there is
19276         no match in the pending implementation table, report an error.
19277
19278         (Property.Define): Only define the property if we are
19279         not explicitly implementing a property from an interface.  Use the
19280         correct name also for those properties (the same CSC uses,
19281         although that is really not needed).
19282
19283         (Property.Emit): Do not emit attributes for explicitly implemented
19284         properties, as there is no TypeBuilder.
19285
19286         (Indexer.Emit): ditto.
19287
19288         Hiding then means that we do not really *implement* a pending
19289         implementation, which makes code fail.
19290
19291 2002-06-22  Martin Baulig  <martin@gnome.org>
19292
19293         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19294         the return value of Object.GetType().  [FIXME: we need to do this whenever
19295         we get a type back from the reflection library].
19296
19297 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19298
19299         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19300
19301 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19302
19303         * attribute.cs: Return null if we can not look up the type.
19304
19305         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19306         the interface types found.
19307
19308         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19309         interface types found.
19310
19311         * typemanager.cs (GetInterfaces): Make this routine returns alll
19312         the interfaces and work around the lame differences between
19313         System.Type and System.Reflection.Emit.TypeBuilder in the results
19314         result for GetInterfaces.
19315
19316         (ExpandInterfaces): Given an array of interface types, expand and
19317         eliminate repeated ocurrences of an interface.  This expands in
19318         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19319         be IA, IB, IC.
19320
19321 2002-06-21  Martin Baulig  <martin@gnome.org>
19322
19323         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19324         on System.Enum.
19325
19326 2002-06-21  Martin Baulig  <martin@gnome.org>
19327
19328         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19329         and called with one of the core types, return the corresponding typebuilder for
19330         that type.
19331
19332         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19333         element type.
19334
19335 2002-06-21  Martin Baulig  <martin@gnome.org>
19336
19337         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19338         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19339         (Expression.ConvertReferenceExplicit): Likewise.
19340
19341         * expression.cs (ElementAccess.DoResolve): Likewise.
19342         (ElementAccess.DoResolveLValue): Likewise.
19343
19344 2002-06-10  Martin Baulig  <martin@gnome.org>
19345
19346         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19347         add the "value" parameter to the parameter list.
19348
19349         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19350         to our caller.
19351
19352 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19353
19354         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19355         the argument to an int, uint, long or ulong, per the spec.  Also
19356         catch negative constants in array creation.
19357
19358 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19359
19360         * class.cs: do not allow the same interface to appear twice in
19361         the definition list.
19362
19363 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19364
19365         * ecore.cs: don't use ldlen with System.Array.
19366
19367 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19368
19369         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19370
19371 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19372
19373         * modifiers.cs: produce correct field attributes for protected
19374         internal. Easy fix so miguel can work on ther harder stuff:-)
19375
19376 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19377
19378         * pending.cs: New file.  Move the code from class.cs here.
19379         Support clearning the pending flag for all methods (when not doing
19380         explicit interface implementation).
19381
19382 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19383
19384         * rootcontext.cs: added a couple more types needed to bootstrap.
19385
19386 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19387
19388         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19389         constructor in the type, instead of any constructor in the type
19390         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19391         a bug in the Mono runtime when applying the params attribute). 
19392
19393 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19394         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19395
19396 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19397
19398         * expression.cs (Unary.ResolveOperator): Use TypeManager
19399         to resolve the type.
19400
19401 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19402
19403         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19404         attached.
19405
19406         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19407         with each member too.
19408
19409         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19410         field builders too - this takes care of the enum member case.
19411
19412 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19413
19414         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19415         address-of operator on both value types and pointers.
19416
19417 2002-06-10  Martin Baulig  <martin@gnome.org>
19418
19419         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19420         PropertyBuilder to the `property_builders' list.
19421
19422         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19423         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19424         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19425         find any indexers which are inherited from an interface.
19426
19427 2002-06-09  Martin Baulig  <martin@gnome.org>
19428
19429         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19430         the same type as the constant if necessary.  There's also a test-130.cs
19431         for this.
19432
19433         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19434
19435         * typemanager.cs (TypeManager.ChangeType): Previously known as
19436         Enum.ChangeEnumType().
19437
19438 2002-06-09  Martin Baulig  <martin@gnome.org>
19439
19440         * expression.cs (Cast.TryReduce): Added support for consts.
19441
19442 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19443
19444         * class.cs (Accessor): Hold attributes information so we can pass
19445         it along.
19446
19447         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19448         Modify to pass in attributes attached to the methods.
19449
19450         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19451
19452         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19453         to handle the Accessor kind :-)
19454
19455         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19456
19457 2002-06-08  Martin Baulig  <martin@gnome.org>
19458
19459         * expression.cs (Unary.TryReduceNegative): Added support for
19460         ULongConstants.
19461
19462 2002-06-08  Martin Baulig  <martin@gnome.org>
19463
19464         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19465         name can't be found in the `defined_names' - the caller will do a
19466         MemberLookup in this case and thus find methods in System.Enum
19467         such as Enum.IsDefined().
19468
19469 2002-06-08  Martin Baulig  <martin@gnome.org>
19470
19471         * enum.cs (Enum.ChangeEnumType): This is a custom version of
19472         Convert.ChangeType() which works with TypeBuilder created types.
19473         (Enum.LookupEnumValue, Enum.Define): Use it here.
19474
19475         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
19476         `TypeBuilder.BaseType != null' check.
19477         (TypeContainer.FindMembers): Only lookup parent members if we
19478         actually have a parent.
19479         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
19480         (ConstructorInitializer.Resolve): Likewise.
19481
19482         * interface.cs (Interface.FindMembers): Added
19483         `TypeBuilder.BaseType != null' check.
19484
19485         * rootcontext.cs (RootContext.ResolveCore): Added
19486         "System.Runtime.CompilerServices.IndexerNameAttribute" to
19487         classes_second_stage.
19488
19489         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
19490         debug_type and trace_type when compiling with --nostdlib.       
19491
19492 2002-06-07  Martin Baulig  <martin@gnome.org>
19493
19494         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
19495         (AddField): Set it to true when adding a non-static field.
19496         (DefineType): Use `have_nonstatic_fields' to find out whether we
19497         have non-static fields, not `Fields != null'.
19498
19499 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
19500
19501         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
19502         dereferencing a null on the static-field code path)
19503
19504 2002-05-30  Martin Baulig  <martin@gnome.org>
19505
19506         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
19507         to take command line arguments.  Use reflection to call the new
19508         custom `Initialize' function on the symbol writer and pass it the
19509         command line arguments.
19510
19511         * driver.cs (--debug-args): New command line argument to pass command
19512         line arguments to the symbol writer.
19513
19514 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
19515
19516         * assign.cs (DoResolve): Forgot to do the implicit conversion to
19517         the target type for indexers and properties.  Thanks to Joe for
19518         catching this.
19519
19520 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
19521
19522         * typemanager.cs (MethodFlags): returns the method flags
19523         (Obsolete/ShouldIgnore) that control warning emission and whether
19524         the invocation should be made, or ignored. 
19525
19526         * expression.cs (Invocation.Emit): Remove previous hack, we should
19527         not do this on matching a base type, we should do this based on an attribute
19528
19529         Only emit calls to System.Diagnostics.Debug and
19530         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
19531         on the command line.
19532
19533         * rootcontext.cs: Global settings for tracing and debugging.
19534
19535         * cs-tokenizer.cs (define): New utility function to track
19536         defines.   Set the global settings for TRACE and DEBUG if found.
19537
19538 2002-05-25  Ravi Pratap  <ravi@ximian.com>
19539
19540         * interface.cs (Populate*): Pass in the TypeContainer as well as
19541         the DeclSpace as parameters so that we can create EmitContexts and
19542         then use that to apply attributes etc.
19543
19544         (PopulateMethod, PopulateEvent, PopulateProperty)
19545         (PopulateIndexer): Apply attributes everywhere.
19546
19547         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
19548         etc.
19549
19550         (ApplyAttributes): Update accordingly.
19551
19552         We now apply interface attributes for all members too.
19553
19554 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
19555
19556         * class.cs (Indexer.Define); Correctly check if we are explicit
19557         implementation (instead of checking the Name for a ".", we
19558         directly look up if the InterfaceType was specified).
19559
19560         Delay the creation of the PropertyBuilder.
19561
19562         Only create the PropertyBuilder if we are not an explicit
19563         interface implementation.   This means that explicit interface
19564         implementation members do not participate in regular function
19565         lookups, and hence fixes another major ambiguity problem in
19566         overload resolution (that was the visible effect).
19567
19568         (DefineMethod): Return whether we are doing an interface
19569         implementation. 
19570
19571         * typemanager.cs: Temporary hack until we get attributes in
19572         interfaces (Ravi is working on that) and we get IndexerName
19573         support in interfaces.
19574
19575         * interface.cs: Register the indexers as properties.
19576
19577         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
19578         warning, I have verified that this is a bug in the .NET runtime
19579         (JavaScript suffers of the same problem).
19580
19581         * typemanager.cs (MemberLookup): When looking up members for
19582         interfaces, the parent of an interface is the implicit
19583         System.Object (so we succeed in searches of Object methods in an
19584         interface method invocation.  Example:  IEnumerable x;  x.ToString
19585         ()) 
19586
19587 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
19588
19589         * class.cs (Event): Events should also register if they do
19590         implement the methods that an interface requires.
19591
19592         * typemanager.cs (MemberLookup); use the new GetInterfaces
19593         method. 
19594
19595         (GetInterfaces): The code used to lookup interfaces for a type is
19596         used in more than one place, factor it here. 
19597
19598         * driver.cs: Track the errors at the bottom of the file, we kept
19599         on going.
19600
19601         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
19602         instance if the method we are calling is static!
19603
19604 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
19605
19606         * attribute.cs (ApplyAttributes): Make this function filter out
19607         the IndexerName attribute (as that attribute in reality is never
19608         applied) and return the string constant for the IndexerName
19609         attribute. 
19610
19611         * class.cs (TypeContainer.Emit): Validate that all the indexers
19612         have the same IndexerName attribute, and if so, set the
19613         DefaultName attribute on the class. 
19614
19615         * typemanager.cs: The return value might contain other stuff (not
19616         only methods).  For instance, consider a method with an "Item"
19617         property and an Item method.
19618
19619         * class.cs: If there is a problem with the parameter types,
19620         return. 
19621
19622 2002-05-24  Ravi Pratap  <ravi@ximian.com>
19623
19624         * ecore.cs (ImplicitConversionExists): Wrapper function which also
19625         looks at user defined conversion after making a call to 
19626         StandardConversionExists - we need this for overload resolution.
19627
19628         * expression.cs : Update accordingly the various method calls.
19629
19630         This fixes 2 bugs filed against implicit user defined conversions 
19631
19632 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
19633
19634         * statement.cs: Track the result of the assignment.
19635
19636 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
19637
19638         * expression.cs (MemberAccess): Improved error reporting for
19639         inaccessible members.
19640
19641 2002-05-22  Martin Baulig  <martin@gnome.org>
19642
19643         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
19644         itself with debugging support.
19645
19646 2002-05-22  Martin Baulig  <martin@gnome.org>
19647
19648         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
19649         Removed, this isn't needed anymore.
19650
19651 2002-05-20  Martin Baulig  <martin@gnome.org>
19652
19653         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
19654         be underlying type for an enum.
19655
19656 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
19657
19658         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
19659         that splits out the loading of just the core types.
19660
19661         * rootcontext.cs (ResolveCore): Split the struct resolution in
19662         two, so we can load the enumeration underlying types before any
19663         enums are used.
19664
19665         * expression.cs (Is): Bandaid until we fix properly Switch (see
19666         bug #24985 for details).
19667
19668         * typemanager.cs (ImplementsInterface): The hashtable will contain
19669         a null if there are no interfaces implemented.
19670
19671 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
19672
19673         * cs-parser.jay (indexer_declarator): It is fine to have array
19674         parameters
19675
19676 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19677
19678         * typemanager.cs: (RegisterBuilder): New function used to register
19679         TypeBuilders that implement interfaces.  Since
19680         TypeBuilder.GetInterfaces (as usual) does not work with lame
19681         Reflection.Emit. 
19682         (AddUserType): register interfaces.
19683
19684         (ImplementsInterface): Use the builder_to_ifaces hash if we are
19685         dealing with TypeBuilder.  Also, arrays are showing up as
19686         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
19687         methods can not be invoked on them!
19688
19689         * ecore.cs (ExplicitReferenceConversionExists): Made public.
19690         (ImplicitReferenceConversionExists): Split out from
19691         StandardConversionExists. 
19692
19693         * expression.cs (As): We were only implementing one of the three
19694         cases for the as operator.  We now implement them all.
19695         (Is): Implement the various other cases for Is as well.
19696
19697         * typemanager.cs (CACHE): New define used to control if we want or
19698         not the FindMembers cache.  Seems to have a negative impact on
19699         performance currently
19700
19701         (MemberLookup): Nested types have full acess to
19702         enclosing type members
19703
19704         Remove code that coped with instance/static returns for events, we
19705         now catch this in RealFindMembers.
19706
19707         (RealFindMembers): only perform static lookup if the instance
19708         lookup did not return a type or an event.  
19709
19710 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19711
19712         * assign.cs (CompoundAssign): We pass more semantic information
19713         now to Compound Assignments than we did before: now we have all
19714         the information at hand, and now we resolve the target *before* we
19715         do the expression expansion, which allows the "CacheValue" method
19716         to have the effect we intended (before, a [x] += 1 would generate
19717         two differen ArrayAccess expressions from the ElementAccess,
19718         during the resolution process).
19719
19720         (CompoundAssign.DoResolve): Resolve target and original_source here.
19721
19722 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
19723
19724         * expression.cs (ArrayAccess): dropped debugging information. 
19725
19726         * typemanager.cs: Small bug fix: I was always returning i_members,
19727         instead of one of i_members or s_members (depending on which had
19728         the content).
19729
19730         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
19731         method is invoked before any code generation takes place, and it
19732         is a mechanism to inform that the expression will be invoked more
19733         than once, and that the method should use temporary values to
19734         avoid having side effects
19735
19736         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
19737
19738         * ecore.cs (Expression.CacheTemporaries): Provide empty default
19739         implementation.
19740
19741         * expression.cs (Indirection, ArrayAccess): Add support for
19742         CacheTemporaries in these two bad boys. 
19743
19744         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
19745         ldobj or ldind_ref.  
19746         (StoreFromPtr): Handle stobj as well.
19747
19748         * expression.cs (UnaryMutator): Share more code.
19749
19750         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
19751         down: I was not tracking the Filter function as well, which
19752         was affecting the results of the cache.
19753
19754 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
19755
19756         * attribute.cs: Remove the hack to handle the CharSet property on
19757         StructLayouts. 
19758
19759 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
19760
19761         * attribute.cs (DoResolve): More uglyness, we now only try to
19762         resolve the attribute partially, to extract the CharSet
19763         information (only if we are a StructLayout attribute).  Otherwise 
19764
19765         (GetExtraTypeInfo): Add some code to conditionally kill in the
19766         future this.   I am more and more convinced that the .NET
19767         framework has special code to handle the attribute setting on
19768         certain elements.
19769
19770         * expression.cs (IsParamsMethodApplicable): Revert my previous
19771         foreach change here, it was wrong.
19772
19773 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
19774
19775         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
19776         (pp_expr): do not abort on unknown input, just return.
19777         (eval): abort if there are pending chars.
19778
19779         * attribute.cs (Attribute.Resolve): Positional parameters are
19780         optional.  Deal with that case.
19781
19782         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
19783         the Ansi/Unicode/Auto information for the type.
19784
19785         (TypeContainer.DefineType): instantiate the EmitContext here, as
19786         we will be using it during the type definition (to resolve
19787         attributes) and during the emit phase.
19788
19789         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
19790         to pull type information out of the attributes
19791
19792         (Attribute.Resolve): track the constructor builder, and allow for
19793         multiple invocations (structs and classes will use this).
19794
19795         * ecore.cs (MemberLookupFinal): new version with all the
19796         parameters customizable.
19797
19798         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
19799         constructors.  Return if the result value is null (as the error
19800         would have been flagged already by MemberLookupFinal)
19801
19802         Do not allow instances of abstract classes or interfaces to be
19803         created.
19804
19805         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
19806         We have to compare the assembly property here when dealing with
19807         FamANDAssem and Assembly access modifiers, because we might be
19808         creating an assembly from *modules* (that means that we are not
19809         getting TypeBuilders for types defined in other modules that are
19810         part of this assembly).
19811
19812         (Method.Emit): If the method is marked abstract and has a body,
19813         emit an error. 
19814
19815         (TypeContainer.DefineMembers): If both the defined member and the
19816         parent name match are methods, then do not emit any warnings: let
19817         the Method.Define routine take care of flagging warnings.  But if
19818         there is a mismatch (method overrides something else, or method is
19819         overriwritten by something, then emit warning).
19820
19821         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
19822         set to null, this means `do not check for the return type on the
19823         signature'. 
19824
19825         (Method.Define): set the return type for the method signature to
19826         null, so that we get methods with the same name and parameters and
19827         different return types.  This is used to flag warning 114 (you are
19828         hiding a method, and you probably want to use the new/override
19829         keywords instead).
19830
19831         * typemanager.cs (MemberLookup): Implemented proper access
19832         control, closing a long standing set of bug reports.  The problem
19833         was that the Framework only has two bits: Public and NonPublic,
19834         and NonPublic includes private and protected methods, but we need
19835         to enforce the FamANDAssem, FamOrAssem and Family. 
19836
19837 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
19838
19839         * statement.cs (GotoCase): Return true: Ammounts to giving up
19840         knowledge on whether we return or not, and letting the other case
19841         be responsible for it.
19842
19843 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
19844
19845         * driver.cs: Do not load directories for each file processed, only
19846         do it if there is a pattern.
19847
19848         * ecore.cs: Report readonly assigns here as well, as we might have
19849         been resolved only by MemberAccess.
19850
19851         (SimpleName.SimpleNameResolve): Also be useful for LValue
19852         resolution.   We need this to propagate assign to local readonly variables
19853
19854         * typemanager.cs: Use a ptrhashtable for the criteria, because we
19855         do not want to reuse potential criteria memory.
19856
19857         * class.cs (MyEventBuilder): Set reflected_type;
19858
19859         * ecore.cs (Constantify): Added support for constifying bools.
19860
19861         (RootContext.LookupType): Added a cache for values looked up in
19862         the declaration space.
19863
19864         * typemanager.cs (FindMembers): Now is a front-end to
19865         RealFindMembers, and provides a two-level hashtable-based cache to
19866         the request.  
19867
19868         15% performance improvement: from 22.5 to 19.2 seconds.
19869
19870         * expression.cs (IsParamsMethodApplicable): use foreach.
19871         (Invocation.DoResolve): ditto.
19872         (New.DoResolve): ditto.
19873         (ArrayCreation.DoResolve): ditto.
19874
19875         * ecore.cs (FindMostEncompassingType): use foreach.
19876
19877         * delegate.cs (NewDelegate.DoResolve): Use foreach
19878
19879         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
19880         (RemoveMethods): use foreach.
19881
19882         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
19883         nested foreach statements instead of for, and also break out of
19884         the inner loop once a match is found.
19885
19886         (Invocation.OverloadResolve): Use foreach, simplify the code. 
19887
19888 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
19889
19890         * cfold.cs (BinaryFold): During an enumeration evaluation context,
19891         we actually unwrap the expression to allow for extra information
19892         to be extracted. 
19893
19894         * expression.cs: Use Shr_Un on unsigned operations. 
19895
19896 2002-05-08  Ravi Pratap  <ravi@ximian.com>
19897
19898         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
19899         applicable operators was not being considered correctly. This closes
19900         the bug Miguel reported.
19901
19902 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
19903
19904         * attribute.cs: check that the type derives from System.Attribute
19905         and report the correct error in that case (moved the duplicate code to
19906         its own method, too).
19907
19908 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
19909
19910         * attribute.cs: lookup attribute type name as the spec says: first the
19911         bare attribute name and then name + "Attribute" (nant compiles with
19912         mcs after this fix).
19913
19914 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
19915
19916         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
19917         Because of the way we parse things, we should try to see if a
19918         UIntConstant can fit in an integer.
19919
19920 2002-05-07  Ravi Pratap  <ravi@ximian.com>
19921
19922         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
19923         when we are in an explicit context.
19924
19925         (ConvertReferenceExplicit): When converting from Iface type S to Class
19926         T make sure the rules are implemented as an OR.
19927
19928         * parameter.cs (ParameterType): Make it a property for now although the
19929         purpose really isn't anything immediate.
19930
19931         * expression.cs (Is*Applicable): Do better checking on the parameter type
19932         of a ref/out parameter. The ones from the system assemblies are already 
19933         marked with the correct type so we don't need to do any correction.
19934
19935         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
19936         the object type is standard too so include that.
19937
19938 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
19939
19940         * ecore.cs (StandardConversionExists): Augment with missing code:
19941         deal with IntConstant, LongConstants and Enumerations.
19942
19943         * assign.cs: Report the error, instead of failing silently
19944
19945         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
19946         typecontainer that they are declared, because the
19947         typecontainer/namespace will have the list of using clauses that
19948         need to be applied.
19949
19950         Assembly Attributes were escaping the normal registration
19951         mechanism. 
19952
19953         (EmitCode): Apply attributes within an EmitContext that represents
19954         the container they were declared on.
19955
19956         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
19957
19958 2002-05-06  Ravi Pratap  <ravi@ximian.com>
19959
19960         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
19961         Revamp completely - make much cleaner as we now operate only
19962         on a set of Types.
19963
19964         (FindMostSpecificSource, FindMostSpecificTarget): New methods
19965         to implement the logic detailed in the spec more correctly.
19966
19967         (UserDefinedConversion): Update accordingly.
19968
19969 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
19970
19971         * statement.cs: Return flow analysis information up.
19972
19973         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
19974         and the default.
19975
19976         (token): Do not consume an extra character before calling
19977         decimal_digits.
19978
19979 2002-05-06  Piers Haken <piersh@friskit.com>
19980
19981         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
19982
19983 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
19984
19985         * class.cs (Constructor.Emit): Set the IsStatic flag in the
19986         EmitContext during the instance constructor initializer
19987         resolution, to stop access to instance variables.
19988
19989         This is mandated by the spec, last paragraph of the `constructor
19990         initializers' section. 
19991
19992 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
19993
19994         * cs-parser.jay, class.cs (Accessor): new class used to represent
19995         an accessor (get or set).  In the past we used `null' to represent
19996         a missing accessor.  But this is ambiguous because there was no
19997         way to tell in abstract indexers/properties if one of them was
19998         specified.
19999
20000         Now there is a way of addressing that.
20001
20002         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20003         instead of FindMembers.
20004
20005         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20006         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20007
20008         * attribute.cs: Treat indexers and properties as the same in terms
20009         of applying attributes
20010
20011         * ecore.cs (FindMostEncompassedType): Use statically initialized
20012         EmptyExpressions()s like we do elsewhere to avoid creating useless
20013         objects (and we take this out of the tight loop).
20014
20015         (GetConversionOperators): Move the code to extract the actual
20016         operators to a separate routine to clean things up.
20017
20018 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20019
20020         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20021         events are always registered FieldBuilders.
20022
20023         * class.cs (FieldBase): New class shared by Fields 
20024
20025         * delegate.cs: If we are a toplevel delegate, use our full name.
20026         If we are a nested delegate, then only use our tail name.
20027
20028 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20029
20030         * expression.cs (IsApplicable): Ensure that we add the "&" to
20031         ref/out types before comparing it with the type of the argument.
20032
20033         (IsParamsMethodApplicable): Ditto.
20034
20035         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20036         silly me ;-)
20037
20038         * delegate.cs : Handle the case when we have more than one applicable
20039         method. Flag an error only when we finish checking all.
20040
20041 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20042
20043         * expression.cs: Add support for boolean static initializers.
20044
20045 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20046
20047         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20048
20049         * parameter.cs (ComputeParameterTypes,
20050         ComputeAndDefineParameterTypes): Better error handling: now we
20051         clear the `types' cache if we fail during any of the type lookups.
20052         We also return the status code correctly to our caller
20053
20054         * delegate.cs: If we fail to define a delegate, abort the extra
20055         steps. 
20056
20057         * expression.cs (Binary.ResolveOperator): for
20058         operator==(object,object) and operator !=(object, object) we also
20059         have to verify that there is an implicit conversion from one to
20060         the other.
20061
20062         (ArrayAccess.DoResolve): Array Access can operate on
20063         non-variables. 
20064
20065 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20066
20067         * assign.cs (CompoundAssign): A new class used as a "flag" that
20068         the assignment actually is happening as part of a compound
20069         assignment operator.
20070
20071         During compound assignment, a few new rules exist to enable things
20072         like:
20073
20074         byte b |= 1 + 2
20075
20076         From the spec:
20077
20078         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20079         to the type of x) if y is implicitly convertible to the type of x,
20080         and the operator is a builtin operator and the return type of the
20081         operator is explicitly convertible to the type of x. 
20082
20083         * rootcontext.cs: Reset warning level to 2.  4 catches various
20084         "interesting" features in mcs, we must clean this up at some
20085         point, but currently am trying to kill other bugs ;-)
20086
20087         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20088         in container classes as well.  
20089
20090         * expression.cs (Binary.ResolveOperator): Handle string case
20091         before anything else (as operator overloading does emit an error
20092         before doing anything else).
20093
20094         This code could go away when we move to a table driven model, but
20095         i could not come up with a good plan last night.
20096
20097 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20098
20099         * typemanager.cs (CSharpName): reimplementation using regex.
20100         * class.cs: added null check for fields in Emit
20101         * rootcontext.cs: set warninglevel to 4
20102
20103 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20104
20105         * typemanager.cs (CSharpName): reimplemented with Lupus
20106         suggestion.
20107
20108 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20109
20110         * statement.cs (If): correclty implement Resolve, because we were
20111         not catching sem errors in there.  The same process is needed
20112         everywhere else. 
20113         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20114
20115
20116         (Statement.Warning_DeadCodeFound): Factorize code.
20117         (While): Report dead code here too.
20118
20119         (Statement): Added Resolve virtual method to allow
20120         for resolution split from the emit code.
20121
20122 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20123
20124         * statement.cs (EmitBoolExpression): No longer try to resolve the
20125         expression here.    
20126         (MakeBoolean): New utility function that resolve, implicitly
20127         converts to boolean and tags the expression. 
20128
20129
20130         (If, Do): Implement dead code elimination.
20131         (While): Implement loop inversion
20132
20133         (Do, While, For, If): Resolve the expression prior to calling our
20134         code generation.
20135
20136 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20137
20138         * class.cs:
20139           - added method Report28 (warning: program has more than one entry point)
20140           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20141           - modified method Method.Define, the part at the end of the method
20142
20143         * rootcontext.cs: added static public Location EntryPointLocation;
20144           
20145         * ../errors/cs0028.cs : Add test case for the above warning.              
20146
20147         * typemanager.cs:
20148           - modified method CSharpName to allow arrays of primitive type to
20149             be printed nicely (e.g. instead of System.Int32[][] it now prints
20150             int[][])
20151           - added method CSharpSignature: returns the signature of a method
20152             in string format to be used in reporting errors, warnings, etc.
20153
20154         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20155         with String.Empty.
20156
20157 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20158
20159         * delegate.cs (Define): Fix extremely silly bug where I was
20160         setting the type of the 'object' parameter of the BeginInvoke
20161         method to System.IAsyncResult instead of System.Object ;-)
20162
20163 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20164
20165         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20166         here. 
20167
20168         (Constructor.Emit): return if we fail to initialize the
20169         constructor.  Another door closed!  
20170
20171         * expression.cs (New.DoResolve): Improve error message (from -6 to
20172         1501).  Use DeclaredOnly lookup to find the exact constructor.
20173
20174         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20175         loop.  This is useful.
20176
20177         * cs-parser.jay: Adjust the default parameters so that destructors
20178         have the proper signature.
20179
20180 2002-04-26  Martin Baulig  <martin@gnome.org>
20181
20182         * driver.cs (LoadAssembly): If `assembly' contains any characters
20183         which are only valid in path names and not in assembly names
20184         (currently slash, backslash and point), use Assembly.LoadFrom ()
20185         instead of Assembly.Load () on the `assembly' (before iteration
20186         over the link_paths).
20187
20188 2002-04-26  Martin Baulig  <martin@gnome.org>
20189
20190         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20191
20192 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20193
20194         * class.cs (Property): use the new typemanager.MemberLookup
20195
20196         (TypeContainer.MemberLookup): Implement using the
20197         TypeManager.MemberLookup now. 
20198
20199         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20200         and return MemberInfos, so that these can be used without an
20201         EmitContext (what we had before).
20202
20203 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20204
20205         * expression.cs: Fix the case where the argument to params if the
20206         type of the params.  I omitted handling this before.   Fixed
20207
20208 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20209
20210         * driver.cs: Call BootCorlib_PopulateCoreType
20211
20212         * class.cs (Property.CheckBase): Check for properties only, not
20213         for all members. 
20214
20215         * interface.cs: Temporary hack: try/catch around the
20216         CustomAttributeBuilder, because I am getting an exception that I
20217         do not understand.
20218
20219         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20220         types whose definitions are required to be there (attributes are
20221         defined before standard types).
20222
20223         Compute definitions as we boot the various types, as they are used
20224         immediately (value_type class will need object_type, but if we do
20225         not initialize object_type, we will pass a null, which will let
20226         the runtime pick the System.Object from the existing corlib, which
20227         is not what we want).
20228
20229 2002-04-22  Patrik Torstensson <totte@labs2.com>
20230
20231         * cs-tokenizer.cs: fixed a number of trim() issues.
20232
20233 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20234
20235         * expression.cs (Argument.Type): Ensure that we return the correct
20236         type when we have out or ref parameters [in which case we 
20237         append a "&"].
20238
20239 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20240
20241         * class.cs (Property, Indexer): Allow extern modifier in there. 
20242
20243         * typemanager.cs (InitBaseTypes): Initializes object_type and
20244         value_type, since those will be used early on during the bootstrap
20245         process to compile corlib.
20246
20247         (InitCoreTypes): Move code from here to InitBaseTypes.
20248
20249 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20250
20251         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20252         single-dimension arrays as using the ldlen opcode.  
20253
20254         Daniel Lewis discovered this optimization.  
20255
20256         * typemanager.cs: Add signature for System.Array::get_Length
20257
20258 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20259
20260         * statement.cs: report the error when the foreach does not apply to an
20261         array nor a collection.
20262
20263 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20264
20265         * expression.cs: Add implicit conversions to the operator ~.
20266
20267         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20268
20269         * typemanager.cs: Locate the decimal constructor.
20270
20271 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20272
20273         * attribute.cs: use the new property of TypeOf.
20274         * expression.cs: added 'get' property around typearg.
20275
20276         These changes fix a build breaker reported by NickD. Is this the
20277         correct way to fix?  If not, please, revert my changes and make it
20278         work :-).
20279
20280 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20281
20282         * attribute.cs: Add support for typeof in attribute invocations.
20283         I am not sure that this is right though.
20284
20285 2002-04-14  Duncan Mak  <duncan@ximian.com>
20286
20287         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20288         Binary.Operator.Division case.
20289
20290 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20291
20292         * class.cs (DefineType): Ensure that we do a proper check on
20293         attribute types and also register it with the TypeManager.
20294
20295         (TypeContainer.Targets): The default for attribute types is
20296         AttributeTargets.All.
20297
20298         * attribute.cs (ApplyAttributes): Registering the attribute type
20299         is done elsewhere, not when we discover we have a Usage attribute.
20300
20301 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20302
20303         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20304         and get rid of is_delegate parameter.
20305
20306         * everywhere : update.
20307
20308 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20309
20310         * cs-parser.jay (compilation_unit): Revamp completely to use
20311         some new ideas that I got from Rhys' grammar to solve the problems
20312         with assembly level attributes.
20313
20314         (outer_declaration): New grammar production.
20315
20316         (attribute_sections): Add.
20317
20318         (opt_attributes): Base on attribute_sections
20319
20320         (namespace_declaration): Allow opt_attributes to tackle the case
20321         when we have assembly level attributes - we are clever in this
20322         regard now ;-)
20323
20324         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20325         attributes in the non-global context.
20326
20327         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20328         instead of SetGlobalAttributes.
20329
20330         * class.cs, rootcontext.cs : Ensure we define and generate 
20331         attribute types before anything else.
20332
20333         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20334         and flag the new error -20 for the case when the attribute type
20335         does not have valid targets specified. csc does not catch this.
20336
20337         * ../errors/errors.txt : update for error # -20
20338
20339 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20340
20341         * support.cs (InternalParameters.ParameterModifier): Do some null
20342         checking and return sane values.
20343
20344         * class.cs (Method.Define): If we are a PInvoke method, ensure
20345         that we are static and extern. Report error # 601
20346
20347         * ../errors/cs0601.cs : Add test case for the above error.
20348
20349 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20350
20351         * rootcontext.cs (attribute_types): We need to keep type of
20352         all attribute types separately and emit code for them first.
20353
20354         (RegisterAttribute) : Implement.
20355
20356         * class.cs (DefineType): Check if the current Type is a custom
20357         attribute type and register it accordingly.
20358
20359         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20360         adding the first attribute twice and rename to
20361
20362         (SetGlobalAttributes): this.
20363
20364         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20365         lookups.
20366
20367         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20368         if we are processing global arguments. Hmm, I am unsure of this.
20369
20370 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20371
20372         * expression.cs: added static array of strings to avoid calling
20373         Enum.ToString () for Operator in Binary. Significant recover of
20374         performance.
20375
20376 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20377
20378         * class.cs (FindMembers): Allow the Builders of the various
20379         members to be null.  If they are skip them.  This only happens
20380         during the PInvoke declaration.
20381
20382 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20383
20384         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20385         failure, so we do not keep going afterwards.
20386
20387         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20388         wanted to pass `false' as the `is_delegate' argument.  If this is
20389         the case, why not use delegate_type == null to mean `is_delegate =
20390         false' and anything else as is_delegate = true.
20391
20392 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20393
20394         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20395         code for the section, not the beginning of the tests.
20396
20397 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20398
20399         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20400
20401         * expression.cs (Binary): same.  Warn about errors where we have
20402         Enum/Enum in operator + as well.
20403
20404 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20405
20406         * statement.cs:
20407                 - added support for switch(bool)
20408                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20409                 - add TableSwitchEmit() to handle table-based switch statements
20410
20411 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20412
20413         * expression.cs (Invocation.OverloadResolve): Factor out code which
20414         does parameter compatibility checking with arguments so that we can 
20415         re-use the code even from Delegate.VerifyApplicability
20416
20417         (VerifyArgumentsCompat): Move above code here.
20418
20419         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20420         and instead make a call to the above method.
20421
20422 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20423
20424         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20425         We use it to keep track of classes which are attribute types.
20426
20427 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20428
20429         * delegate.cs (Delegate.Define): Correctly define the types in the
20430         presence of fixed and array parameters.
20431
20432         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20433         doing FindMembers.
20434
20435         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20436         include NonPublic after the first iteration.
20437
20438         * class.cs (Indexer.CheckBase): Only check if both parents are
20439         non-null. 
20440
20441         * cs-parser.jay (accessor_body): If empty, set to null.
20442
20443         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20444         same code path here to resolve constants names that we did have in
20445         MemberAccess.DoResolve.  There is too much code duplicated here.
20446
20447 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20448
20449         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20450
20451         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20452         to MakeUnionSet.
20453
20454         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20455         tokens, numbers and strings.
20456
20457         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20458         parenthesis.
20459
20460         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20461         asyncronous parameters and the regular parameters.  
20462
20463         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20464         specify the target directory.
20465
20466         * expression.cs: (This.DoResolve): Simplify
20467         (As.Emit): Optimize, do not generate IsInst if the expression is
20468         always of the given type.
20469
20470         (Is.DoResolve): Bug fix, we were reporting both always/never for
20471         the is expression.
20472
20473         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
20474         creating too many unnecessary arrays.
20475
20476 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
20477
20478         * class.cs (EmitFieldInitializer): Use Assign expression to assign
20479         fields instead of rolling our own initializer.   Takes care of all
20480         implicit conversions, and drops unnecessary static checks/argument.
20481
20482 2002-03-31  Dick Porter  <dick@ximian.com>
20483
20484         * driver.cs: use the GetDirectories() return values properly, and
20485         use "/" as path separator.
20486
20487 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
20488
20489         * expression.cs (Unary): Optimize - - expr into expr.
20490         (Binary): Optimize a + (-b) into a -b.
20491
20492         * codegen.cs (CodeGen): Made all methods static.
20493
20494 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
20495
20496         * rootcontext.cs: 
20497
20498         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
20499         TypeBuilder property.
20500
20501         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
20502         instead. 
20503
20504         * tree.cs: Removed the various RecordXXXX, and replaced with a
20505         single RecordDecl.  Removed all the accessor methods, and just
20506         left a single access point Type 
20507
20508         * enum.cs: Rename DefineEnum to DefineType.
20509
20510         * decl.cs: New abstract method `DefineType' used to unify the
20511         Defines for Enumerations, Interfaces, TypeContainers and
20512         Delegates.
20513
20514         (FindType): Moved LookupInterfaceOrClass here.  Moved the
20515         LookupBaseClasses method that used to live in class.cs and
20516         interface.cs here, and renamed to FindType.
20517
20518         * delegate.cs: Implement DefineType.  Take advantage of the
20519         refactored pattern for locating the parent builder without taking
20520         the parent_builder argument (which we know does not work if we are
20521         nested, and triggering a toplevel definition).
20522
20523 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20524
20525         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
20526         accessibility of a member has changed during override and report
20527         an error if so.
20528
20529         * class.cs (Method.Define, Property.Define): Only complain on
20530         overrides if the method is private, any other accessibility is
20531         fine (and since we just checked the permission is the same, we are
20532         good to go).
20533
20534         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
20535         and elif are processed always.  The other pre-processing
20536         directives are only processed if we are "taking" the path
20537
20538 2002-03-29  Martin Baulig  <martin@gnome.org>
20539
20540         * class.cs (Method.Emit): Only emit symbolic debugging info if the
20541         current location is not Null.
20542
20543         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
20544         a separate method so we can profile it.
20545
20546         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
20547         `span.Seconds' are just seconds, but no minutes or hours.
20548         (MainDriver): Profile the CodeGen.SaveSymbols calls.
20549
20550 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20551
20552         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
20553         Remove the gratuitous set of Final:
20554
20555                                 // If an interface implementation, then we can set Final.
20556                                 if (((flags & MethodAttributes.Abstract) == 0) &&
20557                                     implementing.DeclaringType.IsInterface)
20558                                         flags |= MethodAttributes.Final;
20559
20560         I do not know what I was smoking when I used that.
20561
20562
20563         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
20564         step into fixing the name resolution issues for delegates and
20565         unifying the toplevel name resolution.
20566
20567 2002-03-28  Martin Baulig  <martin@gnome.org>
20568
20569         * class.cs (Method.Emit): If we have a symbol writer, call its
20570         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
20571         tell it about the current method.
20572
20573         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
20574         writer that we're going to emit the first byte of IL code for a new
20575         statement (a new source line).
20576         (EmitContext.EmitTopBlock): If we have a symbol writer, call
20577         EmitContext.Mark() before emitting any code.
20578
20579         * location.cs (SymbolDocument): Return null when we're Null.
20580
20581         * statement.cs (Statement): Moved the `Location loc' variable here.
20582         (Statement.EmitBoolExpression): If we have a symbol writer, call
20583         ec.Mark() before emitting any code to tell it that we're at the
20584         beginning of a new statement.
20585         (StatementExpression): Added `Location' argument to the constructor.
20586         (Block): Added public readonly variable `StartLocation' and public
20587         variable `EndLocation'.  The latter is to be set using SetEndLocation().
20588         (Block): Added constructor which takes a start and end location.
20589         (Block.SetEndLocation): New method. This sets the end location.
20590         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
20591         local variables we create.
20592         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
20593         each statement and do also mark the begin and end of the block.
20594
20595         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
20596         tell it the current lexer.Location, use Location.Null for the end of the
20597         block.
20598         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
20599         current block, set its end location using SetEndLocation().
20600         (statement_expression): StatementExpression constructor now takes the
20601         lexer.Location as additional argument.
20602         (for_statement, declare_local_variables): Likewise.
20603         (declare_local_variables): When creating a new implicit block, use the
20604         new Block constructor and pass it the lexer.Location.
20605
20606 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20607
20608         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
20609         members also on the parent interfaces recursively.
20610
20611 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
20612
20613         * report.cs: Use new formats, since Gonzalo finished the missing
20614         bits. 
20615
20616         * expression.cs (Binary.ResolveOperator): added missing operator|
20617         operator& and operator^ for bool/bool.
20618
20619         * cs-parser.jay: CheckDef now takes a Location argument that is
20620         used to report errors more precisly (instead of reporting the end
20621         of a definition, we try to track something which is a lot closer
20622         to the source of the problem).
20623
20624         * cs-tokenizer.cs: Track global token use, so we can properly flag
20625         the use of #define/#undef after the first token has been seen.
20626
20627         Also, rename the reportXXXX to Error_DescriptiveName
20628
20629         * decl.cs (DeclSpace.IsTopLevel): Move property here from
20630         TypeContainer, so that Enum and Interface can use this too.
20631
20632         * class.cs (TypeContainer.LookupInterfaceOrClass,
20633         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
20634         `builder' argument.  Typically this was used to pass the parent
20635         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
20636         the definition).  
20637
20638         The problem is that a nested class could trigger the definition of
20639         a toplevel class, and the builder would be obviously wrong in that
20640         case. 
20641
20642         So we drop this argument, and we compute dynamically the
20643         TypeBuilder/ModuleBuilder (the correct information was available
20644         to us anyways from DeclSpace.Parent)
20645
20646         * interface.cs (Interface.DefineInterface): Drop builder
20647         parameter cleanup like class.cs
20648
20649         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
20650         like class.cs
20651
20652         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
20653         values. 
20654
20655         (Try.Emit): Propagate the returns value from the statement.
20656
20657         (Return.Emit): Even if we are leavning 
20658
20659         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
20660
20661         * modifiers.cs: Fix the computation of MethodAttributes flags.
20662
20663 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
20664
20665         * driver.cs: allow compilation of files that start with '/'.
20666         Add a default case when checking the argument of --target.
20667
20668 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
20669
20670         * interface.cs: Implement the same search algorithm for types in
20671         the interface code.
20672
20673         * delegate.cs: Do not allow multiple definition.
20674
20675         * Recovered ChangeLog that got accidentally amputated
20676
20677         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
20678
20679         * rootcontext.cs: Load manually enum to allow core classes to
20680         contain enumerations.
20681
20682         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
20683         Update to new static methods in TypeManager.
20684
20685         * typemanager.cs (GetMethod, GetConstructor): Use our
20686         implementation of FindMembers to find the members, since during
20687         corlib compilation, the types are TypeBuilders and GetMethod and
20688         GetConstructor do not work.
20689
20690         Make all methods in TypeManager static.
20691
20692         (InitCodeHelpers): Split the functionality from
20693         the InitCodeTypes function.
20694
20695         * driver.cs: Call InitCodeHelpers after we have populated the
20696         types. 
20697
20698         * cs-parser.jay (delegate_declaration): we did not used to compute
20699         the delegate name correctly for void delegates.
20700
20701 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
20702
20703         * rootcontext.cs (RootContext): Init the interface_resolve_order
20704         and type_container_resolve_order always.
20705
20706         (ResolveCore, BootstrapCorlib_ResolveClass,
20707         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
20708         compiler when compiling with --nostdlib
20709
20710         * class.cs (TypeContainer.DefineType): Check that our parent is
20711         not null.  This test is most important when we are bootstraping
20712         the core types.
20713
20714         * codegen.cs: Split out the symbol writing code.
20715
20716 2002-03-25  Martin Baulig  <martin@gnome.org>
20717
20718         * driver.cs (-g): Made -g an alias for --debug.
20719
20720 2002-03-24  Martin Baulig  <martin@gnome.org>
20721
20722         * codegen.cs (SymbolWriter): New public variable. Returns the
20723         current symbol writer.
20724         (CodeGen): Added `bool want_debugging_support' argument to the
20725          constructor. If true, tell the ModuleBuild that we want debugging
20726         support and ask it for the ISymbolWriter.
20727         (Save): If we have a symbol writer, call it's Close() method after
20728         saving the assembly.
20729
20730         * driver.c (--debug): New command line argument to create a
20731         debugger information file.
20732
20733         * location.cs (SymbolDocument): New public property. Returns an
20734         ISymbolDocumentWriter object for the current source file or null
20735         if we don't have a symbol writer.
20736
20737 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
20738
20739         * driver.cs (LoadAssembly): Correctly return when all the paths
20740         have been tried and not before.
20741
20742         * statement.cs (Switch.Emit): return the actual coverage for this
20743         statement (returns/not-returns)
20744
20745         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
20746         switch of the statement if we are the last switch section.  That
20747         kills two problems: try/catch problems (we used to emit an empty
20748         nop at the end) and switch statements where all branches would
20749         return. 
20750
20751 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
20752
20753         * driver.cs: Add default assemblies (the equivalent to the
20754         Microsoft CSC.RSP file)
20755
20756         * cs-tokenizer.cs: When updating `cols and setting it to zero,
20757         also update tokens_seen and set it to false.
20758
20759         * driver.cs: Implement --recurse for Mike.
20760
20761         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
20762         correctly splitting out the paths.
20763
20764 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
20765
20766         * interface.cs (Interface.PopulateProperty): Instead of using
20767         `parent' as the declaration space for the set parameters, use
20768         `this' 
20769
20770         * support.cs (InternalParameters): InternalParameters constructor
20771         takes a DeclSpace instead of a TypeContainer.
20772
20773         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
20774         types are being initialized, load the address of it before calling
20775         the function.  
20776
20777         (New): Provide a mechanism to disable the generation of local
20778         value type temporaries when the caller will be providing us with
20779         an address to store it.
20780
20781         (ArrayCreation.EmitDynamicInitializers): Use it.
20782
20783 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
20784
20785         * expression.cs (Invocation.EmitArguments): Only probe for array
20786         property if there is more than one argument.  Sorry about that.
20787
20788         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
20789         empty param arrays.
20790
20791         * class.cs (Method.LabelParameters): Fix incorrect code path that
20792         prevented the `ParamArrayAttribute' from being applied to the
20793         params attribute.
20794
20795 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
20796
20797         * support.cs (ReflectionParameters): Correctly compute whether the
20798         last argument is a params array.  Fixes the problem with
20799         string.Split ('a')
20800
20801         * typemanager.cs: Make the assemblies array always be non-null
20802         (empty, but non-null)
20803
20804         * tree.cs (RecordDecl): New function that abstracts the recording
20805         of names.  This reports error 101, and provides a pointer to the
20806         previous declaration.  Fixes a crash in the compiler.
20807
20808         * cs-parser.jay (constructor_declaration): Update to new grammar,
20809         and provide a constructor_body that can be empty.
20810
20811 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
20812
20813         * driver.cs: Add support for --resources.
20814
20815         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
20816         Make all types for the various array helper methods be integer.
20817
20818         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
20819         CheckState to ConvCast.
20820
20821         (ConvCast): Now it takes a `checked' state argument, to avoid
20822         depending on the emit context for the conversion, and just using
20823         the resolve time setting.
20824
20825         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
20826         instead of Invocation.EmitArguments.  We do not emit the original
20827         arguments, instead we emit those which have been converted to
20828         unsigned int expressions.
20829
20830         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
20831
20832         * codegen.cs: ditto.
20833
20834         * expression.cs (LocalVariableReference): Drop the use of the
20835         Store function that depended on the variable index.
20836
20837         * statement.cs (VariableInfo): Drop the `Idx' property from this
20838         class, as this is not taking into account the indexes for
20839         temporaries tat we generate during the execution, getting the
20840         indexes wrong.
20841
20842         * class.cs: First emit class initializers, then call the parent
20843         constructor. 
20844
20845         * expression.cs (Binary): Fix opcode emision.
20846         (UnaryMutator.EmitCode): Support checked code generation
20847
20848         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
20849         matches for events for both the Static and Instance scans,
20850         pointing to the same element.   Fix that.
20851
20852 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
20853
20854         * rootcontext.cs (ResolveTree): Always set the
20855         interface_resolve_order, because nested interfaces will be calling
20856         into us.
20857
20858         * class.cs (GetInterfaceOrClass): Track the same resolution
20859         process used by TypeManager.LookupType.  This fixes the nested
20860         type lookups in class declarations (separate path from
20861         LookupType). 
20862
20863         (TypeContainer.DefineType): Also define nested interfaces.
20864         (TypeContainer.RegisterOrder): New public function used to
20865         register the order in which child interfaces need to be closed.
20866
20867         Nested interfaces need to be closed after their parents have been
20868         created. 
20869
20870         * interface.cs (InterfaceAttr): Put all the logic for computing
20871         the interface attribute here. 
20872
20873         (DefineInterface): Register our interface order with the
20874         RootContext or with the TypeContainer depending on the case.
20875
20876 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
20877
20878         * cs-parser.jay: rework foreach statement to work with the new
20879         changes to the policy on SimpleNames.
20880
20881         * report.cs: support Stacktrace on warnings as well.
20882
20883         * makefile: drop --unsafe and /unsafe from the compile.
20884
20885 2002-03-13  Ravi Pratap  <ravi@ximian.com>
20886
20887         * ecore.cs (StandardConversionExists): Modify to take an Expression
20888         as the first parameter. Ensure we do null -> reference type conversion
20889         checking.
20890
20891         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
20892         temporary Expression objects.
20893
20894 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
20895
20896         * interface.cs: workaround bug in method overloading resolution
20897         (there is already a bugzilla bug for it).
20898
20899 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
20900
20901         We could also solve this problem by having a separate path for
20902         performing type lookups, instead of DoResolve, we could have a
20903         ResolveType entry point, and only participating pieces of the
20904         production (simplename, deref, array) would implement this. 
20905
20906         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
20907         signal SimpleName to only resolve type names and not attempt to
20908         resolve anything else.
20909
20910         * expression.cs (Cast): Set the flag.
20911
20912         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
20913
20914         * class.cs: Only report 108 if there is no `new' modifier.
20915
20916         * cs-parser.jay: rework foreach statement to work with the new
20917         changes to the policy on SimpleNames.
20918         
20919         * report.cs: support Stacktrace on warnings as well.
20920
20921         * makefile: drop --unsafe and /unsafe from the compile.
20922
20923 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
20924
20925         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
20926         lookups here, instead of doing that at parse time.  This means
20927         that our grammar will not introduce `LocalVariableReferences' as
20928         expressions at this point.  That solves the problem of code like
20929         this:
20930
20931         class X {
20932            static void Main ()
20933            { int X = 1;
20934             { X x = null }}}
20935
20936         This is only half the fix.  The full fix requires parameters to
20937         also be handled in this way.
20938
20939         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
20940         makes the use more obvious of the DeclSpace.  The
20941         ec.TypeContainer.TypeBuilder is now only used to pull the
20942         TypeBuilder for it.
20943
20944         My theory is that I can get rid of the TypeBuilder completely from
20945         the EmitContext, and have typecasts where it is used (from
20946         DeclSpace to where it matters).  
20947
20948         The only pending problem is that the code that implements Aliases
20949         is on TypeContainer, and probably should go in DeclSpace.
20950
20951         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
20952         lookups here, instead of doing that at parse time.  This means
20953         that our grammar will not introduce `LocalVariableReferences' as
20954         expressions at this point.  That solves the problem of code like
20955         this:
20956
20957         class X {
20958            static void Main ()
20959            { int X = 1;
20960             { X x = null }}}
20961
20962         This is only half the fix.  The full fix requires parameters to
20963         also be handled in this way.
20964
20965         * class.cs (Property.DefineMethod): When implementing an interface
20966         method, set newslot, when implementing an abstract method, do not
20967         set the flag (before we tried never setting it, or always setting
20968         it, which is the difference).
20969         (Indexer.DefineMethod): same.
20970         (Method.DefineMethod): same.
20971
20972         * ecore.cs: Only set the status used flag if we get back a Field.
20973
20974         * attribute.cs: Temporary hack, so Paolo can keep working.
20975
20976 2002-03-08  Ravi Pratap  <ravi@ximian.com>
20977
20978         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
20979         the unmanaged type in the case we have a MarshalAs attribute.
20980
20981         (Resolve): Handle the case when we are parsing the special MarshalAs
20982         attribute [we need to store the unmanaged type to use later]
20983
20984         * typemanager.cs (marshal_as_attr_type): Built in type for the 
20985         MarshalAs Attribute.
20986
20987         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
20988         on parameters and accordingly set the marshalling info.
20989
20990 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
20991
20992         * class.cs: Optimizing slightly by removing redundant code after
20993         we switched to the `NoTypes' return value.
20994         (Property.DefineMethod): use NoTypes here too.
20995
20996         This fixes the bug I introduced in my last batch of changes.
20997
20998 2002-03-05  Ravi Pratap  <ravi@ximian.com>
20999
21000         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21001
21002         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21003         Enums since those are types too. 
21004
21005         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21006
21007         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21008         thanks to a call during the lookup process.
21009
21010 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21011
21012         * statement.cs (Foreach): Lots of work to accomodate a particular
21013         kind of foreach statement that I had not kept in mind.  It is
21014         possible to have foreachs on classes that provide a GetEnumerator
21015         method that return objects that implement the "pattern" for using
21016         a foreach, there is no need to support GetEnumerator
21017         specifically. 
21018
21019         This is needed to compile nant.
21020
21021         * decl.cs: Only report 114 if the member is not `Finalize' and if
21022         the warning level is at least 2.
21023
21024         * class.cs: Moved the compare function from Method to
21025         MethodSignature. 
21026
21027         (MethodSignature.InheritableMemberSignatureCompare): Add new
21028         filter function that is used to extract inheritable methods from a
21029         class. 
21030
21031         (Method.Define): Use the new `inheritable_method_signature_filter'
21032         delegate
21033
21034         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21035         command. 
21036
21037 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21038
21039         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21040
21041         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21042
21043         * expression.cs: Pass location information to
21044         ConvertImplicitStandard. 
21045
21046         * class.cs: Added debugging code to track return values from
21047         interfaces. 
21048
21049 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21050
21051         * expression.cs (Is.DoResolve): If either side of the `is' is an
21052         interface, do not flag the warning.
21053
21054         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21055         for interfaces
21056
21057         * report.cs: Allow for --fatal to be used with --probe.
21058
21059         * typemanager.cs (NoTypes): Move the definition for the empty Type
21060         array here. 
21061
21062         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21063         properties. 
21064         (TypeContainer.DefineProxy): New function used to proxy to parent
21065         implementations when implementing interfaces.
21066         (TypeContainer.ParentImplements): used to lookup if our parent
21067         implements a public function that is required by an interface.
21068         (TypeContainer.VerifyPendingMethods): Hook this up.
21069
21070         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21071         `modules' and `assemblies' arraylists into arrays.  We only grow
21072         these are the very early start up of the program, so this improves
21073         the speedof LookupType (nicely measured).
21074
21075         * expression.cs (MakeByteBlob): Replaced unsafe code with
21076         BitConverter, as suggested by Paolo.
21077
21078         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21079         folding of string concatenation, but if either side is a string,
21080         and the other is not, then return null, and let the runtime use
21081         the concatenation on the string plus the object (using
21082         `Object.ToString'). 
21083
21084 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21085
21086         Constant Folding has been implemented now.
21087
21088         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21089         the error instead on types that are not supported in one's
21090         complement. 
21091
21092         * constant.cs (Constant and all children): New set of functions to
21093         perform implict and explicit conversions.
21094
21095         * ecore.cs (EnumConstant): Implement the new functions to perform
21096         conversion by proxying to the child expression.
21097
21098         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21099         own separate setting that can not be turned off from the command
21100         line using --unchecked or --checked and is only controlled using
21101         the checked/unchecked statements and expressions.  This setting is
21102         used by the constant folder to flag errors.
21103
21104         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21105         ConstantCheckState as well.   
21106
21107         During Resolve, they also have to flag the state, because the
21108         constant folder runs completely in the Resolve phase.
21109
21110         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21111         well.
21112
21113 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21114
21115         * cfold.cs: New file, this file contains the constant folder.
21116
21117         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21118         argument to track whether we are using the resulting address to
21119         load or store a value and provide better error messages. 
21120
21121         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21122         new AddressOf arguments.
21123
21124         * statement.cs (Foreach.EmitCollectionForeach): Update
21125
21126         * expression.cs (Argument.Emit): Call AddressOf with proper
21127         arguments to track usage.
21128
21129         (New.DoEmit): Call AddressOf with new arguments.
21130
21131         (Unary.Emit): Adjust AddressOf call.
21132
21133 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21134
21135         * cs-parser.jay (member_access): Change the case for pre-defined types
21136         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21137         this suggestion.
21138
21139         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21140         a method body.
21141
21142         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21143         essentially like methods and apply attributes like MethodImplOptions to them too.
21144
21145         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21146         not being null.
21147
21148         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21149         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21150         is the DeclSpace.
21151
21152         * Update code everywhere accordingly.
21153
21154         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21155
21156         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21157
21158 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21159
21160         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21161         try performing lookups against those instead of jumping straight into using
21162         the 'using' clauses.
21163
21164         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21165
21166         (LookupType): Perform lookups in implicit parents too.
21167
21168         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21169         sequence as RootContext.LookupType. 
21170
21171         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21172         the various cases of namespace lookups into this method.
21173
21174 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21175
21176         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21177         in positional arguments)
21178
21179         * class.cs (Operator): Update the AllowedModifiers to contain
21180         extern. 
21181
21182         * cs-parser.jay: Update operator declaration to allow for the
21183         operator body to be empty.
21184
21185         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21186         values. 
21187
21188 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21189
21190         * class.cs (Method.Emit): Label parameters.
21191
21192         * driver.cs: Return 1 or 0 as the program exit code.
21193
21194 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21195
21196         * expression.cs: Special case the `null' object when trying to
21197         auto-compute the type, as anything can be explicitly converted to
21198         that. 
21199
21200         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21201         spotting this Paolo.
21202
21203         (Expression.ImplicitNumericConversion): Perform comparissions of
21204         the type using the underlying type in the case of an enumeration
21205         rather than using the enumeration type for the compare.
21206
21207         Cope with the underlying == type case, which is not possible to
21208         catch before. 
21209
21210         (Expression.ConvertNumericExplicit): Perform comparissions of
21211         the type using the underlying type in the case of an enumeration
21212         rather than using the enumeration type for the compare.
21213
21214         * driver.cs: If the user does not supply an extension, assume .exe
21215
21216         * cs-parser.jay (if_statement): Rewrote so that we can track the
21217         location for the if statement.
21218
21219         * expression.cs (Binary.ConstantFold): Only concat strings when
21220         the operation is "+", not everything ;-)
21221
21222         * statement.cs (Statement.EmitBoolExpression): Take a location
21223         argument. 
21224         (If, While, Do): Track location.
21225
21226         * expression.cs (Binary.ResolveOperator): In the object + string
21227         case, I was missing a call to ConvertImplicit
21228
21229 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21230
21231         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21232         Location arguments. Ensure we use RootContext.LookupType to do our work
21233         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21234
21235         * interface.cs (PopulateMethod): Handle the type of the parameter being
21236         null gracefully.
21237
21238         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21239         have a params method with no fixed arguments and a call is made with no
21240         arguments.
21241
21242 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21243
21244         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21245         the verbatim-string-literal
21246
21247         * support.cs (InternalParameters.ParameterModifier): handle null
21248         fixed parameters.
21249         (InternalParameters.ParameterType): ditto.
21250
21251         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21252         duplicating the name of the variable parameter.
21253         (GetParameterByName): Fix bug where we were not looking up array
21254         paramters if they were the only present (thanks Paolo!).
21255         (GetParameterInfo): We only have an empty set of types if both
21256         fixed and array are set to null.
21257         (GetParameterInfo-idx): Handle FixedParameter == null
21258
21259         * cs-parser.jay: Handle the case where there is no catch
21260         statements (missing null test).
21261
21262 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21263
21264         * driver.cs (MainDriver): Be conservative on our command line
21265         handling.
21266
21267         Catch DirectoryNotFoundException when calling GetFiles.
21268
21269         (SplitPathAndPattern): Used to split the input specification into
21270         a path and a pattern that we can feed to Directory.GetFiles.
21271
21272 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21273
21274         * statement.cs (Fixed): Implement the last case of the Fixed
21275         statement (string handling).
21276
21277         * expression.cs (StringPtr): New class used to return a char * to
21278         a string;  Used by the Fixed statement.
21279
21280         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21281
21282         * expression.cs (Binary.ResolveOperator): Remove redundant
21283         MemberLookup pn parent type.
21284         Optimize union call, we do not need a union if the types are the same.
21285         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21286         type.
21287
21288         Specialize the use of MemberLookup everywhere, instead of using
21289         the default settings. 
21290
21291         (StackAlloc): Implement stackalloc keyword.
21292
21293         * cs-parser.jay: Add rule to parse stackalloc.
21294
21295         * driver.cs: Handle /h, /help, /?
21296
21297         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21298         before we supported unsafe code.
21299
21300         * makefile: add --unsafe to the self compilation of mcs.
21301
21302 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21303
21304         * expression.cs (PointerArithmetic): New class that is used to
21305         perform pointer arithmetic.
21306         (Binary.Resolve): Handle pointer arithmetic
21307         Handle pointer comparission.
21308         (ArrayPtr): Utility expression class that is used to take the
21309         address of an array.
21310
21311         (ElementAccess): Implement array access for pointers
21312
21313         * statement.cs (Fixed): Implement fixed statement for arrays, we
21314         are missing one more case before we are done.
21315
21316         * expression.cs (Indirection): Implement EmitAssign and set the
21317         ExprClass to Variable.  This allows pointer dereferences to be
21318         treated as variables, and to have values assigned to them.
21319
21320         * ecore.cs (Expression.StoreFromPtr): New utility function to
21321         store values dereferencing.
21322
21323 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21324
21325         * expression.cs (Binary.ResolveOperator): Ensure that we are
21326         not trying to operate on a void type - this fixes the reported
21327         bug.
21328
21329         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21330         the parent implementation is sealed.
21331
21332         * ../errors/cs0239.cs : Add.
21333
21334         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21335
21336         * typemanager.cs (unverifiable_code_type): Corresponds to 
21337         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21338         which have unsafe code in them.
21339
21340         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21341         unsafe context.
21342
21343 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21344
21345         * cs-tokenizer.cs: Add support for @"litreal strings"
21346
21347         Make tokenizer accept pre-processor directives
21348         on any column (remove the old C-like limitation). 
21349
21350         * rootcontext.cs (EmitCode): Emit any global attributes.
21351         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21352
21353         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21354
21355         * cs-parser.jay: Add support for global attributes.  
21356
21357 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21358
21359         * expression.cs (Indirection): New helper class.  Unary will
21360         create Indirection classes to be able to implement the
21361         IMemoryLocation interface on it.
21362
21363 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21364
21365         * cs-parser.jay (fixed_statement): reference the right statement.
21366
21367         * statement.cs (Fixed.Emit): Finish implementing the fixed
21368         statement for the &x case.
21369
21370 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21371
21372         * class.cs (Property.Define, Method.Define): Remove newslot when
21373         `implementing'.  
21374
21375         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21376         wrong.  NewSlot should only be used if the `new' keyword is present.
21377
21378         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21379         locating our system dir.  Sorry about this.
21380
21381 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21382
21383         * driver.cs (GetSystemDir): Compute correctly the location of our
21384         system assemblies.  I was using the compiler directory instead of
21385         the library directory.
21386
21387 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21388
21389         * expression.cs (BetterFunction): Put back in what Miguel commented out
21390         since it is the correct fix. The problem is elsewhere ;-)
21391
21392         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21393         parameters of the parms method are themselves compatible or not !
21394
21395         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21396         to check that a class implements an interface before saying that an implicit
21397         conversion was allowed. Use ImplementsInterface to do the checking.
21398
21399 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21400
21401         * class.cs (Method.Define): Track whether we are an explicit
21402         implementation or not.  And only call DefineMethodOverride if we
21403         are an explicit implementation.
21404
21405         (Property.DefineMethod): Ditto.
21406
21407 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21408
21409         * expression.cs (BetterFunction): Catch hideous bug which was
21410          preventing us from detecting ambiguous calls due to implicit casts i.e
21411         cs0121.
21412
21413 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21414
21415         * support.cs (Pair): Remove un-needed method.  I figured why I was
21416         getting the error in cs-parser.jay, the variable in a foreach loop
21417         is readonly, and the compiler does not really treat this as a variable.
21418
21419         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21420         instead of EQUALS in grammar.  
21421
21422         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21423
21424         * expression.cs (Unary.DoResolve): Check whether the argument is
21425         managed or not.
21426
21427 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21428
21429         * support.cs: Api for Pair to set a value.  Despite the fact that
21430         the variables are public the MS C# compiler refuses to compile
21431         code that accesses the field if the variable is part of a foreach
21432         statement. 
21433
21434         * statement.cs (Fixed): Begin implementation of the fixed
21435         statement.
21436
21437         (Block.AddVariable): Return the VariableInfo on success and null
21438         on failure instead of true/false. 
21439
21440         * cs-parser.jay (foreach): Catch errors on variables already
21441         defined (we were ignoring this value before) and properly unwind
21442         the block hierarchy
21443
21444         (fixed_statement): grammar for the fixed statement.
21445
21446 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21447
21448         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21449         pointer types to be incretemented.
21450
21451         (SizeOf): Implement.
21452
21453         * cs-parser.jay (pointer_member_access): Implement
21454         expr->IDENTIFIER production.
21455
21456         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21457         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21458         on safe contexts.
21459
21460         (Unary): Implement indirection.
21461
21462         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21463         use in non-unsafe context).
21464
21465         (SimpleName.DoResolve): Check for pointers in field access on safe
21466         contexts. 
21467
21468         (Expression.LoadFromPtr): Factor the load-indirect code in this
21469         function.  This was duplicated in UnboxCast and ParameterReference
21470
21471 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
21472
21473         * expression.cs (ComposedCast): report an error if a pointer cast
21474         is used in a safe region.
21475
21476         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
21477         pointer type casts in unsafe context.
21478
21479         * codegen.cs (EmitContext): Set up IsUnsafe.
21480
21481         * cs-parser.jay (non_expression_type): Add productions for pointer
21482         casts. 
21483
21484         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
21485         code.  We should not use force into static mode if the method is
21486         not virtual.  Fixes bug in MIS
21487
21488         * statement.cs (Do.Emit, While.Emit, For.Emit,
21489         Statement.EmitBoolExpression): Add support to Do and While to
21490         propagate infinite loop as `I do return' semantics.
21491
21492         Improve the For case to also test for boolean constants.
21493
21494         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
21495         to the list of attributes we can add.
21496
21497         Remove `EmitContext' argument.
21498
21499         * class.cs (Method.Define): Apply parameter attributes.
21500         (Constructor.Define): Apply parameter attributes.
21501         (MethodCore.LabelParameters): Move here the core of labeling
21502         parameters. 
21503
21504         * support.cs (ReflectionParameters.ParameterModifier,
21505         InternalParameters.ParameterModifier): Use IsByRef on the type and
21506         only return the OUT bit for these parameters instead of in/out/ref
21507         flags.
21508
21509         This is because I miss-understood things.  The ParameterInfo.IsIn
21510         and IsOut represent whether the parameter has the [In] and [Out]
21511         attributes set.  
21512
21513 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
21514
21515         * ecore.cs (FieldExpr.Emit): Release temporaries.
21516
21517         * assign.cs (LocalTemporary.Release): new function.
21518
21519         * codegen.cs (EmitContext.GetTemporaryStorage,
21520         EmitContext.FreeTemporaryStorage): Rework the way we deal with
21521         temporary storage.  Now we can "put back" localbuilders when we
21522         are done with them
21523
21524 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
21525
21526         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
21527         need to make a copy of the variable to generate verifiable code.
21528
21529 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
21530
21531         * driver.cs: Compute dynamically the system directory.
21532
21533         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
21534         Slower, but more generally useful.  Used by the abstract
21535         registering implementation. 
21536
21537         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
21538         the rules for the special rule on Type/instances.  First check if
21539         we have the same name, and if so, try that special static path
21540         rather than the instance path.
21541
21542 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
21543
21544         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
21545         for, while and if.
21546
21547         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
21548         Enum, ValueType, Delegate or Array for non-corlib compiles.
21549
21550         * cs-tokenizer.cs: Catch long identifiers (645)
21551
21552         * typemanager.cs (IndexerPropetyName): Ravi never tested this
21553         piece of code.
21554
21555         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
21556         fix, we were returning too early, so we were not registering
21557         pending methods from abstract classes.
21558
21559         Do not register pending methods if the class is abstract.
21560
21561         * expression.cs (Conditional.DoResolve): Report circular implicit
21562         conversions when we neecd to compute it for conditional
21563         expressions. 
21564
21565         (Is.DoResolve): If the expression is always of the provided type,
21566         flag warning 183.  If the expression can not ever be of the
21567         provided type flag warning 184.
21568
21569         * class.cs: Catch 169 as well.
21570
21571         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
21572         read. 
21573
21574 2002-01-18  Nick Drochak  <ndrochak@gol.com>
21575
21576         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
21577
21578 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
21579
21580         * interface.cs: (PopulateMethod): Check for pointers being defined
21581         only if the unsafe context is active.
21582         (PopulateProperty): ditto.
21583         (PopulateIndexer): ditto.
21584
21585         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
21586         specified.  If pointers are present, make sure that they are
21587         present in an unsafe context.
21588         (Constructor, Constructor.Define): ditto.
21589         (Field, Field.Define): ditto.
21590         (Property, Property.Define): ditto.
21591         (Event, Event.Define): ditto.
21592
21593         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
21594         hashtable if there are classes or structs defined.
21595
21596         * expression.cs (LocalVariableReference.DoResolve): Simplify this
21597         code, as the constant resolution moved.
21598
21599         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
21600         the metadata, so we can flag error 133. 
21601
21602         * decl.cs (MemberCore.UnsafeOK): New function to test that a
21603         pointer is being declared in an unsafe context.
21604
21605 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
21606
21607         * modifiers.cs (Modifiers.Check): Require a Location argument.
21608         Report error 227 for Unsafe use.
21609
21610         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
21611
21612         * statement.cs (For.Emit): If the test is null, then report that
21613         we do `return', as we wont reach anything afterwards.
21614
21615         (Switch.SwitchGoverningType): Track the expression that matched
21616         the conversion.
21617
21618         * driver.cs: Allow negative numbers as an error code to flag.
21619
21620         * cs-parser.jay: Handle 1551.
21621
21622         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
21623
21624 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21625
21626         * cs-parser.jay: Report 1518 (type declaration can only contain
21627         class, struct, interface, enum or delegate)
21628
21629         (switch_label): Report 1523 (keywords `case' or `default' must
21630         preced code)
21631
21632         (opt_switch_sections): Report 1522 (empty switch)
21633
21634         * driver.cs: Report 1515 (response file specified multiple times)
21635         Report 1516 (Source file specified multiple times).
21636
21637         * expression.cs (Argument.Resolve): Signal 1510
21638
21639         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
21640         access not allowed in static code)
21641
21642 2002-01-11  Ravi Pratap  <ravi@ximian.com>
21643
21644         * typemanager.cs (IsPointerType): Utility method which we are going
21645         to need a lot.
21646
21647         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
21648         the object type, so we take care of that.
21649
21650         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
21651
21652         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
21653         added to non-params parameters :-)
21654
21655         * typemanager.cs (CSharpName): Include 'void' type too. 
21656
21657         (void_ptr_type): Include in the set of core types.
21658
21659         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
21660         duplicating code.
21661
21662         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
21663         an unsafe context.
21664
21665         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
21666         completely forgotten about it.
21667
21668 2002-01-10  Ravi Pratap  <ravi@ximian.com>
21669
21670         * cs-parser.jay (pointer_type): Add. This begins our implementation
21671         of parsing rules for unsafe code.
21672
21673         (unsafe_statement): Implement.
21674
21675         (embedded_statement): Modify to include the above.
21676
21677         * statement.cs (Unsafe): Implement new class for unsafe blocks.
21678
21679         * codegen.cs (EmitContext.InUnsafe): Add. This determines
21680         if the current context is an unsafe one.
21681
21682         * cs-parser.jay (local_variable_pointer_type): Since local variable types
21683         are handled differently, we need separate rules for them.
21684
21685         (local_variable_declaration): Update to use local_variable_pointer_type
21686         to allow variable declarations of unmanaged pointer types.
21687
21688         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
21689         in unsafe contexts.
21690
21691         * ../errors/cs0214.cs : Add.
21692
21693 2002-01-16  Nick Drochak  <ndrochak@gol.com>
21694
21695         * makefile: remove 'response' file when cleaning.
21696
21697 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21698
21699         * cs-parser.jay: Report 1524.
21700
21701 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
21702
21703         * typemanager.cs (RegisterMethod): drop checking if we have
21704         registered this from here
21705
21706 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
21707
21708         * class.cs (Method.EmitDestructor): Implement calling our base
21709         destructor. 
21710
21711         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
21712         value of InFinally.
21713
21714         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
21715         this routine and will wrap the call in a try/catch block.  Deal
21716         with the case.
21717
21718 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
21719
21720         * ecore.cs (Expression.MemberLookup): instead of taking a
21721         parameter `same_type' that was used to tell whether we could
21722         access private members we compute our containing type from the
21723         EmitContext.
21724
21725         (FieldExpr): Added partial support for volatile fields.  This does
21726         not work for volatile fields exposed from assemblies, as I can not
21727         figure out how to extract the modreq from it.
21728
21729         Updated all the source files to use this.
21730
21731         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
21732         because it is referenced by MemberLookup very often. 
21733
21734 2002-01-09  Ravi Pratap  <ravi@ximian.com>
21735
21736         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
21737         TypeBuilder.GetCustomAttributes to retrieve what we need.
21738
21739         Get rid of redundant default_member_attr_type as this is the same as
21740         default_member_type which already exists.
21741
21742         * interface.cs, attribute.cs : Update accordingly.
21743
21744 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
21745
21746         * typemanager.cs: Enable IndexerPropertyName again.  It does not
21747         work for TYpeBuilders though.  Ravi, can you please fix this?
21748
21749         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
21750
21751         * expression.cs (Argument.Emit): Handle the case of ref objects
21752         being passed to ref functions;  
21753
21754         (ParameterReference.EmitLoad): Loads the content of the pointer
21755         without dereferencing.
21756
21757 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
21758
21759         * cs-tokenizer.cs: Implemented the pre-processing expressions.
21760
21761 2002-01-08  Ravi Pratap  <ravi@ximian.com>
21762
21763         * class.cs (Indexer.DefineMethod): Incorporate the interface
21764         type in the name of the method if we are doing explicit interface
21765         implementation.
21766
21767         * expression.cs (ConversionExists): Remove as it is completely obsolete.
21768
21769         (BetterConversion): Fix extremely trivial bug where we were referring to
21770         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
21771         again !
21772
21773         * ../errors/bug16.cs : Add although we have fixed it.
21774
21775 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
21776
21777         * expression.cs (BaseIndexer): Begin implementation.
21778
21779         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
21780
21781         * cs-parser.jay (indexer_declarator): Use qualified_identifier
21782         production directly to remove a shift/reduce, and implement
21783         explicit interface implementation.
21784
21785         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
21786         after a floating point suffix.
21787
21788         * expression.cs (DoNumericPromotions): Improved the conversion for
21789         uint/uint.  If we have a constant, we avoid doing a typecast to a
21790         larger type.
21791
21792         * class.cs (Indexer): Implement explicit interface implementation
21793         for indexers.
21794
21795 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
21796
21797         * class.cs: make the default instance constructor public and hidebysig.
21798
21799 2001-01-03  Ravi Pratap  <ravi@ximian.com>
21800
21801         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
21802         so we can call it from elsewhere.
21803
21804         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
21805         we emit it internally if the class has a defined indexer; otherwise the user
21806         emits it by decorating the class definition with the DefaultMemberAttribute.
21807
21808         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
21809         attribute is not used on a type which defines an indexer.
21810
21811         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
21812         character when we skip whitespace.
21813
21814         * ../errors/cs0646.cs : Add.
21815
21816 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
21817
21818         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
21819         again. 
21820
21821         * makefile: Add practical target `mcs3.exe' which builds the third
21822         generation compiler. 
21823
21824         * expression.cs (New): Fix structures constructor calling.
21825
21826         * class.cs (Property, Method, Indexer): Emit Final flag on the
21827         method if we are an interface implementation and we are not
21828         abstract. 
21829
21830         * ecore.cs (PropertyExpr): New public field `IsBase', tells
21831         whether this property is referencing a `base' method.
21832
21833         * expression.cs (Invocation.EmitCall): take an extra argument:
21834         is_base, this is used to determine whether the `call' or
21835         `callvirt' opcode should be used.
21836
21837
21838         * delegate.cs: update EmitCall.
21839
21840         * class.cs (Method.Define): Set NewSlot for the cases where we are
21841         not implementing an interface method.
21842
21843         (Property.Define): ditto.
21844
21845 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
21846
21847         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
21848         'r'.  Allows mcs to parse itself fully.
21849
21850 2002-01-02  Ravi Pratap  <ravi@ximian.com>
21851
21852         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
21853         of the number of initializers that require the InitializeArray method.
21854
21855         (CheckIndices): Store the Expression in all cases - not the plain value. Also
21856         update the above field where necessary.
21857
21858         (MakeByteBlob): Update accordingly.
21859
21860         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
21861         greater than 2.
21862
21863         (EmitDynamicInitializers): Update in accordance with the new optimization.
21864
21865         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
21866         same OpCode applies.
21867
21868         * cs-parser.jay : Fix some glaring errors I introduced.
21869
21870 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
21871
21872         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
21873         so that we can check for name clashes there too.
21874
21875         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
21876         for interface indexers.
21877
21878         * interfaces.cs (Define): Emit the default member attribute.
21879
21880         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
21881         variable was being referred to while setting the value ;-)
21882
21883 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
21884
21885         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
21886         byte-by-byte information when we know the data is zero.
21887
21888         Make the block always a multiple of 4, because
21889         DefineInitializedData has a bug.
21890
21891         * assign.cs: Fix, we should assign from the temporary, not from
21892         the source. 
21893
21894         * expression.cs (MakeByteBlob): Fix my incorrect code.
21895
21896 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
21897
21898         * typemanager.cs (EnumToUnderlying): This function is used to get
21899         the underlying type from an enumeration, because it does not
21900         always work. 
21901
21902         * constant.cs: Use the I4_S form for values between -128 and 127.
21903
21904         * statement.cs (Block.LookupLabel): Looks up a label.
21905         (Block): Drop support for labeled blocks.
21906
21907         (LabeledStatement): New kind of statement that represents a label
21908         only.
21909
21910         (Goto): Finally implement this bad boy.
21911
21912         * cs-parser.jay: Update to reflect new mechanism to implement
21913         labels.
21914
21915 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
21916
21917         * codegen.cs (EmitContext.This): a codegen property that keeps the
21918         a single instance of this instead of creating many different this
21919         instances. 
21920
21921         * delegate.cs (Delegate.DoResolve): Update to use the property;
21922
21923         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
21924
21925         * expression.cs (BaseAccess.DoResolve): Ditto.
21926
21927 2001-12-29  Ravi Pratap  <ravi@ximian.com>
21928
21929         * typemanager.cs (methodimpl_attr_type): Add to hold the type
21930         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
21931
21932         (InitCoreTypes): Update accordingly.
21933
21934         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
21935         so we can quickly store the state.
21936
21937         (ApplyAttributes): Set the correct implementation flags
21938         for InternalCall methods.
21939
21940 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
21941
21942         * expression.cs (EmitCall): if a method is not virtual, then do
21943         not use callvirt on it.
21944
21945         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
21946         user defined stuff) requires the use of stobj, which takes an
21947         address on the stack instead of an array and an index.  So emit
21948         the Ldelema operation for it.
21949
21950         (EmitStoreOpcode): Use stobj for valuetypes.
21951
21952         (UnaryMutator.EmitCode): Use the right 1 value depending on
21953         whether we are dealing with int64/uint64, float or doubles.
21954
21955         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
21956         constructors that I implemented last night.
21957
21958         (Constructor.IsDefault): Fix to work properly for static
21959         constructors.
21960
21961         * cs-parser.jay (CheckDef): report method signature errors.
21962         Update error number 103 to be 132.
21963
21964         * decl.cs: New AdditionResult enumeration value: MethodExists.
21965         Although we do this check for methods later on in the semantic
21966         analysis, catching repeated default constructors is so easy that
21967         we catch these here. 
21968
21969         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
21970         promotions code.
21971
21972         (ParameterReference.EmitAssign, Emit): handle
21973         bools as bytes.
21974
21975         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
21976         (ArrayAccess.EmitStoreOpcode): ditto.
21977
21978         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
21979
21980         * expression.cs (MakeByteBlob): Complete all the missing types
21981         (uint, short, ushort, byte, sbyte)
21982
21983         * class.cs: Only init instance field initializers on instance
21984         constructors. 
21985
21986         Rename `constructors' to instance_constructors. 
21987
21988         (TypeContainer.AddConstructor): Only add constructors to the list
21989         if it is not static.
21990
21991         Make sure that we handle default_static_constructor independently
21992         everywhere where we handle instance_constructors
21993
21994 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
21995
21996         * class.cs: Do not lookup or create a base initializer for a
21997         static constructor.
21998
21999         (ConstructorInitializer.Resolve): use the proper type to lookup
22000         for constructors.
22001
22002         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22003
22004         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22005         in DeclSpace. 
22006
22007         * decl.cs: CloseType is now an virtual method, the default
22008         implementation just closes this type.
22009
22010 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22011
22012         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22013         to PreserveSig by default. Also emit HideBySig on such methods.
22014
22015         Basically, set the defaults to standard values.
22016
22017         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22018         argument, if candidate is better, it can't be worse than the best !
22019
22020         (Invocation): Re-write bits to differentiate between methods being
22021         applicable in their expanded form and their normal form - for params
22022         methods of course.
22023
22024         Get rid of use_standard everywhere as only standard conversions are allowed
22025         in overload resolution. 
22026
22027         More spec conformance.
22028
22029 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22030
22031         * driver.cs: Add --timestamp, to see where the compiler spends
22032         most of its time.
22033
22034         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22035         `this' in static code.
22036
22037         (SimpleName.DoResolve): Implement in terms of a helper function
22038         that allows static-references to be passed upstream to
22039         MemberAccess.
22040
22041         (Expression.ResolveWithSimpleName): Resolve specially simple
22042         names when called by MemberAccess to implement the special
22043         semantics. 
22044
22045         (Expression.ImplicitReferenceConversion): Handle conversions from
22046         Null to reference types before others, as Null's type is
22047         System.Object. 
22048
22049         * expression.cs (Invocation.EmitCall): Handle the special case of
22050         calling methods declared on a reference type from a ValueType
22051         (Base classes System.Object and System.Enum)
22052
22053         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22054         the left hand side is a TypeExpr, not on every enumeration. 
22055
22056         (Binary.Resolve): If types are reference types, then do a cast to
22057         object on operators != and == of both arguments.
22058
22059         * typemanager.cs (FindMembers): Extract instance and static
22060         members if requested.
22061
22062         * interface.cs (PopulateProperty): Use void_type instead of null
22063         as the return type for the setter method.
22064
22065         (PopulateIndexer): ditto.
22066
22067 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22068
22069         * support.cs (ReflectionParameters): Fix minor bug where we
22070         were examining the wrong parameter for the ParamArray attribute.
22071
22072         Cope with requests for the type of the parameter at position
22073         greater than the params parameter's. We now return the element
22074         type of the params array as that makes more sense.
22075
22076         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22077         accordingly as we no longer have to extract the element type
22078         ourselves.
22079
22080         (Invocation.OverloadResolve): Update.
22081
22082 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22083
22084         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22085         against IEnumerator, test whether the return value is a descendant
22086         of the IEnumerator interface.
22087
22088         * class.cs (Indexer.Define): Use an auxiliary method to implement
22089         the other bits of the method definition.  Begin support for
22090         explicit interface implementation.
22091
22092         (Property.DefineMethod): Use TypeManager.void_type instead of null
22093         for an empty return value.
22094
22095 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22096
22097         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22098         dealing with a FieldExpr which is composed of a FieldBuilder, in
22099         the code path we did extract the constant, but we should have
22100         obtained the underlying value to be able to cast it (otherwise we
22101         end up in an infinite loop, this is what Ravi was running into).
22102
22103         (ArrayCreation.UpdateIndices): Arrays might be empty.
22104
22105         (MemberAccess.ResolveMemberAccess): Add support for section
22106         14.5.4.1 that deals with the special case of E.I when E is a type
22107         and something else, that I can be a reference to a static member.
22108
22109         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22110         handle a particular array type to create byte blobs, it is just
22111         something we dont generate byteblobs for.
22112
22113         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22114         arguments. 
22115
22116         * location.cs (Push): remove the key from the hashtable that we
22117         are about to add.   This happens for empty files.
22118
22119         * driver.cs: Dispose files after we have parsed them.
22120
22121         (tokenize): new function that only runs the tokenizer on its
22122         input, for speed testing.
22123
22124 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22125
22126         * class.cs (Event.Define): Define the private field only if there
22127         are no accessors defined.
22128
22129         * expression.cs (ResolveMemberAccess): If there is no associated
22130         field with the event, that means we have an event defined with its
22131         own accessors and we should flag error cs0070 since transforming
22132         ourselves into a field is not valid in that case.
22133
22134         * ecore.cs (SimpleName.DoResolve): Same as above.
22135
22136         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22137         and charset to sane values.
22138
22139 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22140
22141         * assign.cs (DoResolve): Perform check on events only if they 
22142         are being accessed outside the declaring type.
22143
22144         * cs-parser.jay (event_declarations): Update rules to correctly
22145         set the type of the implicit parameter etc.
22146
22147         (add_accessor, remove_accessor): Set current local parameters.
22148
22149         * expression.cs (Binary): For delegate addition and subtraction,
22150         cast the return value from the method into the appropriate delegate
22151         type.
22152
22153 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22154
22155         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22156         of these as the workaround is unnecessary.
22157
22158         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22159         delegate data - none of that is needed at all.
22160
22161         Re-write bits to extract the instance expression and the delegate method
22162         correctly.
22163
22164         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22165         on delegates too.
22166
22167         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22168         of attaching attributes instead of duplicating code everywhere.
22169
22170         * everywhere : Update code to do attribute emission using the above method.
22171
22172 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22173
22174         * expression.cs (IsParamsMethodApplicable): if there are not
22175         parameters, return immediately.
22176
22177         * ecore.cs: The 0 literal can be implicity converted to an enum
22178         type. 
22179
22180         (SimpleName.DoResolve): First lookup the type, then lookup the
22181         members. 
22182
22183         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22184         want to get its address.  If the InstanceExpression is not
22185         addressable, store the result in a temporary variable, then get
22186         the address of it.
22187
22188         * codegen.cs: Only display 219 errors on warning level or above. 
22189
22190         * expression.cs (ArrayAccess): Make it implement the
22191         IMemoryLocation interface.
22192
22193         (Binary.DoResolve): handle the operator == (object a, object b)
22194         and operator != (object a, object b) without incurring into a
22195         BoxedCast (because 5 != o should never be performed).
22196
22197         Handle binary enumerator operators.
22198
22199         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22200         value type, otherwise use Ldelem_ref.
22201
22202         Use precomputed names;
22203
22204         (AddressOf): Implement address of
22205
22206         * cs-parser.jay (labeled_statement): Fix recursive block
22207         addition by reworking the production.
22208
22209         * expression.cs (New.DoEmit): New has a special case:
22210                 
22211                  If we are dealing with a ValueType, we have a few
22212                  situations to deal with:
22213                 
22214                     * The target of New is a ValueType variable, that is
22215                       easy, we just pass this as the variable reference
22216                 
22217                     * The target of New is being passed as an argument,
22218                       to a boxing operation or a function that takes a
22219                       ValueType.
22220                 
22221                       In this case, we need to create a temporary variable
22222                       that is the argument of New.
22223
22224
22225 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22226
22227         * rootcontext.cs (LookupType): Check that current_type is not null before
22228         going about looking at nested types.
22229
22230         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22231         not implement the IAssignMethod interface any more.
22232
22233         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22234         where we tranform them into FieldExprs if they are being resolved from within
22235         the declaring type.
22236
22237         * ecore.cs (SimpleName.DoResolve): Do the same here.
22238
22239         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22240
22241         * ../errors/bug10.cs : Add.
22242
22243         * ../errors/cs0070.cs : Add.
22244
22245         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22246
22247         * assign.cs : Get rid of EventIsLocal everywhere.
22248
22249 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22250
22251         * ecore.cs (ConvertIntLiteral): finished the implementation.
22252
22253         * statement.cs (SwitchLabel): Convert the value we are using as a
22254         key before looking up the table.
22255
22256 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22257
22258         * codegen.cs (EmitTopBlock): Require a Location argument now.
22259
22260         * cs-parser.jay (constructor_declarator): We need to setup
22261         current_local_parameters before we parse the
22262         opt_constructor_initializer, to allow the variables to be bound
22263         to the constructor arguments.
22264
22265         * rootcontext.cs (LookupType): First lookup nested classes in our
22266         class and our parents before we go looking outside our class.
22267
22268         * expression.cs (ConstantFold): Extract/debox the values at the
22269         beginnning. 
22270
22271         * rootcontext.cs (EmitCode): Resolve the constants first before we
22272         resolve the types.  This is not really needed, but it helps debugging.
22273
22274         * statement.cs: report location.
22275
22276         * cs-parser.jay: pass location to throw statement.
22277
22278         * driver.cs: Small bug fix.
22279
22280         * report.cs: Updated format to be 4-zero filled digits.
22281
22282 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22283
22284         * expression.cs (CheckIndices): Fix minor bug where the wrong
22285         variable was being referred to ;-)
22286
22287         (DoEmit): Do not call EmitStaticInitializers when the 
22288         underlying type is System.Object.
22289
22290 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22291
22292         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22293         and do the usual workaround for SRE.
22294
22295         * class.cs (MyEventBuilder.EventType): New member to get at the type
22296         of the event, quickly.
22297
22298         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22299
22300         * assign.cs (Assign.DoResolve): Handle the case when the target
22301         is an EventExpr and perform the necessary checks.
22302
22303         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22304         interface.
22305
22306         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22307
22308         (EventExpr): Set the type in the constructor itself since we 
22309         are meant to be born fully resolved.
22310
22311         (EventExpr.Define): Revert code I wrote earlier.
22312                 
22313         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22314         instance expression is null. The instance expression is a This in that case
22315         or a null, depending on whether it is a static method or not.
22316
22317         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22318         refers to more than one method.
22319
22320         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22321         and accordingly flag errors.
22322
22323 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22324
22325         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22326
22327 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22328
22329         * location.cs (ToString): Provide useful rutine.
22330
22331 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22332
22333         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22334         objects, return the actual integral boxed.
22335
22336         * statement.cs (SwitchLabel): define an ILLabel for each
22337         SwitchLabel. 
22338
22339         (Switch.CheckSwitch): If the value is a Literal, extract
22340         the underlying literal.
22341
22342         Also in the unused hashtable we had, add the SwitchLabel so we can
22343         quickly look this value up.
22344
22345         * constant.cs: Implement a bunch of new constants.  Rewrite
22346         Literal based on this.  Made changes everywhere to adapt to this.
22347
22348         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22349         dereferencing array only once, and also copes with enumrations.
22350
22351         bytes are two bytes wide, not one.
22352
22353         (Cast): Perform constant conversions.
22354
22355         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22356         wrappers to the literals here.
22357
22358         * expression.cs (DoNumericPromotions): long literals can converted
22359         to ulong implicity (this is taken care of elsewhere, but I was
22360         missing this spot).
22361
22362         * ecore.cs (Expression.Literalize): Make the return type Literal,
22363         to improve type checking.
22364
22365         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22366
22367 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22368
22369         * literal.cs: Revert code from ravi that checked the bounds.  The
22370         bounds are sane by the definition of the type itself. 
22371
22372         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22373         need to actually look up in our parent hierarchy for interfaces
22374         implemented. 
22375
22376         * const.cs: Use the underlying type for enumerations
22377
22378         * delegate.cs: Compute the basename for the delegate creation,
22379         that should fix the delegate test case, and restore the correct
22380         Type Lookup semantics in rootcontext
22381
22382         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22383         referencing a nested type with the Reflection API is using the "+"
22384         sign. 
22385
22386         * cs-parser.jay: Do not require EOF token at the end.
22387
22388 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22389
22390         * rootcontext.cs (LookupType): Concatenate type names with
22391         a '.' instead of a '+' The test suite passes again.
22392
22393         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22394         field of the enumeration.
22395
22396         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22397         the case when the member is an EventExpr.
22398
22399         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22400         static has an associated instance expression.
22401
22402         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22403
22404         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22405
22406         * class.cs (Event.Define): Register event and perform appropriate checks
22407         for error #111.
22408
22409         We define the Add and Remove methods even if the use provides none because
22410         in that case, we provide default implementations ourselves.
22411
22412         Define a private field of the type of the event. This is done by the CSC compiler
22413         and we should be doing it too ;-)
22414
22415         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22416         More methods we use in code we generate.
22417
22418         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22419         is important.
22420
22421         (InitCoreTypes): Update accordingly for the above.
22422
22423         * class.cs (Event.Emit): Generate code for default accessors that we provide
22424
22425         (EmitDefaultMethod): Do the job in the above.
22426
22427         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22428         appropriate place.
22429
22430 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22431
22432         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22433         builders even if we were missing one.
22434
22435         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22436         pass the Basename as our class name instead of the Name.  The
22437         basename will be correctly composed for us.
22438
22439         * parameter.cs (Paramters): Now takes a Location argument.
22440
22441         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22442         make all the code call directly LookupType in RootContext and take
22443         this chance to pass the Location information everywhere.
22444
22445         * Everywhere: pass Location information.
22446
22447 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22448
22449         * class.cs (Constructor.Define): Updated way of detecting the
22450         length of the parameters.
22451
22452         (TypeContainer.DefineType): Use basename as the type name for
22453         nested types.
22454
22455         (TypeContainer.Define): Do not recursively define types here, as
22456         definition is taken care in order by the RootContext.
22457
22458         * tree.cs: Keep track of namespaces in a per-file basis.
22459
22460         * parameter.cs (Parameter.ComputeSignature): Update to use
22461         DeclSpace. 
22462
22463         (Parameters.GetSignature): ditto.
22464
22465         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22466         instead of a TypeContainer.
22467
22468         (Interface.SemanticAnalysis): Use `this' instead of our parent to
22469         resolve names.  Because we need to be resolve in our context, not
22470         our parents.
22471
22472         * driver.cs: Implement response files.
22473
22474         * class.cs (TypeContainer.DefineType): If we are defined, do not
22475         redefine ourselves.
22476
22477         (Event.Emit): Emit the code for add/remove handlers.
22478         (Event.Define): Save the MethodBuilders for add/remove.
22479
22480         * typemanager.cs: Use pair here too.
22481
22482         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
22483         DictionaryEntry requires the first argument to be non-null.  
22484
22485         (enum_declaration): Compute full name for registering the
22486         enumeration.
22487
22488         (delegate_declaration): Instead of using
22489         formal_parameter_list, use opt_formal_parameter_list as the list
22490         can be empty.
22491
22492         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
22493         (EventParsing): New property that controls whether `add' and
22494         `remove' are returned as tokens or identifiers (for events);
22495
22496 2001-12-19  Ravi Pratap  <ravi@ximian.com>
22497
22498         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
22499         use MyEventBuilder only and let it wrap the real builder for us.
22500
22501         (MyEventBuilder): Revamp constructor etc.
22502
22503         Implement all operations that we perform on EventBuilder in precisely the same
22504         way here too.
22505
22506         (FindMembers): Update to use the EventBuilder member.
22507
22508         (Event.Emit): Update accordingly.
22509
22510 2001-12-18  Ravi Pratap  <ravi@ximian.com>
22511
22512         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
22513         by calling the appropriate methods.
22514
22515         (GetCustomAttributes): Make stubs as they cannot possibly do anything
22516         useful.
22517
22518         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
22519
22520 2001-12-17  Ravi Pratap  <ravi@ximian.com>
22521
22522         * delegate.cs (Delegate.Populate): Check that the return type
22523         and various parameters types are indeed accessible.
22524
22525         * class.cs (Constructor.Define): Same here.
22526
22527         (Field.Define): Ditto.
22528
22529         (Event.Define): Ditto.
22530
22531         (Operator.Define): Check that the underlying Method defined itself
22532         correctly - so it's MethodBuilder should not be null.
22533
22534         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
22535         expression happens to be null.
22536
22537         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
22538         members but as of now we don't seem to be able to do anything really useful with it.
22539
22540         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
22541         not the EventBuilder.
22542
22543 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
22544
22545         * cs-tokenizer.cs: Add support for defines.
22546         Add support for #if, #elif, #else, #endif
22547
22548         (eval_var): evaluates a variable.
22549         (eval): stubbed for evaluating functions.
22550
22551         * cs-parser.jay: Pass the defines information
22552
22553         * driver.cs: Add --define command line option.
22554
22555         * decl.cs: Move MemberCore here.
22556
22557         Make it the base class for DeclSpace.  This allows us to catch and
22558         report 108 and 109 for everything now.
22559
22560         * class.cs (TypeContainer.Define): Extract all the members
22561         before populating and emit the warning 108 (new keyword required
22562         to override) instead of having each member implement this.
22563
22564         (MemberCore.Define): New abstract method, we will be using this in
22565         the warning reporting engine in Populate.
22566
22567         (Operator.Define): Adjust to new MemberCore protocol. 
22568
22569         * const.cs (Const): This does not derive from Expression, it is a
22570         temporary object we use to create fields, it is a MemberCore. 
22571
22572         * class.cs (Method.Define): Allow the entry point to be in a
22573         specific class.
22574
22575         * driver.cs: Rewrite the argument handler to clean it up a bit.
22576
22577         * rootcontext.cs: Made it just an auxiliary namespace feature by
22578         making everything static.
22579
22580         * driver.cs: Adapt code to use RootContext type name instead of
22581         instance variable.
22582
22583         * delegate.cs: Remove RootContext argument.
22584
22585         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
22586         argument. 
22587
22588         * class.cs (Event.Define): The lookup can fail.
22589
22590         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
22591
22592         * expression.cs: Resolve the this instance before invoking the code.
22593
22594 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
22595
22596         * cs-parser.jay: Add a production in element_access that allows
22597         the thing to become a "type" reference.  This way we can parse
22598         things like "(string [])" as a type.
22599
22600         Note that this still does not handle the more complex rules of
22601         casts. 
22602
22603
22604         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
22605
22606         * ecore.cs: (CopyNewMethods): new utility function used to
22607         assemble the list of methods from running FindMembers.
22608
22609         (MemberLookup): Rework FindMembers so that 
22610
22611 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
22612
22613         * class.cs (TypeContainer): Remove Delegates who fail to be
22614         defined.
22615
22616         * delegate.cs (Populate): Verify that we dont get null return
22617         values.   TODO: Check for AsAccessible.
22618
22619         * cs-parser.jay: Use basename to emit error 574 (destructor should
22620         have the same name as container class), not the full name.
22621
22622         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
22623         possible representation.  
22624
22625         Also implements integer type suffixes U and L.
22626
22627 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
22628
22629         * expression.cs (ArrayCreation.DoResolve): We need to do the
22630         argument resolution *always*.
22631
22632         * decl.cs: Make this hold the namespace.  Hold the root context as
22633         well.
22634         (LookupType): Move here.
22635
22636         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
22637
22638         * location.cs (Row, Name): Fixed the code, it was always returning
22639         references to the first file.
22640
22641         * interface.cs: Register properties defined through interfaces.
22642
22643         * driver.cs: Add support for globbing on the command line
22644
22645         * class.cs (Field): Make it derive from MemberCore as well.
22646         (Event): ditto.
22647
22648 2001-12-15  Ravi Pratap  <ravi@ximian.com>
22649
22650         * class.cs (Event::Define): Check that the type of the event is a delegate
22651         type else flag error #66.
22652
22653         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
22654         same.
22655
22656         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
22657         values of EntryPoint, CharSet etc etc.
22658
22659         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
22660
22661         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
22662         be null and we should ignore this. I am not sure if this is really clean. Apparently,
22663         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
22664         which needs this to do its work.
22665
22666         * ../errors/cs0066.cs : Add.
22667
22668 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
22669
22670         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
22671         helper functions.
22672
22673         * class.cs: (MethodSignature.MethodSignature): Removed hack that
22674         clears out the parameters field.
22675         (MemberSignatureCompare): Cleanup
22676
22677         (MemberCore): New base class used to share code between MethodCore
22678         and Property.
22679
22680         (RegisterRequiredImplementations) BindingFlags.Public requires
22681         either BindingFlags.Instace or Static.  Use instance here.
22682
22683         (Property): Refactored code to cope better with the full spec.
22684
22685         * parameter.cs (GetParameterInfo): Return an empty array instead
22686         of null on error.
22687
22688         * class.cs (Property): Abstract or extern properties have no bodies.
22689
22690         * parameter.cs (GetParameterInfo): return a zero-sized array.
22691
22692         * class.cs (TypeContainer.MethodModifiersValid): Move all the
22693         method modifier validation to the typecontainer so we can reuse
22694         this on properties.
22695
22696         (MethodCore.ParameterTypes): return an empty sized array of types.
22697
22698         (Property.Define): Test property modifier validity.
22699
22700         Add tests for sealed/override too.
22701
22702         (Method.Emit): abstract or extern methods have no bodies.
22703
22704 2001-12-14  Ravi Pratap  <ravi@ximian.com>
22705
22706         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
22707         thing.
22708
22709         (Method::Define, ::Emit): Modify accordingly.
22710
22711         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
22712
22713         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
22714
22715         * makefile: Pass in /unsafe.
22716
22717 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
22718
22719         * class.cs (MakeKey): Kill routine.
22720
22721         * class.cs (TypeContainer.Define): Correctly define explicit
22722         method implementations (they require the full interface name plus
22723         the method name).
22724
22725         * typemanager.cs: Deply the PtrHashtable here and stop using the
22726         lame keys.  Things work so much better.
22727
22728         This of course broke everyone who depended on `RegisterMethod' to
22729         do the `test for existance' test.  This has to be done elsewhere.
22730
22731         * support.cs (PtrHashtable): A hashtable that avoid comparing with
22732         the object stupid Equals method (because, that like fails all over
22733         the place).  We still do not use it.
22734
22735         * class.cs (TypeContainer.SetRequiredInterface,
22736         TypeContainer.RequireMethods): Killed these two routines and moved
22737         all the functionality to RegisterRequiredImplementations.
22738
22739         (TypeContainer.RegisterRequiredImplementations): This routine now
22740         registers all the implementations required in an array for the
22741         interfaces and abstract methods.  We use an array of structures
22742         which can be computed ahead of time to reduce memory usage and we
22743         also assume that lookups are cheap as most classes will not
22744         implement too many interfaces.
22745
22746         We also avoid creating too many MethodSignatures.
22747
22748         (TypeContainer.IsInterfaceMethod): Update and optionally does not
22749         clear the "pending" bit if we find that there are problems with
22750         the declaration.
22751
22752         (TypeContainer.VerifyPendingMethods): Update to report errors of
22753         methods that look like implementations but are not.
22754
22755         (TypeContainer.Define): Add support for explicit interface method
22756         implementation. 
22757
22758 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
22759
22760         * typemanager.cs: Keep track of the parameters here instead of
22761         being a feature of the TypeContainer.
22762
22763         * class.cs: Drop the registration of parameters here, as
22764         InterfaceMethods are also interface declarations.
22765
22766         * delegate.cs: Register methods with the TypeManager not only with
22767         the TypeContainer.  This code was buggy.
22768
22769         * interface.cs: Full registation here.
22770
22771 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
22772
22773         * expression.cs: Remove reducer for binary expressions, it can not
22774         be done this way.
22775
22776         * const.cs: Put here the code that used to go into constant.cs
22777
22778         * constant.cs: Put here the code for constants, this is a new base
22779         class for Literals.
22780
22781         * literal.cs: Make Literal derive from Constant.
22782
22783 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
22784
22785         * statement.cs (Return.Emit): Report error 157 if the user
22786         attempts to return from a finally block.
22787
22788         (Return.Emit): Instead of emitting a return, jump to the end of
22789         the function.
22790
22791         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
22792         LocalBuilder to store the result of the function.  ReturnLabel is
22793         the target where we jump.
22794
22795
22796 2001-12-09  Radek Doulik  <rodo@ximian.com>
22797
22798         * cs-parser.jay: remember alias in current namespace
22799
22800         * ecore.cs (SimpleName::DoResolve): use aliases for types or
22801         namespaces
22802
22803         * class.cs (LookupAlias): lookup alias in my_namespace
22804
22805         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
22806         aliases hashtable
22807         (LookupAlias): lookup alias in this and if needed in parent
22808         namespaces
22809
22810 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
22811
22812         * support.cs: 
22813
22814         * rootcontext.cs: (ModuleBuilder) Made static, first step into
22815         making things static.  I need this to avoid passing the
22816         TypeContainer when calling ParameterType.
22817
22818         * support.cs (InternalParameters.ParameterType): Remove ugly hack
22819         that did string manipulation to compute the type and then call
22820         GetType.  Use Parameter.ParameterType instead.
22821
22822         * cs-tokenizer.cs: Consume the suffix for floating values.
22823
22824         * expression.cs (ParameterReference): figure out whether this is a
22825         reference parameter or not.  Kill an extra variable by computing
22826         the arg_idx during emission.
22827
22828         * parameter.cs (Parameters.GetParameterInfo): New overloaded
22829         function that returns whether a parameter is an out/ref value or not.
22830
22831         (Parameter.ParameterType): The type of the parameter (base,
22832         without ref/out applied).
22833
22834         (Parameter.Resolve): Perform resolution here.
22835         (Parameter.ExternalType): The full type (with ref/out applied).
22836
22837         * statement.cs (Using.Emit, Using.EmitExpression): Implement
22838         support for expressions on the using statement.
22839
22840 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
22841
22842         * statement.cs (Using.EmitLocalVariableDecls): Split the
22843         localvariable handling of the using statement.
22844
22845         (Block.EmitMeta): Keep track of variable count across blocks.  We
22846         were reusing slots on separate branches of blocks.
22847
22848         (Try.Emit): Emit the general code block, we were not emitting it. 
22849
22850         Check the type of the declaration to be an IDisposable or
22851         something that can be implicity converted to it. 
22852
22853         Emit conversions if required.
22854
22855         * ecore.cs (EmptyExpression): New utility class.
22856         (Expression.ImplicitConversionExists): New utility function.
22857
22858 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
22859
22860         * statement.cs (Using): Implement.
22861
22862         * expression.cs (LocalVariableReference): Support read only variables.
22863
22864         * statement.cs: Remove the explicit emit for the Leave opcode.
22865         (VariableInfo): Add a readonly field.
22866
22867 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
22868
22869         * ecore.cs (ConvCast): new class used to encapsulate the various
22870         explicit integer conversions that works in both checked and
22871         unchecked contexts.
22872
22873         (Expression.ConvertNumericExplicit): Use new ConvCast class to
22874         properly generate the overflow opcodes.
22875
22876 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
22877
22878         * statement.cs: The correct type for the EmptyExpression is the
22879         element_type, not the variable type.  Ravi pointed this out.
22880
22881 2001-12-04  Ravi Pratap  <ravi@ximian.com>
22882
22883         * class.cs (Method::Define): Handle PInvoke methods specially
22884         by using DefinePInvokeMethod instead of the usual one.
22885
22886         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
22887         above to do the task of extracting information and defining the method.
22888
22889 2001-12-04  Ravi Pratap  <ravi@ximian.com>
22890
22891         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
22892         of the condition for string type.
22893
22894         (Emit): Move that here. 
22895
22896         (ArrayCreation::CheckIndices): Keep string literals in their expression
22897         form.
22898
22899         (EmitDynamicInitializers): Handle strings appropriately.
22900
22901 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
22902
22903         * codegen.cs (EmitContext): Replace multiple variables with a
22904         single pointer to the current Switch statement.
22905
22906         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
22907         EmitContext.
22908
22909 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
22910
22911         * statement.cs 
22912
22913         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
22914         default'.
22915
22916         (Foreach.Emit): Foreach on arrays was not setting
22917         up the loop variables (for break/continue).
22918
22919         (GotoCase): Semi-implented.
22920
22921 2001-12-03  Ravi Pratap  <ravi@ximian.com>
22922
22923         * attribute.cs (CheckAttribute): Handle system attributes by using
22924         Attribute.GetAttributes to examine information we need.
22925
22926         (GetValidPlaces): Same here.
22927
22928         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
22929
22930         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
22931
22932         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
22933
22934         (Method::Define): Set appropriate flags if we have a DllImport attribute.
22935
22936         (Method::Emit): Handle the case when we are a PInvoke method.
22937
22938 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
22939
22940         * expression.cs: Use ResolveWithSimpleName on compound names.
22941
22942 2001-12-02  Ravi Pratap  <ravi@ximian.com>
22943
22944         * constant.cs (EmitConstant): Make sure we resolve the associated expression
22945         before trying to reduce it.
22946
22947         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
22948
22949         * constant.cs (LookupConstantValue): Implement.
22950
22951         (EmitConstant): Use the above in emitting the constant.
22952
22953         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
22954         that are user-defined by doing a LookupConstantValue on them.
22955
22956         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
22957         too, like above.
22958
22959 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
22960
22961         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
22962
22963         (BaseAccess.DoResolve): Implement.
22964
22965         (MemberAccess.DoResolve): Split this routine into a
22966         ResolveMemberAccess routine that can be used independently
22967
22968 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
22969
22970         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
22971         As that share bits of the implementation.  Is returns a boolean,
22972         while As returns the Type that is being probed.
22973
22974 2001-12-01  Ravi Pratap  <ravi@ximian.com>
22975
22976         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
22977         instead of a Literal - much easier.
22978
22979         (EnumInTransit): Remove - utterly useless :-)
22980
22981         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
22982
22983         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
22984
22985         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
22986         chain when we have no associated expression.
22987
22988 2001-11-30  Ravi Pratap  <ravi@ximian.com>
22989
22990         * constant.cs (Define): Use Location while reporting the errror.
22991
22992         Also emit a warning when 'new' is used and there is no inherited
22993         member to hide.
22994
22995         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
22996         populated.
22997
22998         (LookupEnumValue): Implement to lookup an enum member's value and define it
22999         if necessary.
23000
23001         (Populate): Re-write accordingly to use the above routine.
23002
23003 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23004
23005         * expression.cs (This): Fix prototype for DoResolveLValue to
23006         override the base class DoResolveLValue.
23007
23008         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23009         declarations) 
23010
23011         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23012         (we need to load the address of the field here).  This fixes
23013         test-22. 
23014
23015         (FieldExpr.DoResolveLValue): Call the DoResolve
23016         function to initialize the Instance expression.
23017
23018         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23019         correctly the GetEnumerator operation on a value type.
23020
23021         * cs-parser.jay: Add more simple parsing error catches.
23022
23023         * statement.cs (Switch): Add support for string switches.
23024         Handle null specially.
23025
23026         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23027
23028 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23029
23030         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23031
23032         (declare_local_constant): New helper function.
23033
23034         * statement.cs (AddConstant): Keep a separate record of constants
23035
23036         (IsConstant): Implement to determine if a variable is a constant.
23037
23038         (GetConstantExpression): Implement.
23039
23040         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23041
23042         * statement.cs (IsVariableDefined): Re-write.
23043
23044 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23045
23046         * class.cs (TypeContainer::FindMembers): Look for constants
23047         in the case when we are looking for MemberTypes.Field
23048
23049         * expression.cs (MemberAccess::DoResolve): Check that in the
23050         case we are a FieldExpr and a Literal, we are not being accessed
23051         by an instance reference.
23052
23053         * cs-parser.jay (local_constant_declaration): Implement.
23054
23055         (declaration_statement): Implement for constant declarations.
23056
23057 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23058
23059         * statement.cs (Switch): Catch double defaults.
23060
23061         (Switch): More work on the switch() statement
23062         implementation.  It works for integral values now, need to finish
23063         string support.
23064
23065
23066 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23067
23068         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23069         integer literals into other integer literals.  To be used by
23070         switch. 
23071
23072 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23073
23074         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23075         some memory.
23076
23077         (EmitDynamicInitializers): Cope with the above since we extract data
23078         directly from ArrayData now.
23079
23080         (ExpectInitializers): Keep track of whether initializers are mandatory
23081         or not.
23082
23083         (Bounds): Make it a hashtable to prevent the same dimension being 
23084         recorded for every element in that dimension.
23085
23086         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23087         from being found.
23088
23089         Also fix bug which was causing the indices to be emitted in the reverse
23090         order.
23091
23092 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23093
23094         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23095         unfinished.  They do not work, because the underlying code is
23096         sloppy.
23097
23098 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23099
23100         * cs-parser.jay: Remove bogus fixme.
23101
23102         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23103         on Switch statement.
23104
23105 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23106
23107         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23108         the same. 
23109
23110         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23111         parameter. Apparently, any expression is allowed. 
23112
23113         (ValidateInitializers): Update accordingly.
23114
23115         (CheckIndices): Fix some tricky bugs thanks to recursion.
23116
23117         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23118         I was being completely brain-dead.
23119
23120         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23121         and re-write acordingly.
23122
23123         (DelegateInvocation): Re-write accordingly.
23124
23125         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23126
23127         (MakeByteBlob): Handle types more correctly.
23128
23129         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23130         initialization from expressions but it is incomplete because I am a complete
23131         Dodo :-|
23132
23133 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23134
23135         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23136         on If.  Basically, we have to return `true' (ie, we do return to
23137         our caller) only if both branches of the if return.
23138
23139         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23140         short-circuit operators, handle them as short circuit operators. 
23141
23142         (Cast.DoResolve): Resolve type.
23143         (Cast.Cast): Take an expression as the target type.
23144
23145         * cs-parser.jay (cast_expression): Remove old hack that only
23146         allowed a limited set of types to be handled.  Now we take a
23147         unary_expression and we resolve to a type during semantic
23148         analysis.
23149
23150         Use the grammar productions from Rhys to handle casts (this is
23151         not complete like Rhys syntax yet, we fail to handle that corner
23152         case that C# has regarding (-x), but we will get there.
23153
23154 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23155
23156         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23157         field which is an array type.
23158
23159         * cs-parser.jay (declare_local_variables): Support array initialization too.
23160
23161         * typemanager.cs (MakeKey): Implement.
23162
23163         (everywhere): Use the above appropriately.
23164
23165         * cs-parser.jay (for_statement): Update for array initialization while
23166         declaring variables.
23167
23168         * ecore.cs : The error message was correct, it's the variable's names that
23169         were misleading ;-) Make the code more readable.
23170
23171         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23172         the correct type etc.
23173
23174         (ConvertExplicit): Handle Enum types by examining the underlying type.
23175
23176 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23177
23178         * parameter.cs (GetCallingConvention): Always return
23179         CallingConventions.Standard for now.
23180
23181 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23182
23183         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23184         and `r' after calling DoNumericPromotions.
23185
23186         * ecore.cs: Fix error message (the types were in the wrong order).
23187
23188         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23189         BindingFlags.Instance as well 
23190
23191         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23192         implicit int literal conversion in an empty cast so that we
23193         propagate the right type upstream.
23194
23195         (UnboxCast): new class used to unbox value types.
23196         (Expression.ConvertExplicit): Add explicit type conversions done
23197         by unboxing.
23198
23199         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23200         the target type before applying the implicit LongLiterals to ULong
23201         literal cast.
23202
23203 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23204
23205         * cs-parser.jay (for_statement): Reworked the way For works: now
23206         we declare manually any variables that are introduced in
23207         for_initializer to solve the problem of having out-of-band code
23208         emition (that is what got for broken).
23209
23210         (declaration_statement): Perform the actual variable declaration
23211         that used to be done in local_variable_declaration here.
23212
23213         (local_variable_declaration): Do not declare anything, just pass
23214         the information on a DictionaryEntry
23215
23216 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23217
23218         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23219         re-write of the logic to now make it recursive.
23220
23221         (UpdateIndices): Re-write accordingly.
23222
23223         Store element data in a separate ArrayData list in the above methods.
23224
23225         (MakeByteBlob): Implement to dump the array data into a byte array.
23226
23227 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23228
23229         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23230         into CheckIndices.
23231
23232         * constant.cs (Define): Implement.
23233
23234         (EmitConstant): Re-write fully.
23235
23236         Pass in location info.
23237
23238         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23239         respectively.
23240
23241         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23242         DictionaryEntry since we need location info too.
23243
23244         (constant_declaration): Update accordingly.
23245
23246         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23247         code into another method : UpdateIndices.
23248
23249 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23250
23251         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23252         some type checking etc.
23253
23254 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23255
23256         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23257         bits to provide dimension info if the user skips doing that.
23258
23259         Update second constructor to store the rank correctly.
23260
23261 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23262
23263         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23264         and try to implement.
23265
23266         * ../errors/cs0150.cs : Add.
23267
23268         * ../errors/cs0178.cs : Add.
23269
23270 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23271
23272         * statement.cs: Implement foreach on multi-dimensional arrays. 
23273
23274         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23275         name of the params argument.
23276
23277         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23278         initializing the array.
23279
23280         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23281         we can use this elsewhere.
23282
23283         * statement.cs: Finish implementation of foreach for single
23284         dimension arrays.
23285
23286         * cs-parser.jay: Use an out-of-band stack to pass information
23287         around, I wonder why I need this.
23288
23289         foreach_block: Make the new foreach_block the current_block.
23290
23291         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23292         function used to return a static Parameters structure.  Used for
23293         empty parameters, as those are created very frequently.
23294
23295         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23296
23297 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23298
23299         * interface.cs : Default modifier is private, not public. The
23300         make verify test passes again.
23301
23302 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23303
23304         * support.cs (ReflectionParameters): Fix logic to determine
23305         whether the last parameter is a params one. Test 9 passes again.
23306
23307         * delegate.cs (Populate): Register the builders we define with
23308         RegisterParameterForBuilder. Test 19 passes again.
23309
23310         * cs-parser.jay (property_declaration): Reference $6 instead
23311         of $$ to get at the location.
23312
23313         (indexer_declaration): Similar stuff.
23314
23315         (attribute): Ditto.
23316
23317         * class.cs (Property): Register parameters for the Get and Set methods
23318         if they exist. Test 23 passes again.
23319
23320         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23321         call to EmitArguments as we are sure there aren't any params arguments. 
23322         Test 32 passes again.
23323
23324         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23325         IndexOutOfRangeException. 
23326
23327         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23328         Test 33 now passes again.
23329
23330 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23331
23332         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23333         broke a bunch of things.  Will have to come up with a better way
23334         of tracking locations.
23335
23336         * statement.cs: Implemented foreach for single dimension arrays.
23337
23338 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23339
23340         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23341         an error.  This removes the lookup from the critical path.
23342
23343         * cs-parser.jay: Removed use of temporary_loc, which is completely
23344         broken. 
23345
23346 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23347
23348         * support.cs (ReflectionParameters.ParameterModifier): Report
23349         whether the argument is a PARAMS argument or not.
23350
23351         * class.cs: Set the attribute `ParamArrayAttribute' on the
23352         parameter argument.
23353
23354         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23355         and cons_param_array_attribute (ConstructorInfo for
23356         ParamArrayAttribute)., 
23357
23358         * codegen.cs: Emit the return using the `Return' statement, that
23359         way we can report the error correctly for missing return values. 
23360
23361         * class.cs (Method.Emit): Clean up.
23362
23363         * expression.cs (Argument.Resolve): Take another argument: the
23364         location where this argument is used.  Notice that this is not
23365         part of the "Argument" class as to reduce the size of the
23366         structure (we know the approximate location anyways).
23367
23368         Test if the argument is a variable-reference, if not, then
23369         complain with a 206.
23370
23371         (Argument.Emit): Emit addresses of variables.
23372
23373         (Argument.FullDesc): Simplify.
23374
23375         (Invocation.DoResolve): Update for Argument.Resolve.
23376
23377         (ElementAccess.DoResolve): ditto.
23378
23379         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23380         method should be virtual, as this method is always virtual.
23381
23382         (NewDelegate.DoResolve): Update for Argument.Resolve.
23383
23384         * class.cs (ConstructorInitializer.DoResolve): ditto.
23385
23386         * attribute.cs (Attribute.Resolve): ditto.
23387
23388 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23389
23390         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23391
23392         * expression.cs (ParameterReference): Drop IStackStorage and implement
23393         IAssignMethod instead. 
23394
23395         (LocalVariableReference): ditto.
23396
23397         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23398         IAssignMethod instead. 
23399
23400 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23401
23402         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23403         enumerations that are used in heavily used structures derive from
23404         byte in a laughable and pathetic attempt to reduce memory usage.
23405         This is the kind of pre-optimzations that you should not do at
23406         home without adult supervision.
23407
23408         * expression.cs (UnaryMutator): New class, used to handle ++ and
23409         -- separatedly from the other unary operators.  Cleans up the
23410         code, and kills the ExpressionStatement dependency in Unary.
23411
23412         (Unary): Removed `method' and `Arguments' from this class, making
23413         it smaller, and moving it all to SimpleCall, so I can reuse this
23414         code in other locations and avoid creating a lot of transient data
23415         strucutres when not required.
23416
23417         * cs-parser.jay: Adjust for new changes.
23418
23419 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23420
23421         * enum.cs (Enum.Populate): If there is a failure during
23422         definition, return
23423
23424         * cs-parser.jay (opt_enum_base): we used to catch type errors
23425         here, but this is really incorrect.  The type error should be
23426         catched during semantic analysis.
23427
23428 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23429
23430         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23431         current_local_parameters as expected since I, in my stupidity, had forgotten
23432         to do this :-)
23433
23434         * attribute.cs (GetValidPlaces): Fix stupid bug.
23435
23436         * class.cs (Method::Emit): Perform check on applicability of attributes.
23437
23438         (Constructor::Emit): Ditto.
23439
23440         (Field::Emit): Ditto.
23441
23442         (Field.Location): Store location information.
23443
23444         (Property, Event, Indexer, Operator): Ditto.
23445
23446         * cs-parser.jay (field_declaration): Pass in location for each field.
23447
23448         * ../errors/cs0592.cs : Add.
23449
23450 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23451
23452         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23453
23454         (InitCoreTypes): Update accordingly.
23455
23456         (RegisterAttrType, LookupAttr): Implement.
23457
23458         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23459         info about the same.
23460
23461         (Resolve): Update to populate the above as necessary.
23462
23463         (Error592): Helper.
23464
23465         (GetValidPlaces): Helper to the above.
23466
23467         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
23468
23469         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
23470
23471 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23472
23473         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
23474
23475         * ../errors/cs0617.cs : Add.
23476
23477 2001-11-11  Ravi Pratap  <ravi@ximian.com>
23478
23479         * enum.cs (Emit): Rename to Populate to be more consistent with what
23480         we expect it to do and when exactly it is called.
23481
23482         * class.cs, rootcontext.cs : Update accordingly.
23483
23484         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
23485         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
23486
23487         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
23488
23489         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
23490         of a fieldinfo using the above, when dealing with a FieldBuilder.
23491
23492 2001-11-10  Ravi Pratap  <ravi@ximian.com>
23493
23494         * ../errors/cs0031.cs : Add.
23495
23496         * ../errors/cs1008.cs : Add.
23497
23498         * ../errrors/cs0543.cs : Add.
23499
23500         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
23501         enum type.
23502
23503         (FindMembers): Implement.
23504
23505         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
23506         enums and delegates too.
23507
23508         (enum_types): Rename to builder_to_enum.
23509
23510         (delegate_types): Rename to builder_to_delegate.
23511
23512         * delegate.cs (FindMembers): Implement.
23513
23514 2001-11-09  Ravi Pratap  <ravi@ximian.com>
23515
23516         * typemanager.cs (IsEnumType): Implement.
23517
23518         * enum.cs (Emit): Re-write parts to account for the underlying type
23519         better and perform checking etc.
23520
23521         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
23522         of the underlying type.
23523
23524         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
23525         value
23526
23527         * enum.cs (error31): Helper to report error #31.
23528
23529         * cs-parser.jay (enum_declaration): Store location of each member too.
23530
23531         * enum.cs (member_to_location): New hashtable. 
23532
23533         (AddEnumMember): Update location hashtable.
23534
23535         (Emit): Use the location of each member while reporting errors.
23536
23537 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23538
23539         * cs-parser.jay: A for_initializer if is a
23540         local_variable_declaration really ammount to have an implicit
23541         block with the variable declaration and no initializer for for.
23542
23543         * statement.cs (For.Emit): Cope with null initializers.
23544
23545         This fixes the infinite loop on for initializers.
23546
23547 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
23548
23549         * enum.cs: More cleanup.
23550
23551         * ecore.cs: Remove dead code.
23552
23553         * class.cs (Property.Emit): More simplification.
23554         (Event.Emit): ditto.
23555
23556         Reworked to have less levels of indentation.
23557
23558 2001-11-08  Ravi Pratap  <ravi@ximian.com>
23559
23560         * class.cs (Property): Emit attributes.
23561
23562         (Field): Ditto.
23563
23564         (Event): Ditto.
23565
23566         (Indexer): Ditto.
23567
23568         (Operator): Ditto.
23569
23570         * enum.cs (Emit): Ditto.
23571
23572         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
23573         Enums too.
23574
23575         * class.cs (Field, Event, etc.): Move attribute generation into the
23576         Emit method everywhere.
23577
23578         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
23579         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
23580         as we had no way of defining nested enums !
23581
23582         * rootcontext.cs : Adjust code accordingly.
23583
23584         * typemanager.cs (AddEnumType): To keep track of enum types separately.
23585
23586 2001-11-07  Ravi Pratap  <ravi@ximian.com>
23587
23588         * expression.cs (EvalConstantExpression): Move into ecore.cs
23589
23590         * enum.cs (Enum): Rename some members and make them public and readonly
23591         according to our convention.
23592
23593         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
23594         nothing else.
23595
23596         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
23597
23598         (Enum::Emit): Write a simple version for now which doesn't try to compute
23599         expressions. I shall modify this to be more robust in just a while.
23600
23601         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
23602
23603         (TypeContainer::CloseType): Create the Enum types too.
23604
23605         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
23606
23607         * expression.cs (EvalConstantExpression): Get rid of completely.
23608
23609         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
23610         user-defined values and other cases.
23611
23612         (IsValidEnumLiteral): Helper function.
23613
23614         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
23615         out there in the case we had a literal FieldExpr.
23616
23617         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
23618
23619         (Literalize): Revamp a bit to take two arguments.
23620
23621         (EnumLiteral): New class which derives from Literal to wrap enum literals.
23622
23623 2001-11-06  Ravi Pratap  <ravi@ximian.com>
23624
23625         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
23626
23627         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
23628
23629         (Resolve): Use the above to ensure we have proper initializers.
23630
23631 2001-11-05  Ravi Pratap  <ravi@ximian.com>
23632
23633         * expression.cs (Expression::EvalConstantExpression): New method to 
23634         evaluate constant expressions.
23635
23636         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
23637
23638 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
23639
23640         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
23641         in an array.
23642
23643         (Binary.ResolveOperator): Handle operator != (object a, object b)
23644         and operator == (object a, object b);
23645
23646         (Binary.DoNumericPromotions): Indicate whether the numeric
23647         promotion was possible.
23648
23649         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
23650         Implement.  
23651
23652         Made the ArrayAccess implement interface IAssignMethod instead of
23653         IStackStore as the order in which arguments are passed reflects
23654         this.
23655
23656         * assign.cs: Instead of using expr.ExprClass to select the way of
23657         assinging, probe for the IStackStore/IAssignMethod interfaces.
23658
23659         * typemanager.cs: Load InitializeArray definition.
23660
23661         * rootcontext.cs (RootContext.MakeStaticData): Used to define
23662         static data that can be used to initialize arrays. 
23663
23664 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
23665
23666         * expression.cs: Handle operator== and operator!= for booleans.
23667
23668         (Conditioal.Reduce): Implement reducer for the ?: operator.
23669
23670         (Conditional.Resolve): Implement dead code elimination.
23671
23672         (Binary.Resolve): Catch string literals and return a new
23673         concatenated string.
23674
23675         (Unary.Reduce): Implement reduction of unary expressions.
23676
23677         * ecore.cs: Split out the expression core handling here.
23678
23679         (Expression.Reduce): New method used to perform constant folding
23680         and CSE.  This is needed to support constant-expressions. 
23681
23682         * statement.cs (Statement.EmitBoolExpression): Pass true and false
23683         targets, and optimize for !x.
23684
23685 2001-11-04  Ravi Pratap  <ravi@ximian.com>
23686
23687         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
23688         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
23689         set custom atttributes.
23690
23691         * literal.cs (Literal::GetValue): New abstract method to return the actual
23692         value of the literal, cast as an object.
23693
23694         (*Literal): Implement GetValue method.
23695
23696         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
23697         expressions to the arraylist but objects of type Argument.
23698
23699         * class.cs (TypeContainer::Emit): Emit our attributes too.
23700
23701         (Method::Emit, Constructor::Emit): Ditto.
23702
23703         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
23704         to be ignoring earlier.
23705
23706 2001-11-03  Ravi Pratap  <ravi@ximian.com>
23707
23708         * attribute.cs (AttributeSection::Define): Implement to do the business
23709         of constructing a CustomAttributeBuilder.
23710
23711         (Attribute): New trivial class. Increases readability of code.  
23712
23713         * cs-parser.jay : Update accordingly.
23714
23715         (positional_argument_list, named_argument_list, named_argument): New rules
23716
23717         (attribute_arguments): Use the above so that we are more correct.
23718
23719 2001-11-02  Ravi Pratap  <ravi@ximian.com>
23720
23721         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
23722         to perform all checks for a method with a params parameter.
23723
23724         (Invocation::OverloadResolve): Update to use the above method and therefore
23725         cope correctly with params method invocations.
23726
23727         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
23728         params too.
23729
23730         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
23731         constructors in our parent too because we can't afford to miss out on 
23732         protected ones ;-)
23733
23734         * attribute.cs (AttributeSection): New name for the class Attribute
23735
23736         Other trivial changes to improve readability.
23737
23738         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
23739         use the new class names.
23740
23741 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23742
23743         * class.cs (Method::Define): Complete definition for params types too
23744
23745         (Indexer::Define): Ditto.
23746
23747         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
23748         Cope everywhere with a request for info about the array parameter.
23749
23750 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23751
23752         * tree.cs (RecordNamespace): Fix up to check for the correct key.
23753
23754         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
23755         local_variable_type to extract the string corresponding to the type.
23756
23757         (local_variable_type): Fixup the action to use the new helper method.
23758
23759         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
23760         go.
23761
23762         * expression.cs : Clean out code which uses the above.
23763
23764 2001-10-31  Ravi Pratap  <ravi@ximian.com>
23765
23766         * typemanager.cs (RegisterMethod): Check if we already have an existing key
23767         and bale out if necessary by returning a false.
23768
23769         (RegisterProperty): Ditto.
23770
23771         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
23772         and print out appropriate error messages.
23773
23774         * interface.cs (everywhere): Ditto.
23775
23776         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
23777         location to constructor.
23778
23779         * class.cs (Property, Event, Indexer): Update accordingly.
23780
23781         * ../errors/cs111.cs : Added.
23782
23783         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
23784         of a method, as laid down by the spec.
23785
23786         (Invocation::OverloadResolve): Use the above method.
23787
23788 2001-10-31  Ravi Pratap  <ravi@ximian.com>
23789
23790         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
23791         now take a TypeContainer and a Parameters object.
23792
23793         (ParameterData): Modify return type of ParameterModifier method to be 
23794         Parameter.Modifier and not a string.
23795
23796         (ReflectionParameters, InternalParameters): Update accordingly.
23797
23798         * expression.cs (Argument::GetParameterModifier): Same here.
23799
23800         * support.cs (InternalParameters::ParameterType): Find a better way of determining
23801         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
23802         symbol in it at all so maybe this is only for now.
23803
23804 2001-10-30  Ravi Pratap  <ravi@ximian.com>
23805
23806         * support.cs (InternalParameters): Constructor now takes an extra argument 
23807         which is the actual Parameters class.
23808
23809         (ParameterDesc): Update to provide info on ref/out modifiers.
23810
23811         * class.cs (everywhere): Update call to InternalParameters to pass in
23812         the second argument too.
23813
23814         * support.cs (ParameterData): Add ParameterModifier, which is a method 
23815         to return the modifier info [ref/out etc]
23816
23817         (InternalParameters, ReflectionParameters): Implement the above.
23818
23819         * expression.cs (Argument::ParameterModifier): Similar function to return
23820         info about the argument's modifiers.
23821
23822         (Invocation::OverloadResolve): Update to take into account matching modifiers 
23823         too.
23824
23825         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
23826         a new SetFormalParameters object which we pass to InternalParameters.
23827
23828 2001-10-30  Ravi Pratap  <ravi@ximian.com>
23829
23830         * expression.cs (NewArray): Merge into the ArrayCreation class.
23831
23832 2001-10-29  Ravi Pratap  <ravi@ximian.com>
23833
23834         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
23835         NewUserdefinedArray into one as there wasn't much of a use in having
23836         two separate ones.
23837
23838         * expression.cs (Argument): Change field's name to ArgType from Type.
23839
23840         (Type): New readonly property which returns the proper type, taking into 
23841         account ref/out modifiers.
23842
23843         (everywhere): Adjust code accordingly for the above.
23844
23845         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
23846         whether we are emitting for a ref or out parameter.
23847
23848         * expression.cs (Argument::Emit): Use the above field to set the state.
23849
23850         (LocalVariableReference::Emit): Update to honour the flag and emit the
23851         right stuff.
23852
23853         * parameter.cs (Attributes): Set the correct flags for ref parameters.
23854
23855         * expression.cs (Argument::FullDesc): New function to provide a full desc.
23856
23857         * support.cs (ParameterData): Add method ParameterDesc to the interface.
23858
23859         (ReflectionParameters, InternalParameters): Implement the above method.
23860
23861         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
23862         reporting errors.
23863
23864         (Invocation::FullMethodDesc): Ditto. 
23865
23866 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
23867
23868         * cs-parser.jay: Add extra production for the second form of array
23869         creation. 
23870
23871         * expression.cs (ArrayCreation): Update to reflect the above
23872         change. 
23873
23874         * Small changes to prepare for Array initialization.
23875
23876 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
23877
23878         * typemanager.cs (ImplementsInterface): interface might be null;
23879         Deal with this problem;
23880
23881         Also, we do store negative hits on the cache (null values), so use
23882         this instead of calling t.GetInterfaces on the type everytime.
23883
23884 2001-10-28  Ravi Pratap  <ravi@ximian.com>
23885
23886         * typemanager.cs (IsBuiltinType): New method to help determine the same.
23887
23888         * expression.cs (New::DoResolve): Get rid of array creation code and instead
23889         split functionality out into different classes.
23890
23891         (New::FormArrayType): Move into NewBuiltinArray.
23892
23893         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
23894         quite useless.
23895
23896         (NewBuiltinArray): New class to handle creation of built-in arrays.
23897
23898         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
23899         account creation of one-dimensional arrays.
23900
23901         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
23902
23903         (NewUserdefinedArray::DoResolve): Implement.
23904
23905         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
23906
23907         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
23908         we maintain inside the TypeManager. This is necessary to perform lookups on the
23909         module builder.
23910
23911         (LookupType): Update to perform GetType on the module builders too.     
23912
23913         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
23914
23915         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
23916
23917 2001-10-23  Ravi Pratap  <ravi@ximian.com>
23918
23919         * expression.cs (New::DoResolve): Implement guts of array creation.
23920
23921         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
23922
23923 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
23924
23925         * expression.cs: Fix bug I introduced lsat night that broke
23926         Delegates. 
23927
23928         (Expression.Resolve): Report a 246 error (can not resolve name)
23929         if we find a SimpleName in the stream.
23930
23931         (Expression.ResolveLValue): Ditto.
23932
23933         (Expression.ResolveWithSimpleName): This function is a variant of
23934         ResolveName, this one allows SimpleNames to be returned without a
23935         warning.  The only consumer of SimpleNames is MemberAccess
23936
23937 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
23938
23939         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
23940         might arrive here.  I have my doubts that this is correct.
23941
23942         * statement.cs (Lock): Implement lock statement.
23943
23944         * cs-parser.jay: Small fixes to support `lock' and `using'
23945
23946         * cs-tokenizer.cs: Remove extra space
23947
23948         * driver.cs: New flag --checked, allows to turn on integer math
23949         checking. 
23950
23951         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
23952         Threading.Monitor.Exit 
23953
23954 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
23955
23956         * expression.cs (IndexerAccess::DoResolveLValue): Set the
23957         Expression Class to be IndexerAccess.
23958
23959         Notice that Indexer::DoResolve sets the eclass to Value.
23960
23961 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
23962
23963         * class.cs (TypeContainer::Emit): Emit code for indexers.
23964
23965         * assign.cs (IAssignMethod): New interface implemented by Indexers
23966         and Properties for handling assignment.
23967
23968         (Assign::Emit): Simplify and reuse code. 
23969
23970         * expression.cs (IndexerAccess, PropertyExpr): Implement
23971         IAssignMethod, clean up old code. 
23972
23973 2001-10-22  Ravi Pratap  <ravi@ximian.com>
23974
23975         * typemanager.cs (ImplementsInterface): New method to determine if a type
23976         implements a given interface. Provides a nice cache too.
23977
23978         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
23979         method.
23980
23981         (ConvertReferenceExplicit): Ditto.
23982
23983         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
23984         various methods, with correct names etc.
23985
23986         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
23987         Operator.UnaryNegation.
23988
23989         * cs-parser.jay (operator_declarator): Be a little clever in the case where
23990         we have a unary plus or minus operator.
23991
23992         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
23993         UnaryMinus.
23994
23995         * everywhere : update accordingly.
23996
23997         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
23998         respectively.
23999
24000         * class.cs (Method::Define): For the case where we are implementing a method
24001         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24002         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24003
24004 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24005
24006         * interface.cs (FindMembers): Implement to work around S.R.E
24007         lameness.
24008
24009         * typemanager.cs (IsInterfaceType): Implement.
24010
24011         (FindMembers): Update to handle interface types too.
24012
24013         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24014         use IsAssignableFrom as that is not correct - it doesn't work.
24015
24016         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24017         and accordingly override EmitStatement.
24018
24019         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24020         using the correct logic :-)
24021
24022 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24023
24024         * ../errors/cs-11.cs : Add to demonstrate error -11 
24025
24026 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24027
24028         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24029         then pass this as a hint to ResolveLValue.
24030
24031         * expression.cs (FieldExpr): Add Location information
24032
24033         (FieldExpr::LValueResolve): Report assignment to readonly
24034         variable. 
24035
24036         (Expression::ExprClassFromMemberInfo): Pass location information.
24037
24038         (Expression::ResolveLValue): Add new method that resolves an
24039         LValue. 
24040
24041         (Expression::DoResolveLValue): Default invocation calls
24042         DoResolve. 
24043
24044         (Indexers): New class used to keep track of indexers in a given
24045         Type. 
24046
24047         (IStackStore): Renamed from LValue, as it did not really describe
24048         what this did.  Also ResolveLValue is gone from this interface and
24049         now is part of Expression.
24050
24051         (ElementAccess): Depending on the element access type
24052
24053         * typemanager.cs: Add `indexer_name_type' as a Core type
24054         (System.Runtime.CompilerServices.IndexerNameAttribute)
24055
24056         * statement.cs (Goto): Take a location.
24057
24058 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24059
24060         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24061         if two delegates are compatible.
24062
24063         (NewDelegate::DoResolve): Update to take care of the case when
24064         we instantiate a delegate from another delegate.
24065
24066         * typemanager.cs (FindMembers): Don't even try to look up members
24067         of Delegate types for now.
24068
24069 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24070
24071         * delegate.cs (NewDelegate): New class to take care of delegate
24072         instantiation.
24073
24074         * expression.cs (New): Split the delegate related code out into 
24075         the NewDelegate class.
24076
24077         * delegate.cs (DelegateInvocation): New class to handle delegate 
24078         invocation.
24079
24080         * expression.cs (Invocation): Split out delegate related code into
24081         the DelegateInvocation class.
24082
24083 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24084
24085         * expression.cs (New::DoResolve): Implement delegate creation fully
24086         and according to the spec.
24087
24088         (New::DoEmit): Update to handle delegates differently.
24089
24090         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24091         because of which we were printing out arguments in reverse order !
24092
24093         * delegate.cs (VerifyMethod): Implement to check if the given method
24094         matches the delegate.
24095
24096         (FullDelegateDesc): Implement.
24097
24098         (VerifyApplicability): Implement.
24099
24100         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24101         delegate invocations too.
24102
24103         (Invocation::Emit): Ditto.
24104
24105         * ../errors/cs1593.cs : Added.
24106
24107         * ../errors/cs1594.cs : Added.
24108
24109         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24110
24111 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24112
24113         * typemanager.cs (intptr_type): Core type for System.IntPtr
24114
24115         (InitCoreTypes): Update for the same.
24116
24117         (iasyncresult_type, asynccallback_type): Ditto.
24118
24119         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24120         correct.
24121
24122         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24123         too.
24124
24125         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24126         the builders for the 4 members of a delegate type :-)
24127
24128         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24129         type.
24130
24131         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24132
24133         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24134
24135 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24136
24137         * statement.cs (Break::Emit): Implement.   
24138         (Continue::Emit): Implement.
24139
24140         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24141         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24142         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24143         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24144         end loop
24145
24146         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24147         properties that track the label for the current loop (begin of the
24148         loop and end of the loop).
24149
24150 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24151
24152         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24153         use of emitting anything at all.
24154
24155         * class.cs, rootcontext.cs : Get rid of calls to the same.
24156
24157         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24158
24159         (Populate): Define the constructor correctly and set the implementation
24160         attributes.
24161
24162         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24163         have been defined.
24164
24165         (AddDelegateType): Implement.
24166
24167         (IsDelegateType): Implement helper method.
24168
24169         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24170
24171         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24172         and accordingly handle it.
24173
24174         * delegate.cs (Populate): Take TypeContainer argument.
24175         Implement bits to define the Invoke method. However, I still haven't figured out
24176         how to take care of the native int bit :-(
24177
24178         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24179         Qualify the name of the delegate, not its return type !
24180
24181         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24182         conversion.
24183
24184         (StandardConversionExists): Checking for array types turns out to be recursive.
24185
24186         (ConvertReferenceExplicit): Implement array conversion.
24187
24188         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24189
24190 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24191
24192         * cs-parser.jay (delegate_declaration): Store the fully qualified
24193         name as it is a type declaration.
24194
24195         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24196         readonly.
24197
24198         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24199         as TypeContainer::DefineType.
24200
24201         (Populate): Method in which all the definition of the various methods (Invoke)
24202         etc is done.
24203
24204         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24205         see.
24206
24207         (CloseDelegate): Finally creates the delegate.
24208
24209         * class.cs (TypeContainer::DefineType): Update to define delegates.
24210         (Populate, Emit and CloseType): Do the same thing here too.
24211
24212         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24213         delegates in all these operations.
24214
24215 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24216
24217         * expression.cs: LocalTemporary: a new expression used to
24218         reference a temporary that has been created.
24219
24220         * assign.cs: Handle PropertyAccess back here, so that we can
24221         provide the proper semantic access to properties.
24222
24223         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24224         a few more explicit conversions. 
24225
24226         * modifiers.cs: `NEW' modifier maps to HideBySig.
24227
24228         * expression.cs (PropertyExpr): Make this into an
24229         ExpressionStatement, and support the EmitStatement code path. 
24230
24231         Perform get/set error checking, clean up the interface.
24232
24233         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24234         them into toplevel access objects.
24235
24236 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24237
24238         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24239         SRE.
24240
24241         * typemanager.cs: Keep track here of our PropertyBuilders again to
24242         work around lameness in SRE.
24243
24244 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24245
24246         * expression.cs (LValue::LValueResolve): New method in the
24247         interface, used to perform a second resolution pass for LValues. 
24248
24249         (This::DoResolve): Catch the use of this in static methods.
24250
24251         (This::LValueResolve): Implement.
24252
24253         (This::Store): Remove warning, assigning to `this' in structures
24254         is 
24255
24256         (Invocation::Emit): Deal with invocation of
24257         methods on value types.  We need to pass the address to structure
24258         methods rather than the object itself.  (The equivalent code to
24259         emit "this" for structures leaves the entire structure on the
24260         stack instead of a pointer to it). 
24261
24262         (ParameterReference::DoResolve): Compute the real index for the
24263         argument based on whether the method takes or not a `this' pointer
24264         (ie, the method is static).
24265
24266         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24267         value types returned from functions when we need to invoke a
24268         method on the sturcture.
24269
24270
24271 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24272
24273         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24274         defining the type in the Modulebuilder or Typebuilder. This is to take
24275         care of nested types which need to be defined on the TypeBuilder using
24276         DefineNestedMethod.
24277
24278         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24279         methods in RootContext, only ported to be part of TypeContainer.
24280
24281         (TypeContainer::GetInterfaceOrClass): Ditto.
24282
24283         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24284
24285         * interface.cs (Interface::DefineInterface): New method. Does exactly
24286         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24287         too.
24288
24289         (Interface::GetInterfaces): Move from RootContext here and port.
24290
24291         (Interface::GetInterfaceByName): Same here.
24292
24293         * rootcontext.cs (ResolveTree): Re-write.
24294
24295         (PopulateTypes): Re-write.
24296
24297         * class.cs (TypeContainer::Populate): Populate nested types too.
24298         (TypeContainer::Emit): Emit nested members too.
24299
24300         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24301         instead just use the name argument passed in as it is already fully
24302         qualified.
24303
24304         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24305         to TypeContainer mapping to see if a type is user-defined.
24306
24307         * class.cs (TypeContainer::CloseType): Implement. 
24308
24309         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24310         the default constructor.
24311
24312         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24313         twice.
24314
24315         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24316
24317         * interface.cs (CloseType): Create the type here.
24318
24319         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24320         the hierarchy.
24321
24322         Remove all the methods which are now in TypeContainer.
24323
24324 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24325
24326         * delegate.cs (Define): Re-write bits to define the delegate
24327         correctly.
24328
24329 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24330
24331         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24332
24333         * expression.cs (ImplicitReferenceConversion): handle null as well
24334         as a source to convert to any reference type.
24335
24336         * statement.cs (Return): Perform any implicit conversions to
24337         expected return type.  
24338
24339         Validate use of return statement.  
24340
24341         * codegen.cs (EmitContext): Pass the expected return type here.
24342
24343         * class.cs (Method, Constructor, Property): Pass expected return
24344         type to EmitContext.
24345
24346 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24347
24348         * expression.cs: Make DoResolve take an EmitContext instead of a
24349         TypeContainer.
24350
24351         Replaced `l' and `location' for `loc', for consistency.
24352
24353         (Error, Warning): Remove unneeded Tc argument.
24354
24355         * assign.cs, literal.cs, constant.cs: Update to new calling
24356         convention. 
24357
24358         * codegen.cs: EmitContext now contains a flag indicating whether
24359         code is being generated in a static method or not.
24360
24361         * cs-parser.jay: DecomposeQI, new function that replaces the old
24362         QualifiedIdentifier.  Now we always decompose the assembled
24363         strings from qualified_identifier productions into a group of
24364         memberaccesses.
24365
24366 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24367
24368         * rootcontext.cs: Deal with field-less struct types correctly now
24369         by passing the size option to Define Type.
24370
24371         * class.cs: Removed hack that created one static field. 
24372
24373 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24374
24375         * statement.cs: Moved most of the code generation here. 
24376
24377 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24378
24379         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24380         seem very right.
24381
24382         (ElementAccess): Remove useless bits for now - keep checks as the spec
24383         says.
24384
24385 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24386
24387         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24388         and start performing checks according to the spec.
24389
24390 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24391
24392         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24393         rank_specifiers instead.
24394
24395         (rank_specifiers): Change the order in which the rank specifiers are stored
24396
24397         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24398
24399         * expression.cs (ElementAccess): Implement the LValue interface too.
24400
24401 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24402
24403         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24404         except that user defined conversions are not included.
24405
24406         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24407         perform the conversion of the return type, if necessary.
24408
24409         (New::DoResolve): Check whether we are creating an array or an object
24410         and accordingly do the needful.
24411
24412         (New::Emit): Same here.
24413
24414         (New::DoResolve): Implement guts of array creation.
24415
24416         (New::FormLookupType): Helper function.
24417
24418 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24419
24420         * codegen.cs: Removed most of the code generation here, and move the
24421         corresponding code generation bits to the statement classes. 
24422
24423         Added support for try/catch/finalize and throw.
24424
24425         * cs-parser.jay: Added support for try/catch/finalize.
24426
24427         * class.cs: Catch static methods having the flags override,
24428         virtual or abstract.
24429
24430         * expression.cs (UserCast): This user cast was not really doing
24431         what it was supposed to do.  Which is to be born in fully resolved
24432         state.  Parts of the resolution were being performed at Emit time! 
24433
24434         Fixed this code.
24435
24436 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24437
24438         * expression.cs: Implicity convert the result from UserCast.
24439
24440 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24441
24442         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24443         prevented it from working correctly. 
24444
24445         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24446         merely ConvertImplicit.
24447
24448 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24449
24450         * typemanager.cs: Make the LookupTypeContainer function static,
24451         and not per-instance.  
24452
24453         * class.cs: Make static FindMembers (the one that takes a Type
24454         argument). 
24455
24456         * codegen.cs: Add EmitForeach here.
24457
24458         * cs-parser.jay: Make foreach a toplevel object instead of the
24459         inline expansion, as we need to perform semantic analysis on it. 
24460
24461 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24462
24463         * expression.cs (Expression::ImplicitUserConversion): Rename to
24464         UserDefinedConversion.
24465
24466         (Expression::UserDefinedConversion): Take an extra argument specifying 
24467         whether we look for explicit user conversions too.
24468
24469         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
24470
24471         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
24472
24473         (ExplicitUserConversion): Make it a call to UserDefinedConversion
24474         with the appropriate arguments.
24475
24476         * cs-parser.jay (cast_expression): Record location too.
24477
24478         * expression.cs (Cast): Record location info.
24479
24480         (Expression::ConvertExplicit): Take location argument.
24481
24482         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
24483         to determine if we are doing explicit conversions.
24484
24485         (UserCast::Emit): Update accordingly.
24486
24487         (Expression::ConvertExplicit): Report an error if everything fails.
24488
24489         * ../errors/cs0030.cs : Add.
24490
24491 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
24492
24493         * modifiers.cs: If the ABSTRACT keyword is present, also set the
24494         virtual and newslot bits. 
24495
24496         * class.cs (TypeContainer::RegisterRequiredImplementations):
24497         Record methods we need.
24498
24499         (TypeContainer::MakeKey): Helper function to make keys for
24500         MethodBases, since the Methodbase key is useless.
24501
24502         (TypeContainer::Populate): Call RegisterRequiredImplementations
24503         before defining the methods.   
24504
24505         Create a mapping for method_builders_to_methods ahead of time
24506         instead of inside a tight loop.
24507
24508         (::RequireMethods):  Accept an object as the data to set into the
24509         hashtable so we can report interface vs abstract method mismatch.
24510
24511 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24512
24513         * report.cs: Make all of it static.
24514
24515         * rootcontext.cs: Drop object_type and value_type computations, as
24516         we have those in the TypeManager anyways.
24517
24518         Drop report instance variable too, now it is a global.
24519
24520         * driver.cs: Use try/catch on command line handling.
24521
24522         Add --probe option to debug the error reporting system with a test
24523         suite. 
24524
24525         * report.cs: Add support for exiting program when a probe
24526         condition is reached.
24527
24528 2001-10-03  Ravi Pratap  <ravi@ximian.com>
24529
24530         * expression.cs (Binary::DoNumericPromotions): Fix the case when
24531         we do a forcible conversion regardless of type, to check if 
24532         ForceConversion returns a null.
24533
24534         (Binary::error19): Use location to report error.
24535
24536         (Unary::error23): Use location here too.
24537
24538         * ../errors/cs0019.cs : Check in.
24539
24540         * ../errors/cs0023.cs : Check in.
24541
24542         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
24543         case of a non-null MethodInfo object with a length of 0 !
24544
24545         (Binary::ResolveOperator): Flag error if overload resolution fails to find
24546         an applicable member - according to the spec :-)
24547         Also fix logic to find members in base types.
24548
24549         (Unary::ResolveOperator): Same here.
24550
24551         (Unary::report23): Change name to error23 and make first argument a TypeContainer
24552         as I was getting thoroughly confused between this and error19 :-)
24553
24554         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
24555         (::FindMostEncompassedType): Implement.
24556         (::FindMostEncompassingType): Implement.
24557         (::StandardConversionExists): Implement.
24558
24559         (UserImplicitCast): Re-vamp. We now need info about most specific
24560         source and target types so that we can do the necessary conversions.
24561
24562         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
24563         mathematical union with no duplicates.
24564
24565 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24566
24567         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
24568         in order from base classes to child classes, so that we can in
24569         child classes look up in our parent for method names and
24570         attributes (required for handling abstract, virtual, new, override
24571         constructs: we need to instrospect our base class, and if we dont
24572         populate the classes in order, the introspection might be
24573         incorrect.  For example, a method could query its parent before
24574         the parent has any methods and would determine that the parent has
24575         no abstract methods (while it could have had them)).
24576
24577         (RootContext::CreateType): Record the order in which we define the
24578         classes.
24579
24580 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
24581
24582         * class.cs (TypeContainer::Populate): Also method definitions can
24583         fail now, keep track of this.
24584
24585         (TypeContainer::FindMembers): Implement support for
24586         DeclaredOnly/noDeclaredOnly flag.
24587
24588         (Constructor::Emit) Return the ConstructorBuilder.
24589
24590         (Method::Emit) Return the MethodBuilder. 
24591         Check for abstract or virtual methods to be public.
24592
24593         * rootcontext.cs (RootContext::CreateType): Register all the
24594         abstract methods required for the class to be complete and the
24595         interface methods that must be implemented. 
24596
24597         * cs-parser.jay: Report error 501 (method requires body if it is
24598         not marked abstract or extern).
24599
24600         * expression.cs (TypeOf::Emit): Implement.
24601
24602         * typemanager.cs: runtime_handle_type, new global type.
24603
24604         * class.cs (Property::Emit): Generate code for properties.
24605
24606 2001-10-02  Ravi Pratap  <ravi@ximian.com>
24607
24608         * expression.cs (Unary::ResolveOperator): Find operators on base type
24609         too - we now conform exactly to the spec.
24610
24611         (Binary::ResolveOperator): Same here.
24612
24613         * class.cs (Operator::Define): Fix minor quirk in the tests.
24614
24615         * ../errors/cs0215.cs : Added.
24616
24617         * ../errors/cs0556.cs : Added.
24618
24619         * ../errors/cs0555.cs : Added.
24620
24621 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24622
24623         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
24624         single integer which is really efficient
24625
24626 2001-10-01  Ravi Pratap  <ravi@ximian.com>
24627
24628         *  expression.cs (Expression::ImplicitUserConversion): Use location
24629         even in the case when we are examining True operators.
24630  
24631         * class.cs (Operator::Define): Perform extensive checks to conform
24632         with the rules for operator overloading in the spec.
24633
24634         * expression.cs (Expression::ImplicitReferenceConversion): Implement
24635         some of the other conversions mentioned in the spec.
24636
24637         * typemanager.cs (array_type): New static member for the System.Array built-in
24638         type.
24639
24640         (cloneable_interface): For System.ICloneable interface.
24641
24642         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
24643         we start resolving the tree and populating types.
24644
24645         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
24646  
24647 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24648
24649         * expression.cs (Expression::ExprClassFromMemberInfo,
24650         Expression::Literalize): Create literal expressions from
24651         FieldInfos which are literals.
24652
24653         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
24654         type casts, because they were wrong.  The test suite in tests
24655         caught these ones.
24656
24657         (ImplicitNumericConversion): ushort to ulong requires a widening
24658         cast. 
24659
24660         Int32 constant to long requires widening cast as well.
24661
24662         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
24663         for integers because the type on the stack is not i4.
24664
24665 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
24666
24667         * expression.cs (report118): require location argument. 
24668
24669         * parameter.cs: Do not dereference potential null value.
24670
24671         * class.cs: Catch methods that lack the `new' keyword when
24672         overriding a name.  Report warnings when `new' is used without
24673         anything being there to override.
24674
24675         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
24676
24677         * class.cs: Only add constructor to hashtable if it is non-null
24678         (as now constructors can fail on define).
24679
24680         (TypeManager, Class, Struct): Take location arguments.
24681
24682         Catch field instance initialization in structs as errors.
24683
24684         accepting_filter: a new filter for FindMembers that is static so
24685         that we dont create an instance per invocation.
24686
24687         (Constructor::Define): Catch errors where a struct constructor is
24688         parameterless 
24689
24690         * cs-parser.jay: Pass location information for various new
24691         constructs. 
24692
24693         * delegate.cs (Delegate): take a location argument.
24694
24695         * driver.cs: Do not call EmitCode if there were problesm in the
24696         Definition of the types, as many Builders wont be there. 
24697
24698         * decl.cs (Decl::Decl): Require a location argument.
24699
24700         * cs-tokenizer.cs: Handle properly hex constants that can not fit
24701         into integers, and find the most appropiate integer for it.
24702
24703         * literal.cs: Implement ULongLiteral.
24704
24705         * rootcontext.cs: Provide better information about the location of
24706         failure when CreateType fails.
24707
24708 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
24709
24710         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
24711         as well.
24712
24713         * expression.cs (Binary::CheckShiftArguments): Add missing type
24714         computation.
24715         (Binary::ResolveOperator): Add type to the logical and and logical
24716         or, Bitwise And/Or and Exclusive Or code paths, it was missing
24717         before.
24718
24719         (Binary::DoNumericPromotions): In the case where either argument
24720         is ulong (and most signed types combined with ulong cause an
24721         error) perform implicit integer constant conversions as well.
24722
24723 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
24724
24725         * expression.cs (UserImplicitCast): Method should always be
24726         non-null. 
24727         (Invocation::BetterConversion): Simplified test for IntLiteral.
24728
24729         (Expression::ImplicitNumericConversion): Split this routine out.
24730         Put the code that performs implicit constant integer conversions
24731         here. 
24732
24733         (Expression::Resolve): Become a wrapper around DoResolve so we can
24734         check eclass and type being set after resolve.
24735
24736         (Invocation::Badness): Remove this dead function
24737
24738         (Binary::ResolveOperator): Do not compute the expensive argumnets
24739         unless we have a union for it.
24740
24741         (Probe::Emit): Is needs to do an isinst and then
24742         compare against null.
24743
24744         (::CanConvert): Added Location argument.  If the Location argument
24745         is null (Location.Null), then we do not report errors.  This is
24746         used by the `probe' mechanism of the Explicit conversion.  We do
24747         not want to generate an error for something that the user
24748         explicitly requested to be casted.  But the pipeline for an
24749         explicit cast first tests for potential implicit casts.
24750
24751         So for now, if the Location is null, it means `Probe only' to
24752         avoid adding another argument.   Might have to revise this
24753         strategy later.
24754
24755         (ClassCast): New class used to type cast objects into arbitrary
24756         classes (used in Explicit Reference Conversions).
24757
24758         Implement `as' as well.
24759
24760         Reverted all the patches from Ravi below: they were broken:
24761
24762                 * The use of `level' as a mechanism to stop recursive
24763                   invocations is wrong.  That was there just to catch the
24764                   bug with a strack trace but not as a way of addressing
24765                   the problem.
24766
24767                   To fix the problem we have to *understand* what is going
24768                   on and the interactions and come up with a plan, not
24769                   just get things going.
24770
24771                 * The use of the type conversion cache that I proposed
24772                   last night had an open topic: How does this work across
24773                   protection domains.  A user defined conversion might not
24774                   be public in the location where we are applying the
24775                   conversion, a different conversion might be selected
24776                   (ie, private A->B (better) but public B->A (worse),
24777                   inside A, A->B applies, but outside it, B->A will
24778                   apply).
24779
24780                 * On top of that (ie, even if the above is solved),
24781                   conversions in a cache need to be abstract.  Ie, `To
24782                   convert from an Int to a Short use an OpcodeCast', not
24783                   `To convert from an Int to a Short use the OpcodeCast on
24784                   the variable 5' (which is what this patch was doing).
24785
24786 2001-09-28  Ravi Pratap  <ravi@ximian.com>
24787
24788         * expression.cs (Invocation::ConversionExists): Re-write to use
24789         the conversion cache
24790
24791         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
24792         cache all conversions done, not just user-defined ones.
24793
24794         (Invocation::BetterConversion): The real culprit. Use ConversionExists
24795         to determine if a conversion exists instead of acutually trying to 
24796         perform the conversion. It's faster too.
24797
24798         (Expression::ConvertExplicit): Modify to use ConversionExists to check
24799         and only then attempt the implicit conversion.
24800
24801 2001-09-28  Ravi Pratap  <ravi@ximian.com>
24802
24803         * expression.cs (ConvertImplicit): Use a cache for conversions
24804         already found. Check level of recursion and bail out if necessary.
24805
24806 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
24807
24808         * typemanager.cs (string_concat_string_string, string_concat_object_object):
24809         Export standard methods that we expect for string operations.
24810
24811         * statement.cs (Block::UsageWarning): Track usage of variables and
24812         report the errors for not used variables.
24813
24814         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
24815         operator. 
24816
24817 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
24818
24819         * codegen.cs: remove unnneded code 
24820
24821         * expression.cs: Removed BuiltinTypeAccess class
24822
24823         Fix the order in which implicit conversions are
24824         done.  
24825
24826         The previous fixed dropped support for boxed conversions (adding a
24827         test to the test suite now)
24828
24829         (UserImplicitCast::CanConvert): Remove test for source being null,
24830         that code is broken.  We should not feed a null to begin with, if
24831         we do, then we should track the bug where the problem originates
24832         and not try to cover it up here.
24833
24834         Return a resolved expression of type UserImplicitCast on success
24835         rather than true/false.  Ravi: this is what I was talking about,
24836         the pattern is to use a static method as a "constructor" for
24837         objects. 
24838
24839         Also, do not create arguments until the very last minute,
24840         otherwise we always create the arguments even for lookups that
24841         will never be performed. 
24842
24843         (UserImplicitCast::Resolve): Eliminate, objects of type
24844         UserImplicitCast are born in a fully resolved state. 
24845
24846         * typemanager.cs (InitCoreTypes): Init also value_type
24847         (System.ValueType). 
24848
24849         * expression.cs (Cast::Resolve): First resolve the child expression.
24850
24851         (LValue): Add new method AddressOf to be used by
24852         the `&' operator.  
24853
24854         Change the argument of Store to take an EmitContext instead of an
24855         ILGenerator, because things like FieldExpr need to be able to call
24856         their children expression to generate the instance code. 
24857
24858         (Expression::Error, Expression::Warning): Sugar functions for
24859         reporting errors.
24860
24861         (Expression::MemberLookup): Accept a TypeContainer instead of a
24862         Report as the first argument.
24863
24864         (Expression::ResolvePrimary): Killed.  I still want to improve
24865         this as currently the code is just not right.
24866
24867         (Expression::ResolveMemberAccess): Simplify, but it is still
24868         wrong. 
24869
24870         (Unary::Resolve): Catch errors in AddressOf operators.
24871
24872         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
24873         index to a byte for the short-version, or the compiler will choose
24874         the wrong Emit call, which generates the wrong data.
24875
24876         (ParameterReference::Emit, ::Store): same.
24877
24878         (FieldExpr::AddressOf): Implement.
24879
24880         * typemanager.cs: TypeManager: made public variable instead of
24881         property.
24882
24883         * driver.cs: document --fatal.
24884
24885         * report.cs (ErrorMessage, WarningMessage): new names for the old
24886         Error and Warning classes.
24887
24888         * cs-parser.jay (member_access): Turn built-in access to types
24889         into a normal simplename
24890
24891 2001-09-27  Ravi Pratap  <ravi@ximian.com>
24892
24893         * expression.cs (Invocation::BetterConversion): Fix to cope
24894         with q being null, since this was introducing a bug.
24895
24896         * expression.cs (ConvertImplicit): Do built-in conversions first.
24897
24898 2001-09-27  Ravi Pratap  <ravi@ximian.com>
24899
24900         * expression.cs (UserImplicitCast::Resolve): Fix bug.
24901
24902 2001-09-27  Ravi Pratap  <ravi@ximian.com>
24903
24904         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
24905         I had introduced long ago (what's new ?).
24906
24907         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
24908         the work of all the checking. 
24909         (ConvertImplicit): Call CanConvert and only then create object if necessary.
24910         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
24911
24912         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
24913         that is the right way. 
24914
24915         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
24916         overloading resolution. Use everywhere instead of cutting and pasting code.
24917
24918         (Binary::ResolveOperator): Use MakeUnionSet.
24919
24920         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
24921         we have to convert to bool types. Not complete yet.
24922
24923 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
24924
24925         * typemanager.cs (TypeManager::CSharpName): support ushort.
24926
24927         * expression.cs (Expression::TryImplicitIntConversion): Attempts
24928         to provide an expression that performsn an implicit constant int
24929         conversion (section 6.1.6).
24930         (Expression::ConvertImplicitRequired): Reworked to include
24931         implicit constant expression conversions.
24932
24933         (Expression::ConvertNumericExplicit): Finished.
24934
24935         (Invocation::Emit): If InstanceExpression is null, then it means
24936         that we perform a call on this.
24937
24938 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
24939
24940         * expression.cs (Unary::Emit): Remove some dead code.
24941         (Probe): Implement Resolve and Emit for `is'.
24942         (Expression::ConvertImplicitRequired): Attempt to do constant
24943         expression conversions here.  Maybe should be moved to
24944         ConvertImplicit, but I am not sure.
24945         (Expression::ImplicitLongConstantConversionPossible,
24946         Expression::ImplicitIntConstantConversionPossible): New functions
24947         that tell whether is it possible to apply an implicit constant
24948         expression conversion.
24949
24950         (ConvertNumericExplicit): Started work on explicit numeric
24951         conversions.
24952
24953         * cs-parser.jay: Update operator constants.
24954
24955         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
24956         (Parameters::GetSignature): Hook up VerifyArgs here.
24957         (Parameters::VerifyArgs): Verifies that no two arguments have the
24958         same name. 
24959
24960         * class.cs (Operator): Update the operator names to reflect the
24961         ones that the spec expects (as we are just stringizing the
24962         operator names).
24963
24964         * expression.cs (Unary::ResolveOperator): Fix bug: Use
24965         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
24966         previous usage did only work for our methods.
24967         (Expression::ConvertImplicit): Handle decimal implicit numeric
24968         conversions as well.
24969         (Expression::InternalTypeConstructor): Used to invoke constructors
24970         on internal types for default promotions.
24971
24972         (Unary::Emit): Implement special handling for the pre/post
24973         increment/decrement for overloaded operators, as they need to have
24974         the same semantics as the other operators.
24975
24976         (Binary::ResolveOperator): ditto.
24977         (Invocation::ConversionExists): ditto.
24978         (UserImplicitCast::Resolve): ditto.
24979
24980 2001-09-26  Ravi Pratap  <ravi@ximian.com>
24981
24982         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
24983         operator, return after emitting body. Regression tests pass again !
24984
24985         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
24986         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
24987         (Invocation::OverloadResolve): Ditto.
24988         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
24989
24990         * everywhere : update calls to the above methods accordingly.
24991
24992 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
24993
24994         * assign.cs (Assign): Make it inherit from ExpressionStatement.
24995
24996         * expression.cs (ExpressionStatement): New base class used for
24997         expressions that can appear in statements, so that we can provide
24998         an alternate path to generate expression that do not leave a value
24999         on the stack.
25000
25001         (Expression::Emit, and all the derivatives): We no longer return
25002         whether a value is left on the stack or not.  Every expression
25003         after being emitted leaves a single value on the stack.
25004
25005         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25006         facilties of ExpressionStatement if possible.
25007
25008         * cs-parser.jay: Update statement_expression.
25009
25010 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25011
25012         * driver.cs: Change the wording of message
25013
25014 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25015
25016         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25017         the type of the expression to the return type of the method if
25018         we have an overloaded operator match ! The regression tests pass again !
25019         (Unary::ResolveOperator): Ditto.
25020
25021         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25022         to find "op_Implicit", not "implicit" ;-)
25023         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25024         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25025
25026         * everywhere : Correct calls to the above accordingly.
25027
25028         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25029         (ConvertImplicit): Do user-defined conversion if it exists.
25030
25031 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25032
25033         * assign.cs: track location.
25034         (Resolve): Use implicit conversions on assignment.
25035
25036         * literal.cs: Oops.  Not good, Emit of short access values should
25037         pass (Bytes) or the wrong argument will be selected.
25038
25039         * expression.cs (Unary::Emit): Emit code for -expr.
25040
25041         (Unary::ResolveOperator): Handle `Substract' for non-constants
25042         (substract from zero from the non-constants).
25043         Deal with Doubles as well. 
25044
25045         (Expression::ConvertImplicitRequired): New routine that reports an
25046         error if no implicit conversion exists. 
25047
25048         (Invocation::OverloadResolve): Store the converted implicit
25049         expressions if we make them
25050
25051 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25052
25053         * class.cs (ConstructorInitializer): Take a Location argument.
25054         (ConstructorBaseInitializer): Same here.
25055         (ConstructorThisInitializer): Same here.
25056
25057         * cs-parser.jay : Update all calls accordingly.
25058
25059         * expression.cs (Unary, Binary, New): Take location argument.
25060         Update accordingly everywhere.
25061
25062         * cs-parser.jay : Update all calls to the above to take a location
25063         argument.
25064
25065         * class.cs : Ditto.
25066
25067 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25068
25069         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25070         (Invocation::BetterConversion): Same here
25071         (Invocation::ConversionExists): Ditto.
25072
25073         (Invocation::ConversionExists): Implement.
25074
25075 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25076
25077         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25078         Also take an additional TypeContainer argument.
25079
25080         * All over : Pass in TypeContainer as argument to OverloadResolve.
25081
25082         * typemanager.cs (CSharpName): Update to check for the string type and return
25083         that too.
25084
25085         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25086         a given method.
25087
25088 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25089
25090         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25091         (Invocation::BetterFunction): Implement.
25092         (Invocation::BetterConversion): Implement.
25093         (Invocation::ConversionExists): Skeleton, no implementation yet.
25094
25095         Okay, things work fine !
25096
25097 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25098
25099         * typemanager.cs: declare and load enum_type, delegate_type and
25100         void_type. 
25101
25102         * expression.cs (Expression::Emit): Now emit returns a value that
25103         tells whether a value is left on the stack or not.  This strategy
25104         might be reveted tomorrow with a mechanism that would address
25105         multiple assignments.
25106         (Expression::report118): Utility routine to report mismatches on
25107         the ExprClass.
25108
25109         (Unary::Report23): Report impossible type/operator combination
25110         utility function.
25111
25112         (Unary::IsIncrementableNumber): Whether the type can be
25113         incremented or decremented with add.
25114         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25115         complemented. 
25116         (Unary::ResolveOperator): Implement ++, !, ~,
25117
25118         (Invocation::Emit): Deal with new Emit convetion.
25119
25120         * All Expression derivatives: Updated their Emit method to return
25121         whether they leave values on the stack or not.
25122
25123         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25124         stack for expressions that are statements. 
25125
25126 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25127
25128         * expression.cs (LValue): New interface.  Must be implemented by
25129         LValue objects.
25130         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25131         LValue interface.
25132
25133         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25134         interface for generating code, simplifies the code.
25135
25136 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25137
25138         * expression.cs (everywhere): Comment out return statements in ::Resolve
25139         methods to avoid the warnings.
25140
25141 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25142
25143         * driver.cs (parse): Report error 2001 if we can not open the
25144         source file.
25145
25146         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25147         not resolve it.
25148
25149         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25150         object. 
25151
25152         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25153         otherwise nested blocks end up with the same index.
25154
25155         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25156
25157         * expression.cs:  Instead of having FIXMEs in the Resolve
25158         functions, throw exceptions so it is obvious that we are facing a
25159         bug. 
25160
25161         * cs-parser.jay (invocation_expression): Pass Location information.
25162
25163         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25164         Use a basename for those routines because .NET does not like paths
25165         on them. 
25166
25167         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25168         already defined.
25169
25170 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25171
25172         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25173         are loading the correct data types (throws an exception if not).
25174         (TypeManager::InitCoreTypes): Use CoreLookupType
25175
25176         * expression.cs (Unary::ResolveOperator): return the child
25177         expression for expressions which are just +expr.
25178         (Unary::ResolveOperator): Return negative literals for -LITERAL
25179         expressions (otherwise they are Unary {Literal}).
25180         (Invocation::Badness): Take into account `Implicit constant
25181         expression conversions'.
25182
25183         * literal.cs (LongLiteral): Implement long literal class.
25184         (IntLiteral): export the `Value' of the intliteral. 
25185
25186 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25187
25188         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25189
25190         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25191         instead of 'Operator'
25192
25193         * expression.cs (Binary::ResolveOperator): Update accordingly.
25194         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25195         and 'Minus'
25196
25197         * cs-parser.jay (unary_expression): Update to use the new names.
25198
25199         * gen-treedump.cs (GetUnary): Same here.
25200
25201         * expression.cs (Unary::Resolve): Implement.
25202         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25203         operators are found instead of making noise ;-)
25204         (Unary::ResolveOperator): New method to do precisely the same thing which
25205         Binary::ResolveOperator does for Binary expressions.
25206         (Unary.method, .Arguments): Add.
25207         (Unary::OperName): Implement.   
25208         (Unary::ForceConversion): Copy and Paste !
25209
25210         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25211         a unary operator.
25212
25213         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25214         for the inbuilt operators. Only overloading works for now ;-)
25215
25216 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25217
25218         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25219         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25220
25221         * expression.cs (This::Emit): Implement. 
25222         (This::Resolve): Implement.
25223         (TypeOf:Resolve): Implement.
25224         (Expression::ResolveSimpleName): Add an implicit this to instance
25225         field references. 
25226         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25227         Bind instance variable to Field expressions.
25228         (FieldExpr::Instance): New field used to track the expression that
25229         represents the object instance.
25230         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25231         binding 
25232         (FieldExpr::Emit): Implement.
25233
25234         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25235         the last instruction contains a return opcode to avoid generating
25236         the last `ret' instruction (this generates correct code, and it is
25237         nice to pass the peverify output).
25238
25239         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25240         initializer for static and instance variables.
25241         (Constructor::Emit): Allow initializer to be null in the case of
25242         static constructors.  Only emit initializer for instance
25243         constructors. 
25244
25245         (TypeContainer::FindMembers): Return a null array if there are no
25246         matches.
25247
25248         Also fix the code for the MemberTypes.Method branch, as it was not
25249         scanning that for operators (or tried to access null variables before).
25250
25251         * assign.cs (Assign::Emit): Handle instance and static fields. 
25252
25253         * TODO: Updated.
25254
25255         * driver.cs: Stop compilation if there are parse errors.
25256
25257         * cs-parser.jay (constructor_declaration): Provide default base
25258         initializer for non-static constructors.
25259         (constructor_declarator): Do not provide a default base
25260         initializers if none was specified.
25261         Catch the fact that constructors should not have parameters.
25262
25263         * class.cs: Do not emit parent class initializers for static
25264         constructors, that should be flagged as an error.
25265
25266 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25267
25268         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25269         Move back code into TypeContainer::Populate.
25270
25271 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25272
25273         * class.cs (TypeContainer::AddConstructor): Fix the check to
25274         compare against Name, not Basename. 
25275         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25276
25277         * cs-parser.jay : Update accordingly.
25278
25279         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25280         for methods, don't forget to look into the operators too.
25281         (RegisterMethodBuilder): Helper method to take care of this for
25282         methods, constructors and operators.
25283         (Operator::Define): Completely revamp.
25284         (Operator.OperatorMethod, MethodName): New fields.
25285         (TypeContainer::Populate): Move the registering of builders into
25286         RegisterMethodBuilder.
25287         (Operator::Emit): Re-write.
25288
25289         * expression.cs (Binary::Emit): Comment out code path to emit method
25290         invocation stuff for the case when we have a user defined operator. I am
25291         just not able to get it right !
25292
25293 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25294
25295         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25296         argument. 
25297
25298         (Expression::MemberLookup): Provide a version that allows to
25299         specify the MemberTypes and BindingFlags. 
25300
25301         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25302         so it was not fetching variable information from outer blocks.
25303
25304         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25305         Beforefieldinit as it was buggy.
25306
25307         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25308         that Ravi put here.  
25309
25310         * class.cs (Constructor::Emit): Only emit if block is not null.
25311         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25312         deal with this by semantically definining it as if the user had
25313         done it.
25314
25315         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25316         constructors as we now "emit" them at a higher level.
25317
25318         (TypeContainer::DefineDefaultConstructor): Used to define the
25319         default constructors if none was provided.
25320
25321         (ConstructorInitializer): Add methods Resolve and Emit. 
25322
25323         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25324
25325 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25326
25327         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25328         the default constructor builder with our hashtable for methodbuilders
25329         to methodcores.
25330
25331         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25332         and argument_count is 0 in which case we have a match.
25333         (Binary::ResolveOperator): More null checking and miscellaneous coding
25334         style cleanup.
25335
25336 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25337
25338         * rootcontext.cs (IsNameSpace): Compare against null.
25339
25340         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25341
25342         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25343         and Unary::Operator.
25344
25345         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25346         accordingly.
25347
25348         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25349         we have overloaded operators.
25350         (Binary::ResolveOperator): Implement the part which does the operator overload
25351         resolution.
25352
25353         * class.cs (Operator::Emit): Implement.
25354         (TypeContainer::Emit): Emit the operators we have too.
25355
25356         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25357         the case when we have a user-defined operator.
25358
25359 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25360
25361         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25362
25363 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25364
25365         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25366         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25367         (Constructor::Emit): Implement.
25368         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25369         if we have no work to do. 
25370         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25371         Emit method.
25372
25373         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25374         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25375
25376         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25377         of parent.parent.
25378
25379 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25380
25381         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25382         in the source.
25383         (Tree::RecordNamespace): Method to do what the name says ;-)
25384         (Tree::Namespaces): Property to get at the namespaces hashtable.
25385
25386         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25387         keep track.
25388
25389         * rootcontext.cs (IsNamespace): Fixed it :-)
25390
25391 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25392
25393         * class.cs (TypeContainer::FindMembers): Add support for
25394         constructors. 
25395         (MethodCore): New class that encapsulates both the shared aspects
25396         of a Constructor and a Method.  
25397         (Method, Constructor): Factored pieces into MethodCore.
25398
25399         * driver.cs: Added --fatal which makes errors throw exceptions.
25400         Load System assembly as well as part of the standard library.
25401
25402         * report.cs: Allow throwing exceptions on errors for debugging.
25403
25404         * modifiers.cs: Do not use `parent', instead use the real type
25405         container to evaluate permission settings.
25406
25407         * class.cs: Put Ravi's patch back in.  He is right, and we will
25408         have to cope with the
25409
25410 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25411
25412         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25413         FamORAssem, not FamANDAssem.
25414
25415 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25416
25417         * driver.cs: Added --parse option that only parses its input files
25418         and terminates.
25419
25420         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25421         incorrect.  IsTopLevel is not used to tell whether an object is
25422         root_types or not (that can be achieved by testing this ==
25423         root_types).  But to see if this is a top-level *class* (not
25424         necessarly our "toplevel" container). 
25425
25426 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25427
25428         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25429         parent instead of a direct call to GetType.
25430
25431 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25432
25433         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25434         Modifiers.TypeAttr. This should just be a call to that method.
25435
25436         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25437         object so that we can determine if we are top-level or not.
25438
25439         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25440         TypeContainer too.
25441
25442         * enum.cs (Enum::Define): Ditto.
25443
25444         * modifiers.cs (FieldAttr): Re-write.
25445
25446         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25447         (TypeContainer::HaveStaticConstructor): New property to provide access
25448         to precisely that info.
25449
25450         * modifiers.cs (MethodAttr): Re-write.
25451         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25452
25453         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25454         of top-level types as claimed.
25455
25456 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25457
25458         * expression.cs (MemberLookup): Fruitless attempt to lookup
25459         constructors.  Maybe I need to emit default constructors?  That
25460         might be it (currently .NET emits this for me automatically).
25461         (Invocation::OverloadResolve): Cope with Arguments == null.
25462         (Invocation::EmitArguments): new function, shared by the new
25463         constructor and us.
25464         (Invocation::Emit): Handle static and instance methods.  Emit
25465         proper call instruction for virtual or non-virtual invocations.
25466         (New::Emit): Implement.
25467         (New::Resolve): Implement.
25468         (MemberAccess:Resolve): Implement.
25469         (MethodGroupExpr::InstanceExpression): used conforming to the spec
25470         to track instances.
25471         (FieldExpr::Resolve): Set type.
25472
25473         * support.cs: Handle empty arguments.
25474                 
25475         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
25476         SimpleLookup): Auxiliary routines to help parse a qualifier
25477         identifier.  
25478
25479         Update qualifier_identifier rule.
25480
25481         * codegen.cs: Removed debugging messages.
25482
25483         * class.cs: Make this a global thing, this acts just as a "key" to
25484         objects that we might have around.
25485
25486         (Populate): Only initialize method_builders_to_methods once.
25487
25488         * expression.cs (PropertyExpr): Initialize type from the
25489         PropertyType. 
25490
25491         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
25492         Resolve pattern.  Attempt to implicitly convert value to boolean.
25493         Emit code.
25494
25495         * expression.cs: Set the type for the int32/int32 argument case.
25496         (Binary::ResolveOperator): Set the return type to boolean for
25497         comparission operators
25498
25499         * typemanager.cs: Remove debugging print code.
25500
25501         (Invocation::Resolve): resolve type.
25502
25503         * class.cs: Allocate a MemberInfo of the correct size, as the code
25504         elsewhere depends on the test to reflect the correct contents.
25505
25506         (Method::) Keep track of parameters, due to System.Reflection holes
25507
25508         (TypeContainer::Populate): Keep track of MethodBuilders to Method
25509         mapping here.
25510
25511         (TypeContainer::FindMembers): Use ArrayList and then copy an array
25512         of the exact size and return that.
25513
25514         (Class::LookupMethodByBuilder): New function that maps
25515         MethodBuilders to its methods.  Required to locate the information
25516         on methods because System.Reflection bit us again.
25517
25518         * support.cs: New file, contains an interface ParameterData and
25519         two implementations: ReflectionParameters and InternalParameters
25520         used to access Parameter information.  We will need to grow this
25521         as required.
25522
25523         * expression.cs (Invocation::GetParameterData): implement a cache
25524         and a wrapper around the ParameterData creation for methods. 
25525         (Invocation::OverloadResolve): Use new code.
25526
25527 2001-09-13  Ravi Pratap  <ravi@ximian.com>
25528
25529         * class.cs (TypeContainer::EmitField): Remove and move into 
25530         (Field::Define): here and modify accordingly.
25531         (Field.FieldBuilder): New member.
25532         (TypeContainer::Populate): Update accordingly.
25533         (TypeContainer::FindMembers): Implement.
25534
25535 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25536
25537         * statement.cs: (VariableInfo::VariableType): New field to be
25538         initialized with the full type once it is resolved. 
25539
25540 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
25541
25542         * parameter.cs (GetParameterInfo): Use a type cache to compute
25543         things only once, and to reuse this information
25544
25545         * expression.cs (LocalVariableReference::Emit): Implement.
25546         (OpcodeCast::Emit): fix.
25547
25548         (ParameterReference::Resolve): Implement.
25549         (ParameterReference::Emit): Implement.
25550
25551         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
25552         that are expressions need to stay as Expressions.
25553
25554         * typemanager.cs (CSharpName): Returns the C# name of a type if
25555         possible. 
25556
25557         * expression.cs (Expression::ConvertImplicit): New function that
25558         implements implicit type conversions.
25559
25560         (Expression::ImplicitReferenceConversion): Implements implicit
25561         reference conversions.
25562
25563         (EmptyCast): New type for transparent casts.
25564
25565         (OpcodeCast): New type for casts of types that are performed with
25566         a sequence of bytecodes.
25567
25568         (BoxedCast): New type used for casting value types into reference
25569         types.  Emits a box opcode.
25570
25571         (Binary::DoNumericPromotions): Implements numeric promotions of
25572         and computation of the Binary::Type.
25573
25574         (Binary::EmitBranchable): Optimization.
25575
25576         (Binary::Emit): Implement code emission for expressions.
25577
25578         * typemanager.cs (TypeManager): Added two new core types: sbyte
25579         and byte.
25580
25581 2001-09-12  Ravi Pratap  <ravi@ximian.com>
25582
25583         * class.cs (TypeContainer::FindMembers): Method which does exactly
25584         what Type.FindMembers does, only we don't have to use reflection. No
25585         implementation yet.
25586
25587         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
25588         typecontainer objects as we need to get at them.
25589         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
25590
25591         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
25592         typecontainer object.
25593
25594         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
25595         of just a Report object.
25596
25597 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25598
25599         * class.cs (Event::Define): Go back to using the prefixes "add_" and
25600         "remove_"
25601         (TypeContainer::Populate): Now define the delegates of the type too.
25602         (TypeContainer.Delegates): Property to access the list of delegates defined
25603         in the type.
25604
25605         * delegates.cs (Delegate::Define): Implement partially.
25606
25607         * modifiers.cs (TypeAttr): Handle more flags.
25608
25609 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25610
25611         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
25612         and not <=
25613         (Operator::Define): Re-write logic to get types by using the LookupType method
25614         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
25615         (Indexer::Define): Ditto.
25616         (Event::Define): Ditto.
25617         (Property::Define): Ditto.
25618
25619 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25620
25621         * class.cs (TypeContainer::Populate): Now define operators too. 
25622         (TypeContainer.Operators): New property to access the list of operators
25623         in a type.
25624         (Operator.OperatorMethodBuilder): New member to hold the method builder
25625         for the operator we are defining.
25626         (Operator::Define): Implement.
25627
25628 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25629
25630         * class.cs (Event::Define): Make the prefixes of the accessor methods
25631         addOn_ and removeOn_ 
25632
25633         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
25634         of the location being passed in too. Ideally, this should go later since all
25635         error reporting should be done through the Report object.
25636
25637         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
25638         (Populate): Iterate thru the indexers we have and define them too.
25639         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
25640         for the get and set accessors.
25641         (Indexer::Define): Implement.
25642
25643 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
25644
25645         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
25646         my previous implementation, did not work.
25647
25648         * typemanager.cs: Add a couple of missing types (the longs).
25649
25650         * literal.cs: Use TypeManager.bool_type instead of getting it.
25651
25652         * expression.cs (EventExpr): New kind of expressions.
25653         (Expressio::ExprClassFromMemberInfo): finish
25654
25655 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
25656
25657         * assign.cs: Emit stores to static fields differently.
25658
25659 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25660
25661         * Merge in changes and adjust code to tackle conflicts. Backed out my
25662         code in Assign::Resolve ;-) 
25663
25664 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25665
25666         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
25667         instead Report.Error and also pass in the location.
25668         (CSharpParser::Lexer): New readonly property to return the reference
25669         to the Tokenizer object.
25670         (declare_local_variables): Use Report.Error with location instead of plain 
25671         old error.
25672         (CheckDef): Ditto.
25673
25674         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
25675         (Operator.CheckBinaryOperator): Ditto.
25676
25677         * cs-parser.jay (operator_declarator): Update accordingly.
25678
25679         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
25680         (CheckBinaryOperator): Same here.
25681
25682         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
25683         on the name without any prefixes of namespace names etc. This is because we
25684         already might have something already fully qualified like 
25685         'System.Console.WriteLine'
25686
25687         * assign.cs (Resolve): Begin implementation. Stuck ;-)
25688
25689 2001-09-07  Ravi Pratap  <ravi@ximian.com>
25690
25691         * cs-tokenizer.cs (location): Return a string which also contains
25692         the file name.
25693
25694         * expression.cs (ElementAccess): New class for expressions of the
25695         type 'element access.'
25696         (BaseAccess): New class for expressions of the type 'base access.'
25697         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
25698         respectively.
25699
25700         * cs-parser.jay (element_access): Implement action.
25701         (base_access): Implement actions.
25702         (checked_expression, unchecked_expression): Implement.
25703
25704         * cs-parser.jay (local_variable_type): Correct and implement.
25705         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
25706
25707         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
25708
25709         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
25710         name and the specifiers.
25711
25712         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
25713
25714         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
25715         making them all public ;-)
25716
25717         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
25718         class anyways.
25719
25720 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
25721
25722         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
25723         PropertyExprs.
25724         (FieldExpr, PropertyExprs): New resolved expressions.
25725         (SimpleName::MemberStaticCheck): Perform static checks for access
25726         to non-static fields on static methods. Maybe this should be
25727         generalized for MemberAccesses. 
25728         (SimpleName::ResolveSimpleName): More work on simple name
25729         resolution. 
25730
25731         * cs-parser.jay (primary_expression/qualified_identifier): track
25732         the parameter index.
25733
25734         * codegen.cs (CodeGen::Save): Catch save exception, report error.
25735         (EmitContext::EmitBoolExpression): Chain to expression generation
25736         instead of temporary hack.
25737         (::EmitStatementExpression): Put generic expression code generation.
25738
25739         * assign.cs (Assign::Emit): Implement variable assignments to
25740         local variables, parameters and fields.
25741
25742 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
25743
25744         * statement.cs (Block::GetVariableInfo): New method, returns the
25745         VariableInfo for a variable name in a block.
25746         (Block::GetVariableType): Implement in terms of GetVariableInfo
25747
25748         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
25749         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
25750
25751 2001-09-06  Ravi Pratap  <ravi@ximian.com>
25752
25753         * cs-parser.jay (operator_declaration): Continue on my quest : update
25754         to take attributes argument.
25755         (event_declaration): Ditto.
25756         (enum_declaration): Ditto.
25757         (indexer_declaration): Ditto.
25758
25759         * class.cs (Operator::Operator): Update constructor accordingly.
25760         (Event::Event): Ditto.
25761
25762         * delegate.cs (Delegate::Delegate): Same here.
25763
25764         * enum.cs (Enum::Enum): Same here.
25765
25766 2001-09-05  Ravi Pratap  <ravi@ximian.com>
25767
25768         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
25769
25770         * ../tests/cs0658.cs : New file to demonstrate error 0658.
25771
25772         * attribute.cs (Attributes): New class to encapsulate all attributes which were
25773         being passed around as an arraylist.
25774         (Attributes::AddAttribute): Method to add attribute sections.
25775
25776         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
25777         (struct_declaration): Update accordingly.
25778         (constant_declaration): Update.
25779         (field_declaration): Update.
25780         (method_header): Update.
25781         (fixed_parameter): Update.
25782         (parameter_array): Ditto.
25783         (property_declaration): Ditto.
25784         (destructor_declaration): Ditto.
25785
25786         * class.cs (Struct::Struct): Update constructors accordingly.
25787         (Class::Class): Ditto.
25788         (Field::Field): Ditto.
25789         (Method::Method): Ditto.
25790         (Property::Property): Ditto.
25791         (TypeContainer::OptAttribute): update property's return type.
25792
25793         * interface.cs (Interface.opt_attributes): New member.
25794         (Interface::Interface): Update to take the extra Attributes argument.
25795
25796         * parameter.cs (Parameter::Parameter): Ditto.
25797
25798         * constant.cs (Constant::Constant): Ditto.
25799
25800         * interface.cs (InterfaceMemberBase): New OptAttributes field.
25801         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
25802         the attributes as a parameter.
25803         (InterfaceProperty): Update constructor call.
25804         (InterfaceEvent): Ditto.
25805         (InterfaceMethod): Ditto.
25806         (InterfaceIndexer): Ditto.
25807
25808         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
25809         pass the attributes too.
25810         (interface_event_declaration): Ditto.
25811         (interface_property_declaration): Ditto.
25812         (interface_method_declaration): Ditto.
25813         (interface_declaration): Ditto.
25814
25815 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
25816
25817         * class.cs (Method::Define): Track the "static Main" definition to
25818         create an entry point. 
25819
25820         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
25821         EntryPoint if we find it. 
25822
25823         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
25824         (EmitContext::ig): Make this variable public.
25825
25826         * driver.cs: Make the default output file be the first file name
25827         with the .exe extension.  
25828
25829         Detect empty compilations
25830
25831         Handle various kinds of output targets.  Handle --target and
25832         rename -t to --dumper.
25833
25834         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
25835         methods inherited from Expression return now an Expression.  This
25836         will is used during the tree rewriting as we resolve them during
25837         semantic analysis.
25838
25839         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
25840         the spec.  Missing entirely is the information about
25841         accessability of elements of it.
25842
25843         (Expression::ExprClassFromMemberInfo): New constructor for
25844         Expressions that creates a fully initialized Expression based on
25845         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
25846         a Type.
25847
25848         (Invocation::Resolve): Begin implementing resolution of invocations.
25849
25850         * literal.cs (StringLiteral):  Implement Emit.
25851
25852 2001-09-05  Ravi Pratap  <ravi@ximian.com>
25853
25854         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
25855         member.
25856
25857 2001-09-04  Ravi Pratap  <ravi@ximian.com>
25858
25859         * cs-parser.jay (attribute_arguments): Implement actions.
25860         (attribute): Fix bug in production. Implement action.
25861         (attribute_list): Implement.
25862         (attribute_target): Implement.
25863         (attribute_target_specifier, opt_target_specifier): Implement
25864         (CheckAttributeTarget): New method to check if the attribute target
25865         is valid.
25866         (attribute_section): Implement.
25867         (opt_attributes): Implement.
25868
25869         * attribute.cs : New file to handle attributes.
25870         (Attribute): Class to hold attribute info.
25871
25872         * cs-parser.jay (opt_attribute_target_specifier): Remove production
25873         (attribute_section): Modify production to use 2 different rules to 
25874         achieve the same thing. 1 s/r conflict down !
25875         Clean out commented, useless, non-reducing dimension_separator rules.
25876
25877         * class.cs (TypeContainer.attributes): New member to hold list
25878         of attributes for a type.
25879         (Struct::Struct): Modify to take one more argument, the attribute list.
25880         (Class::Class): Ditto.
25881         (Field::Field): Ditto.
25882         (Method::Method): Ditto.
25883         (Property::Property): Ditto.
25884
25885         * cs-parser.jay (struct_declaration): Update constructor call to
25886         pass in the attributes too.
25887         (class_declaration): Ditto.
25888         (constant_declaration): Ditto.
25889         (field_declaration): Ditto.
25890         (method_header): Ditto.
25891         (fixed_parameter): Ditto.
25892         (parameter_array): Ditto.
25893         (property_declaration): Ditto.
25894
25895         * constant.cs (Constant::Constant): Update constructor similarly.
25896         Use System.Collections.
25897
25898         * parameter.cs (Parameter::Parameter): Update as above.
25899
25900 2001-09-02  Ravi Pratap  <ravi@ximian.com>
25901
25902         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
25903         (TypeContainer.delegates): New member to hold list of delegates.
25904
25905         * cs-parser.jay (delegate_declaration): Implement the action correctly 
25906         this time as I seem to be on crack ;-)
25907
25908 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
25909
25910         * rootcontext.cs (RootContext::IsNamespace): new function, used to
25911         tell whether an identifier represents a namespace.
25912
25913         * expression.cs (NamespaceExpr): A namespace expression, used only
25914         temporarly during expression resolution.
25915         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
25916         utility functions to resolve names on expressions.
25917
25918 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
25919
25920         * codegen.cs: Add hook for StatementExpressions. 
25921
25922         * class.cs: Fix inverted test for static flag in methods.
25923
25924 2001-09-02  Ravi Pratap  <ravi@ximian.com>
25925
25926         * class.cs (Operator::CheckUnaryOperator): Correct error number used
25927         to make it coincide with MS' number.
25928         (Operator::CheckBinaryOperator): Ditto.
25929
25930         * ../errors/errors.txt : Remove error numbers added earlier.
25931
25932         * ../errors/cs1019.cs : Test case for error # 1019
25933
25934         * ../errros/cs1020.cs : Test case for error # 1020
25935
25936         * cs-parser.jay : Clean out commented cruft.
25937         (dimension_separators, dimension_separator): Comment out. Ostensibly not
25938         used anywhere - non-reducing rule.
25939         (namespace_declarations): Non-reducing rule - comment out.
25940
25941         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
25942         with TypeContainer::AddEnum.
25943
25944         * delegate.cs : New file for delegate handling classes.
25945         (Delegate): Class for declaring delegates.
25946
25947         * makefile : Update.
25948
25949         * cs-parser.jay (delegate_declaration): Implement.
25950
25951 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
25952
25953         * class.cs (Event::Define): Implement.
25954         (Event.EventBuilder): New member.
25955
25956         * class.cs (TypeContainer::Populate): Update to define all enums and events
25957         we have.
25958         (Events): New property for the events arraylist we hold. Shouldn't we move to using
25959         readonly fields for all these cases ?
25960
25961 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
25962
25963         * class.cs (Property): Revamp to use the convention of making fields readonly.
25964         Accordingly modify code elsewhere.
25965
25966         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
25967         the Define method of the Property class.
25968
25969         * class.cs : Clean up applied patch and update references to variables etc. Fix 
25970         trivial bug.
25971         (TypeContainer::Populate): Update to define all the properties we have. Also
25972         define all enumerations.
25973
25974         * enum.cs (Define): Implement.
25975
25976 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
25977
25978         * cs-parser.jay (overloadable_operator): The semantic value is an
25979         enum of the Operator class.
25980         (operator_declarator): Implement actions.
25981         (operator_declaration): Implement.
25982
25983         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
25984         validity of definitions.
25985         (Operator::CheckBinaryOperator): Static method to check for binary operators
25986         (TypeContainer::AddOperator): New method to add an operator to a type.
25987
25988         * cs-parser.jay (indexer_declaration): Added line to actually call the
25989         AddIndexer method so it gets added ;-)
25990
25991         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
25992         already taken care of by the MS compiler ?  
25993
25994 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
25995
25996         * class.cs (Operator): New class for operator declarations.
25997         (Operator::OpType): Enum for the various operators.
25998
25999 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26000
26001         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26002         ostensibly handle this in semantic analysis.
26003
26004         * cs-parser.jay (general_catch_clause): Comment out
26005         (specific_catch_clauses, specific_catch_clause): Ditto.
26006         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26007         (catch_args, opt_catch_args): New productions.
26008         (catch_clause): Rewrite to use the new productions above
26009         (catch_clauses): Modify accordingly.
26010         (opt_catch_clauses): New production to use in try_statement
26011         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26012         and re-write the code in the actions to extract the specific and
26013         general catch clauses by being a little smart ;-)
26014
26015         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26016         Hooray, try and catch statements parse fine !
26017
26018 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26019
26020         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26021         string from the hashtable of variables.
26022
26023         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26024         I end up making that mistake ;-)
26025         (catch_clauses): Fixed gross error which made Key and Value of the 
26026         DictionaryEntry the same : $1 !!
26027
26028 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26029
26030         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26031
26032         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26033         when the add and remove accessors are specified. 
26034
26035 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26036
26037         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26038         information about indexer_declarator.
26039         (indexer_declarator): Implement actions.
26040         (parsing_indexer): New local boolean used to keep track of whether
26041         we are parsing indexers or properties. This is necessary because 
26042         implicit_parameters come into picture even for the get accessor in the 
26043         case of an indexer.
26044         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26045
26046         * class.cs (Indexer): New class for indexer declarations.
26047         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26048         (TypeContainer::indexers): New member to hold list of indexers for the
26049         type.
26050
26051 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26052
26053         * cs-parser.jay (add_accessor_declaration): Implement action.
26054         (remove_accessor_declaration): Implement action.
26055         (event_accessors_declaration): Implement
26056         (variable_declarators): swap statements for first rule - trivial.
26057
26058         * class.cs (Event): New class to hold information about event
26059         declarations.
26060         (TypeContainer::AddEvent): New method to add an event to a type
26061         (TypeContainer::events): New member to hold list of events.
26062
26063         * cs-parser.jay (event_declaration): Implement actions.
26064
26065 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26066
26067         * cs-parser.jay (dim_separators): Implement. Make it a string
26068         concatenating all the commas together, just as they appear.
26069         (opt_dim_separators): Modify accordingly
26070         (rank_specifiers): Update accordingly. Basically do the same
26071         thing - instead, collect the brackets here.
26072         (opt_rank_sepcifiers): Modify accordingly.
26073         (array_type): Modify to actually return the complete type string
26074         instead of ignoring the rank_specifiers.
26075         (expression_list): Implement to collect the expressions
26076         (variable_initializer): Implement. We make it a list of expressions
26077         essentially so that we can handle the array_initializer case neatly too.
26078         (variable_initializer_list): Implement.
26079         (array_initializer): Make it a list of variable_initializers
26080         (opt_array_initializer): Modify accordingly.
26081
26082         * expression.cs (New::NType): Add enumeration to help us
26083         keep track of whether we have an object/delegate creation
26084         or an array creation.
26085         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26086         members to hold data about array creation.
26087         (New:New): Modify to update NewType
26088         (New:New): New Overloaded contructor for the array creation
26089         case.
26090
26091         * cs-parser.jay (array_creation_expression): Implement to call
26092         the overloaded New constructor.
26093
26094 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26095
26096         * class.cs (TypeContainer::Constructors): Return member
26097         constructors instead of returning null.
26098
26099 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26100
26101         * typemanager.cs (InitCoreTypes): Initialize the various core
26102         types after we have populated the type manager with the user
26103         defined types (this distinction will be important later while
26104         compiling corlib.dll)
26105
26106         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26107         on Expression Classification.  Now all expressions have a method
26108         `Resolve' and a method `Emit'.
26109
26110         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26111         generation from working.     Also add some temporary debugging
26112         code. 
26113
26114 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26115
26116         * codegen.cs: Lots of code generation pieces.  This is only the
26117         beginning, will continue tomorrow with more touches of polish.  We
26118         handle the fundamentals of if, while, do, for, return.  Others are
26119         trickier and I need to start working on invocations soon.
26120
26121         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26122         s.InitStatement. 
26123
26124         * codegen.cs (EmitContext): New struct, used during code
26125         emission to keep a context.   Most of the code generation will be
26126         here. 
26127
26128         * cs-parser.jay: Add embedded blocks to the list of statements of
26129         this block.  So code generation proceeds in a top down fashion.
26130
26131 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26132
26133         * statement.cs: Add support for multiple child blocks.
26134
26135 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26136
26137         * codegen.cs (EmitCode): New function, will emit the code for a
26138         Block of code given a TypeContainer and its ILGenerator. 
26139
26140         * statement.cs (Block): Standard public readonly optimization.
26141         (Block::Block constructors): Link children. 
26142         (Block::Child): Child Linker.
26143         (Block::EmitVariables): Emits IL variable declarations.
26144
26145         * class.cs: Drop support for MethodGroups here, delay until
26146         Semantic Analysis.
26147         (Method::): Applied the same simplification that I did before, and
26148         move from Properties to public readonly fields.
26149         (Method::ParameterTypes): Returns the parameter types for the
26150         function, and implements a cache that will be useful later when I
26151         do error checking and the semantic analysis on the methods is
26152         performed.
26153         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26154         and made a method, optional argument tells whether this is a class
26155         or a structure to apply the `has-this' bit.
26156         (Method::GetCallingConvention): Implement, returns the calling
26157         convention. 
26158         (Method::Define): Defines the type, a second pass is performed
26159         later to populate the methods.
26160
26161         (Constructor::ParameterTypes): implement a cache similar to the
26162         one on Method::ParameterTypes, useful later when we do semantic
26163         analysis. 
26164
26165         (TypeContainer::EmitMethod):  New method.  Emits methods.
26166
26167         * expression.cs: Removed MethodGroup class from here.
26168
26169         * parameter.cs (Parameters::GetCallingConvention): new method.
26170
26171 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26172
26173         * class.cs (TypeContainer::Populate): Drop RootContext from the
26174         argument. 
26175
26176         (Constructor::CallingConvention): Returns the calling convention.
26177         (Constructor::ParameterTypes): Returns the constructor parameter
26178         types. 
26179
26180         (TypeContainer::AddConstructor): Keep track of default constructor
26181         and the default static constructor.
26182
26183         (Constructor::) Another class that starts using `public readonly'
26184         instead of properties. 
26185
26186         (Constructor::IsDefault): Whether this is a default constructor. 
26187
26188         (Field::) use readonly public fields instead of properties also.
26189
26190         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26191         track of static constructors;  If none is used, turn on
26192         BeforeFieldInit in the TypeAttributes. 
26193
26194         * cs-parser.jay (opt_argument_list): now the return can be null
26195         for the cases where there are no arguments. 
26196
26197         (constructor_declarator): If there is no implicit `base' or
26198         `this', then invoke the default parent constructor. 
26199
26200         * modifiers.cs (MethodAttr): New static function maps a set of
26201         modifiers flags into a MethodAttributes enum
26202         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26203         MethodAttr, TypeAttr to represent the various mappings where the
26204         modifiers are used.
26205         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26206
26207 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26208
26209         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26210         method arguments.
26211
26212         * interface.cs (PopulateIndexer): Implemented the code generator
26213         for interface indexers.
26214
26215 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26216
26217         * interface.cs (InterfaceMemberBase): Now we track the new status
26218         here.  
26219
26220         (PopulateProperty): Implement property population.  Woohoo!  Got
26221         Methods and Properties going today. 
26222
26223         Removed all the properties for interfaces, and replaced them with
26224         `public readonly' fields. 
26225
26226 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26227
26228         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26229         initialize their hashtables/arraylists only when they are needed
26230         instead of doing this always.
26231
26232         * parameter.cs: Handle refs and out parameters.
26233
26234         * cs-parser.jay: Use an ArrayList to construct the arguments
26235         instead of the ParameterCollection, and then cast that to a
26236         Parameter[] array.
26237
26238         * parameter.cs: Drop the use of ParameterCollection and use
26239         instead arrays of Parameters.
26240
26241         (GetParameterInfo): Use the Type, not the Name when resolving
26242         types. 
26243
26244 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26245
26246         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26247         and instead use public readonly fields.
26248
26249         * class.cs: Put back walking code for type containers.
26250
26251 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26252
26253         * class.cs (MakeConstant): Code to define constants.
26254
26255         * rootcontext.cs (LookupType): New function.  Used to locate types 
26256
26257
26258 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26259
26260         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26261         this System.Reflection code is.  Kudos to Microsoft
26262
26263         * typemanager.cs: Implement a type cache and avoid loading all
26264         types at boot time.  Wrap in LookupType the internals.  This made
26265         the compiler so much faster.  Wow.  I rule!
26266
26267         * driver.cs: Make sure we always load mscorlib first (for
26268         debugging purposes, nothing really important).
26269
26270         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26271         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26272
26273         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26274         on namespaces that have been imported using the `using' keyword.
26275
26276         * class.cs (TypeContainer::TypeAttr): Virtualize.
26277         (Class::TypeAttr): Return attributes suitable for this bad boy.
26278         (Struct::TypeAttr): ditto.
26279         Handle nested classes.
26280         (TypeContainer::) Remove all the type visiting code, it is now
26281         replaced with the rootcontext.cs code
26282
26283         * rootcontext.cs (GetClassBases): Added support for structs. 
26284
26285 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26286
26287         * interface.cs, statement.cs, class.cs, parameter.cs,
26288         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26289         Drop use of TypeRefs, and use strings instead.
26290
26291 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26292
26293         * rootcontext.cs: 
26294
26295         * class.cs (Struct::Struct): set the SEALED flags after
26296         checking the modifiers.
26297         (TypeContainer::TypeAttr): new property, returns the
26298         TypeAttributes for a class.  
26299
26300         * cs-parser.jay (type_list): Oops, list production was creating a
26301         new list of base types.
26302
26303         * rootcontext.cs (StdLib): New property.
26304         (GetInterfaceTypeByName): returns an interface by type name, and
26305         encapsulates error handling here.
26306         (GetInterfaces): simplified.
26307         (ResolveTree): Encapsulated all the tree resolution here.
26308         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26309         types. 
26310
26311         * driver.cs: Add support for --nostdlib, to avoid loading the
26312         default assemblies.
26313         (Main): Do not put tree resolution here. 
26314
26315         * rootcontext.cs: Beginning of the class resolution.
26316
26317 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26318
26319         * rootcontext.cs: Provide better error reporting. 
26320
26321         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26322
26323         * rootcontext.cs (CreateInterface): Handle the case where there
26324         are no parent interfaces.
26325
26326         (CloseTypes): Routine to flush types at the end.
26327         (CreateInterface): Track types.
26328         (GetInterfaces): Returns an array of Types from the list of
26329         defined interfaces.
26330
26331         * typemanager.c (AddUserType): Mechanism to track user types (puts
26332         the type on the global type hash, and allows us to close it at the
26333         end). 
26334
26335 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26336
26337         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26338         RecordInterface instead.
26339
26340         * cs-parser.jay: Updated to reflect changes above.
26341
26342         * decl.cs (Definition): Keep track of the TypeBuilder type that
26343         represents this type here.  Not sure we will use it in the long
26344         run, but wont hurt for now.
26345
26346         * driver.cs: Smaller changes to accomodate the new code.
26347
26348         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26349         when done. 
26350
26351         * rootcontext.cs (CreateInterface):  New method, used to create
26352         the System.TypeBuilder type for interfaces.
26353         (ResolveInterfaces): new entry point to resolve the interface
26354         hierarchy. 
26355         (CodeGen): Property, used to keep track of the code generator.
26356
26357 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26358
26359         * cs-parser.jay: Add a second production for delegate_declaration
26360         with `VOID'.
26361
26362         (enum_body): Put an opt_comma here instead of putting it on
26363         enum_body or enum_member_declarations so we can handle trailing
26364         commas on enumeration members.  Gets rid of a shift/reduce.
26365
26366         (type_list): Need a COMMA in the middle.
26367
26368         (indexer_declaration): Tell tokenizer to recognize get/set
26369
26370         * Remove old targets.
26371
26372         * Re-add the parser target.
26373
26374 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26375
26376         * cs-parser.jay: Add precendence rules for a number of operators
26377         ot reduce the number of shift/reduce conflicts in the grammar.
26378
26379 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26380
26381         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26382         and put it here.
26383
26384         Get rid of old crufty code.
26385
26386         * rootcontext.cs: Use this to keep track of the parsed
26387         representation and the defined types available to the program. 
26388
26389         * gen-treedump.cs: adjust for new convention.
26390
26391         * type.cs: Split out the type manager, and the assembly builder
26392         from here. 
26393
26394         * typemanager.cs: the type manager will live here now.
26395
26396         * cil-codegen.cs: And the code generator here. 
26397
26398 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26399
26400         * makefile: Fixed up for easy making.
26401
26402 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26403
26404         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26405         the 
26406
26407         (unary_expression): Expand pre_increment_expression and
26408         post_decrement_expression to reduce a shift/reduce.
26409
26410 2001-07-11  Simon Cozens
26411
26412         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26413
26414         Improve allow_keyword_as_indent name.
26415
26416 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26417
26418         * Adjustments for Beta2. 
26419
26420 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26421
26422         * decl.cs: Added `Define' abstract method.
26423         (InTransit): new property, used to catch recursive definitions. 
26424
26425         * interface.cs: Implement `Define'. 
26426
26427         * modifiers.cs: Map Modifiers.constants to
26428         System.Reflection.TypeAttribute flags.
26429
26430         * class.cs: Keep track of types and user-defined types.
26431         (BuilderInit): New method for creating an assembly
26432         (ResolveType): New function to launch the resolution process, only
26433         used by interfaces for now.
26434
26435         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26436         that are inserted into the name space. 
26437
26438 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26439
26440         * ARGH.  I have screwed up my tree so many times due to the use of
26441         rsync rather than using CVS.  Going to fix this at once. 
26442
26443         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26444         load types.
26445
26446 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26447
26448         * Experiment successful: Use System.Type rather that our own
26449         version of Type.  
26450
26451 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26452
26453         * cs-parser.jay: Removed nsAliases from here.
26454
26455         Use new namespaces, handle `using XXX;' 
26456
26457         * namespace.cs: Reimplemented namespace handling, use a recursive
26458         definition of the class.  Now we can keep track of using clauses
26459         and catch invalid using clauses.
26460
26461 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26462
26463         * gen-treedump.cs: Adapted for all the renaming.
26464
26465         * expression.cs (Expression): this class now has a Type property
26466         which returns an expression Type.
26467
26468         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
26469         `Type', as this has a different meaning now in the base
26470
26471 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
26472
26473         * interface.cs, class.cs: Removed from all the sources the
26474         references to signature computation, as we can not do method
26475         signature computation during the parsing time, as we are not
26476         trying to solve at that point distinguishing:
26477
26478         class X {
26479                 void a (Blah x) {}
26480                 void a (NS.Blah x) {}
26481         }
26482
26483         Which depending on the context might be valid or not, as we do not
26484         know if Blah is the same thing as NS.Blah at that point.
26485
26486         * Redid everything so the code uses TypeRefs now instead of
26487         Types.  TypeRefs are just temporary type placeholders, that need
26488         to be resolved.  They initially have a pointer to a string and the
26489         current scope in which they are used.  This is used later by the
26490         compiler to resolve the reference to an actual Type. 
26491
26492         * DeclSpace is no longer a CIR.Type, and neither are
26493         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
26494         are all DeclSpaces, but no Types. 
26495
26496         * type.cs (TypeRefManager): This implements the TypeRef manager,
26497         which keeps track of all the types that need to be resolved after
26498         the parsing has finished. 
26499
26500 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
26501
26502         * ARGH.  We are going to have to store `foreach' as a class rather
26503         than resolving it, as we need to verify error 1579 after name
26504         resolution.   *OR* we could keep a flag that says `This request to
26505         IEnumerator comes from a foreach statement' which we can then use
26506         to generate the error.
26507
26508 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
26509
26510         * class.cs (TypeContainer.AddMethod): we now add methods to the
26511         MethodGroup instead of the method hashtable.  
26512
26513         * expression.cs: Add MethodGroup abstraction, which gets us one
26514         step closer to the specification in the way we handle method
26515         declarations.  
26516
26517         * cs-parser.jay (primary_expression): qualified_identifier now
26518         tried to match up an identifier to a local variable reference or
26519         to a parameter reference.
26520
26521         current_local_parameters is now a parser global variable that
26522         points to the current parameters for the block, used during name
26523         lookup.
26524
26525         (property_declaration): Now creates an implicit `value' argument to
26526         the set accessor.
26527
26528 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
26529
26530         * parameter.cs: Do not use `param' arguments as part of the
26531         signature, per the spec.
26532
26533 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
26534
26535         * decl.cs: Base class for classes, structs and interfaces.  This
26536         is the "Declaration Space" 
26537
26538         * cs-parser.jay: Use CheckDef for checking declaration errors
26539         instead of having one on each function.
26540
26541         * class.cs: Factor out some code for handling error handling in
26542         accordance to the "Declarations" section in the "Basic Concepts"
26543         chapter in the ECMA C# spec.
26544
26545         * interface.cs: Make all interface member classes derive from
26546         InterfaceMemberBase.
26547
26548 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
26549
26550         * Many things: all interfaces are parsed and generated in
26551         gen-treedump.  Support for member variables, constructors,
26552         destructors, properties, constants is there.
26553
26554         Beginning of the IL backend, but very little done, just there for
26555         testing purposes. 
26556
26557 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
26558
26559         * cs-parser.jay: Fix labeled statement.
26560
26561         * cs-tokenizer.cs (escape): Escape " and ' always.
26562         ref_line, ref_name: keep track of the line/filename as instructed
26563         by #line by the compiler.
26564         Parse #line.
26565
26566 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
26567
26568         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
26569         to match the values in System.CodeDOM.
26570
26571         Divid renamed to Divide.
26572
26573         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
26574         statements. 
26575         (Statements.set): remove.
26576
26577         * System.CodeDOM/CodeCatchClause.cs: always have a valid
26578         statements. 
26579
26580         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
26581         falseStatements always have valid values. 
26582
26583         * cs-parser.jay: Use System.CodeDOM now.
26584